名稱:mealy型狀態(tài)機設計Verilog代碼Quartus仿真
軟件:Quartus
語言:Verilog
代碼功能:
對于圖7-1所示的狀態(tài)圖和狀態(tài)機框圖,將其實現(xiàn)為Mealy型狀態(tài)機(Mealy type state machine),輸出信號是否存在“毛刺(burr)”沒有要求,寫出其VERILOG HDL源代碼(包括entity和architecture)并畫出結果電路圖,要求調試通過。
實驗原理(Experimental principle )
Mealy型狀態(tài)機和其等價的Moore型狀態(tài)機相比,其輸出變化要領先一個時鐘周期(Clock cycle)。Mealy機的輸出既和當前狀態(tài)有關,又和所有輸入信號有關。也就是說,一旦輸入信號發(fā)生變化或狀態(tài)發(fā)生變化,輸出信號立即發(fā)
生變化,因此在狀態(tài)圖中,一般把輸出信號值畫在狀態(tài)變遷(changes)處。例如:假定當前狀態(tài)為S0,當輸入信號為‘1’時,輸出信號為“1001”;當輸入
信號不是‘1’時,輸出信號為“0000”。
構造 Mealy機的方法和Moore機相同,唯一的區(qū)別是:組合進程中的輸
出信號是當前狀態(tài)和當前輸入的函數。
FPGA代碼Verilog/VHDL代碼資源下載:www.hdlcode.com
演示視頻:
設計文檔:
1.工程文件
2.程序文件
3.程序編譯
4.RTL圖
5.仿真圖
部分代碼展示:
//狀態(tài)機 module?mealy_state( input?clk,//時鐘 input?rst_n,//復位 input?data_in, output?reg[3:0]?data_out ); parameter?S0=2'b00; parameter?S1=2'b01; parameter?S2=2'b10; parameter?S3=2'b11; reg?[1:0]?curr_state; reg?[1:0]?next_state; always@(posedge?clk?or?negedge?rst_n) if(~rst_n) curr_state<=S0; else? curr_state<=next_state; //狀態(tài)跳轉 always@(*) case(curr_state) S0: if(data_in==1) next_state=S1; else next_state=S0; S1: if(data_in==0) next_state=S2; else next_state=S1; S2: if(data_in==1) next_state=S3; else next_state=S2; S3: if(data_in==0) next_state=S0; else next_state=S3; endcase
點擊鏈接獲取代碼文件:http://www.hdlcode.com/index.php?m=home&c=View&a=index&aid=1522