You are on page 1of 34

Lab 1 Cu trc my tnh

MIPS_Register File

LAB 1 : MIPS 32 by 32 REGISTER FILE


1. Yu cu thit k:
- Thit k 1 b MIPS 32 by 32 Register dng Verilog HDL.
- Yu cu:
+ Dng cu trc lnh structural
+ Cc cng logic khng c qu 4 ng vo
+ Delay 50ps
2. Gii thiu file thanh ghi:
Cu to 1 file thanh ghi bao gm:
+ 32 thanh ghi 32 bit, ring thanh ghi u tin( Reg0) th lun mang gi tr 0.
+ C 2 ng vo chn thanh ghi c (Read Register 1 v Read Register 2) v 2 ng
ra d liu (Read Data 1 v Dead Data 2) khi c file thanh ghi
+ C 1 ng vo chn thanh ghi ghi d liu (Write register) , 1 ng vo cho php
ghi (RegWrite) v1 ng vo d liu (Write Data) khi ghi vo file thanh ghi.

S khi:

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

S chi tit:

3. Ni dung thit k:
- T s chi tit cho thy, thit k 1 file thanh ghi yu cu:
+ 32 thanh ghi c cu to t cc DFF
+ 1 b gii m 5:12 iu khin ghi d liu
+ 2 b multiplexor 32x32 to 32

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

3.1 Thit k b gii m 5:12


- Yu cu ca khi mch cn thit k l xut ra tn hiu iu khin ghi d liu
vo cc thanh ghi, vi u vo l 5 bits chn thanh ghi, v tn hiu iu khin ghi
RegWrite.
- thit k b gii m 5:12, ta xy dng t cc b gii m 2:4 v 3:8
a) Mch gii m 2:4:

Code Verilog:
/*bo giai ma 2:4 */
module decoder2to4(out,in,en);
output [3:0]out;
input [1:0]in;
input en;
wire [1:0]outnot;//ngo ra cong not
not #50 not1(outnot[0],in[0]);
not
#50 not2(outnot[1],in[1]);
and #50 and1(out[0],en,outnot[0],outnot[1]);
and
#50 and2(out[1],en,in[0],outnot[1]);
and
#50 and3(out[2],en,outnot[0],in[1]);
and
#50 and4(out[3],en,in[0],in[1]);
endmodule

Nhm 14A 08DT1

Lab 1 Cu trc my tnh


-

MIPS_Register File

Kt qu m phng trn Quartus:

b) Mch gii m 3:8

Code Verilog
/* bo giai ma 3:8 */
module decoder3to8(out,in,en);
output [7:0]out;
input [2:0]in;
input en;
wire [2:0]outnot;

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

not #50 not1(outnot[0],in[0]);


not
#50 not2(outnot[1],in[1]);
not
#50 not3(outnot[2],in[2]);
and #50 and1(out[0],en,outnot[0],outnot[1],outnot[2]);
and
#50 and2(out[1],en,in[0],outnot[1],outnot[2]);
and
#50 and3(out[2],en,outnot[0],in[1],outnot[2]);
and
#50 and4(out[3],en,in[0],in[1],outnot[2]);
and
#50 and5(out[4],en,outnot[0],outnot[1],in[2]);
and
#50 and6(out[5],en,in[0],outnot[1],in[2]);
and
#50 and7(out[6],en,outnot[0],in[1],in[2]);
and
#50 and8(out[7],en,in[0],in[1],in[2]);
endmodule

Kt qu m phng trn Quartus:

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

c) Mch gii m 5:32:

Ghp cc b gii m 2:4 v 3:8

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

Code Verilog:
/* bo giai ma 5:32 */
module decoder5to32(out, writereg, regwrite);
output [31:0]out;// 32 bit dau ra, 1 bit cao, cac bit con lai
thap
input [4:0]writereg;//5 bit ngo vao Write register, chon thanh
ghi ghi du lieu
input regwrite;// ngo vao cho phep ghi
wire [3:0]todec3_8;//ngo ra bo giai ma 2:4, ngo vao enable cac bo
giai ma 3:8
decoder2to4 decode1(todec3_8,writereg[4:3],regwrite);//dau vao la
bit thu 1 va thu 2
decoder3to8 decode2(out[7:0],writereg[2:0],todec3_8[0]);
decoder3to8 decode3(out[15:8],writereg[2:0],todec3_8[1]);
decoder3to8 decode4(out[23:16],writereg[2:0],todec3_8[2]);
decoder3to8 decode5(out[31:24],writereg[2:0],todec3_8[3]);
endmodule

Kt qu m phng trn Quartus:

Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

3.2 Thit k 1 thanh ghi 32 bit:


- Theo cu trc ca file thanh ghi ta thit k th n bao gm 32 thanh ghi, m
mi thanh ghi l gm 32 bit, mi bit li c to bi 1 DFF. Do ta phi tri qua cc
bc sau:
+ Xy dng 1 bit t DFF.
+ Xy dng 1 thanh ghi 32 bit t 32 DFF.

a) Xy dng 1 bit t DFF:

Bng trng thi:

Dn

Qn+1

0
1

0
1

Phng trnh logic ca DFF : Qn+1 = Dn

Code Verilog thc hin 1 DFF:


module D_FF (q, d, reset, clk);
output q;
input d, reset, clk;
reg q; // Indicate that q is stateholding
always @(posedge clk or posedge reset)
if (reset)
q = 0;
// On reset, set to 0
else
q = d; // Otherwise out = d
endmodule

Nhm 14A 08DT1

Lab 1 Cu trc my tnh


-

MIPS_Register File

T DFF, ta xy dng 1 bit thanh ghi vi 2 ng vo Enable v WriteData:

Code Verilog thc hin 1 bit thanh ghi:


/*Tao 1 bit thanh ghi tu 1 D_Flipflop*/
module Regbit(BitOut, DataIn,En, clk,reset);
output BitOut; // 1 bit cua thanh ghi
input DataIn, En;
input clk,reset;
wire d,f1, f2; // ngo vao D Flip-Flop
// bo multiplexor 2to1 dieu khien ghi 1 bit
and #50 and1(f1, BitOut, (~En));
and #50 and2(f2, DataIn, En);
or #50 or1(d, f1, f2);
D_FF DFF0(BitOut, d, reset, clk);
endmodule

Kt qu m phng trn Quartus:

b) Xy dng mt thanh ghi 32 bit:


- trn ta thc hin to 1 bit ca thanh ghi, do ch cn dng module trn to ra
32 i tng ri ghp li ta c 1 thanh ghi 32 bits:
Nhm 14A 08DT1

Lab 1 Cu trc my tnh

MIPS_Register File

Code Verilog:
/************Thiet ke 1 thanh ghi 32 bit****************/
module Reg32(WriteEnable,
WriteData,d_out0,d_out1,d_out2,d_out3,d_out4,
d_out5,d_out6,d_out7,d_out8,d_out9,
d_out10,d_out11,d_out12,d_out13,d_out14,
d_out15,d_out16,d_out17,d_out18,d_out19,
d_out20,d_out21,d_out22,d_out23,d_out24,
d_out25,d_out26,d_out27,d_out28,d_out29,d_out30,d_out31,clk);
input WriteEnable, clk;
input [31:0] WriteData;
output
d_out0,d_out1,d_out2,d_out3,d_out4,
d_out5,d_out6,d_out7,d_out8,d_out9,
d_out10,d_out11,d_out12,d_out13,d_out14,
d_out15,d_out16,d_out17,d_out18,d_out19,
d_out20,d_out21,d_out22,d_out23,d_out24,
d_out25,d_out26,d_out27,d_out28,d_out29,d_out30,d_out31;
Regbit Bit0 (d_out0,WriteData[0],WriteEnable,clk);

Nhm 14A 08DT1

10

Lab 1 Cu trc my tnh


Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit
Regbit

MIPS_Register File

Bit1 (d_out1,WriteData[1],WriteEnable,clk);
Bit2 (d_out2,WriteData[2],WriteEnable,clk);
Bit3 (d_out3,WriteData[3],WriteEnable,clk);
Bit4 (d_out4,WriteData[4],WriteEnable,clk);
Bit5 (d_out5,WriteData[5],WriteEnable,clk);
Bit6 (d_out6,WriteData[6],WriteEnable,clk);
Bit7 (d_out7,WriteData[7],WriteEnable,clk);
Bit8 (d_out8,WriteData[8],WriteEnable,clk);
Bit9 (d_out9,WriteData[9],WriteEnable,clk);
Bit10 (d_out10,WriteData[10],WriteEnable,clk);
Bit11 (d_out11,WriteData[11],WriteEnable,clk);
Bit12 (d_out12,WriteData[12],WriteEnable,clk);
Bit13 (d_out13,WriteData[13],WriteEnable,clk);
Bit14 (d_out14,WriteData[14],WriteEnable,clk);
Bit15 (d_out15,WriteData[15],WriteEnable,clk);
Bit16 (d_out16,WriteData[16],WriteEnable,clk);
Bit17 (d_out17,WriteData[17],WriteEnable,clk);
Bit18 (d_out18,WriteData[18],WriteEnable,clk);
Bit19 (d_out19,WriteData[19],WriteEnable,clk);
Bit20 (d_out20,WriteData[20],WriteEnable,clk);
Bit21 (d_out21,WriteData[21],WriteEnable,clk);
Bit22 (d_out22,WriteData[22],WriteEnable,clk);
Bit23 (d_out23,WriteData[23],WriteEnable,clk);
Bit24 (d_out24,WriteData[24],WriteEnable,clk);
Bit25 (d_out25,WriteData[25],WriteEnable,clk);
Bit26 (d_out26,WriteData[26],WriteEnable,clk);
Bit27 (d_out27,WriteData[27],WriteEnable,clk);
Bit28 (d_out28,WriteData[28],WriteEnable,clk);
Bit29 (d_out29,WriteData[29],WriteEnable,clk);
Bit30 (d_out30,WriteData[30],WriteEnable,clk);
Bit31 (d_out31,WriteData[31],WriteEnable,clk);

endmodule

Kt qu m phng trn Quartus

Nhm 14A 08DT1

11

Lab 1 Cu trc my tnh

Nhm 14A 08DT1

MIPS_Register File

12

Lab 1 Cu trc my tnh

MIPS_Register File

3.3 Thit k b multiplexor 32x32 to 32:


- B Multiplexor 32x32 to 32 c 32 ng d liu u vo, mi ng d liu c 32
bits. D liu ng ra ReadData c 32 bits bng mt trong s cc ng vo. 5 bits ca
ReadRegister s quyt nh ng d liu u vo no s c truyn n u ra.

thit k b Multiplexor 32x32 to 32, u tin ta thit k b Multiplexor 32


to 1

a) B multiplexor 32 to 1:
- B mux 32 to 1 c xy dng t cc b mux 8 to 1, m mi b mux 8 to 1
c xy dng t cc b mux 2 to 1 v 4 to 1:

Nhm 14A 08DT1

13

Lab 1 Cu trc my tnh

Nhm 14A 08DT1

MIPS_Register File

14

Lab 1 Cu trc my tnh

MIPS_Register File

Code Verilog:
//thiet ke bo mux2_1
module mux2_1(in,sel,out);
input [1:0]in;
input sel;
output out;
wire notsel;
not#50 notsel0(notsel,sel);
wire [1:0]f;
and#50 and0(f[0],notsel,in[0]);
and#50 and1(f[1],sel,in[1]);
or#50 or0(out,f[0],f[1]);
endmodule

//thiet ke bo mux4_1
module mux4_1(in,sel,out);
input
[3:0]in;
input
[1:0]sel;
output out;
wire [1:0]notsel;
wire [3:0]f;
not#50 notsel0(notsel[0],sel[0]);
not#50 notsel1(notsel[1],sel[1]);
and#50 and0(f[0],in[0],notsel[0],notsel[1]);
and#50 and1(f[1],in[1],notsel[0],sel[1]);
and#50 and2(f[2],in[2],sel[0],notsel[1]);
and#50 and3(f[3],in[3],sel[0],sel[1]);
or#50
or0(out,f[0],f[1],f[2],f[3]);
endmodule

//thiet ke mux8_1 gom 2mux4_1 va 1mux2_1


module mux8_1(in,sel,out);
input [7:0]in;
input [2:0]sel;
output out;
wire [1:0]f;
mux4_1 mux0(in[3:0],sel[1:0],f[0]);
mux4_1 mux1(in[7:4],sel[1:0],f[1]);
mux2_1 mux2(f[1:0],sel[2],out);
endmodule
//thiet ke mux32_1 gom 4mux8_1,1mux4_1
module mux32_1(in,sel,out);
input [4:0]sel;
input [31:0]in;
output out;

Nhm 14A 08DT1

15

Lab 1 Cu trc my tnh

MIPS_Register File

wire [3:0]f;
mux8_1 mux0(in[7:0],sel[2:0],f[0]);
mux8_1 mux1(in[15:8],sel[2:0],f[1]);
mux8_1 mux2(in[23:16],sel[2:0],f[2]);
mux8_1 mux3(in[31:24],sel[2:0],f[3]);
mux4_1 mux4(f[3:0],sel[4:3],out);
endmodule

M phng trn Quartus:

Nhm 14A 08DT1

16

Lab 1 Cu trc my tnh

MIPS_Register File

b) B multiplexor 32x32 to 32:


- Sau khi thc hin b Multiplexor 32 to 1 , ta dng 32 b MUX (Multiplexor) 32
to 1 thc hin b MUX 32x32 to 32 . Cch thc hin nh sau:
- Ta xem 32 thanh ghi 32 bit nh mt mng 2 chiu 32x32 bit:
A[0]
A[1]
.
A[30]
A[31]
Reg0
Reg1

Reg30
Reg31
- Gi s ta c tn hiu iu khin chn thanh ghi ReadRegister = 5b00001 , tc
xut d liu thanh ghi s 1 ra ng ra. Ta mun a 32 bits ca Reg1 ra th khng th
cho chng cng vo 1 b MUX 32 to 1 , thay vo ta dng 32 b MUX 32 to1 , u
vo mi b MUX 32 to1 l 1 ct bit ca bng trn: A[0], A[1] A[31], tn hiu iu
khin vn dng chung. Qua mi b MUX 32 to 1 s thu c 1 bit ca Reg1, c 32 b
MUX nh vy th s a c ton b Reg1 ra ng ra.
Code Verilog:
module mux32_32(reg0,reg1,reg2,reg3,reg4,reg5,reg6,reg7,reg8,
reg9,reg10,reg11,reg12,reg13,reg14,reg15,reg16,reg17,reg18,
reg19,reg20,reg21,reg22,reg23,reg24,reg25,reg26,reg27,reg28,
reg29,
reg30,reg31,sel,readata);
input [31:0]reg0,reg1,reg2,reg3,reg4,reg5,reg6,reg7,reg8,
reg9,reg10,reg11,reg12,reg13,reg14,reg15,reg16,reg17,reg18,
reg19,reg20,reg21,reg22,reg23,reg24,reg25,reg26,reg27,reg28,
reg29,
reg30,reg31;
input [4:0]sel;
output [31:0]readata;
mux32_1 r0(reg0,sel,readata[0]);
mux32_1 r1(reg1,sel,readata[1]);
mux32_1 r2(reg2,sel,readata[2]);
mux32_1 r3(reg3,sel,readata[3]);
mux32_1 r4(reg4,sel,readata[4]);
mux32_1 r5(reg5,sel,readata[5]);
mux32_1 r6(reg6,sel,readata[6]);
mux32_1 r7(reg7,sel,readata[7]);
mux32_1 r8(reg8,sel,readata[8]);

Nhm 14A 08DT1

17

Lab 1 Cu trc my tnh

MIPS_Register File

mux32_1 r9(reg9,sel,readata[9]);
mux32_1 r10(reg10,sel,readata[10]);
mux32_1 r11(reg11,sel,readata[11]);
mux32_1 r12(reg12,sel,readata[12]);
mux32_1 r13(reg13,sel,readata[13]);
mux32_1 r14(reg14,sel,readata[14]);
mux32_1 r15(reg15,sel,readata[15]);
mux32_1 r16(reg16,sel,readata[16]);
mux32_1 r17(reg17,sel,readata[17]);
mux32_1 r18(reg18,sel,readata[18]);
mux32_1 r19(reg19,sel,readata[19]);
mux32_1 r20(reg20,sel,readata[20]);
mux32_1 r21(reg21,sel,readata[21]);
mux32_1 r22(reg22,sel,readata[22]);
mux32_1 r23(reg23,sel,readata[23]);
mux32_1 r24(reg24,sel,readata[24]);
mux32_1 r25(reg25,sel,readata[25]);
mux32_1 r26(reg26,sel,readata[26]);
mux32_1 r27(reg27,sel,readata[27]);
mux32_1 r28(reg28,sel,readata[28]);
mux32_1 r29(reg29,sel,readata[29]);
mux32_1 r30(reg30,sel,readata[30]);
mux32_1 r31(reg31,sel,readata[31]);
endmodule

-Kt qu m phng trn Quartus:

Nhm 14A 08DT1

18

Lab 1 Cu trc my tnh

Nhm 14A 08DT1

MIPS_Register File

19

Lab 1 Cu trc my tnh

MIPS_Register File

3.4 Xy dng b 32 thanh ghi 32 bit:


