Advertisement
Guest User

Untitled

a guest
May 18th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. module datapath(input  logic        clk, reset,
  2.                 input  logic        pcen, irwrite, regwrite,
  3.                 input  logic        alusrca, iord, memtoreg, regdst,
  4.                 input  logic [1:0]  alusrcb, pcsrc,
  5.                 input  logic [2:0]  alucontrol,
  6.                 output logic [5:0]  op, funct,
  7.                 output logic        zero,
  8.                 output logic [31:0] adr, writedata,
  9.                 input  logic [31:0] readdata);
  10.   logic [4:0]  writereg;
  11.   logic [31:0] pcnext, pc;
  12.   logic [31:0] instr, data, srca, srcb;
  13.   logic [31:0] a;
  14.   logic [31:0] aluresult, aluout;
  15.   logic [31:0] signimm;   // the sign-extended immediate
  16.   logic [31:0] signimmsh;// the sign-extended immediate shifted left by 2
  17.   logic [31:0] wd3, rd1, rd2;
  18.   assign op = instr[31:26];
  19.   assign funct = instr[5:0];
  20.   flopenr #(32) pcreg(clk, reset, pcen, pcnext, pc);
  21.   mux2    #(32) adrmux(pc, aluout, iord, adr);
  22.   flopenr #(32) instrreg(clk, reset, irwrite, readdata, instr);
  23.   flopr   #(32) datareg(clk, reset, readdata, data);
  24.   mux2    #(5)  regdstmux(instr[20:16], instr[15:11], regdst, writereg);
  25.   mux2    #(32) wdmux(aluout, data, memtoreg, wd3);
  26.   regfile       rf(clk, regwrite, instr[25:21], instr[20:16], writereg, wd3, rd1, rd2);
  27.   signext       se(instr[15:0], signimm);
  28.   sl2           immsh(signimm, signimmsh);
  29.   flopr   #(32) areg(clk, reset, rd1, a);
  30.   flopr   #(32) breg(clk, reset, rd2, writedata);
  31.   mux2    #(32) srcamux(pc, a, alusrca, srca);
  32.   mux4    #(32) srcbmux(writedata, 32'b100, signimm, signimmsh, alusrcb, srcb);
  33.   alu           alu(srca, srcb, alucontrol, aluresult, zero);
  34.   flopr   #(32) alureg(clk, reset, aluresult, aluout);
  35.   mux3    #(32) pcmux(aluresult, aluout, {pc[31:28], instr[25:0], 2'b00}, pcsrc, pcnext);
  36. endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement