verilog lab manual - csusb cnscse.csusb.edu/egomez/cs401/manual/georgiou-verilog.pdf · computer...

34
Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and Scott McWilliams Computer Science Department California State University, San Bernardino October 2003 Revision: 1.3, May 3, 2010

Upload: trinhkhanh

Post on 31-Jan-2018

242 views

Category:

Documents


8 download

TRANSCRIPT

Page 1: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

Computer ArchitectureImplementing a Datapath in Verilog

A Lab Manual

George M. Georgiou and Scott McWilliams

Computer Science DepartmentCalifornia State University, San Bernardino

October 2003Revision: 1.3, May 3, 2010

Page 2: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

Contents

Contents 1

List of Code Listings 2

List of Figures 3

I Lab Manual 5

1 The MIPS datapath in Verilog: The IF stage Lab 1–11.1 Testbenches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–5

2 The ID pipeline stage. Lab 2–1

3 The EX pipeline stage Lab 3–13.1 Testbenches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–5

4 The MEM pipeline stage. Lab 4–1

5 The WB pipeline stage Lab 5–1

6 Testing the MIPS datapath Lab 6–1

Bibliography Bib 1

1

Page 3: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

List of Code Listings

1.1 Verilog code for the multiplexer. . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–31.2 The testbench for the multiplexor in figure 1.5 on page Lab 1–4 . . . . . . . . . . . Lab 1–61.3 The testbench for the incrementer in figure 1.6 on page Lab 1–4 . . . . . . . . . . Lab 1–73.1 The testbench for the 5-bit multiplexor in figure 3.3 on page Lab 3–3 . . . . . . . . Lab 3–63.2 The testbench for the ALU control in figure 3.4 on page Lab 3–4 . . . . . . . . . . Lab 3–73.3 The testbench for the ALU in figure 3.5 on page Lab 3–4 . . . . . . . . . . . . . . Lab 3–96.1 Binary code for testing the MIPS datapath. . . . . . . . . . . . . . . . . . . . . . . Lab 6–26.2 Initial data for memory. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 6–2

2

Page 4: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

List of Figures

