📄 pipeid.v
字号:
end if (iir[23]) rs2<= iir[11:0]; else rs2<= -iir[11:0]; rsf[1] <=0; rsf[2]<=0; rs2op <=`SFROR; rs2sf <=0; rs2r<=0; rs2sfr<=0; sbit <=0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCLSREG: begin rda <= iir[15:12]; if (iir[20]) begin op <= `LD; rdatar<=0; rsf[3]<=0; rdata<= 0; end else begin op <= `ST; if (armrf.writealloc[iir[15:12]]) begin rdatar <= armrf.reqNaddr[iir[15:12]]; armrf.req[armrf.reqNaddr[iir[15:12]]] <= armrf.req[armrf.reqNaddr[iir[15:12]]] +1; rsf[3]<=1; rdata<=0; end else begin rdatar<=0; rsf[3] <=0; rdata<= armrf.regs[iir[15:12]]; end end opt <= iopt; if (armrf.writealloc[iir[19:16]]) begin rs1r <= armrf.reqNaddr[iir[19:16]]; #1 armrf.req[armrf.reqNaddr[iir[19:16]]] <= armrf.req[armrf.reqNaddr[iir[19:16]]] +1; rsf[0] <=1; rs1 <=0; end else begin rs1r<=0; rsf[0]<=0; rs1<= armrf.regs[iir[19:16]]; end if (armrf.writealloc[iir[3:0]]) begin rs2r <= armrf.reqNaddr[iir[3:0]]; rsf[1] <=1; rs2 <=0; #1 armrf.req[armrf.reqNaddr[iir[3:0]]] <= armrf.req[armrf.reqNaddr[iir[3:0]]] +1; end else begin rs2r<=0; rsf[1] <=0; rs2<= armrf.regs[iir[3:0]]; end rsf[2] <=0; rs2<= iir[11:0]; rs2op <=decshift(iir[6:5]); rs2sf <=iir[11:7]; rs2sfr<=0; sbit <=0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCDPIMM: begin rda <= iir[15:12]; op <= getopcode(iir[24:21]); opt <= iopt; if (armrf.writealloc[iir[19:16]]) begin rs1r <= armrf.reqNaddr[iir[19:16]]; armrf.req[armrf.reqNaddr[iir[19:16]]] <= armrf.req[armrf.reqNaddr[iir[19:16]]] +1; rsf[0] <=1; rs1 <=0; end else begin rs1r<=0; rsf[0]<=0; rs1<= armrf.regs[iir[19:16]]; end rs2<= iir[7:0]; rs2op <=`SFROR; rs2sf <=iir[11:8]; rs2r<=0; rs2sfr<=0; sbit <=iir[20]; if (iir[20]) armrf.cpsrws<= 1; rdatar<=0; rsf[3]<=0; rdata<= 0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCDPIMMS: begin rda <= iir[15:12]; op <= getopcode(iir[24:21]); opt <= iopt; if (armrf.writealloc[iir[19:16]]) begin rs1r <= armrf.reqNaddr[iir[19:16]]; armrf.req[armrf.reqNaddr[iir[19:16]]] <= armrf.req[armrf.reqNaddr[iir[19:16]]] +1; rsf[0] <=1; rs1 <=0; end else begin rs1r<=0; rsf[0]<=0; rs1<= armrf.regs[iir[19:16]]; end if (armrf.writealloc[iir[3:0]]) begin rs2r <= armrf.reqNaddr[iir[3:0]]; rsf[1] <=1; rs2 <=0; #1 armrf.req[armrf.reqNaddr[iir[3:0]]] <= armrf.req[armrf.reqNaddr[iir[3:0]]] +1; end else begin rs2r<=0; rsf[1]<=0; rs2<= armrf.regs[iir[3:0]]; end rs2op <=decshift(iir[6:5]); rs2sf <=iir[11:7]; rs2sfr<=0; sbit <=iir[20]; if (iir[20]) armrf.cpsrws<= 1; rdatar<=0; rsf[3]<=0; rdata<= 0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCDPREGS: begin rda <= iir[15:12]; op <= getopcode(iir[24:21]); opt <= iopt; if (armrf.writealloc[iir[19:16]]) begin rs1r <= armrf.reqNaddr[iir[19:16]]; armrf.req[armrf.reqNaddr[iir[19:16]]] <= armrf.req[armrf.reqNaddr[iir[19:16]]] +1; rsf[0] <=1; rs1 <=0; end else begin rs1r<=0; rsf[0]<=0; rs1<= armrf.regs[iir[19:16]]; end if (armrf.writealloc[iir[3:0]]) begin rs2r <= armrf.reqNaddr[iir[3:0]]; rsf[1] <=1; rs2 <=0; #1 armrf.req[armrf.reqNaddr[iir[3:0]]] <= armrf.req[armrf.reqNaddr[iir[3:0]]] +1; end else begin rs2r<=0; rsf[1]<=0; rs2<= armrf.regs[iir[3:0]]; end if (armrf.writealloc[iir[11:8]]) begin rs2sfr <= armrf.reqNaddr[iir[11:8]]; rsf[2] <=1; rs2sf <=0; #2 armrf.req[armrf.reqNaddr[iir[11:8]]] <= armrf.req[armrf.reqNaddr[iir[11:8]]] +1; end else begin rs2sfr<=0; rsf[2]<=0; rs2sf<= armrf.regs[iir[11:8]]; end rs2op <=decshift(iir[6:5]); sbit <=iir[20]; if (iir[20]) armrf.cpsrws<= 1; rdatar<=0; rsf[3]<=0; rdata<= 0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCMLA: begin rda <= iir[19:16]; op <= `MLA; opt <= iopt; if (armrf.writealloc[iir[15:12]]) begin rs1r <= armrf.reqNaddr[iir[15:12]]; armrf.req[armrf.reqNaddr[iir[15:12]]] <= armrf.req[armrf.reqNaddr[iir[15:12]]] +1; rsf[0] <=1; rs1 <=0; end else begin rs1r<=0; rsf[0]<=0; rs1<= armrf.regs[iir[15:12]]; end if (armrf.writealloc[iir[3:0]]) begin rs2r <= armrf.reqNaddr[iir[3:0]]; rsf[1] <=1; rs2 <=0; #1 armrf.req[armrf.reqNaddr[iir[3:0]]] <= armrf.req[armrf.reqNaddr[iir[3:0]]] +1; end else begin rs2r<=0; rsf[1]<=0; rs2<= armrf.regs[iir[3:0]]; end if (armrf.writealloc[iir[11:8]]) begin rs2sfr <= armrf.reqNaddr[iir[11:8]]; rsf[2] <=1; rs2sf <=0; #1 armrf.req[armrf.reqNaddr[iir[11:8]]] <= armrf.req[armrf.reqNaddr[iir[11:8]]] +1; end else begin rs2sfr<=0; rsf[2]<=0; rs2sf<= armrf.regs[iir[11:8]]; end rs2op <=`SFMUL; sbit <=iir[20]; if (iir[20]) armrf.cpsrws<=1; rdatar<=0; rsf[3]<=0; rdata<= 0; end /////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// `ENCMUL: begin rda <= iir[19:16]; op <= `MUL; opt <= iopt; begin rs1r<=0; rsf[0]<=0; rs1<= 0; end if (armrf.writealloc[iir[3:0]]) begin rs2r <= armrf.reqNaddr[iir[3:0]]; armrf.req[armrf.reqNaddr[iir[3:0]]] <= armrf.req[armrf.reqNaddr[iir[3:0]]] +1; rsf[1] <=1; rs2 <=0; end else begin rs2r<=0; rsf[1]<=0; rs2<= armrf.regs[iir[3:0]]; end if (armrf.writealloc[iir[11:8]]) begin rs2sfr <= armrf.reqNaddr[iir[11:8]]; rsf[2] <=1; rs2sf <=0; #1 armrf.req[armrf.reqNaddr[iir[11:8]]] <= armrf.req[armrf.reqNaddr[iir[11:8]]] +1; end else begin rs2sfr<=0; rsf[2]<=0; rs2sf<= armrf.regs[iir[11:8]]; end rs2op <=`SFMUL; sbit <=iir[20]; if (iir[20]) armrf.cpsrws<= 1; rdatar<=0; rsf[3]<=0; rdata<= 0; end /////////////////////////////////////////////////////////////// default: begin op <= `NOP; opt <= 0; rs1r<= 0; rsf <= 0; rs1 <= 0; rs2 <= 0; rs2op <= 0; rs2sf <=0; rs2r<=0; rs2sfr<=0; sbit <=0; rdatar<=0; rdata<= 0; end endcase end // end ifend // end negedge /*always @(negedge clk)begin #5 if ((istatus == 2'b01) && (!(op ==`NOP)) && (!(op ==`ST))) begin if (!armrf.writealloc[iir[15:12]]) begin armrf.writealloc[iir[15:12]]<=1; begin :break for(j=0;j<`MAXRENAMEREGS;j=j+1) begin if(!armrf.busy[j]) begin armrf.busy[j] <= 1; armrf.valid[j]<= 0; armrf.data[j]<= 0; armrf.regrename[j]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=j; disable break; end end end if(j==`MAXRENAMEREGS) begin $display("Rename ERROR!"); end end end end*/always @(negedge clk)begin #5 if ((istatus == 2'b01) && (!(op ==`NOP)) && (!(op ==`ST))) begin if (armrf.writealloc[iir[15:12]]) begin end else begin armrf.writealloc[iir[15:12]]<=1; if(!armrf.busy[0]) begin armrf.busy[0] <= 1; armrf.valid[0]<= 0; armrf.data[0]<= 0; armrf.regrename[0]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=0; end else begin if(!armrf.busy[1]) begin armrf.busy[1] <= 1; armrf.valid[1]<= 0; armrf.data[1]<= 0; armrf.regrename[1]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=1; end else begin if(!armrf.busy[2]) begin armrf.busy[2] <= 1; armrf.valid[2]<= 0; armrf.data[2]<= 0; armrf.regrename[2]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=2; end else begin if(!armrf.busy[3]) begin armrf.busy[3] <= 1; armrf.valid[3]<= 0; armrf.data[3]<= 0; armrf.regrename[3]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=3; end else begin if(!armrf.busy[4]) begin armrf.busy[4] <= 1; armrf.valid[4]<= 0; armrf.data[4]<= 0; armrf.regrename[4]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=4; end else begin if(!armrf.busy[5]) begin armrf.busy[5] <= 1; armrf.valid[5]<= 0; armrf.data[5]<= 0; armrf.regrename[5]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=5; end else begin if(!armrf.busy[6]) begin armrf.busy[6] <= 1; armrf.valid[6]<= 0; armrf.data[6]<= 0; armrf.regrename[6]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=6; end else begin if(!armrf.busy[7]) begin armrf.busy[7] <= 1; armrf.valid[7]<= 0; armrf.data[7]<= 0; armrf.regrename[7]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=7; end else begin if(!armrf.busy[8]) begin armrf.busy[8] <= 1; armrf.valid[8]<= 0; armrf.data[8]<= 0; armrf.regrename[8]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=8; end else begin if(!armrf.busy[9]) begin armrf.busy[9] <= 1; armrf.valid[9]<= 0; armrf.data[9]<= 0; armrf.regrename[9]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=9; end else begin if(!armrf.busy[10]) begin armrf.busy[10] <= 1; armrf.valid[10]<= 0; armrf.data[10]<= 0; armrf.regrename[10]<= iir[15:12]; armrf.reqNaddr[iir[15:12]] <=10; end else begin $display("Rename ERROR!"); end end end end end end end end end end end end end end endmodule
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -