備注:
輸出信號使用燈泡來顯示“0000”表示1,“1001”表示9。

原理:
該電路的輸入為一個時鐘脈沖CLK和異步復位信號reset每段clk上升沿到達時計數器加一,直到九,下一個上升沿到達后計數結果為0,然后再周而復始的計數下去。reset高電平時正常技術,當reset為低電平時,計數從0開始,計數結果要接入LED燈泡顯示。

實現思路:
根據計數原理設置10個狀態,分別表示為S0-S9,S0的狀態對應0,驅動燈泡顯示為“0000”,下一個時鐘脈沖到達后,無條件從S0轉到S1,S1狀態對應1,驅動燈泡顯示為“0001”,以此類推,直到S9狀態。在此狀態下,當時鐘到達后,直接轉到S0。

狀態轉化圖:
VFXBK@3WNDZ_K@`HI8PB{CC.png (11.87 KB, 下載次數: 76)
下載附件
2019-5-28 13:10 上傳

部分程序代碼:- library ieee;
- use ieee.std_logic_1164.all;
- entity fsm_jishu is
- port(clk,reset :in std_logic;
- q:out std_logic_vector(3 downto 0));
- end fsm_jishu;
- architecture wang of fsm_jishu is
- type state is (s0,s1,s2,s3,s4,s5,s6,s7,s8,s9);
- signal currentstate,nextstate:state;
- begin
- --jincheng
- with currentstate select
- nextstate<=s1 when s0,
- s2 when s1,
- s3 when s2,
- s4 when s3,
- s5 when s4,
- s6 when s5,
- s7 when s6,
- s8 when s7,
- s9 when s8,
- s0 when others;
- --suochunjincheng
- state_latch : process(clk,reset)
- begin
- if reset='0'then
- currentstate<=s0;
- elsif clk'event and clk='1'then
- currentstate<=nextstate;
- end if;
- end process
復制代碼 詳細程序在附件
0-9計數器.docx
(12.66 KB, 下載次數: 5)
2019-5-28 14:31 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|