10028 10166 и 10029 Quartus Error

Привет, я все еще новичок в письменной форме в системе Verilog. Я столкнулся с этими ошибками сегодня. Я знаю, что это значит, но я не мог понять, где ошибка. Было бы хорошо, если бы кто-то здесь мог помочь мне указать, где это.

module control
(
    /* Input and output port declarations */
    input clk,
    /* Datapath controls */
    /* Datapath to control */
    input lc3b_opcode opcode,
    input br_en,
    input bit4,
    input bit5,
    input bit11,
    input logic mem_byte,

    /* Control to datapath */
    output logic load_pc,
    output logic load_ir,
    output logic load_regfile,
    output logic load_mar,
    output logic load_mdr,
    output logic load_cc,
    output logic [1:0] pcmux_sel,
    output logic storemux_sel,
    output logic [1:0] alumux_sel,
    output logic [2:0] regfilemux_sel,
    output logic [1:0] marmux_sel,
    output logic mdrmux_sel,
    output logic [1:0] addr1mux_sel,
    output logic hilomux_sel,
    output lc3b_aluop aluop,

    /* Memory signals */
    input mem_resp,
    output logic mem_read,
    output logic mem_write,
    output lc3b_mem_wmask mem_byte_enable
);

enum int unsigned {
    /* List of states */
    fetch1,
    fetch2,
    fetch3,
    decode,
    s_add,
    s_and,
    s_not,
    s_jmp,
    s_lea,
    s_trap,
    s_ldb,
    s_ldi,
    s_sti,
    s_stb,
    s_jsr,
    trap1,
    trap2,
    br,
    br_taken,
    calc_addr,
    ldr1,
    ldr2,
    ldb1,
    ldb2,
    ldi1,
    ldi2,
    ldi3,
    sti1,
    sti2,
    sti3,
    stb1,
    stb2,
    str1,
    str2,
    jsr1,
    jsr2,
    s_shf
    /* (see Appendix E) */
} state, next_state;

always_comb
begin : state_actions
    /* Default output assignments */
    /* Default assignments */
    load_pc = 1'b0;
    load_ir = 1'b0;
    load_regfile = 1'b0;
    load_mar = 1'b0;
    load_mdr = 1'b0;
    load_cc = 1'b0;
    pcmux_sel = 2'b00;
    storemux_sel = 1'b0;
    alumux_sel = 2'b00;
    regfilemux_sel = 3'b000;
    marmux_sel = 1'b0;
    mdrmux_sel = 1'b0;
    aluop = alu_add;
    mem_read = 1'b0;
    mem_write = 1'b0;
    mem_byte_enable = 2'b11;
    /*(see Appendix E) */
    case(state)
        fetch1: begin
            /* MAR <= PC */
            marmux_sel = 1;
            load_mar = 1;       
            /* PC <= PC + 2 */
            pcmux_sel = 0;
            load_pc = 1;
        end

        fetch2: begin
            /* Read memory */
            mem_read = 1;
            mdrmux_sel = 1;
            load_mdr = 1;
        end

        fetch3: begin
            /* Load IR */
            load_ir = 1;
        end

        decode: /* Do nothing */;
        s_add: begin
            /* DR <= SRA + SRB */
            aluop = alu_add;
            load_regfile = 1;
            regfilemux_sel = 0;
            load_cc = 1;
            if (bit5 == 1)
                alumux_sel = 2'b10;
        end
        s_not: begin
            /* DR <= NOT(SRA) */
            aluop = alu_not;
            load_regfile = 1;
            load_cc = 1;
        end
        s_and: begin
            /* DR <= SRA & SRB */
            aluop = alu_and;
            load_regfile = 1;
            load_cc = 1;
            if (bit5 == 1)
                alumux_sel = 2'b10;
        end     
        s_jmp: begin
            /* PC <= BASE R (SR2) */
            pcmux_sel = 2'b10;
            load_pc = 1;
        end     
        s_jsr: begin
            /* R7 <= PC */
            storemux_sel = 1;
            load_regfile = 1;
            regfilemux_sel = 3'b011; 
        end
        jsr1: begin
            /* PC <= BASE R (SR2) */
            pcmux_sel = 2'b10;
            load_pc = 1;
        end
        jsr2: begin
            /* PC = PC + offset11 */    
            regfilemux_sel = 3'b100;
         pcmux_sel = 2'b01;
            load_pc = 1;
        end

        s_lea: begin
            /* DR <= PC + SEXT(PCoffset9)<<1 */
            regfilemux_sel = 3'b010;
            load_regfile = 1;
            load_cc =1;
        end
        s_trap: begin
            /* MAR <= ZEXT(trapvect8)<<1 */
            addr1mux_sel = 0;
            marmux_sel = 2'b10;
            load_mar = 1;
        end
        trap1: begin
            /* MDR <= M(MAR) */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;
            /* R7 <= PC */
            storemux_sel = 1;
            load_regfile = 1;
            regfilemux_sel = 3'b011; 
        end
        trap2: begin
            /* PC <= MDR */
            pcmux_sel = 2'b11;
            load_pc = 1;
        end
        br: /* Do nothing */    ;
        br_taken: begin
            /* PC<= PC + SEXT(IR[8:0] << 1) */
            pcmux_sel = 1;
            load_pc = 1;
        end
        calc_addr: begin
            /* MAR <= SRA + SEXT(IR[5:0] << 1) */
            alumux_sel = 1;
            aluop = alu_add;
            load_mar = 1;
        end     
        ldr1: begin
            /* MDR <= M[MAR] */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;
        end     
        ldr2: begin
            /* DR <= MDR */
            regfilemux_sel = 1;
            load_regfile = 1;
            load_cc = 1;
        end
        s_ldb: begin
            /*  MAR <= SR1 + sext(offset6)*/
            marmux_sel = 2'b11;
            addr1mux_sel = 1;
            load_mar = 1;
        end
        ldb1: begin
            /* MDR <= M[MAR] */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;
        end
        ldb2: begin
            /* DR <= MDR */
            regfilemux_sel = 3'b010;
            if(mem_byte == 0)
                hilomux_sel = 2'b00;        
            else
                hilomux_sel = 2'b01;

            load_regfile = 1;
            load_cc = 1;            
        end

        s_ldi: begin
            /* MDR <= M[MAR] */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;           
        end
        ldi1: begin
            /* MAR <= MDR */
            marmux_sel = 2'b10;
            load_mar = 1;       
        end
        ldi2: begin
            /* MDR <= M[MAR] */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;       
        end
        ldi3: begin
            /* DR <= MDR */
            regfilemux_sel = 1;
            load_regfile = 1;
            load_cc = 1;        
        end
        s_stb: begin
            /* MAR <= SR1 + SEXT(offset6) */
            addr1mux_sel = 1;
            marmux_sel = 2'b11;
            load_mar = 1;       
        end
        stb1: begin
            storemux_sel = 1'b1;
            aluop = alu_act;
            mdrmux_sel = 1'b0;
            load_mdr = 1;
        end     
        stb2: begin
            /* M[MAR] <= MDR */
            if(mem_byte == 0)
                mem_byte_enable = 2'b01;
            else
                mem_byte_enable = 2'b10;
            mem_write = 1;
        end

        s_sti: begin        
            /* MDR <= M[BaseR + sext(offset6)] */
            mdrmux_sel = 1;
            load_mdr = 1;
            mem_read = 1;
        end
        sti1: begin
            /* MAR <= MDR */
            marmux_sel = 2'b10;
            load_mar = 1;
        end
        sti2: begin
            storemux_sel = 1; 
            aluop = alu_pass;
            mdrmux_sel = 0;
            load_mdr = 1;
            mem_read = 1;                    
        end
        sti3: begin
            mem_write = 1;
        end

        str1: begin
            /* MDR <= SR */
            storemux_sel = 1;
            aluop = alu_pass;
            load_mdr = 1;
        end

        str2: begin
            /* M[MAR] <= MDR */
            mem_write = 1;
        end
        default: /* Do nothing */;
    endcase
    /* Actions for each state */
end 