- Kt hp cc module vit cc phn trc li, ta xy dng c 1 b thanh
ghi vi cu trc, chc nng nh gii thiu
Code Verilog:
/*==========================FILE REGISTER==================*/
/*thiet ke 32 thanh ghi*/
module
regfile(ReadData1,ReadData2,WriteData,ReadRegister1,ReadRegister2,Wr
iteRegister,RegWrite,clk);
output
[31:0]ReadData1,ReadData2;
input [31:0]WriteData;
input
[4:0]WriteRegister,ReadRegister1,ReadRegister2;
input
RegWrite,clk;
wire [31:0]
W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W18,W1
9,W20,W21,W22,W23,W24,W25,W26,W27,W28,W29,W30,W31;
// Wn: tat ca bit thu n cua 32 thanh ghi
wire [31:0] decode_out;
wire [31:0]
WREG0,WREG1,WREG2,WREG3,WREG4,WREG5,WREG6,WREG7,WREG8,WREG9,WREG10,W
REG11,WREG12,WREG13,WREG14,WREG15,WREG16,WREG17,WREG18,
WREG19,WREG20,WREG21,WREG22,WREG23,WREG24,WREG25,WREG26,WREG27
,WREG28,WREG29,WREG30,WREG31;
// WREG : thanh ghi
assign
WREG0={W31[0],W30[0],W29[0],W28[0],W27[0],W26[0],W25[0],W24[0],W23[0
],W22[0],W21[0],W20[0],W19[0],W18[0],W17[0],W16[0],W15[0],W14[0],
W13[0],W12[0],W11[0],W10[0],W9[0],W8[0],W7[0],W6[0],W5[0],W4[0
],W3[0],W2[0],W1[0],W0[0]};
assign
WREG1={W31[1],W30[1],W29[1],W28[1],W27[1],W26[1],W25[1],W24[1],W23[1
],W22[1],W21[1],W20[1],W19[1],W18[1],W17[1],W16[1],W15[1],W14[1],
W13[1],W12[1],W11[1],W10[1],W9[1],W8[1],W7[1],W6[1],W5[1],W4[1],W3[1
],W2[1],W1[1],W0[1]};
assign
WREG2={W31[2],W30[2],W29[2],W28[2],W27[2],W26[2],W25[2],W24[2],W23[2
],W22[2],W21[2],W20[2],W19[2],W18[2],W17[2],W16[2],W15[2],W14[2],

Nhm 14A 08DT1

20

Lab 1 Cu trc my tnh

MIPS_Register File

W13[2],W12[2],W11[2],W10[2],W9[2],W8[2],W7[2],W6[2],W5[2],W4[2
],W3[2],W2[2],W1[2],W0[2]};
assign
WREG3={W31[3],W30[3],W29[3],W28[3],W27[3],W26[3],W25[3],W24[3],W23[3
],W22[3],W21[3],W20[3],W19[3],W18[3],W17[3],W16[3],W15[3],W14[3],
W13[3],W12[3],W11[3],W10[3],W9[3],W8[3],W7[3],W6[3],W5[3],W4[3
],W3[3],W2[3],W1[3],W0[3]};
assign
WREG4={W31[4],W30[4],W29[4],W28[4],W27[4],W26[4],W25[4],W24[4],W23[4
],W22[4],W21[4],W20[4],W19[4],W18[4],W17[4],W16[4],W15[4],W14[4],
W13[4],W12[4],W11[4],W10[4],W9[4],W8[4],W7[4],W6[4],W5[4],W4[4
],W3[4],W2[4],W1[4],W0[4]};
assign
WREG5={W31[5],W30[5],W29[5],W28[5],W27[5],W26[5],W25[5],W24[5],W23[5
],W22[5],W21[5],W20[5],W19[5],W18[5],W17[5],W16[5],W15[5],W14[5],
W13[5],W12[5],W11[5],W10[5],W9[5],W8[5],W7[5],W6[5],W5[5],W4[5
],W3[5],W2[5],W1[5],W0[5]};
assign
WREG6={W31[6],W30[6],W29[6],W28[6],W27[6],W26[6],W25[6],W24[6],W23[6
],W22[6],W21[6],W20[6],W19[6],W18[6],W17[6],W16[6],W15[6],W14[6],
W13[6],W12[6],W11[6],W10[6],W9[6],W8[6],W7[6],W6[6],W5[6],W4[6
],W3[6],W2[6],W1[6],W0[6]};
assign
WREG7={W31[7],W30[7],W29[7],W28[7],W27[7],W26[7],W25[7],W24[7],W23[7
],W22[7],W21[7],W20[7],W19[7],W18[7],W17[7],W16[7],W15[7],W14[7],
W13[7],W12[7],W11[7],W10[7],W9[7],W8[7],W7[7],W6[7],W5[7],W4[7
],W3[7],W2[7],W1[7],W0[7]};
assign
WREG8={W31[8],W30[8],W29[8],W28[8],W27[8],W26[8],W25[8],W24[8],W23[8
],W22[8],W21[8],W20[8],W19[8],W18[8],W17[8],W16[8],W15[8],W14[8],
W13[8],W12[8],W11[8],W10[8],W9[8],W8[8],W7[8],W6[8],W5[8],W4[8
],W3[8],W2[8],W1[8],W0[8]};

Nhm 14A 08DT1

21

Lab 1 Cu trc my tnh

MIPS_Register File

assign
WREG9={W31[9],W30[9],W29[9],W28[9],W27[9],W26[9],W25[9],W24[9],W23[9
],W22[9],W21[9],W20[9],W19[9],W18[9],W17[9],W16[9],W15[9],W14[9],
W13[9],W12[9],W11[9],W10[9],W9[9],W8[9],W7[9],W6[9],W5[9],W4[9
],W3[9],W2[9],W1[9],W0[9]};
assign
WREG10={W31[10],W30[10],W29[10],W28[10],W27[10],W26[10],W25[10],W24[
10],W23[10],W22[10],W21[10],W20[10],W19[10],W18[10],W17[10],W16[10],
W15[10],W14[10],
W13[10],W12[10],W11[10],W10[10],W9[10],W8[10],W7[10],W6[10],W5
[10],W4[10],W3[10],W2[10],W1[10],W0[10]};
assign
WREG11={W31[11],W30[11],W29[11],W28[11],W27[11],W26[11],W25[11],W24[
11],W23[11],W22[11],W21[11],W20[11],W19[11],W18[11],W17[11],W16[11],
W15[11],W14[11],
W13[11],W12[11],W11[11],W10[11],W9[11],W8[11],W7[11],W6[11],W5
[11],W4[11],W3[11],W2[11],W1[11],W0[11]};
assign
WREG12={W31[12],W30[12],W29[12],W28[12],W27[12],W26[12],W25[12],W24[
12],W23[12],W22[12],W21[12],W20[12],W19[12],W18[12],W17[12],W16[12],
W15[12],W14[12],
W13[12],W12[12],W11[12],W10[12],W9[12],W8[12],W7[12],W6[12],W5
[12],W4[12],W3[12],W2[12],W1[12],W0[12]};
assign
WREG13={W31[13],W30[13],W29[13],W28[13],W27[13],W26[13],W25[13],W24[
13],W23[13],W22[13],W21[13],W20[13],W19[13],W18[13],W17[13],W16[13],
W15[13],W14[13],
W13[13],W12[13],W11[13],W10[13],W9[13],W8[13],W7[13],W6[13],W5
[13],W4[13],W3[13],W2[13],W1[13],W0[13]};
assign
WREG14={W31[14],W30[14],W29[14],W28[14],W27[14],W26[14],W25[14],W24[
14],W23[14],W22[14],W21[14],W20[14],W19[14],W18[14],W17[14],W16[14],
W15[14],W14[14],
W13[14],W12[14],W11[14],W10[14],W9[14],W8[14],W7[14],W6[14],W5
[14],W4[14],W3[14],W2[14],W1[14],W0[14]};

Nhm 14A 08DT1

22

Lab 1 Cu trc my tnh

MIPS_Register File

