【正文】
,豐富的設(shè)計庫,模塊化的工具以及LPM定制等優(yōu)良性能,應(yīng)用非常方便??梢院敛豢鋸埖恼f,電子技術(shù)的應(yīng)用無處不在,電子技術(shù)正在不斷地改變我們的生活,改變著我們的世界。近些年,隨著科技的發(fā)展和社會的進(jìn)步,人們對數(shù)字鐘的要求也越來越高,傳統(tǒng)的時鐘已不能滿足人們的需求。具有校時以及報時功能,可以對時、分及秒進(jìn)行單獨校對,使其校正到標(biāo)準(zhǔn)時間,校對時間由4個鍵盤進(jìn)行控制,為了保證計時的穩(wěn)定及準(zhǔn)確須由晶體振蕩器提供時間基準(zhǔn)信號。它如同一張白紙或是一堆積木,工程師可以通過傳統(tǒng)的原理圖輸入或硬件描述語言自由的設(shè)計一個數(shù)字系統(tǒng)。 FPGA基本結(jié)構(gòu)FPGA具有掩膜可編程門陣列的通用結(jié)構(gòu),它由邏輯功能塊排成陣列,并由可編程的互連資源連接這些邏輯功能塊來實現(xiàn)不同的設(shè)計。這兩個函數(shù)發(fā)生器是完全獨立的,均可以實現(xiàn)4輸入變量的任意組合邏輯函數(shù)。CLB中有許多不同規(guī)格的數(shù)據(jù)選擇器(四選一、二選一等),通過對CLB內(nèi)部數(shù)據(jù)選擇器的編程,邏輯函數(shù)發(fā)生器G、F和H的輸出可以連接到CLB輸出端X或Y,并用來選擇觸發(fā)器的激勵輸入信號、時鐘有效邊沿、時鐘使能信號以及輸出信號。另一方面,邏輯函數(shù)發(fā)生器F和G還可以作為器件內(nèi)高速RAM或小的可讀寫存儲器使用,它由信號變換電路控制。每個IOB控制一個引腳,它們可被配置為輸入、輸出或雙向I/O功能。當(dāng)IOB控制的引腳被定義為輸出時,CLB陣列的輸出信號OUT也可以有兩條傳輸途徑:一條是直接經(jīng)MUX送至輸出緩沖器,另一條是先存入輸出通路D觸發(fā)器,再送至輸出緩沖器。IR主要由許多金屬線段構(gòu)成,這些金屬線段帶有可編程開關(guān),通過自動布線實現(xiàn)各種電路的連接。CPLD/FPGA系統(tǒng)設(shè)計的工作流程如圖22所示。,生成門級描述的網(wǎng)絡(luò)表文件,這是將高層次描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。,包括底層器件配置、邏輯分割、邏輯優(yōu)化和布局布線。最后將適配器產(chǎn)生的器件編程文件通過編程器或下載電纜載入到目標(biāo)芯片CPLD/FPGA中。具體的設(shè)計輸入方式有以下幾種:??梢苑譃殡娐吩韴D描述,狀態(tài)機(jī)描述和波形描述3種形式。一般大都使用成熟的IP核和中小規(guī)模集成電路所搭成的現(xiàn)成電路,整體放到一片可編程邏輯器件的內(nèi)部去,所以硬件工作速度和芯片利用率很高,但是但項目很大的時候,該方法就顯得有些繁瑣;狀態(tài)機(jī)描述主要用來設(shè)計基于狀態(tài)機(jī)思想的時序電路。 3 數(shù)字鐘總體設(shè)計方案 系統(tǒng)方案的選擇首先的任務(wù)是根據(jù)任務(wù)要求進(jìn)行模塊劃分,提出方案,并進(jìn)行比較分析,最終找到較優(yōu)的方案。秒計數(shù)和分計數(shù)為60進(jìn)制,時計數(shù)為24進(jìn)制,為了簡化設(shè)計,秒和分計數(shù)采用同一單元。進(jìn)位輸出秒模塊接分模塊,分模塊接時模塊顯示輸出接到顯示總線,能閃爍鬧鐘比較信號輸出接到鬧鐘,秒模塊懸空整點報時信號輸出接到響鈴,實現(xiàn)3短1長響鈴調(diào)整使能端入0有效,有效時,顯示信號輸出,同時屏蔽進(jìn)位輸入和進(jìn)位輸出,允許調(diào)整信號輸入。由于計數(shù)的起始時間不可能與標(biāo)準(zhǔn)時間(如北京時間)一致,故需要在電路上加一個校時電路,同時標(biāo)準(zhǔn)的1HZ時間信號必須做到準(zhǔn)確穩(wěn)定。其中的控制邏輯電路是比較靈活多樣的,不斷完善它可以增強(qiáng)數(shù)字鐘的功能。計滿后各計數(shù)器清零,重新計數(shù)??刂菩盘栍?個矩形鍵盤輸入。石英晶體的選頻特性非常好,只有某一頻率點的信號可以通過它,其它頻率段的信號均會被它所衰減,而且,振蕩信號的頻率與振蕩電路中的R、C元件的數(shù)值無關(guān)。50K分頻電路的邏輯框圖如圖42所示。entity fenpin_50k is port( clk: in std_logic。 begin reg: process(clk,full) variable t:std_logic_vector(15 downto 0):=0000000000000000。 then if t =1100001101001111then t :=0000000000000000。139。 end if。系統(tǒng)使用的所有分頻電路圖見圖43。圖44 分頻模塊仿真圖 校時控制模塊電路設(shè)計與實現(xiàn) 鍵盤接口電路原理校時控制模塊在本系統(tǒng)中也就是鍵盤接口電路部分。行線與按鍵的一個引腳相連,列線與按鍵的另一個引腳相連。圖45 鍵盤接口電路 鍵盤接口的VHDL描述本模塊用于當(dāng)有按鍵按下時,采用軟件消抖的辦法去除按鍵抖動。圖46 去抖邏輯框圖該電路的VHDL程序如下:library IEEE。 entity qudou is port(clkin: IN STD_LOGIC 。 end qudou。039。 end if。 if din = 39。 end if。139。 when s2 = dout = 39。 then next_s = s0。039。 else next_s = s1。 end Behavioral。一旦到達(dá)最后一個狀態(tài),抖動已經(jīng)過去,就不會發(fā)生重鍵現(xiàn)象了,這樣就去除了抖動。其中,KeySwitch模塊的VHDL語言為:LIBRARY IEEE。END KeySwitch。039。139。 END CASE 。039。 。 END CASE 。圖48 鍵盤接口連接框圖按鍵接口模塊的仿真波形如下圖所示:圖49 鍵盤接口仿真波形圖 計數(shù)模塊設(shè)計與實現(xiàn) 秒和分計數(shù)模塊秒和分計數(shù)模塊邏輯框圖如圖49所示。ENTITY clock_60 ISPORT( CLRN,EN,CLK: IN STD_LOGIC。END clock_60。039。039。 THEN IF EN=39。COUT1=39。 ELSE tmpSa:=tmpSa+1。 END IF。 END PROCESS 。圖411 秒時鐘仿真波形 時計數(shù)模塊時計數(shù)模塊邏輯框圖如圖49所示。ENTITY clock_24 ISPORT( CLRN,EN,CLK: IN STD_LOGIC。END clock_24。039。039。 THEN IF EN=39。COUT1=39。 ELSE tmpSa:=tmpSa+1。 END IF。 END PROCESS 。電路圖如下圖所示:圖414 時鐘校時模塊圖其中,StateMachine模塊的代碼如下:LIBRARY IEEE。END StateMachine。039。139。 WHEN OTHERS = STX = st0。COM1: PROCESS(STX) 輸出控制信號的進(jìn)程 BEGIN CASE STX IS WHEN st0 = y = 11 。 END CASE 。系統(tǒng)模塊圖如下圖所示:圖415 時鐘模塊框圖頂層模塊圖如下圖所示:圖415 時鐘模塊頂層圖整個時鐘模塊的仿真波形圖如下圖所示:圖415 時鐘模塊仿真波形圖 定時鬧鈴模塊定時鬧鈴模塊由兩部分組成,一部分負(fù)責(zé)調(diào)整鬧鈴的時間,另一部分負(fù)責(zé)在規(guī)定的時間觸發(fā)打鈴。 USE ?!皶r”低位 Q_minueb : OUT INTEGER RANGE 0 TO 10。 VARIABLE Q_tmpmb: INTEGER RANGE 0 TO 10。039。 Q_tmphb:= 0。 THEN IF k1=39。 ELSIF Q_tmpha=9 THEN Q_tmpha:=0。 else IF Q_tmpmb=5 AND Q_tmpma=9 THENQ_tmpmb:=0。 ELSE Q_tmpma:=Q_tmpma+1。 Q_hourb=Q_tmphb。 END PROCESS 。 USE 。 QM_B: IN INTEGER RANGE 0 TO 10。 SPEAK: OUT STD_LOGIC)。 Y=39。END a。 USE 。 QH_B: IN INTEGER RANGE 0 TO 10。ARCHITECTURE a OF COMP_TIME IS SIGNAL QTIME:STD_LOGIC_VECTOR(12 DOWNTO 0)。SIGNAL Q_MB:STD_LOGIC_VECTOR (2 DOWNTO 0)。 Q_MB = conv_std_logic_vector (QM_B,3)。 Q_MA。139。139。139。139。139。139。139。139。139。139。139。139。 ELSE CASE QTIME IS WHEN 0001101000000 = Q_Y=39。 WHEN 0001111000000 = Q_Y=39。 WHEN 0010000110101 = Q_Y=39。 0920 WHEN 0010011000000 = Q_Y=39。 1025 WHEN 0100000110101 = Q_Y=39。 1120 WHEN 0101000100000 = Q_Y=39。 1430 WHEN 0101010010101 = Q_Y=39。 1525 WHEN 0101100010000 = Q_Y=39。 1620 WHEN 0101110000101 = Q_Y=39。 1715 WHEN 0110000000000 = Q_Y=39。 1910 WHEN 0110011010101 = Q_Y=39。 2005 WHEN 1000010000000 = Q_Y=39。 END CASE。其頂層圖如下圖所示:圖416 校園打鈴模塊頂層圖 打鈴時間調(diào)整模塊由于預(yù)設(shè)的時間和時鐘時間相同的時間是一分鐘,但是對于校園打鈴來說,一分鐘的時間明顯太長了,所以需要打鈴時間調(diào)整模塊,以便于將時間調(diào)整為20s。 q_20s: out STD_LOGIC)。event AND CLK=39。 THEN IF tmp=15 THEN tmp:=tmp+1。Q_20S=39。Q_20S=39。 END PROCESS 。 USE 。 QHBI:IN INTEGER RANGE 0 TO 10。 Q_HAO,Q_MAO,Q_SAO:OUT INTEGER RANGE 0 TO 10。 ARCHITECTURE a OF NOR_ARM_CTL IS BEGIN Q_HAO=QHAI WHEN K2=39。139。 ELSE QM_ARM_A。 Q_SAO=QSAI WHEN K2=39。139。use 。 rst : IN std_logic。 dataout : OUT std_logic_vector(7 DOWNTO 0)。signal data4 : INTEGER RANGE 0 TO 10。 en=en_xhdl。 elsif(clk39。 end if。)then en_xhdl=11111110。)then case div_t(19 downto 17) is when000= en_xhdl=11011111。 when100= en_xhdl=11111101。 end if。 when 11110111= data4=Q_MBO。 when 1011= data4=tthird。end process。 WHEN 3 = dataout_xhdl1 = 10110000。 WHEN 7 = dataout_xhdl1 = 11111000。 END CASE。將設(shè)計程序下載到實驗箱上運行調(diào)試后,最終結(jié)果與預(yù)期效果基本一致,時、分、秒能夠正常計數(shù)并能由控制鍵分別顯示,定時鬧鐘和校園打鈴功能正常。再加上器件對信號的延時等問題,實際下載到實驗箱上后會出現(xiàn)一系列的問題,因此仿真圖和電路連接圖還是有一定區(qū)