资源描述:
《哈工大数字电子技术大作业“状态机”》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、状态检测机设计电气六班刘悦HarbinInstituteofTechnology基于VerilogHDL语言的状态检测机设计0906106班刘悦1093710508联系方式:http://sz.user.qzone.qq.com/1953782418/infocenter?msg_id=4428812状态检测机设计电气六班刘悦设计要求设计一个基于VerilogHDL语言的状态检测机,其可以对输入的一串二进制数进行检测,用于检测序列中连续3个或3个以上的1。当检测到3个或3个以上的1时机器输出1,否则输出0。其状态转换图和状态转化表如下:图1状
2、态检测机状态转换图要求编写设计源程序,并生成仿真电路图和状态转换表,最后通过仿真实验验证设计的可靠性并给出仿真波形图。表格1状态检测机状态转换表现态A现态B输入x次态A次态B输出y00000000101001000001110010000012状态检测机设计电气六班刘悦101110110001111111设计思路根据要求中给出的状态检测机的状态转换图,可以确定这个问题最基本的做法是选用Moore型状态机,即输出是当前状态的函数。但是,也可以用Mealy型状态机来达到设计要求,进而将两种方案对比分析,加深对知识的理解。Moore型状态机1.1V
3、erilogHDL语言描述modulechange(clk,din,op);//Moore型状态机inputclk,din;outputop;reg[1:0]current_state,next_state;regop;parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;always@(posedgeclk)begincurrent_state<=next_state;endalways@(current_stateordin)begincase(current_state)S0:beginop=0;if
4、(din==0)next_state=S0;elsenext_state=S1;endS1:beginop=0;if(din==0)12状态检测机设计电气六班刘悦next_state=S0;elsenext_state=S2;endS2:beginop=0;if(din==0)next_state=S0;elsenext_state=S3;endS3:beginop=1;if(din==0)next_state=S0;elsenext_state=S3;enddefault:beginop=0;next_state=S0;endendcase
5、endendmodule1.2程序说明Clk为时钟,din为输入信号,op为输出信号,current_state为当前状态,next_state为下一个状态。程序中"parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;"声明了S0,S1,S2和S3分别为一个二进制数00、01、10和11.第一个always进程完成在时钟脉冲信号clk上升(或下降)沿到来时,当前状态(current_state)向新状态(next_state)转换的功能,这个模块是同步时序逻辑。12状态检测机设计电气六班刘悦第二个alwa
6、ys进程负责感应输入(din)值和目前状态(current_state)值,有case语句决定输出(op)值和下个状态(next_state)值。这个模块实现的是状态转换的条件,通过组合逻辑电路来实现。1.3仿真结果图2Moore型状态机的仿真波形图图3Moore型状态机的RTLViewer图2为Moore型状态机的仿真波形图,图3为Moore型状态机的RTLViewer,图4为Moore型状态机的仿真状态转换图,图5为Moore型状态机的仿真电路图。当状态为S0时,din为1,则下一个时钟上升沿到达时,状态变为S1,输出op为0;以此类推,
7、实现状态转换图图1的功能。图4Moore型状态机的仿真状态转换图12状态检测机设计电气六班刘悦图5Moore型状态机的仿真电路图Mealy型状态机2.1VerilogHDL语言描述modulechange1(clk,din,op,state);//Mealy型状态机inputclk,din;outputop;output[1:0]state;reg[1:0]current_state,next_state;regop;parameterS0=2'b00,S1=2'b01,S2=2'b10,S3=2'b11;assignstate=curren
8、t_state;always@(posedgeclk)begincurrent_state<=next_state;endalways@(current_state