1.1 The revised MIPS datapath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–21.2 The IF stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–21.3 The program counter (PC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–31.4 The instruction memory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–31.5 The multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–41.6 The incrementer by 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–41.7 The IF/ID pipeline register (latch) . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–41.8 The output when running the testbench for the multiplexer (listing 1.2 on page Lab

1–6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–51.9 The output when running the testbench for the incrementer (listing 1.3 on page Lab

1–7) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 1–5

2.1 The ID stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 2–22.2 ALUOp Control Bit and Function Code Sets (after [4]) . . . . . . . . . . . . . . . Lab 2–22.3 The sign-extend unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 2–32.4 The control unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 2–32.5 The register file . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 2–42.6 The ID/EX pipeline register (latch) . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 2–4

3.1 The EX stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–23.2 ALUOp Control Bit and Function Code Sets (after [4]) . . . . . . . . . . . . . . . Lab 3–23.3 The multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–33.4 The ALU control unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–43.5 The ALU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–43.6 The adder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–43.7 The EX/MEM pipeline register (latch) . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–53.8 The output when running the testbench for the 5-bit multiplexer (listing 3.1 on

page Lab 3–6) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–53.9 The output when running the testbench for the ALU control (listing 3.2 on page Lab

3–7) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 3–83.10 The output when running the testbench for the ALU (listing 3.3 on page Lab 3–9) . Lab 3–8

4.1 The MEM stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 4–24.2 The and gate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 4–24.3 The data memory unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 4–34.4 The MEM/WB pipeline register (latch) . . . . . . . . . . . . . . . . . . . . . . . . Lab 4–3

3

Page 5: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LIST OF FIGURES LIST OF FIGURES

5.1 The WB stage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 5–15.2 The multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lab 5–2

4

Page 6: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

Part I

Lab Manual

5

Page 7: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1

The MIPS datapath in Verilog: The IF stage

Objective: To implement and test the Instruction Fetch (IF) pipeline stage of the MIPS five stagepipeline.

The series of labs in this manual has ultimate objective to implement and simulate in Verilog theMIPS pipeline datapath Figure 6.30 in Paterson and Hennessy’s textbook [4]. The model will bestructural (as opposed to behavioral), but with one exception: basic units, such as multiplexors andALU’s, may implemented as behavioral models. This approach reinforces the object-oriented styleof programming, while at the same time relieving from the burden of structurally defining the basicunits, which can be quite tedious, time consuming, and beyond the scope of this lab series.

The slightly revised MIPS datapath to be implemented is in figure 1.1 on page Lab 1–2.For this week, you will implement the IF stage and test the fetching of instructions from memory.

The IF stage isolated from the rest of the datapath can be seen in figure 1.2 on page Lab 1–2.

• The names of the pipeline registers are IF ID, ID EX, EX MEM, MEM WB. For now, youwill need only IF ID and EX MEM.

• The instruction memory has 128 32-bit words. Later it will be expanded. All instructions andthe PC are 32-bit wide. (Simply the 7 least significant bits (2ˆ7 = 128) are used for the timebeing.)

• Implement the instruction memory, 2x1 MUX, and Incrementer-by-4 as separate modules. Forthe time being consider that the 1-bit signal PCSrc comes from a 1-bit register, PC choose.

• Initialize IF ID IR (The instruction field of IF/ID) to 32 zeros.

• Initialize IF ID NPC to 32 zeros. Initialize PC choose and EX MEM NPC to zeros. Theywill not change during this simulation. Initialize the first 10 words of memory (with addresses0, 4, 8, etc.) with the following HEX values:

Lab 1–1

Page 8: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 The MIPS datapath in Verilog: The IF stage

Add

1

Instruction memory

Registers

\ 16

\ 32

PC

IF/ID

ID/EX

IR [25:21]

[20:16] IR

EX/MEM

MEM/WB

Read reg 1

Read reg 2

Write reg

Write data

Read data 1

Read data 2

Address

Sign extend

IR

IR

IR

[15:0]

[20:16]

IR

[15:11]

IR [31:26]

WB

M

EX WB

R e

g W

r i t e

WB WB

M

Add

Add result

A L

U S

r c

RegDst

ALU control \

6

ALU result

ALUOp

IR [5:0] M

e m

R e

a d

M e

m t o

R e

g

M e m

W r i

t e

Branch

PCSrc

ALU Zero

0

1

M u

x

0

1

M u

x

0

1

M u

x

1

0

M u

x

Data memory

Write data

Address

Read data

Control

\

\

\

2

3

4

Figure 1.1: The revised MIPS datapath

Add

1

Instruction memory

PC

IF/ID

Address

IR

PCSrc

0

1

M u

x

To ID/EX latch

From EX/MEM latch

Component 1

Component 2

Component 3

Component 4

Component 5

Figure 1.2: The IF stage

Lab 1–2

Page 9: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 The MIPS datapath in Verilog: The IF stage

module mux ( a , b , s e l , y ) ;i n p u t [ 3 1 : 0 ] a , b ;i n p u t s e l ;o u t p u t [ 3 1 : 0 ] y ;

a s s i g n y = s e l ? a : b ;endmodule

Listing 1.1: Verilog code for the multiplexer.

A00000AA100000112000002230000033400000445000005560000066700000778000008890000099

• Turn in the source code and the printout of the clock cycle number, the contents of the PC(in decimal), IF ID IR (in hex), and IF ID NPC (in decimal) for 10 cycles of simulation. Beready to demonstrate.

Note: The code in listing 1.1 implements the multiplexer in the IF stage as a combinational circuit.

PC npc PC \ 32

\ 32

Figure 1.3: The program counter (PC)

Instruction memory

Address addr

data

\

\

32

32

Figure 1.4: The instruction memory

Lab 1–3

Page 10: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 The MIPS datapath in Verilog: The IF stage

a

b

y

sel

\ 32

\ 32

\ 32

\ 1

0

1

M u

x Figure 1.5: The multiplexer

1

pcin

pcout

\ 32

\ 32

Add

Figure 1.6: The incrementer by 1

instr

npc npcout

instrout \ 32

\ 32

\ 32

\ 32

Figure 1.7: The IF/ID pipeline register (latch)

Lab 1–4

Page 11: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 1.1. TESTBENCHES

1.1 TestbenchesTestbenches help us verify that the design is correct. In this subsection we show two testbenches:One in listing 1.2 on page Lab 1–6 for the multiplexer of figure 1.5 on page Lab 1–4 and one inlisting 1.3 on page Lab 1–7 for the incrementer of figure 1.6 on page Lab 1–4 . The results of therunning the testbench are in figure 1.8 and in figure 1.9, respectively. In the latter, and in othertestbench runs in the labs that follow, the standard messages of the runs will be largely omitted.

Beginning CompileBeginning Phase ICompiling source file: muxtest.vCompiling included source file ’mux.v’Continuing compilation of source file ’muxtest.v’Finished Phase IEntering Phase II...Finished Phase IIEntering Phase III...Finished Phase IIIHighest level modules: test_muxCompile Complete.Running...At t = 11 sel = 1 A = 00000000 B = 55555555 Y = 00000000At t = 31 sel = 1 A = 00000000 B = ffffffff Y = 00000000At t = 36 sel = 1 A = a5a5a5a5 B = ffffffff Y = a5a5a5a5At t = 41 sel = 0 A = a5a5a5a5 B = dddddddd Y = ddddddddAt t = 46 sel = x A = a5a5a5a5 B = dddddddd Y = XXXXXXXX0 Errors, 0 WarningsCompile time = 0.00000, Load time = 0.00000, Execution time = 0.00000

Normal exit

Figure 1.8: The output when running the testbench for the multiplexer (listing 1.2 on page Lab 1–6)

Running...Time = 11 A=3 IncrOut=4Time = 21 A=15 IncrOut=16Time = 31 A=64 IncrOut=65

Figure 1.9: The output when running the testbench for the incrementer (listing 1.3 on page Lab 1–7)

Lab 1–5

Page 12: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 1.1. TESTBENCHES

/ / F i l ename : t e s t −mux . v/ / D e s c r i p t i o n : T e s t i n g t h e 32 b i t m u x module/ / o f t h e IF s t a g e o f t h e p i p e l i n e .

‘ i n c l u d e ”mux . v ”module t e s t m u x ;

/ / Wire P o r t sw i r e [ 3 1 : 0 ] Y;

/ / R e g i s t e r D e c l a r a t i o n sr e g [ 3 1 : 0 ] A, B ;r e g s e l ;

MUX mux1 ( Y, A, B, s e l ) ; / / i n s t a n t i a t e t h e mux

i n i t i a l b e g i n

A = 32 ’hAAAAAAAA;B = 32 ’ h55555555 ;s e l = 1 ’ b1 ;#10 ;A = 32 ’ h00000000 ;#10s e l = 1 ’ b1 ;#10 ;B = 32 ’ hFFFFFFFF ;#5 ;A = 32 ’hA5A5A5A5 ;#5 ;s e l = 1 ’ b0 ;B = 32 ’hDDDDDDDD;#5 ;s e l = 1 ’ bx ;

end

a lways @(A or B or s e l )#1 $ d i s p l a y ( ” At t = %0d s e l = %b A = %h B = %h Y = %h ” ,

$ t i m e , s e l , A, B, Y) ;

endmodule / / t e s t

Listing 1.2: The testbench for the multiplexor in figure 1.5 on page Lab 1–4

Lab 1–6

Page 13: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 1 1.1. TESTBENCHES

/ / F i l ename : t e s t −i n c r . v/ / D e s c r i p t i o n : T e s t f o r i n c r . v , an i n c r e m e n t e r by 1/ / (32− b i t i n p u t )

‘ i n c l u d e ” i n c r . v ”

module t e s t ( ) ;

/ / P o r t Wireswi r e [ 3 1 : 0 ] I n c r O u t ;

/ / R e g i s t e r D e c l a r a t i o n sr e g [ 3 1 : 0 ] A;

INCR i n c r 1 ( I n c r O u t , A) ; / / i n s t a n t i a t e t h e i n c r e m e n t e r

i n i t i a l b e g i n#10A = 3 ;#10 ;A = 1 5 ;#10A = 6 4 ;#5 ;

end

a lways @(A)#1 $ d i s p l a y ( ” Time = %0d\ tA=%0d\ t I n c r O u t =%0d ” , $ t i m e , A,

I n c r O u t ) ;

endmodule / / t e s t

Listing 1.3: The testbench for the incrementer in figure 1.6 on page Lab 1–4

Lab 1–7

Page 14: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 2

The ID pipeline stage.

Objective: To implement and test the Instruction Decode (ID) pipeline stage and integrate it withthe IF stage.

This is part of a series of labs to implement the MIPS Datapath (figure 1.1 on page Lab 1–2) asa behavioral model in Verilog and simulate it.

For this week, you will implement the ID stage figure 2 on page Lab 2–2, integrate it togetherwith the IF stage of last week, and test both together.

The parent module PIPELINE instantiates I FETCH (from the previous lab) and I DECODE.

• The module I DECODE instantiates the modules CONTROL, REG, S EXTEND, and ID EX

– The CONTROL module has input the opcode field of the IF ID instr and output is the9-bit control bits which are shown in figure 2.2 on page Lab 2–2.

– The register file REG, which has 32 general purpose registers, and has input the rs and rtfields of IF ID instr, MEM WB Writereg, MEM WB Writedata, and RegWrite (for thetime being it can be from anywhere). Outputs are the contents of register rs and registerrt.

– The combinational module S EXTEND receives as input the 16-bit immediate field ofIF ID instr and output is the 32 bit sign-extended value.

– The ID EX module includes the pipeline register ID/EX and inputs the outputs of theCONTROL, REG, S EXTEND modules, as well as the IF ID NPC, IF ID Instr[20-16]and IF ID Instr[15-11]. Outputs are the control bits (9 bits) NPC, Reg[rs], Reg[rt],signExtended (32 bit), Instr[20-16], and Instr[15-11].