assign
WREG15={W31[15],W30[15],W29[15],W28[15],W27[15],W26[15],W25[15],W24[
15],W23[15],W22[15],W21[15],W20[15],W19[15],W18[15],W17[15],W16[15],
W15[15],W14[15],
W13[15],W12[15],W11[15],W10[15],W9[15],W8[15],W7[15],W6[15],W5
[15],W4[15],W3[15],W2[15],W1[15],W0[15]};
assign
WREG16={W31[16],W30[16],W29[16],W28[16],W27[16],W26[16],W25[16],W24[
16],W23[16],W22[16],W21[16],W20[16],W19[16],W18[16],W17[16],W16[16],
W15[16],W14[16],
W13[16],W12[16],W11[16],W10[16],W9[16],W8[16],W7[16],W6[16],W5
[16],W4[16],W3[16],W2[16],W1[16],W0[16]};
assign
WREG17={W31[17],W30[17],W29[17],W28[17],W27[17],W26[17],W25[17],W24[
17],W23[17],W22[17],W21[17],W20[17],W19[17],W18[17],W17[17],W16[17],
W15[17],W14[17],
W13[17],W12[17],W11[17],W10[17],W9[17],W8[17],W7[17],W6[17],W5
[17],W4[17],W3[17],W2[17],W1[17],W0[17]};
assign
WREG18={W31[18],W30[18],W29[18],W28[18],W27[18],W26[18],W25[18],W24[
18],W23[18],W22[18],W21[18],W20[18],W19[18],W18[18],W17[18],W16[18],
W15[18],W14[18],
W13[18],W12[18],W11[18],W10[18],W9[18],W8[18],W7[18],W6[18],W5
[18],W4[18],W3[18],W2[18],W1[18],W0[18]};
assign
WREG19={W31[19],W30[19],W29[19],W28[19],W27[19],W26[19],W25[19],W24[
19],W23[19],W22[19],W21[19],W20[19],W19[19],W18[19],W17[19],W16[19],
W15[19],W14[19],
W13[19],W12[19],W11[19],W10[19],W9[19],W8[19],W7[19],W6[19],W5
[19],W4[19],W3[19],W2[19],W1[19],W0[19]};
assign
WREG20={W31[20],W30[20],W29[20],W28[20],W27[20],W26[20],W25[20],W24[
20],W23[20],W22[20],W21[20],W20[20],W19[20],W18[20],W17[20],W16[20],
W15[20],W14[20],

Nhm 14A 08DT1

23

Lab 1 Cu trc my tnh

MIPS_Register File

W13[20],W12[20],W11[20],W10[20],W9[20],W8[20],W7[20],W6[20],W5
[20],W4[20],W3[20],W2[20],W1[20],W0[20]};
assign
WREG21={W31[21],W30[21],W29[21],W28[21],W27[21],W26[21],W25[21],W24[
21],W23[21],W22[21],W21[21],W20[21],W19[21],W18[21],W17[21],W16[21],
W15[21],W14[21],
W13[21],W12[21],W11[21],W10[21],W9[21],W8[21],W7[21],W6[21],W5
[21],W4[21],W3[21],W2[21],W1[21],W0[21]};
assign
WREG22={W31[22],W30[22],W29[22],W28[22],W27[22],W26[22],W25[22],W24[
22],W23[22],W22[22],W21[22],W20[22],W19[22],W18[22],W17[22],W16[22],
W15[22],W14[22],
W13[22],W12[22],W11[22],W10[22],W9[22],W8[22],W7[22],W6[22],W5
[22],W4[22],W3[22],W2[22],W1[22],W0[22]};
assign
WREG23={W31[23],W30[23],W29[23],W28[23],W27[23],W26[23],W25[23],W24[
23],W23[23],W22[23],W21[23],W20[23],W19[23],W18[23],W17[23],W16[23],
W15[23],W14[23],
W13[23],W12[23],W11[23],W10[23],W9[23],W8[23],W7[23],W6[23],W5
[23],W4[23],W3[23],W2[23],W1[23],W0[23]};
assign
WREG24={W31[24],W30[24],W29[24],W28[24],W27[24],W26[24],W25[24],W24[
24],W23[24],W22[24],W21[24],W20[24],W19[24],W18[24],W17[24],W16[24],
W15[24],W14[24],
W13[24],W12[24],W11[24],W10[24],W9[24],W8[24],W7[24],W6[24],W5
[24],W4[24],W3[24],W2[24],W1[24],W0[24]};
assign
WREG25={W31[25],W30[25],W29[25],W28[25],W27[25],W26[25],W25[25],W24[
25],W23[25],W22[25],W21[25],W20[25],W19[25],W18[25],W17[25],W16[25],
W15[25],W14[25],
W13[25],W12[25],W11[25],W10[25],W9[25],W8[25],W7[25],W6[25],W5
[25],W4[25],W3[25],W2[25],W1[25],W0[25]};
assign
WREG26={W31[26],W30[26],W29[26],W28[26],W27[26],W26[26],W25[26],W24[

Nhm 14A 08DT1

24

Lab 1 Cu trc my tnh

MIPS_Register File

26],W23[26],W22[26],W21[26],W20[26],W19[26],W18[26],W17[26],W16[26],
W15[26],W14[26],
W13[26],W12[26],W11[26],W10[26],W9[26],W8[26],W7[26],W6[26],W5
[26],W4[26],W3[26],W2[26],W1[26],W0[26]};
assign
WREG27={W31[27],W30[27],W29[27],W28[27],W27[27],W26[27],W25[27],W24[
27],W23[27],W22[27],W21[27],W20[27],W19[27],W18[27],W17[27],W16[27],
W15[27],W14[27],
W13[27],W12[27],W11[27],W10[27],W9[27],W8[27],W7[27],W6[27],W5
[27],W4[27],W3[27],W2[27],W1[27],W0[27]};
assign
WREG28={W31[28],W30[28],W29[28],W28[28],W27[28],W26[28],W25[28],W24[
28],W23[28],W22[28],W21[28],W20[28],W19[28],W18[28],W17[28],W16[28],
W15[28],W14[28],
W13[28],W12[28],W11[28],W10[28],W9[28],W8[28],W7[28],W6[28],W5
[28],W4[28],W3[28],W2[28],W1[28],W0[28]};
assign
WREG29={W31[29],W30[29],W29[29],W28[29],W27[29],W26[29],W25[29],W24[
29],W23[29],W22[29],W21[29],W20[29],W19[29],W18[29],W17[29],W16[29],
W15[29],W14[29],
W13[29],W12[29],W11[29],W10[29],W9[29],W8[29],W7[29],W6[29],W5
[29],W4[29],W3[29],W2[29],W1[29],W0[29]};
assign
WREG30={W31[30],W30[30],W29[30],W28[30],W27[30],W26[30],W25[30],W24[
30],W23[30],W22[30],W21[30],W20[30],W19[30],W18[30],W17[30],W16[30],
W15[30],W14[30],
W13[30],W12[30],W11[30],W10[30],W9[30],W8[30],W7[30],W6[30],W5
[30],W4[30],W3[30],W2[30],W1[30],W0[30]};
assign
WREG31={W31[31],W30[31],W29[31],W28[31],W27[31],W26[31],W25[31],W24[
31],W23[31],W22[31],W21[31],W20[31],W19[31],W18[31],W17[31],W16[31],
W15[31],W14[31],
W13[31],W12[31],W11[31],W10[31],W9[31],W8[31],W7[31],W6[31],W5
[31],W4[31],W3[31],W2[31],W1[31],W0[31]};
decoder5to32 decode(decode_out,WriteRegister,RegWrite);