always_comb
begin : next_state_logic
    /* Next state information and conditions (if any)
     * for transitioning between states */
    next_state = state;  
    case(state)
            fetch1: begin 
                next_state = fetch2;
            end
            fetch2: begin
                if(mem_resp == 0)
                    next_state = fetch2;
                else
                    next_state = fetch3;
            end
            fetch3: begin
                next_state = decode;
            end
            decode: begin
                case(opcode)
                    op_add: begin
                        next_state = s_add;
                    end
                    op_and: begin 
                        next_state = s_and;
                    end
                    op_br: begin
                        next_state = br;
                    end
                    op_not: begin
                        next_state = s_not;
                    end
                    op_ldr: begin
                        next_state = calc_addr;
                    end
                    op_ldi :begin
                        next_state = s_ldi;
                    end
                    op_ldb : begin
                        next_state = s_ldb;
                    end
                    op_stb: begin
                        next_state = s_stb;
                    end
                    op_sti: begin
                        next_state = s_sti;
                    end
                    op_str: begin
                        next_state = calc_addr;
                    end
                    op_lea: begin
                        next_state = s_lea;
                    end
                    op_trap: begin
                        next_state = s_trap;
                    end
                    op_jmp: begin
                        next_state = s_jmp;
                    end
                    op_jsr: begin
                        next_state = s_jsr;
                    end
                    op_shf: begin
                        next_state = s_shf;
                    end
                    default: ;/* Do nothing */
                endcase 
            end
            s_add: begin
                next_state = fetch1;
            end
            s_and: begin
                next_state = fetch1;
            end
            s_not: begin
                next_state = fetch1;
            end
            s_trap: begin
                next_state = trap1;
            end
            trap1: begin
            if(mem_resp == 0)
                next_state = trap1;
            else
                next_state = trap2;
            end
            trap2: begin
                next_state = fetch1;
            end
            calc_addr: begin
                if(opcode == op_ldr)
                    next_state = ldr1;
                else
                    next_state = str1;
            end
            ldr1:  begin
                if(mem_resp == 0)
                    next_state = ldr1;                  
                else
                    next_state = ldr2;
            end
            ldr2: begin
                next_state = fetch1;
            end
            s_ldb:begin
                next_state = ldb1;          
            end
            ldb1:begin
                if(mem_resp == 0)
                    next_state = ldb1;                  
                else
                    next_state = ldb2;          
            end
            ldb2:begin
                next_state = fetch1;
            end
            s_ldi: begin
                if(mem_resp == 0)
                    next_state = s_ldi;                 
                else
                    next_state = ldi1;      
            end
            ldi1:begin
                next_state = ldi2;
            end
            ldi2:begin
                if(mem_resp == 0)
                    next_state = ldi2;                  
                else
                    next_state = ldi3;
            end
            ldi3:begin
                next_state = fetch1;
            end

            s_shf:begin
                /* shift */
                load_regfile = 1;
                load_cc = 1;
                alumux_sel = 2'b11;
                regfilemux_sel = 3'b000;

                if(bit5== 1'b0)
                    aluop = alu_srl;
                else if (bit4 == 1'b0)
                    aluop = alu_sll;
                else
                    aluop = alu_sra;
            end     

            s_stb: begin
                next_state = stb1;
            end
            stb1: begin
                next_state = stb2;
            end         
            stb2:begin
                if(mem_resp == 0)
                    next_state = stb2;                  
                else
                    next_state = fetch1;                
            end
            s_sti: begin
                if(mem_resp == 0)
                    next_state = s_sti;                 
                else
                    next_state = sti1;      
            end         
            sti1:begin
                next_state = sti2;
            end
            sti2:begin
                next_state = sti3;
            end
            sti3:begin
                if(mem_resp == 0)
                    next_state = sti3;                  
                else
                    next_state = fetch1;        
            end         

            str1: begin 
                next_state = str2;
            end
            str2: begin
                if(mem_resp == 0)
                    next_state = str2;                  
                else
                    next_state = fetch1;
            end
            br: begin
                if(br_en == 1)
                    next_state = br_taken;
                else
                    next_state = fetch1;
            end
            br_taken: begin 
                next_state = fetch1;
            end
            s_jmp: begin
                next_state = fetch1;
                end
            s_jsr: begin
                if (bit11 == 0)
                    next_state = jsr1;
                else
                    next_state = jsr2;
            end
            jsr1: begin
                next_state = fetch1;
            end
            jsr2: begin
                next_state = fetch1;
            end
            s_lea: begin
                next_state = fetch1;
            end
            s_shf: begin
                next_state = fetch1;
            end
            /*default: begin 

            end*/
        endcase
end 

always_ff @(posedge clk)
begin: next_state_assignment
    /* Assignment of next state on clock edge */
     state <= next_state;
end

endmodule : control

1 ответ

Проблема в s_shf. Это то, что происходит, когда у вас длинный код, и он ослепляет вас.

Другие вопросы по тегам