HDLBits_Serial Reciver and Datapath

本文介绍了一个使用FSM状态机设计的模块,用于处理数据输入、错误检测和完成标志。虽然逻辑功能正常,但在代码中发现out_byte_reg_temp存在latch问题,尽管在每个case中都进行了赋值。寻求解决latch问题的解决方案。
摘要由CSDN通过智能技术生成
module top_module(
    input clk,
    input in,
    input reset,    // Synchronous reset
    output [7:0] out_byte,
    output done
); //
    parameter [1:0] s0 = 2'b00,//idle
    				s1 = 2'b01,//data_in
    				s2 = 2'b11,//error
    				s3 = 2'b10;//done
    reg [1:0] state,next_state;
    reg done_reg;
    reg [7:0] out_byte_reg_temp,out_byte_reg;
    integer  count;
    // Use FSM from Fsm_serial
    always @(*) begin
        case (state) 
            s0: begin
                out_byte_reg_temp<=8'b00000000;
                if(!in)
                    next_state = s1;
                else
                    next_state = s0;
            end
            
            s1:begin
                if(count<8) begin
                    next_state = s1;
                    out_byte_reg_temp[count]<=in ;
                end
                else if((count==8) & in)
                    next_state = s3;
                else
                    next_state = s2;
            end
            
            s2:begin
                out_byte_reg_temp<=8'b00000000;
                if(in)
                    next_state = s0;
                else
                    next_state = s2;
            end
            
            s3:begin
                out_byte_reg_temp<=8'b00000000;
                if(in) 
                    next_state = s0;
                else
                    next_state = s1;
            end
        endcase
    end
    
    always @(posedge clk) begin
        if(reset) begin
           	state<=s0;
            count<=0;

        end
        else begin
            case(state)
                s1:begin count<=count+1;out_byte_reg[count]<=out_byte_reg_temp[count];end
                default:begin count<=0;out_byte_reg<=8'b00000000;end
            endcase
        	state<=next_state;
        end

    end
    // New: Datapath to latch input bits.
	assign out_byte = out_byte_reg;
    assign done = (state==s3);
endmodule

//逻辑功能没问题

//但out_byte_reg_temp中会生成latch。但always@(*)内每个case明明都赋值了,加上default再赋值也还是会生成latch。求大神解答

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值