• Testing: Initialize memory to the following hex values, beginning with location 0, and labeland print out the outputs of the ID EX register. The control bits should be binary and all othervalues should be decimal. Simulate for sufficient cycles so that all instructions go through theID EX register.

Lab 2–1

Page 15: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 2 The ID pipeline stage.

Registers

\ 16

\ 32

ID/EX

IR [25:21]

[20:16] IR

Read reg 1

Read reg 2

Write reg

Write data

Read data 1

Read data 2

Sign extend

IR

IR

IR

[15:0]

[20:16]

[15:11]

IR [31:26]

WB

M

EX

RegWrite

ALUSrc

IR

Control

\

\

\

2

3

4

ALUOp RegDst

To EX Mux 0

To EX Mux 1

WB

M

From IF/ID latch To EX adder

From WB mux

From MEM/WB latch

To EX ALU

To EX Mux 0 and EX/MEM

latch

Component 1

Component 2

Component 3

Component 4

From IF/ID latch

Figure 2.1: The ID stage

Figure 2.2: ALUOp Control Bit and Function Code Sets (after [4])

Lab 2–2

Page 16: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 2 The ID pipeline stage.

002300AA10654321001000228C1234568F123456AD65432113012345AC65432112012345

• Turn in the source code and the printout of the clock cycle number and outputs off the ID EXregister, as in testing above. Be ready to demonstrate.

Sign extend

\ 16

\ 32

Figure 2.3: The sign-extend unit

Control

\

\

\

2

3

4

\ 6

opcode

WB

M

EX

controlbits

Figure 2.4: The control unit

Lab 2–3

Page 17: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 2 The ID pipeline stage.

Registers

Read reg 1

Read reg 2

Write reg

Write data

Read data 1

Read data 2

regwrite

\ 32

\

\

\ 5

5

5

1

\ 32

\ 32

A

B

rs

rt

rd

writedata

Figure 2.5: The register file

\ 32

WB

M

EX

\

\

\

2

3

4

ctlwb_out

ctlm_out

ctlex_out

\ 2

\ 3

\ 32

npc \ 32

npcout

\ 32

\ 32

\ 32

\ 32

readdat1

readdat2

signext_out

\ 5

\ 5

instr_2016

instr_1511

\ 32

\ 5

\ 5

wb_ctlout

m_ctlout

rdata1out

rdata2out

s_extendout

instrout_2016

instrout_1511

\ 4

ex_ctlout

Figure 2.6: The ID/EX pipeline register (latch)

Lab 2–4

Page 18: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3

The EX pipeline stage

Objective: To implement and test the Execution (EX) pipeline stage and integrate it with the IF andID stages.

This is part of a series of labs to implement the MIPS Datapath (figure 1.1 on page Lab 1–2) asa behavioral model in Verilog and simulate it.

For this week, you will implement the EX stage figure 3 on page Lab 3–2, integrate it togetherwith the IF and ID stages of the previous week, and test three of them together.

The parent module PIPELINE instantiates I FETCH (from the previous lab) and I DECODE.CHANGE: Please note that the “Shift left 2” unit that exists in Figure 6.30 in Paterson and

Hennessy’s book [4], is eliminated in figure 1.1 on page Lab 1–2. Now there is direct line from theinput of ”Shift left 2” to its output.

The parent module PIPELINE instantiates I FETCH, and I DECODE, and I EXECUTE.

• The module I EXECUTE instantiates the following modules

– ADDER for the branch target address computation.

– The ALU CONTROL. Inputs are ALUop bits and the function bits. The specification isfound in figure 1 on page Lab 1–3.

– The instructions to be implemented are specified in the figure 3.2 on page Lab 3–2, andthey are add, subtract, and, or, set less than. If the input information does not correspondto any valid instruction, ALUop = 11 and ALU output is 32 x’s.

– BOTTOM MUX. Notice that the inputs and output are 5 bits.

– ALU MAX. Notice that you may instantiate the previously made MUX in the IF stage.

– ID MEM, the pipeline register.

