new_code_vl_44刷题心得

描述

题目描述:   

 

如图所示为两种状态机中的一种,请根据状态转移图写出代码,状态转移线上的0/0等表示的意思是过程中data/flag的值。

要求:

1、 必须使用对应类型的状态机

2、 使用二段式描述方法

注意rst为低电平复位

信号示意图:

波形示意图:

激励描述如下:

输入描述:

输入信号 clk rst data 
类型 wire

输出描述:

输出信号  flag
类型  reg

代码段

`timescale 1ns/1ns
//题目类型为两段式状态机,Moore类型
module fsm2(
	input wire clk  ,
	input wire rst  ,
	input wire data ,
	output reg flag
);

//*************code***********//
//独热码定义5种不同的状态
localparam  S0 = 5'b00001,
            S1 = 5'b00010,
			S2 = 5'b00100,
			S3 = 5'b01000,
			S4 = 5'b10000;
			
//reg define 定义初始状态和次态

reg  [4:0]    cur_state ; 
reg  [4:0]    next_state ; 


			

//*************code***********//
//***************************根据同步时序描述状态转移
always @(posedge clk or negedge rst) begin 
    if (!rst) begin 
	   cur_state <= S0 ; //初始化状态是S0 
	end
	else begin 
	   cur_state <= next_state ; //然后描述状态转移
	end
end

//****************************组合逻辑判断状态转移条件,并且描述状态转移结果并且进行输出
always @ (*) begin 
      case (cur_state ) 
	  
	  S0 :  begin 
	        flag <= 1'b0 ;
		    if (data)  begin
			    next_state <= S1; 
			end
			else begin 
			    next_state <= S0 ;
			end
			end
		S1 :  begin 
	        flag <= 1'b0 ;
		    if (data)  begin
			    next_state <= S2; 
			end
			else begin 
			    next_state <= S1 ;
			end
			end	
	    S2 :  begin 
	        flag <= 1'b0 ;
		    if (data)  begin
			    next_state <= S3; 
			end
			else begin 
			    next_state <= S2 ;
			end
			end	
		S3 :  begin 
	        flag <= 1'b0 ;
		    if (data)  begin
			    next_state <= S4; 
			end
			else begin 
			    next_state <= S3 ;
			end
			end	
	     S4 :  begin 
	        flag <= 1'b1 ;
		    if (data)  begin
			    next_state <= S1; 
			end
			else begin 
			    next_state <= S0 ;
			end
			end	
		
	     default :  begin 
	        flag <= 1'b0 ;
		    if (data)  begin
			    next_state <= S1; 
			end
			else begin 
			    next_state <= S0 ;
			end
			end
		endcase
end
endmodule

3解题心得

解题思路: 我先观察s4的状态转换,首先我们可以看出s4的状态转换对应两个状态,当输入1或者输入0的时候对应这不同的结果输出,所以看出输出与输入信号并没有直接的关系,只和当前的状态有关,所以应该设计一个Moore类型的状态机来进行状态转换。题目要求我们用两段式状态机来描述逻辑,第一段应该用时序逻辑电路用来描述状态转移,第二段用组合逻辑电路设计用于判断逻辑转移条件,并且描述状态转移的结果,并且进行结果输出;同时采用独热码设计让设计层次更加简单明了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值