日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA(7)--有限状态机--交通灯

發布時間:2023/12/2 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA(7)--有限状态机--交通灯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 一、實驗目的
    • 二、實驗內容
    • 三、實驗設計與結果
    • 四、實驗思考與小結

一、實驗目的

掌握有限狀態機的編程和使用方法。

二、實驗內容

設計一個十字路口交通燈控制器,東西(b)、南北(a)方向有紅燈、黃燈、綠燈,持續時間分別為45、5、40秒,仿真驗證其功能。

三、實驗設計與結果

1.整體設計思路:根據題目要求可知,需要用VHDL描述設計不同的進程分別進行“復位清零”、“狀態定義及轉化”、“時間定義及控制”、“計時”的功能。而又因為紅綠燈需要持續40秒,而黃燈只需要持續5秒,因此需要將“時間的定義及控制”、“計時”的功能各自都分開成兩個部分。細節:需要注意復位清零的異步性、雙向紅綠燈存在的4種不同狀態、計時功能與狀態選擇的銜接等。VHDL描述代碼如下。
①引入與定義:

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL;ENTITY rgy3 isport( clk,rst: in std_logic;Ra,Rb,Ga,Gb,Ya,Yb: out std_logic); END rgy3;Architecture bhv of rgy3 istype state is (S0,S1,S2,S3);signal presentstate,nextstate : state;signal time40,time5 : std_logic;signal rst40,rst5 : std_logic ;signal en40,en5 : std_logic ; signal tmp40 : std_logic_vector(5 downto 0);signal tmp5 : std_logic_vector(2 downto 0);begin

②異步復位清零:

process(clk,rst)beginif rst = '1' then presentstate <= S0;elsif clk'event and clk='1' thenpresentstate<=nextstate;end if;end process;

③40秒計時:

process(clk,rst40,en40) begin if rst = '1' then tmp40<="000000";elsif rst40='1' then tmp40<="000000";elsif clk'event and clk='1' then if en40='1' thenif tmp40="100111" then tmp40<="000000";else tmp40<=tmp40+1;end if;end if;end if;if tmp40="100111" then time40<='1';else time40<='0';end if;end process;

④5秒計時:

process(clk,rst5,en5) begin if rst = '1' then tmp5<="000";elsif rst5='1' then tmp5<="000";elsif clk 'event and clk='1' then if en5='1' thenif tmp5="100" then tmp5<="000";else tmp5<=tmp5+1;end if;end if;end if;if tmp5="100" then time5<='1';else time5<='0';end if;end process;

⑤時間與狀態銜接:

process(presentstate,time40,time5)begincase presentstate iswhen S0 => rst40 <='0';en40<='1';rst5<='1';en5<='0';if time40= '1' then nextstate<= S1;else nextstate<= S0; end if;when S1 => rst5 <='0';en5 <='1';rst40<='1';en40<='0';if time5= '1' then nextstate<= S2;else nextstate<= S1; end if; when S2 => rst40 <='0';en40<='1';rst5<='1';en5<='0';if time40= '1' then nextstate<= S3;else nextstate<= S2; end if; when S3 => rst5 <='0';en5<='1';rst40<='1';en40<='0';if time5= '1' then nextstate<= S0;else nextstate<= S3; end if; end case;end process;

⑥狀態對應轉化:

process(presentstate)begincase presentstate is when S0 => Ra<='0'; Ya<= '0'; Ga<='1'; Rb<='1'; Yb<= '0'; Gb<='0'; when S1 => Ra<='0'; Ya<= '1'; Ga<='0'; Rb<='1'; Yb<= '0'; Gb<='0'; when S2 => Ra<='1'; Ya<= '0'; Ga<='0'; Rb<='0'; Yb<= '0'; Gb<='1'; when S3 => Ra<='1'; Ya<= '0'; Ga<='0'; Rb<='0'; Yb<= '1'; Gb<='0';end case;end process;

2.仿真實驗:輸入:clk、rst,輸出:Ra、Rb、Ga、Gb、Ya、Yb以及狀態中間輸出:presentstate、tmp40、tmp5。

3.狀態機轉換圖。

4.根據引腳配置完成接線,下載至FPGA芯片中,在實驗箱上完成驗證。如下圖為相關的實驗驗證。

四、實驗思考與小結

1.VHDL描述的模塊化,將實現不同功能的VHDL描述分開在不同的進程里面,實現VHDL的“高內聚低耦合”。
2. 需要明確不同的狀態機它們之間的轉換條件。
3. 狀態機由狀態寄存器和組合邏輯電路構成,能夠根據控制信號按照預先設定的狀態進行狀態轉移,是協調相關信號動作、完成特定操作的控制中心。交通信號燈可以用狀態機的原理來實現,因為信號燈的變化狀態是有限的,各個狀態可以列舉出來,狀態間切換由計數器決定。

總結

以上是生活随笔為你收集整理的FPGA(7)--有限状态机--交通灯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。