名称:mealy型状态机设计Verilog代码Quartus仿真
软件:Quartus
语言:Verilog
代码功能:
对于图7-1所示的状态图和状态机框图,将其实现为Mealy型状态机(Mealy type state machine),输出信号是否存在“毛刺(burr)”没有要求,写出其VERILOG HDL源代码(包括entity和architecture)并画出结果电路图,要求调试通过。
实验原理(Experimental principle )
Mealy型状态机和其等价的Moore型状态机相比,其输出变化要领先一个时钟周期(Clock cycle)。Mealy机的输出既和当前状态有关,又和所有输入信号有关。也就是说,一旦输入信号发生变化或状态发生变化,输出信号立即发
生变化,因此在状态图中,一般把输出信号值画在状态变迁(changes)处。例如:假定当前状态为S0,当输入信号为‘1’时,输出信号为“1001”;当输入
信号不是‘1’时,输出信号为“0000”。
构造 Mealy机的方法和Moore机相同,唯一的区别是:组合进程中的输
出信号是当前状态和当前输入的函数。
FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com
演示视频:
设计文档:
1.工程文件
2.程序文件
3.程序编译
4.RTL图
5.仿真图
部分代码展示:
//状态机 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; //状态跳转 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