• In the I FETCH module we have resetmargins=true

r e g EX MEM PCSrc ;r e g [ 3 1 : 0 ] EX MEM NPC;

• Move the above to the EX MEM module, since EX MEM exists now, and make them asinputs to the I FETCH module.

Lab 3–1

Page 19: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 The EX pipeline stage

EX/MEM

WB WB

M

Add

Add result

RegDst

ALU control \

6

ALU result

ALUOp

IR [5:0]

ALU Zero

0

1

M u

x

0

1

M u

x

ALUSrc

From ID/EX latch

From ID/EX latch MEM Branch

To MEM Branch

MemWrite MemRead

MEM/WB latch

To IF mux

To MEM/WB latch

To MEM Data memory

To MEM Data memory and MEM/WB latch

From ID/EX latch

IR [20:16]

IR [15:11]

Component 1

Component 2

Component 3

Component 4

Component 5

Component 6

From ID/EX latch

From ID/EX latch

From ID/EX latch

From ID/EX latch

From ID/EX latch

Figure 3.1: The EX stage

Figure 3.2: ALUOp Control Bit and Function Code Sets (after [4])

Lab 3–2

Page 20: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 The EX pipeline stage

• Testing: Initialize memory to the following hex values, beginning with location 0, and la-bel and print out the outputs of the ID EX and EX MEM registers. The control bits shouldbe binary and all other values should be decimal. Simulate for sufficient cycles so that allinstructions go through the EX MEM register.

002300AA10654321001000228C1234568F123456AD65432113012345AC65432112012345

• Be ready to use initialize memory with a given different set of instructions. Turn in the sourcecode and the printout of the clock cycle number and outputs of the ID EX register and theEX MEM register. Be ready to demonstrate.

a

b

y

sel

\ 5

\ 5

\ 5

\ 1

0

1

M u

x

Figure 3.3: The multiplexer

Lab 3–3

Page 21: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 The EX pipeline stage

ALU control

\ 6

\ 3

funct

alu_op

\ 2

select

Figure 3.4: The ALU control unit

B

A

zero

\ 32

\ 1

ALU

\

\ 32

result

\ 32

3

control

Figure 3.5: The ALU

add_in1 \ 32

\ 32

Add

\ 32

add_in2

add_out

Figure 3.6: The adder

Lab 3–4

Page 22: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 3.1. TESTBENCHES

\ 32

WB

M

\

\

2

3

ctlwb_out

ctlm_out

\ 2

\ 32

adder_out \ 32

add_result

\ 1

\ 1

\ 32

\ 32

aluout

readdat2

\ 5

muxout

\ 32

\ 5

wb_ctlout

alu_result

rdata2out

five_bit_muxout

\ 3

m_ctlout

aluzero zero

Figure 3.7: The EX/MEM pipeline register (latch)

3.1 TestbenchesTestbenches and their corresponding outputs are given for the 5-bit multiplexer (figure 3.3 on page Lab3–3 and listing 3.1 on page Lab 3–6), the ALU control unit (figure 3.4 on page Lab 3–4 and list-ing 3.2 on page Lab 3–7), and the ALU (figure 3.5 on page Lab 3–4 and listing 3.3 on page Lab3–9). The results of running the testbench for the multiplexer are in figure 3.8, for the ALU controlunit in figure 3.9 on page Lab 3–8, and for the ALU in figure 3.10 on page Lab 3–8.

Running...At t = 11 sel = 1 A = 00000 B = 10101 Y = 00000At t = 31 sel = 1 A = 00000 B = 11111 Y = 00000At t = 36 sel = 1 A = 00101 B = 11111 Y = 00101At t = 41 sel = 0 A = 00101 B = 11101 Y = 11101At t = 46 sel = x A = 00101 B = 11101 Y = xx1010 Errors, 0 WarningsNormal exit

Figure 3.8: The output when running the testbench for the 5-bit multiplexer (listing 3.1 on page Lab3–6)

Lab 3–5

Page 23: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 3.1. TESTBENCHES

/ / F i l ename : t e s t −5bi tmux . v/ / D e s c r i p t i o n : T e s t i n g t h e 5 b i t m u x module/ / o f t h e EX s t a g e o f t h e p i p e l i n e .

‘ i n c l u d e ” 5 b i t−mux . v ”

module t e s t ( ) ;

/ / Wire P o r t sw i r e [ 4 : 0 ] Y;

/ / R e g i s t e r D e c l a r a t i o n sr e g [ 4 : 0 ] A, B ;r e g s e l ;

MUX5 mux1 ( Y, A, B, s e l ) ; / / i n s t a n t i a t e t h e mux

i n i t i a l b e g i n

A = 5 ’ b01010 ;B = 5 ’ b10101 ;s e l = 1 ’ b1 ;#10 ;A = 5 ’ b00000 ;#10s e l = 1 ’ b1 ;#10 ;B = 5 ’ b11111 ;#5 ;A = 5 ’ b00101 ;#5 ;s e l = 1 ’ b0 ;B = 5 ’ b11101 ;#5 ;s e l = 1 ’ bx ;

end

a lways @(A or B or s e l )#1 $ d i s p l a y ( ” At t = %0d s e l = %b A = %b B = %b Y = %b ” , $ t i m e ,

s e l , A, B, Y) ;

endmodule / / t e s t

Listing 3.1: The testbench for the 5-bit multiplexor in figure 3.3 on page Lab 3–3

Lab 3–6

Page 24: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 3.1. TESTBENCHES

/ / F i l ename : t e s t −a l u c o n t r o l . v/ / D e s c r i p t i o n : T e s t i n g t h e ALU c o n t r o l module/ / o f t h e EX s t a g e o f t h e p i p e l i n e .‘ i n c l u d e ” a lu−c o n t r o l . v ”

module t e s t ( ) ;/ / Wire P o r t sw i r e [ 2 : 0 ] s e l e c t ;

/ / R e g i s t e r D e c l a r a t i o n sr e g [ 1 : 0 ] a l u o p ;r e g [ 5 : 0 ] f u n c t ;

ALU CONTROL a l u c o n t r o l 1 ( s e l e c t , a l u o p , f u n c t , ) ;

i n i t i a l b e g i na l u o p = 2 ’ b00 ;f u n c t = 6 ’ b100000 ;$ m o n i to r ( ”ALUOp = %b\ t f u n c t = %b\ t s e l e c t = %b ” , a l u o p , f u n c t ,

s e l e c t ) ;#1a l u o p = 2 ’ b01 ;f u n c t = 6 ’ b100000 ;#1a l u o p = 2 ’ b10 ;f u n c t = 6 ’ b100000 ;#1f u n c t = 6 ’ b100010 ;#1f u n c t = 6 ’ b100100 ;#1f u n c t = 6 ’ b100101 ;#1f u n c t = 6 ’ b101010 ;#1$ f i n i s h ;end

endmodule / / t e s t

Listing 3.2: The testbench for the ALU control in figure 3.4 on page Lab 3–4

Lab 3–7

Page 25: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 3.1. TESTBENCHES

Running...ALUOp = 00 funct = 100000 select = 010ALUOp = 01 funct = 100000 select = 110ALUOp = 10 funct = 100000 select = 010ALUOp = 10 funct = 100010 select = 110ALUOp = 10 funct = 100100 select = 000ALUOp = 10 funct = 100101 select = 001ALUOp = 10 funct = 101010 select = 111Exiting VeriLogger at simulation time 70000 Errors, 0 Warnings

Normal exit

Figure 3.9: The output when running the testbench for the ALU control (listing 3.2 on page Lab3–7)

Running...A = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxB = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxALUOp = 011 result = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxALUOp = 100 result = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxALUOp = 010 result = 00000000000000000000000000010001ALUOp = 111 result = 00000000000000000000000000000000ALUOp = 011 result = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxALUOp = 110 result = 00000000000000000000000000000011ALUOp = 001 result = 00000000000000000000000000001111ALUOp = 000 result = 00000000000000000000000000000010Exiting VeriLogger at simulation time 80000 Errors, 0 Warnings

Normal exit

Figure 3.10: The output when running the testbench for the ALU (listing 3.3 on page Lab 3–9)

Lab 3–8

Page 26: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 3 3.1. TESTBENCHES

/ / F i l ename : t e s t −a l u . v/ / D e s c r i p t i o n : T e s t module f o r t h e ALU

‘ i n c l u d e ” a l u . v ”

module t e s t ( ) ;

/ / R e g i s t e r D e c l a r a t i o n sr e g [ 3 1 : 0 ] A,B ;r e g [ 0 2 : 0 ] c o n t r o l ;

/ / Wire P o r t sw i r e [ 3 1 : 0 ] r e s u l t ;w i r e z e r o ;

