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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

FPGA的学习:状态机的实现(三)

發(fā)布時間:2024/3/7 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FPGA的学习:状态机的实现(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用代碼實(shí)現(xiàn)fsm

`timescale 1ns/1ns module simple_fsm (input wire sys_clk , //系統(tǒng)時鐘50MHzinput wire sys_rst_n , //全局復(fù)位input wire pi_money , //投幣方式可以為:不投幣(0)、投1元(1)output reg po_cola //po_cola為1時出可樂,po_cola為0時不出可樂 ); //parameter define //只有三種狀態(tài),使用獨(dú)熱碼 parameter IDLE = 3'b001; parameter ONE = 3'b010; parameter TWO = 3'b100;//reg define reg [2:0] state; //第一段狀態(tài)機(jī),描述當(dāng)前狀態(tài)state如何根據(jù)輸入跳轉(zhuǎn)到下一狀態(tài) always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)state <= IDLE; //任何情況下只要按復(fù)位就回到初始狀態(tài)else case(state)IDLE : if(pi_money == 1'b1)//判斷輸入情況state <= ONE;elsestate <= IDLE;ONE : if(pi_money == 1'b1)state <= TWO;elsestate <= ONE;TWO : if(pi_money == 1'b1)state <= IDLE;elsestate <= TWO;//如果狀態(tài)機(jī)跳轉(zhuǎn)到編碼的狀態(tài)之外也回到初始狀態(tài)default : state <= IDLE;endcase//第二段狀態(tài)機(jī),描述當(dāng)前狀態(tài)state和輸入pi_money如何影響po_cola輸出 always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)po_cola <= 1'b0;else if((state == TWO) && (pi_money == 1'b1))po_cola <= 1'b1;elsepo_cola <= 1'b0;endmodule

然后編寫仿真代碼

`timescale 1ns/1nsmodule tb_simple_fsm(); //reg define reg sys_clk; reg sys_rst_n; reg pi_money;//wire define wire po_cola; //初始化系統(tǒng)時鐘、全局復(fù)位 initial beginsys_clk = 1'b1;sys_rst_n <= 1'b0;#20sys_rst_n <= 1'b1; end//sys_clk:模擬系統(tǒng)時鐘,每10ns電平翻轉(zhuǎn)一次,周期為20ns,頻率為50MHz always #10 sys_clk = ~sys_clk;//pi_money:產(chǎn)生輸入隨機(jī)數(shù),模擬投幣1元的情況 always@(posedge sys_clk or negedge sys_rst_n)if(sys_rst_n == 1'b0)pi_money <= 1'b0;elsepi_money <= {$random} % 2; //取模求余數(shù),產(chǎn)生非負(fù)隨機(jī)數(shù)0、1//將RTL模塊中的內(nèi)部信號引入到Testbench模塊中進(jìn)行觀察 wire [2:0] state = simple_fsm_inst.state;initial begin$timeformat(-9, 0, "ns", 6);$monitor("@time %t: pi_money=%b state=%b po_cola=%b", $time, pi_money, state, po_cola); end simple_fsm simple_fsm_inst(.sys_clk (sys_clk ), //input sys_clk.sys_rst_n (sys_rst_n ), //input sys_rst_n.pi_money (pi_money ), //input pi_money.po_cola (po_cola ) //output po_cola );endmodule

總結(jié)

以上是生活随笔為你收集整理的FPGA的学习:状态机的实现(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。