名稱:mealy型狀態(tài)機(jī)設(shè)計(jì)Verilog代碼Quartus仿真
軟件:Quartus
語言:Verilog
代碼功能:
對(duì)于圖7-1所示的狀態(tài)圖和狀態(tài)機(jī)框圖,將其實(shí)現(xiàn)為Mealy型狀態(tài)機(jī)(Mealy type state machine),輸出信號(hào)是否存在“毛刺(burr)”沒有要求,寫出其VERILOG HDL源代碼(包括entity和architecture)并畫出結(jié)果電路圖,要求調(diào)試通過。
實(shí)驗(yàn)原理(Experimental principle )
Mealy型狀態(tài)機(jī)和其等價(jià)的Moore型狀態(tài)機(jī)相比,其輸出變化要領(lǐng)先一個(gè)時(shí)鐘周期(Clock cycle)。Mealy機(jī)的輸出既和當(dāng)前狀態(tài)有關(guān),又和所有輸入信號(hào)有關(guān)。也就是說,一旦輸入信號(hào)發(fā)生變化或狀態(tài)發(fā)生變化,輸出信號(hào)立即發(fā)
生變化,因此在狀態(tài)圖中,一般把輸出信號(hào)值畫在狀態(tài)變遷(changes)處。例如:假定當(dāng)前狀態(tài)為S0,當(dāng)輸入信號(hào)為‘1’時(shí),輸出信號(hào)為“1001”;當(dāng)輸入
信號(hào)不是‘1’時(shí),輸出信號(hào)為“0000”。
構(gòu)造 Mealy機(jī)的方法和Moore機(jī)相同,唯一的區(qū)別是:組合進(jìn)程中的輸
出信號(hào)是當(dāng)前狀態(tài)和當(dāng)前輸入的函數(shù)。
1.工程文件
2.程序文件
3.程序編譯
4.RTL圖
5.仿真圖
部分代碼展示:
//狀態(tài)機(jī) module mealy_state( input clk,//時(shí)鐘 input rst_n,//復(fù)位 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)跳轉(zhuǎn) 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