younger955 2024-01-07 19:26 采纳率: 100%
浏览 15
已结题

关于#HDLBits#的问题,如何解决?(相关搜索:verilog代码)

HDLBits中的一道题目
假设这个状态机使用单次编码,其中状态[0]到状态[9]分别对应状态 S0 到 S9。除非另有说明,否则输出均为零

img

我的verilog代码是


```c
odule top_module(
    input in,
    input [9:0] state,
    output [9:0] next_state,
    output out1,
    output out2);
    
    parameter S0=10'b0000000001,
              S1=10'b0000000010,
              S2=10'b0000000100,
              S3=10'b0000001000,
              S4=10'b0000010000,
              S5=10'b0000100000,
              S6=10'b0001000000,
                 S7=10'b0010000000,
              S8=10'b0100000000,
              S9=10'b1000000000;
    
    always@(*)begin
        next_state=S0;
        case(state)
            S0:begin
                if(in)
                    next_state=S1;
                else
                    next_state=S0;
            end
            S1:begin
                if(in)
                    next_state=S2;
                else
                    next_state=S0;
            end
            S2:begin
                if(in)
                    next_state=S3;
                else
                    next_state=S0;
            end
            S3:begin
                if(in)
                    next_state=S4;
                else
                    next_state=S0;
            end
            S4:begin
                if(in)
                    next_state=S5;
                else
                    next_state=S0;
            end
            S5:begin
                if(in)
                    next_state=S6;
                else
                    next_state=S8;
            end
            S6:begin
                if(in)
                    next_state=S7;
                else
                    next_state=S9;
            end
            S7:begin
                if(in)
                    next_state=S7;
                else
                    next_state=S0;
            end
            S8:begin
                if(in)
                    next_state=S1;
                else
                    next_state=S0;
            end
            S9:begin
                if(in)
                    next_state=S1;
                else
                    next_state=S0;
            end
        endcase
    end
    
     
    always@(*)begin
        
            case(state)
                S7:begin
                    out1<=0;
                    out2<=1;
                end
                S8:begin
                    out1<=1;
                    out2<=0;
                end
                S9:begin
                    out1<=1;
                    out2<=1;
                end
                default:begin
                    out1<=0;
                    out2<=0;
                end
            endcase
    
    end
       
endmodule

然后报错是

img

请教各位到底是什么原因导致的

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2024-01-08 09:27
    关注
    
    odule top_module(
        input in,
        input [9:0] state,
        output [9:0] next_state,
        output out1,
        output out2);
        
        parameter S0=10'b0000000001,
                  S1=10'b0000000010,
                  S2=10'b0000000100,
                  S3=10'b0000001000,
                  S4=10'b0000010000,
                  S5=10'b0000100000,
                  S6=10'b0001000000,
                  S7=10'b0010000000,
                  S8=10'b0100000000,
                  S9=10'b1000000000;
        
        always@(*)begin
    //        next_state=state;
            case(state)
                S0:begin
                    if(in)
                        next_state<=S1;
                    else
                        next_state<=S0;
                end
                S1:begin
                    if(in)
                        next_state<=S2;
                    else
                        next_state<=S0;
                end
                S2:begin
                    if(in)
                        next_state<=S3;
                    else
                        next_state<=S0;
                end
                S3:begin
                    if(in)
                        next_state<=S4;
                    else
                        next_state<=S0;
                end
                S4:begin
                    if(in)
                        next_state<=S5;
                    else
                        next_state<=S0;
                end
                S5:begin
                    if(in)
                        next_state<=S6;
                    else
                        next_state<=S8;
                end
                S6:begin
                    if(in)
                        next_state<=S7;
                    else
                        next_state<=S9;
                end
                S7:begin
                    if(in)
                        next_state<=S7;
                    else
                        next_state<=S0;
                end
                S8:begin
                    if(in)
                        next_state<=S1;
                    else
                        next_state<=S0;
                end
                S9:begin
                    if(in)
                        next_state<=S1;
                    else
                        next_state<=S0;
                end
                default:begin
                        next_state<=state;
                end
            endcase
        end
        
         
        always@(*)begin
            
                case(state)
                    S7:begin
                        out1<=0;
                        out2<=1;
                    end
                    S8:begin
                        out1<=1;
                        out2<=0;
                    end
                    S9:begin
                        out1<=1;
                        out2<=1;
                    end
                    default:begin
                        out1<=0;
                        out2<=0;
                    end
                endcase
        
        end
           
    endmodule
     
    
    本回答被专家选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月6日
  • 专家已采纳回答 1月29日
  • 创建了问题 1月7日