【正文】
idata : IN STD_LOGIC_VECTOR(7 downto 0)。模塊元件如下:圖413譯碼顯示強制轉換模塊元件程序如下:LIBRARY ieee。 end behave。 end case。 when 1001=led=10010000。 when 0111=led=11111000。 when 0101=led=10010010。 when 0011=led=10110000。 when 0001=led=11111001。 BEGIN process (clk)begin sel=addr。 END drive。addr : IN STD_LOGIC_vector(3 downto 0)。 USE 。4譯碼顯示模塊該模塊完成對計數(shù)器編碼信息的譯碼工作,驅動數(shù)碼管顯示相應的數(shù)字。end process k1。 end if。 count:=count+1。 else flag=39。 count:=count+1。 elsif count=1 then flag=39。 count:=0。elsif rising_edge(clk_1s) then if count=2 then flag=39。039。139。 addr_1s=iset_addr。039。ARCHITECTURE hh_architecture OF hh ISBEGINk1:process(clk_1s,iset)variable count:integer range 0 to 2:=0。 flag: OUT STD_LOGIC )。 iset_addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0)。ENTITY hh IS PORT ( clk_1s : IN STD_LOGIC。USE 。圖411小時高位計數(shù)模塊元件程序如下:LIBRARY ieee。(4)小時高位計數(shù)模塊該模塊框圖如圖411所示。end process k1。 end if。 addr_1s=CONV_STD_LOGIC_VECTOR(count,4)。039。 addr_1s=CONV_STD_LOGIC_VECTOR(count,4)。139。 end if。 count:=count+1。 else os=39。 count:=0。 then if count=3 then os=39。elsif rising_edge(clk_1s) then if flag=39。 then count:=CONV_INTEGER(iset_addr)。beginif iset=39。END hl。 addr_1s : OUT STD_LOGIC_vector(3 downto 0)。 flag : IN STD_LOGIC。ENTITY hl IS PORT ( clk_1s : IN STD_LOGIC。USE 。圖410小時低位計數(shù)模塊元件圖程序如下:LIBRARY ieee。(3)小時低位計數(shù)模塊該模塊框圖如圖410所示。END ml_architecture。end if。 addr_1s=CONV_STD_LOGIC_VECTOR(count,4)。039。 addr_1s=CONV_STD_LOGIC_VECTOR(count,4)。139。 addr_1s=iset_addr。039。ARCHITECTURE ml_architecture OF ml ISBEGINk1:process(clk_1s,iset)variable count:integer range 0 to 10:=0。 os : OUT STD_LOGIC )。 iset_addr : IN STD_LOGIC_VECTOR(3 DOWNTO 0)。ENTITY ml IS PORT ( clk_1s : IN STD_LOGIC。USE 。圖49分低位邏輯框圖程序如下:LIBRARY ieee。(2)分低位計數(shù)器該模塊框圖如圖49所示。end if。 count:=count+1。 else os=39。139。ARCHITECTURE sec_architecture OF second ISBEGINk1:process(clk_1s)variable count:integer range 0 to 100:=0。 os : OUT STD_LOGIC )。USE 。模塊主要完成秒向分的進位,產生脈沖信號。說明:當flag為高電平時,即小時高位為2,小時低位只能在0到3之間變動;當flag為低電平時,即小時高位為1,小時低位可以在0到9之間變動。end process k1。 end if。 if count=9 then count=0000。 end if。 then if count=3 then count=0000。k1:process(inkey,flag)beginif rising_edge(inkey) then if flag=39。ARCHITECTURE addram3_architecture OF addram3 ISsignal count:std_logic_vector(3 downto 0)。 oaddr : OUT STD_LOGIC_VECTOR(3 downto 0) )。ENTITY addram3 IS PORT ( inkey : IN STD_LOGIC。USE 。對于分的高位,僅將程序中的count=9改成count=5即可;對于小時的高位,僅將程序中的count=9改成count=2即可。END addram_architecture。 end if。 if count=9 then count=0000。BEGINoaddr=count。END addram。ENTITY addram IS PORT ( inkey : IN STD_LOGIC。USE 。圖(b)中的flag是判斷小時高位是1還是2的信號,若為1,則flag信號為低電平;若為2,則flag信號為高電平。inkey是由去抖模塊輸出的有鍵按下的信號,這個信號引發(fā)按鍵控制模塊內部信號的變化。按鍵控制模塊的框圖如圖47所示。由于計數(shù)脈沖為500HZ,故從有按鍵按下到輸入信號產生大概需要60ms。END colv_architecture。end if。139。 else count:=count+1。039。139。 then count:=0。beginif inkey=39。END colv。 inkey : IN STD_LOGIC。USE 。該模塊的邏輯框圖如圖46所示。模塊的實現(xiàn)方法是先判斷是否有按鍵按下,如有按鍵按下則延時一段時間,待抖動過去之后再讀行線狀態(tài),如果仍有低電平行線,則確定有按鍵按下,然后產生一個有按鍵按下的信號。該模塊的時序仿真圖如圖43所示,滿足設計要求。分頻電路的邏輯框圖如圖42所示。然后再利用分頻電路,將其輸出信號轉變?yōu)槊胄盘?,其組成框圖如圖41。石英晶體的選頻特性非常好,只有某一頻率點的信號可以通過它,其它頻率段的信號均會被它所衰減,而且,振蕩信號的頻率與振蕩電路中的R、C元件的數(shù)值無關。譯碼顯示電路由七段譯碼器完成,顯示由數(shù)碼管構成??刂菩盘栍?5矩形鍵盤輸入。計數(shù)器的輸出分別經譯碼器送數(shù)碼管顯示。秒計數(shù)器滿60后向分計數(shù)器進位,分計數(shù)器滿60后向小時計數(shù)器進位,小時計數(shù)器按照“24翻1”規(guī)律計數(shù)。本設計總體框架如圖31。由于計數(shù)的起始時間不可能與標準時間(如北京時間)一致,故需要在電路上加一個校時電路,同時標準的1HZ時間信號必須做到準確穩(wěn)定。這種輸入方式最后所能達到的工作速度和芯片利用率也是主要取決于綜合軟件。在圖形的方式下定義好各個工作狀態(tài),然后在各個狀態(tài)上輸入轉換條件以及相應的輸入輸出,最后生成HDL語言描述,送去綜合軟件綜合到可編程邏輯器件的內部。電路原理圖方式描述比較直觀和高效,對綜合軟件的要求不高。有的軟件3種輸入方法都支持,如ActiveHDL。HDL既可以描述底層設計,也可以描述頂層的設計,但它不容易做到較高的工作速度和芯片利用率。編程語言主要有VHDL和Verilog兩種硬件描述語言;編程工具主要是兩大廠家Altera和Xilinx的集成綜合EDA軟件(如MAX+plusII、QuartusII、Foundation、ISE)以及第三方工具(如FPGA Express、Modelsim、Synposys SVS等)。 FPGA開發(fā)編程原理硬件設計需要根據(jù)各種性能指標、成本、開發(fā)周期等因素,確定最佳的實現(xiàn)方案,畫出系統(tǒng)框圖,選擇芯片,設計PCB并最終形成樣機。如果仿真結果達不到設計要求,就修改VHDL源代碼或選擇不同速度和品質的器件,直至滿足設計要求。,產生多項設計結果:(a)適配報告,包括芯片內部資源利用情況,設計的布爾方程描述情況等;(b)適配后的仿真模型;(c)器件編程文件。一般的設計,也可略去這一步驟。綜合優(yōu)化是針對ASIC芯片供應商的某一產品系列進行的,所以綜合的過程要在相應的廠家綜合庫的支持下才能完成。一般情況下,這一仿真步驟可略去。,主要是檢驗系統(tǒng)功能設計的正確性。此外,還可以采用圖形輸入方式(框圖、狀態(tài)圖等),這種輸入方式具有直觀、容易理解的優(yōu)點。系統(tǒng)劃分①編譯器③代碼級功能仿真④綜合器⑤適配前時序仿真⑥適配器⑦CPLD/FPGA實現(xiàn)適配后仿真模型⑧適配后時序仿真適配報告⑧ASIC實現(xiàn)VHDL代碼或圖形方式輸入②仿真綜合庫器件編程文件⑧圖22 CPLD/FPGA系統(tǒng)設計流程流程說明:“自頂向下”的設計方法進行系統(tǒng)劃分。高層次設計只是定義系統(tǒng)的行為特征,可以不涉及實現(xiàn)工藝,因此還可以在廠家綜合庫的支持下,利用綜合優(yōu)化工具將高層次描述轉換成針對某種工藝優(yōu)化的網絡表,使工藝轉化變得輕而易舉。 FPGA系統(tǒng)設計流程一般說來,一個比較大的完整的項目應該采用層次化的描述方法:分為幾個較大的模塊,定義好各功能模塊之間的接口,然后各個模塊再細分去具體實現(xiàn),這就是TOP DOWN(自頂向下)的設計方法??删幊袒ミB資源IR可以將FPGA內部的CLB和CLB之間、CLB和IOB之間連接起來,構成各種具有復雜功能的系統(tǒng)。IOB輸出端配有兩只MOS管,它們的柵極均可編程,使MOS管導通或截止,分別經上拉電阻接通Vcc、地線或者不接通,用以改善輸出波形和負載能力。通過編程給數(shù)據(jù)選擇器不同的控制信息,確定送至CLB陣列的I1和I2是來自輸入緩沖器,還是來自觸發(fā)器。當IOB控制的引腳被定義為輸入時,通過該引腳的輸入信號先送入輸入緩沖器。它主要