Nhm 14A 08DT1

25

Lab 1 Cu trc my tnh

MIPS_Register File

Reg32
reg0(1'b1,32'd0,W0[0],W1[0],W2[0],W3[0],W4[0],W5[0],W6[0],W7[0],W8[0
],W9[0],W10[0],W11[0],W12[0],W13[0],W14[0],W15[0],W16[0],W17[0],
W18[0],W19[0],W20[0],W21[0],W22[0],W23[0],W24[0],W25[0],W26[0]
,W27[0],W28[0],W29[0],W30[0],W31[0],clk);
Reg32
reg1(decode_out[1],WriteData,W0[1],W1[1],W2[1],W3[1],W4[1],W5[1],W6[
1],W7[1],W8[1],W9[1],W10[1],W11[1],W12[1],W13[1],W14[1],W15[1],W16[1
],W17[1],
W18[1],W19[1],W20[1],W21[1],W22[1],W23[1],W24[1],W25[1],W26[1],W27[1
],W28[1],W29[1],W30[1],W31[1],clk);
Reg32
reg2(decode_out[2],WriteData,W0[2],W1[2],W2[2],W3[2],W4[2],W5[2],W6[
2],W7[2],W8[2],W9[2],W10[2],W11[2],W12[2],W13[2],W14[2],W15[2],W16[2
],W17[2],
W18[2],W19[2],W20[2],W21[2],W22[2],W23[2],W24[2],W25[2],W26[2],W27[2
],W28[2],W29[2],W30[2],W31[2],clk);
Reg32
reg3(decode_out[3],WriteData,W0[3],W1[3],W2[3],W3[3],W4[3],W5[3],W6[
3],W7[3],W8[3],W9[3],W10[3],W11[3],W12[3],W13[3],W14[3],W15[3],W16[3
],W17[3],
W18[3],W19[3],W20[3],W21[3],W22[3],W23[3],W24[3],W25[3],W26[3],W27[3
],W28[3],W29[3],W30[3],W31[3],clk);
Reg32
reg4(decode_out[4],WriteData,W0[4],W1[4],W2[4],W3[4],W4[4],W5[4],W6[
4],W7[4],W8[4],W9[4],W10[4],W11[4],W12[4],W13[4],W14[4],W15[4],W16[4
],W17[4],
W18[4],W19[4],W20[4],W21[4],W22[4],W23[4],W24[4],W25[4],W26[4],W27[4
],W28[4],W29[4],W30[4],W31[4],clk);
Reg32
reg5(decode_out[5],WriteData,W0[5],W1[5],W2[5],W3[5],W4[5],W5[5],W6[
5],W7[5],W8[5],W9[5],W10[5],W11[5],W12[5],W13[5],W14[5],W15[5],W16[5
],W17[5],
W18[5],W19[5],W20[5],W21[5],W22[5],W23[5],W24[5],W25[5],W26[5],W27[5
],W28[5],W29[5],W30[5],W31[5],clk);
Reg32
reg6(decode_out[6],WriteData,W0[6],W1[6],W2[6],W3[6],W4[6],W5[6],W6[

Nhm 14A 08DT1

26

Lab 1 Cu trc my tnh

MIPS_Register File

6],W7[6],W8[6],W9[6],W10[6],W11[6],W12[6],W13[6],W14[6],W15[6],W16[6
],W17[6],
W18[6],W19[6],W20[6],W21[6],W22[6],W23[6],W24[6],W25[6],W26[6],W27[6
],W28[6],W29[6],W30[6],W31[6],clk);
Reg32
reg7(decode_out[7],WriteData,W0[7],W1[7],W2[7],W3[7],W4[7],W5[7],W6[
7],W7[7],W8[7],W9[7],W10[7],W11[7],W12[7],W13[7],W14[7],W15[7],W16[7
],W17[7],
W18[7],W19[7],W20[7],W21[7],W22[7],W23[7],W24[7],W25[7],W26[7],W27[7
],W28[7],W29[7],W30[7],W31[7],clk);
Reg32
reg8(decode_out[8],WriteData,W0[8],W1[8],W2[8],W3[8],W4[8],W5[8],W6[
8],W7[8],W8[8],W9[8],W10[8],W11[8],W12[8],W13[8],W14[8],W15[8],W16[8
],W17[8],
W18[8],W19[8],W20[8],W21[8],W22[8],W23[8],W24[8],W25[8],W26[8],W27[8
],W28[8],W29[8],W30[8],W31[8],clk);
Reg32
reg9(decode_out[9],WriteData,W0[9],W1[9],W2[9],W3[9],W4[9],W5[9],W6[
9],W7[9],W8[9],W9[9],W10[9],W11[9],W12[9],W13[9],W14[9],W15[9],W16[9
],W17[9],
W18[9],W19[9],W20[9],W21[9],W22[9],W23[9],W24[9],W25[9],W26[9],W27[9
],W28[9],W29[9],W30[9],W31[9],clk);
Reg32
reg10(decode_out[10],WriteData,W0[10],W1[10],W2[10],W3[10],W4[10],W5
[10],W6[10],W7[10],W8[10],W9[10],W10[10],W11[10],W12[10],W13[10],W14
[10],W15[10],W16[10],W17[10],
W18[10],W19[10],W20[10],W21[10],W22[10],W23[10],W24[10],W25[10],W26[
10],W27[10],W28[10],W29[10],W30[10],W31[10],clk);
Reg32
reg11(decode_out[11],WriteData,W0[11],W1[11],W2[11],W3[11],W4[11],W5
[11],W6[11],W7[11],W8[11],W9[11],W10[11],W11[11],W12[11],W13[11],W14
[11],W15[11],W16[11],W17[11],
W18[11],W19[11],W20[11],W21[11],W22[11],W23[11],W24[11],W25[11],W26[
11],W27[11],W28[11],W29[11],W30[11],W31[11],clk);
Reg32
reg12(decode_out[12],WriteData,W0[12],W1[12],W2[12],W3[12],W4[12],W5
[12],W6[12],W7[12],W8[12],W9[12],W10[12],W11[12],W12[12],W13[12],W14
[12],W15[12],W16[12],W17[12],
W18[12],W19[12],W20[12],W21[12],W22[12],W23[12],W24[12],W25[12],W26[
12],W27[12],W28[12],W29[12],W30[12],W31[12],clk);

Nhm 14A 08DT1

27

Lab 1 Cu trc my tnh

MIPS_Register File

