【正文】
整點報時器( baoshi) VHDL 程序描述 library ieee。 use 。 inputmiao,inputfen:in std_logic_vector(7 downto 0)。 end baoshi。 signal nummiao,numfen:std_logic_vector(7 downto 0)。 numfen=inputfen。 process(clk,temp) begin if(clk39。139。139。039。 end if。139。039。 end if。 end process。 整點報時器( baoshi)仿真波形圖 整點報時器( baoshi)仿真分析 input為分計數(shù)器的輸出端,當輸出 59和 00(十六進制)時,整點報時器( baoshi)的輸出端 output為高電平,點亮 LED燈。 四、數(shù)字時鐘的驅動與顯示設計 分 頻器( fenpin)設計 分頻器( fenpin)原理 由于 EDA 實驗箱中的脈沖信號源為 10kHz,要得到需要脈沖可以通過定義count std_logic_vector(13 downto 0),使 count 在 “ 00000000000000”和“ 10011100001111”之間的轉換實現(xiàn)。掃描顯示譯碼器的脈沖,可以通過實驗箱中的 10kHz的脈沖產(chǎn)生。 use 。 entity fenpin is port( clk_10k:in std_logic。 end fenpin。 begin process(clk_10k) begin if (clk_10k39。139。 clk=39。 else count= count+1。039。 end if。 end fun。八個數(shù)碼管中,用六個數(shù)碼管顯示時、分和秒,另外兩個可做為時和分、分和秒之間的間隔,顯示 。 掃描顯示譯碼器( saomiao)) VHDL 程序描述 library ieee。 use 。 shi:in std_logic_vector(7 downto 0)。 miao:in std_logic_vector(7 downto 0)。 segout:out std_logic_vector(6 downto 0) )。 architecture fun of saomiao is signal temp:std_logic_vector(2 downto 0)。 signal sel:std_logic_vector(2 downto 0)。 segout=seg。 begin if (clk_smxs39。139。 else temp=temp+1。 case temp is when 111 =num:=shi(7 downto 4)。 when 110 =num:=shi(3 downto 0)。 when 101 =num:=1010。 when 100 =num:=fen(7 downto 4)。 when 011 =num:=fen(3 downto 0)。 when 010 =num:=1010。 when 001 =num:=miao(7 downto 4)。 when 000 =num:=miao(3 downto 0)。 end case。 when0001=seg=0000110。 when0011=seg=1001111。 when0101=seg=1101101。 when0111=seg=0000111。 when1001=seg=1101111。 when others=seg=0000000。 end if。 end fun。分頻器的功能是 將 10kHz 的脈沖信號轉換為 1Hz的時鐘信號,用于秒的計數(shù)。計數(shù)到 59時,會輸出 enfen高電平,用于分的計數(shù)。分計數(shù)器為 60進制計數(shù)器,當 enfen高電平來臨時,分計數(shù)器會開始計數(shù),計數(shù)到 59時, 會產(chǎn)生 enshi的高電平。 enshi為時計數(shù)器的計數(shù)脈沖輸入, enshi高電平時,時計數(shù)器開始計數(shù)。 reset 為異步清零端,低電平時,所有時鐘顯示數(shù)碼管均為 0。 segout為數(shù)碼管的輸入端,分別接入數(shù)碼管的 a,b,c,d,e,f,g端口。當分為 59,秒為 59時, output1點亮一個 LED燈,當分為00,秒為 00時和其他情況時, LED均處于滅等狀態(tài)。 六 、數(shù)字時鐘設計總結 本次試驗最主要的收獲是:使我們對 EDA 設計和 FPGA有一定的感性和理性認識;培養(yǎng)和 鍛煉我們的實際動手能力。 在以前我們學的都是一些理論知識??匆粋€東西簡單,但在實際操作中就是有許多要注意的地方,有些東西也與你的想象不一樣,我們這次的實驗就是要我們跨過這道實際和理論之間的鴻溝。以前我們光只注意一些理論知識,并沒有專門的練習我們的實際動手能力。所以,在以后的學習生活中,我需要更努力地讀書和實踐。 CLK為時鐘脈沖輸入口, DRESET為復位口使其重新發(fā)送序列, COUNT為序列輸出口。 USE 。 COUNT :OUT STD_LOGIC )。 ARCHITECTURE behav OF COUNT IS TYPE FSM_ST IS (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13,s14,s15)。 SIGNAL Q:STD_LOGIC。139。Q=39。 ELSIF CLK39。139。039。 WHEN s1= Q=39。REG=s2。139。 WHEN s3= Q=39。REG=s4。039。 WHEN s5= Q=39。REG=s6。139。 WHEN s7= Q=39。REG=s8。039。 WHEN s9= Q=39。REG=s10。139。 WHEN s11= Q=39。REG=s12。039。 WHEN s13= Q=39。REG=s14。139。 WHEN s15= Q=39。REG=s0。Q=39。 END CASE。 END PROCESS。 END behav。在狀態(tài)機,我們再每個狀態(tài)的下一個轉義的狀態(tài)都有倆個轉移方向。如碰到序列11010,大可不必要再檢測到第三個 1時跳回到 s0 狀態(tài),而是留在 s1 狀態(tài)。 USE 。 ss : OUT STD_LOGIC)。 ARCHITECTURE behav OF SEQUENCECHECK IS TYPE FSM_ST IS (s0,s1,s2,s3,s4)。 SIGNAL D : STD_LOGIC_VECTOR(4 DOWNTO 0)。 BEGIN D = 11010 。139。 ELSIF CLK39。139。 flag=1。 END IF 。 ELSE Q = s0 。 WHEN s2= IF DIN = D(2) THEN Q = s3 。 END IF 。 ELSE Q = s0 。 WHEN s4= IF DIN = D(0) THEN Q = s0 。 END IF 。 END IF 。 PROCESS( Q,flag ) BEGIN IF (flag=1 AND Q= s0) THEN ss=39。 ELSE ss=39。 END IF 。 END behav 。 USE 。 M10 : OUT STD_LOGIC。 M1K : OUT STD_LOGIC)。 ARCHITECTURE FrDi OF divider IS SIGNAL x : STD_LOGIC。 SIGNAL z : STD_LOGIC。 BEGIN 分頻輸出 1Kz 音頻信號 IF clk39。139。 IF t110 THEN IF t1=5 THEN x = NOT x。 ELSE t1 := 0。 END IF。 END PROCESS。 BEGIN 分頻輸出 500hz 音頻信號 IF clk39。139。 IF t299 THEN IF t2=49 THEN y = NOT y。 ELSE t2 := 0。 END IF。 END PROCESS。 BEGIN 分頻輸出 1hz 脈沖信號 IF clk39。139。 IF t3999 THEN IF t3=499 THEN z = NOT z。 ELSE t3 := 0。 END IF。 END PROCESS。 4,顯示 CLK 為顯示掃描脈沖 SS2 為計數(shù)值 SS 的輸入口 CLR 為清零輸入端 Sel0,Sel1,Sel2,為位選 SEL【 7..0】輸出到數(shù)碼管 程序: LIBRARY IEEE。 USE 。 sel0,sel1,sel2:buffer STD_LOGIC。 數(shù)碼管八段 GW,SW,BW: buffer STD_LOGIC_VECTOR(3 DOWNTO 0)。 END XINSHI。 12 位 BCD 計數(shù)值 SIGNAL CNT8: STD_LOGIC_VECTOR(2 DOWNTO 0)。數(shù)碼管顯示值 0 SIGNAL MODEL : STD_LOGIC_VECTOR(11 DOWNTO 0)。 SW=J(7 downto 4)。 IF clr=39。 THEN J=(others=39。)。EVENT AND ss2=39。 THEN IF GW=9 THEN 個位為 9 時加 7 調整 J=J+7。 END IF。 END IF。 END PROCESS。EVENT AND CLK=39。 THEN IF CNT8010 THEN CNT8 =CNT8+1。039。 END IF。 SEL(0)=sel0 。 SEL(2)=sel2 。039。139。039。 WHEN 001 = sel2=39。sel1=39。sel0=39。A=SW。039。039。039。 WHEN OTHERS =NULL。 END PROCESS 。 WHEN 0001 =SG=00000110。 WHEN 0011 =SG=01001111。 WHEN 0101 =SG=01101101。 WHEN 0111 =SG=00000111。 WHEN 1001 =SG=01101111。 END CASE。 END behav。 VHDL 文件,輸入設計語言,保存時要注意與工程文件名相同。 建立波形文件,導入結點,并設置好仿真結束時間,保存文件,進行仿真設置,然后進行波形仿真 五、仿真波形分析 當檢測到‘ 11010‘時產(chǎn)生 COUT 產(chǎn)生進位 當 D_RESET(即發(fā)生器復位時)為 1,將回到 S0 狀態(tài),從頭開始檢測。 六、硬件測試 ,選擇適當?shù)囊_ ,保存,必須重新進行一次全程編譯,編譯通過后才能編程下載。 選擇 Tools— Programmer 菜單,打開 programmer 窗口。點擊 “ Hardware Setup” 按鈕,打開硬件設置口。 點擊 “ Start” 按鈕,開始編程 下載 七、硬件測試結果 當檢測到 ‘ 11010‘序列時輸出結果加一,并顯示在前三位 數(shù)碼管上。后來看實驗要求改成了狀態(tài)機的方法,這種方法更穩(wěn)定。 用 VHDL 描述的狀態(tài)機結構分明 ,易讀 ,易懂 ,易排錯