i n i t i a l b e g i nA <= ’ b1010 ;B <= ’ b0111 ;c o n t r o l <= ’ b011 ;$ d i s p l a y ( ”A = %b\ tB = %b ” , A, B) ;$ m o n i t o r ( ”ALUOp = %b\ t r e s u l t = %b ” , c o n t r o l , r e s u l t ) ;#1c o n t r o l <= ’ b100 ;#1c o n t r o l <= ’ b010 ;#1c o n t r o l <= ’ b111 ;#1c o n t r o l <= ’ b011 ;#1c o n t r o l <= ’ b110 ;#1c o n t r o l <= ’ b001 ;#1c o n t r o l <= ’ b000 ;#1$ f i n i s h ;

end

ALU ALU1( r e s u l t , z e r o , A, B, c o n t r o l ) ;

endmodule / / t e s t

Listing 3.3: The testbench for the ALU in figure 3.5 on page Lab 3–4

Lab 3–9

Page 27: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 4

The MEM pipeline stage.

Objective: To implement and test the Memory (MEM) pipeline stage and integrate it with the IF,ID, and EX stages.

This is part of a series of labs to implement the MIPS Datapath (figure 1.1 on page Lab 1–2) asa behavioral model in Verilog and simulate it.

For this week, you will implement the MEM stage figure 4 on page Lab 4–2, and integrate ittogether with the IF, ID, and EX stages of previous weeks, and test all of them together.

The parent module PIPELINE instantiates I FETCH (from the previous lab) and I DECODE.The parent module PIPELINE instantiates I FETCH, I DECODE, I EXECUTE, MEM, and WB

modules.

• The module MEMORY instantiates the following modules:

– D MEM: the data memory module. Data memory has 256 32-bit words.– MEM WB: The pipeline register MEM/WB. The I FETCH module should receive in-

puts ’write data”, ”write register” and RegWrite from the MEM modules.

• Testing: Initialize memory to the following hex values, beginning with location 0, and labeland print out the outputs of the ID EX, EX MEM, and MEM registers. The control bitsshould be binary and all other values should be decimal. Simulate for sufficient cycles so thatall instructions go through the MEM WB register.

002300AA10654321001000228C1234568F123456AD65432113012345AC65432112012345

• Be ready to use initialize memory with a given different set of instructions.

• Turn in the source code and the printout of the clock cycle number and outputs the ID EXregister, the EX EM register, and the MEM WB register. Be ready to demonstrate.

Lab 4–1

Page 28: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 4 The MEM pipeline stage.

MEM/WB

WB

MemRead

MemtoReg

MemWrite

Branch

Data memory

Write data

Address

Read data

From EX/MEM latch RegWrite

To WB mux 1

To WB mux 0

To ID Registers

PCSrc

From EX mux

From EX/MEM latch From EX ALU zero

From EX/MEM latch

Component 1

Component 2

Component 3

From EX/MEM latch

Figure 4.1: The MEM stage

PCSrc zero

m_ctlout AND AND

Figure 4.2: The and gate

Lab 4–2

Page 29: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 4 The MEM pipeline stage.

Data memory

Address

Write data

Read data

MemWrite

\ 32

\ 32

1

\ 32

Read_data

Address

Write_data

MemRead

1

Figure 4.3: The data memory unit

WB \ 2

control_wb_in

\ 32

Read_data_in \ 32

Read_data

\ 32

\ 32

\ 5

\ 5

Write_reg_in mem_Write_reg

\ 2

mem_control_wb

ALU_result_in mem_ALU_result

Figure 4.4: The MEM/WB pipeline register (latch)

Lab 4–3

Page 30: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 5

The WB pipeline stage

Objective: To implement and test the Write-back (WB) pipeline stage and integrate it with the IF,ID, EX, and MEM stages.

This is part of a series of labs to implement the MIPS Datapath (figure 1.1 on page Lab 1–2) asa behavioral model in Verilog and simulate it.

For this week, you will implement the WB stage figure 5, and integrate it together with the IF,ID, EX, and MEM stages of previous weeks, and test all of them together.

MemtoReg

1

0

M u

x

From MEM/WB latch

To ID Registers Component 1

From MEM/WB latch

Figure 5.1: The WB stage

The parent module PIPELINE instantiates I FETCH (from the previous lab) and I DECODE.The parent module PIPELINE instantiates I FETCH, I DECODE, I EXECUTE, MEM, and WB

modules.

• The module WB instantiates the following module:

– MUX, the multiplexer at the output of MEM/WB. Instantiate the multiplexer at the IFstage.

• The WB module receives inputs from the MEM WB module MemeReg, ReadData, ALURe-sult, and gives output WriteData.

Lab 5–1

Page 31: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 5 The WB pipeline stage

• Testing: Initialize memory to the following hex values, beginning with location 0, and labeland print out the outputs of the ID EX, EX MEM, and MEM registers. The control bitsshould be binary and all other values should be decimal. Simulate for sufficient cycles so thatall instructions go through the MEM WB register.