Reg32
reg13(decode_out[13],WriteData,W0[13],W1[13],W2[13],W3[13],W4[13],W5
[13],W6[13],W7[13],W8[13],W9[13],W10[13],W11[13],W12[13],W13[13],W14
[13],W15[13],
W16[13],W17[13],W18[13],W19[13],W20[13],W21[13],W22[13],W23[13],W24[
13],W25[13],W26[13],W27[13],W28[13],W29[13],W30[13],W31[13],clk);
Reg32
reg14(decode_out[14],WriteData,W0[14],W1[14],W2[14],W3[14],W4[14],W5
[14],W6[14],W7[14],W8[14],W9[14],W10[14],W11[14],W12[14],W13[14],W14
[14],W15[14],
W16[14],W17[14],W18[14],W19[14],W20[14],W21[14],W22[14],W23[14],W24[
14],W25[14],W26[14],W27[14],W28[14],W29[14],W30[14],W31[14],clk);
Reg32
reg15(decode_out[15],WriteData,W0[15],W1[15],W2[15],W3[15],W4[15],W5
[15],W6[15],W7[15],W8[15],W9[15],W10[15],W11[15],W12[15],W13[15],W14
[15],W15[15],
W16[15],W17[15],W18[15],W19[15],W20[15],W21[15],W22[15],W23[15],W24[
15],W25[15],W26[15],W27[15],W28[15],W29[15],W30[15],W31[15],clk);
Reg32
reg16(decode_out[16],WriteData,W0[16],W1[16],W2[16],W3[16],W4[16],W5
[16],W6[16],W7[16],W8[16],W9[16],W10[16],W11[16],W12[16],W13[16],W14
[16],W15[16],
W16[16],W17[16],W18[16],W19[16],W20[16],W21[16],W22[16],W23[16],W24[
16],W25[16],W26[16],W27[16],W28[16],W29[16],W30[16],W31[16],clk);
Reg32
reg17(decode_out[17],WriteData,W0[17],W1[17],W2[17],W3[17],W4[17],W5
[17],W6[17],W7[17],W8[17],W9[17],W10[17],W11[17],W12[17],W13[17],W14
[17],W15[17],
W16[17],W17[17],W18[17],W19[17],W20[17],W21[17],W22[17],W23[17],W24[
17],W25[17],W26[17],W27[17],W28[17],W29[17],W30[17],W31[17],clk);
Reg32
reg18(decode_out[18],WriteData,W0[18],W1[18],W2[18],W3[18],W4[18],W5
[18],W6[18],W7[18],W8[18],W9[18],W10[18],W11[18],W12[18],W13[18],W14
[18],W15[18],

Nhm 14A 08DT1

28

Lab 1 Cu trc my tnh

MIPS_Register File

W16[18],W17[18],W18[18],W19[18],W20[18],W21[18],W22[18],W23[18],W24[
18],W25[18],W26[18],W27[18],W28[18],W29[18],W30[18],W31[18],clk);
Reg32
reg19(decode_out[19],WriteData,W0[19],W1[19],W2[19],W3[19],W4[19],W5
[19],W6[19],W7[19],W8[19],W9[19],W10[19],W11[19],W12[19],W13[19],W14
[19],W15[19],
W16[19],W17[19],W18[19],W19[19],W20[19],W21[19],W22[19],W23[19],W24[
19],W25[19],W26[19],W27[19],W28[19],W29[19],W30[19],W31[19],clk);
Reg32
reg20(decode_out[20],WriteData,W0[20],W1[20],W2[20],W3[20],W4[20],W5
[20],W6[20],W7[20],W8[20],W9[20],W10[20],W11[20],W12[20],W13[20],W14
[20],W15[20],
W16[20],W17[20],W18[20],W19[20],W20[20],W21[20],W22[20],W23[20],W24[
20],W25[20],W26[20],W27[20],W28[20],W29[20],W30[20],W31[20],clk);
Reg32
reg21(decode_out[21],WriteData,W0[21],W1[21],W2[21],W3[21],W4[21],W5
[21],W6[21],W7[21],W8[21],W9[21],W10[21],W11[21],W12[21],W13[21],W14
[21],W15[21],
W16[21],W17[21],W18[21],W19[21],W20[21],W21[21],W22[21],W23[21],W24[
21],W25[21],W26[21],W27[21],W28[21],W29[21],W30[21],W31[21],clk);
Reg32
reg22(decode_out[22],WriteData,W0[22],W1[22],W2[22],W3[22],W4[22],W5
[22],W6[22],W7[22],W8[22],W9[22],W10[22],W11[22],W12[22],W13[22],W14
[22],W15[22],
W16[22],W17[22],W18[22],W19[22],W20[22],W21[22],W22[22],W23[22],W24[
22],W25[22],W26[22],W27[22],W28[22],W29[22],W30[22],W31[22],clk);
Reg32
reg23(decode_out[23],WriteData,W0[23],W1[23],W2[23],W3[23],W4[23],W5
[23],W6[23],W7[23],W8[23],W9[23],W10[23],W11[23],W12[23],W13[23],W14
[23],W15[23],
W16[23],W17[23],W18[23],W19[23],W20[23],W21[23],W22[23],W23[23],W24[
23],W25[23],W26[23],W27[23],W28[23],W29[23],W30[23],W31[23],clk);
Reg32
reg24(decode_out[24],WriteData,W0[24],W1[24],W2[24],W3[24],W4[24],W5

Nhm 14A 08DT1

29

Lab 1 Cu trc my tnh

MIPS_Register File

[24],W6[24],W7[24],W8[24],W9[24],W10[24],W11[24],W12[24],W13[24],W14
[24],W15[24],
W16[24],W17[24],W18[24],W19[24],W20[24],W21[24],W22[24],W23[24],W24[
24],W25[24],W26[24],W27[24],W28[24],W29[24],W30[24],W31[24],clk);
Reg32
reg25(decode_out[25],WriteData,W0[25],W1[25],W2[25],W3[25],W4[25],W5
[25],W6[25],W7[25],W8[25],W9[25],W10[25],W11[25],W12[25],W13[25],W14
[25],W15[25],
W16[25],W17[25],W18[25],W19[25],W20[25],W21[25],W22[25],W23[25],W24[
25],W25[25],W26[25],W27[25],W28[25],W29[25],W30[25],W31[25],clk);
Reg32
reg26(decode_out[26],WriteData,W0[26],W1[26],W2[26],W3[26],W4[26],W5
[26],W6[26],W7[26],W8[26],W9[26],W10[26],W11[26],W12[26],W13[26],W14
[26],W15[26],
W16[26],W17[26],W18[26],W19[26],W20[26],W21[26],W22[26],W23[26],W24[
26],W25[26],W26[26],W27[26],W28[26],W29[26],W30[26],W31[26],clk);
Reg32
reg27(decode_out[27],WriteData,W0[27],W1[27],W2[27],W3[27],W4[27],W5
[27],W6[27],W7[27],W8[27],W9[27],W10[27],W11[27],W12[27],W13[27],W14
[27],W15[27],
W16[27],W17[27],W18[27],W19[27],W20[27],W21[27],W22[27],W23[27],W24[
27],W25[27],W26[27],W27[27],W28[27],W29[27],W30[27],W31[27],clk);
Reg32
reg28(decode_out[28],WriteData,W0[28],W1[28],W2[28],W3[28],W4[28],W5
[28],W6[28],W7[28],W8[28],W9[28],W10[28],W11[28],W12[28],W13[28],W14
[28],W15[28],
W16[28],W17[28],W18[28],W19[28],W20[28],W21[28],W22[28],W23[28],W24[
28],W25[28],W26[28],W27[28],W28[28],W29[28],W30[28],W31[28],clk);
Reg32
reg29(decode_out[29],WriteData,W0[29],W1[29],W2[29],W3[29],W4[29],W5
[29],W6[29],W7[29],W8[29],W9[29],W10[29],W11[29],W12[29],W13[29],W14
[29],W15[29],
W16[29],W17[29],W18[29],W19[29],W20[29],W21[29],W22[29],W23[29],W24[
29],W25[29],W26[29],W27[29],W28[29],W29[29],W30[29],W31[29],clk);

