R型+I型+J型指令

ori、andi、xori

零扩展

`Inst_ori:
    begin
        op=`Or;
        regaRead=`Valid;
        regbRead=`Invalid;
        regcWrite=`Valid;
        regaAddr=inst[25:21];
        regbAddr=`Zero;
        regcAddr=`inst[20:16];
        imm={16'h0,inst[15:0]};
    end

addi、subi

符号扩展

`Inst_addi:
    begin
        op=`Add;
        regaRead=`Valid;
        regbRead=`Invalid;
        regcWrite=`Valid;
        regaAddr=`inst[25:21];
        regbAddr=`Zero;
        regcAddr=`inst[20:16];
        imm={{16{inst[15]}},inst[15:0]};
    end

lui

`Inst_lui:
    begin
        op=`Lui;
        regaRead=`Invalid;
        regbRead=`Invalid;
        regcWrite=`Valid;
        regaAddr=`Zero;
        regbAddr=`Zero;
        regcAddr=inst[20:16];
        imm={inst[15:0],16'h0};
    end

wire[5:0] func=inst[5:0];

`Inst_r:

        case(func)

                ……

        endcase

and、or、xor、add、sub

`Inst_add:
    begin
        op=`Add;
        regaRead=`Valid;
        regbRead=`Valid;
        regcWrite=`Valid;
        regaAddr=inst[25:21];
        regbAddr=inst[20:16];
        regcAddr=inst[15:11]'
        imm=`Zero;
    end

sll、srl、sra

`Inst_sra:
    begin
        op=`Sra;
        regaRead=`Invalid;
        regbRead=`Valid;
        regcWrite=`Valid;
        regaAddr=`Zero;
        regbAddr=inst[20:16];
        regcAddr=inst[15:11];
        imm={27'h0,inst[10:6]};
    end

wire[31:0] npc=pc+4;

jr

rs-->pc

`Inst_jr:
    begin
        op=`Jr;
        regaRead=`Valid;
        regbRead=`Invalid;
        regcWrite=`Invalid;
        regaAddr=inst[25:21];
        regbAddr=`Zero;
        regcAddr=`Zero;
        jAddr=regaData;
        jCe=`Valid;
        imm=`Zero;
    end

j

jaddr-->pc

`Inst_j:
    begin
        op=`J;
        regaRead=`Invalid;
        regbRead=`Invalid;
        regcWrite=`Invalid;
        regaAddr=`Zero;
        regbAddr=`Zero;
        regcAddr=`Zero;
        jAddr={npc[31:28],inst[25:0],2'b00};
        jCe=`Valid;
        imm=`Zero;
    end

jal

npc-->r31

jaddr-->pc

`Inst_jal:
    begin
        op=`Jal;
        regaRead=`Invalid;
        regbRead=`Invalid;
        regcWrite=`Valid;
        regaAddr=`Zero;
        regbAddr=`Zero;
        regcAddr=5'b11111;
        jAddr={npc[31:28],inst[25:0],2'b00};
        jCe=`Valid;
        imm=npc;
    end

`Inst_beq:
    begin
        op=`Beq;
        regaRead=`Valid;
        regbRead=`Valid;
        regcWrite=`Invalid;
        regaAddr=inst[25:21];
        regbAddr=inst[20:16];
        regcAddr=`Zero;
        jAddr=npc+{{14{inst[15]}},inst[15:0],2'b00};
        jCe=(regaData==regbData)?`Valid:`Invalid;
        imm=`Zero;
    end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值