002300AA10654321001000228C1234568F123456AD65432113012345AC65432112012345

Be ready to use initialize memory with a given different set of instructions.

• Turn in the source code and the printout of the clock cycle number and outputs the ID EXregister, the EX EM register, and the MEM WB register. Be ready to demonstrate.

mem_ALU_result

mem_Read_data

wb_data

MemtoReg

\ 32

\ 32

\ 32

\ 1

1

0

M u

x

Figure 5.2: The multiplexer

Lab 5–2

Page 32: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 6

Testing the MIPS datapath

Objective: To implement and test the MIPS datapath which was built in the previous labs.

This is part of a series of labs to implement the MIPS Datapath (figure 1.1 on page Lab 1–2) asa behavioral model in Verilog and simulate it.

For this week you will test the datapath with the given binary program in listing 6.1 on page Lab6–2. Save it to file named ”risc.txt”. Also the initial contents of memory are given in listing 6.2 onpage Lab 6–2. Save it to a file named ”data.txt”.

How to read data in the instruction memory (in the instructionmemory module):

i n i t i a l b e g i n$readmemb ( ” r i s c . t x t ”,MEM) ;f o r ( i =0 ; i< 2 4 ; i = i +1)

$ d i s p l a y (MEM[ i ] ) ;end

Similarly for the data memory module:

i n i t i a l b e g i n$readmemb ( ” d a t a . t x t ”,MEM) ;f o r ( i =0 ; i< 6 ; i = i +1)

$ d i s p l a y (MEM[ i ] ) ;end

• You must add the NOP instruction in the control module. Its opcode is 100000 and the outputof the control unit should be all zeros.

• Make sure that r0 is initialized to zero.

• For testing, display registers r1, r2, and r3 from the ID/EX module. Register r1 should havevalues 1, 3, 6, 12, ... Simulate for 24 cycles.

Lab 6–1

Page 33: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

LAB 6 Testing the MIPS datapath

/ / Program t h a t adds t h e numbers (1 + 2) + 3 + 6 + 0 = 12/ / And p l a c e s 12 i n r e g i s t e r 1100011 00000 00001 0000 0000 0000 0001 / / LW r 1 , 1 ( r0 )100011 00000 00001 0000 0000 0000 0010 / /LW r 2 , 2 ( r0 )100011 00000 00001 0000 0000 0000 0011 / /LW r 3 , 3 ( r0 )1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP000000 00001 00010 00001 00000 100000 / /ADD r 1 , r 1 , r21000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP000000 00001 00011 00001 00000 100000 / /ADD r 1 , r 1 , r31000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP000000 00001 00001 00001 00000 100000 / /ADD r 1 , r 1 , r11000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP000000 00001 00000 00001 00000 100000 / /ADD r 1 , r 1 , r01000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP1000 0000 0000 0000 0000 0000 0000 0000 / / NOP

Listing 6.1: Binary code for testing the MIPS datapath.

/ / C o n t e n t s o f d a t a memory0000 0000 0000 0000 0000 0000 0000 0000 / / Data 00000 0000 0000 0000 0000 0000 0000 0001 / / Data 10000 0000 0000 0000 0000 0000 0000 0010 / / Data 20000 0000 0000 0000 0000 0000 0000 0011 / / Data 30000 0000 0000 0000 0000 0000 0000 0100 / / Data 40000 0000 0000 0000 0000 0000 0000 0101 / / Data 5

Listing 6.2: Initial data for memory.

Lab 6–2

Page 34: Verilog Lab Manual - CSUSB CNScse.csusb.edu/egomez/cs401/manual/Georgiou-verilog.pdf · Computer Architecture Implementing a Datapath in Verilog A Lab Manual George M. Georgiou and

Bibliography

[1] Michael D. Ciletti. Modeling, synthesis, and rapid prototyping with the Verilog HDL. Prentice-Hall, 1999.

[2] Dr. Daniel C. Hyde. CSCI 320 Computer Architecture Handbook on Verilog HDL. BucknellUniversity, 1997.

[3] IEEE - Institute of Electrical and Electronics Engineers. IEEE 1364-1995 Verilog LanguageReference Manual, 1995.

[4] David A. Patterson and John L. Hennessy. Computer Organization & Design: The Hardware/-Software Interface (Second Edition). Morgan Kaufmann, San Mateo, 1998.

[5] D. Thomas and P. Moorby. The Verilog Hardware Description Language. Kluwer Academic,1991.

Bib 1