Nhm 14A 08DT1

30

Lab 1 Cu trc my tnh

MIPS_Register File

Reg32
reg30(decode_out[30],WriteData,W0[30],W1[30],W2[30],W3[30],W4[30],W5
[30],W6[30],W7[30],W8[30],W9[30],W10[30],W11[30],W12[30],W13[30],W14
[30],W15[30],
W16[30],W17[30],W18[30],W19[30],W20[30],W21[30],W22[30],W23[30],W24[
30],W25[30],W26[30],W27[30],W28[30],W29[30],W30[30],W31[30],clk);
Reg32
reg31(decode_out[31],WriteData,W0[31],W1[31],W2[31],W3[31],W4[31],W5
[31],W6[31],W7[31],W8[31],W9[31],W10[31],W11[31],W12[31],W13[31],W14
[31],W15[31],
W16[31],W17[31],W18[31],W19[31],W20[31],W21[31],W22[31],W23[31],W24[
31],W25[31],W26[31],W27[31],W28[31],W29[31],W30[31],W31[31],clk);

mux32_32
mux1(W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W
18,W19,W20,W21,W22,W23,W24,W25,W26,W27,
W28,W29,W30,W31,ReadRegister1,ReadData1);
mux32_32
mux2(W0,W1,W2,W3,W4,W5,W6,W7,W8,W9,W10,W11,W12,W13,W14,W15,W16,W17,W
18,W19,W20,W21,W22,W23,W24,W25,W26,W27,
W28,W29,W30,W31,ReadRegister2,ReadData2);
endmodule

3.5 Kt qu m phng bng ICARUS :


Code Verilog:
/*==============TESTBENCH====================*/
// The verilog file containing your register file must
// be named "regfile.v".
module regstim();
parameter ClockDelay = 5000;
reg [4:0] ReadRegister1, ReadRegister2, WriteRegister;
reg [31:0] WriteData;
reg RegWrite, clk;
wire [31:0] ReadData1, ReadData2;

Nhm 14A 08DT1

31

Lab 1 Cu trc my tnh

MIPS_Register File

integer i;
// Your register file MUST be named "regfile".
// Also you must make sure that the port declarations
// match up with the module instance in this stimulus file.
regfile reg1(ReadData1,ReadData2,WriteData,
ReadRegister1,ReadRegister2,WriteRegister,RegWrite,clk);
initial
begin
$dumpfile("regstim.vcd");
$dumpvars(1,reg1);
end
initial clk = 0;
always #(ClockDelay/2) clk = ~clk;
initial
begin
$monitor($time, " ReadData1=%h, ReadData2=%h,
WriteData=%h, WriteReg=%b, Reg1=%h, Reg2=%h, RegWrite=%b,
clk=%b",
ReadData1, ReadData2, WriteData, WriteRegister,
ReadRegister1, ReadRegister2, RegWrite,clk);
#(ClockDelay/4); // Make all changes away from the
clock edges
// Try to write the value 0xA0 into register 0.
// Register 0 should begin and remain at the value
of 0.
RegWrite=0;
ReadRegister1=0;
ReadRegister2=0;
WriteRegister=0;
WriteData=32'hA0;
#(ClockDelay);
RegWrite=1;
#(ClockDelay);
// Write a value into each register.
for (i=1; i<32; i=i+1)
begin
RegWrite=0;
ReadRegister1=i-1;
ReadRegister2=i;
WriteRegister=i;
WriteData=i*32'h01020408;

Nhm 14A 08DT1

32

Lab 1 Cu trc my tnh

MIPS_Register File

#(ClockDelay);
RegWrite=1;
#(ClockDelay);
end
// Go back and verify that the registers
// retained the data.
for (i=0; i<32; i=i+1)
begin
RegWrite=0;
ReadRegister1=i-1;
ReadRegister2=i;
WriteRegister=i;
WriteData=i*32'h100+i;
#(ClockDelay);
#(ClockDelay);
end
$finish;
end
endmodule

Nhm 14A 08DT1

33

Lab 1 Cu trc my tnh

MIPS_Register File

- Nhn xt:
+ Ban u, cha c tn hiu cho php ghi RegWrite, cc thanh ghi cha c gi tr
+ Khi RegWrite c set ln 1, b decoder s hot ng da vo tn hiu iu
khin chn thanh ghi RegisterWrite, tn hiu ra decoder_out s chn ra 1 trong s
32 thanh ghi a gi tr vo. Thanh ghi c np d liu t WriteData.
+ Cc thanh ghi ban u cha c gi tr c biu din bng XXXXXXXX.
+ 32 thanh ghi s c a vo b 2 mux32_32 chn ra 2, c d liu trn 2
thanh ghi da vo 2 tn hiu iu khin ReadRegister1 v ReadRegister 2. Gi
tr ca thanh ghi sau c c trn ReadData 1 v ReadData 2
+ Gi tr c np vo thanh ghi v ly ra trn ReadData1 v ReadData 2 chm
hn so vi tn hiu a vo do khi qua cc cng logic u b tr i 50ps.
-

Nhn chung, thanh ghi hot ng ng vi yu cu thit k.

Nhm 14A 08DT1

34

You might also like