36
Random Number Generation Section 3.10 Section 4.12

Random Number Generation Section 3.10 Section 4.12

Embed Size (px)

DESCRIPTION

Observations from Last Thursday’s Lab (1) The verilog code should be saved in a *.v file, e.g. – fig3p37.v is the file name – to execute the simulation, you need to type verilog +gui fig3p37.v &

Citation preview

Page 1: Random Number Generation Section 3.10 Section 4.12

Random Number Generation

Section 3.10Section 4.12

Page 2: Random Number Generation Section 3.10 Section 4.12

Outline• Observations from the last week’s lab• Anatomy of a Verilog Program• More about Verilog

– Including a file– Test a Module with a Random Sequence

• Example: NAND Implementation of a NOT Gate

• The NAND Implementation of a NOR Gate– Implementation Using 74LS00

Page 3: Random Number Generation Section 3.10 Section 4.12

Observations from Last Thursday’s Lab (1)

• The verilog code should be saved in a *.v file, e.g. – fig3p37.v is the file name– to execute the simulation, you need to

type verilog +gui fig3p37.v &

Page 4: Random Number Generation Section 3.10 Section 4.12

Observations from Last Thursday’s Lab (2)

Correction: Remove semicolon from the end of timescale line.

Page 5: Random Number Generation Section 3.10 Section 4.12

Observations from Last Thursday’s Lab (3)

Correction: Use a backward quote (`), not a single quote (‘)

Page 6: Random Number Generation Section 3.10 Section 4.12

Observations from Last Thursday’s Lab (4)

Definition of the module

fig3p37 is the module name.I1 is the instance of the module.

Comment: You need both modules!

Page 7: Random Number Generation Section 3.10 Section 4.12

Observations from Last Thursday’s Lab (5)

System!   Source file "fig3p37.v" cannot be opened for                                   reading                                           [Verilog-SFCOR]

Solution:[r2d2@localhost verilogSandBox]$ chmod 755 fig3p37.v

Page 8: Random Number Generation Section 3.10 Section 4.12

Question

// comments out a line

Page 9: Random Number Generation Section 3.10 Section 4.12

Question: How do I get the play button back?

If you comment out $stop and stop the simulation by using Initial #200 $finish, you will not get the play button.

What do you do then?

Page 10: Random Number Generation Section 3.10 Section 4.12

Solution: Simulation ->Reinvoke Simulator

Page 11: Random Number Generation Section 3.10 Section 4.12

Solution: Simulation ->Reinvoke Simulator

Select Yes

Page 12: Random Number Generation Section 3.10 Section 4.12

You Get the Play Button Back!

Play button

Page 13: Random Number Generation Section 3.10 Section 4.12

Review of What We have Learned

• A minimalist’s view of a verilog Module

• A minimalist’s view of a module test bench

Page 14: Random Number Generation Section 3.10 Section 4.12

Anatomy of a Verilog Module

module fig3p37 (A,B,C,D,E);output D,E;input A,B,C;wire w1;

and G1(w1,A,B);not G2(E,C);or G3(D,w1,E);

endmodule

Page 15: Random Number Generation Section 3.10 Section 4.12

module....endmodule

module fig3p37 (A,B,C,D,E);output D,E;input A,B,C;wire w1;

and G1(w1,A,B);not G2(E,C);or G3(D,w1,E);

endmodule

Always start the verilog programwith the keyword pairmodule…endmodule

The keyword module must always be terminated by the keywordendmodule.

Page 16: Random Number Generation Section 3.10 Section 4.12

output/input

module fig3p37 (A,B,C,D,E);output D,E;input A,B,C;wire w1;

and G1(w1,A,B);not G2(E,C);or G3(D,w1,E);

endmodule

1. output/input2. wire

Page 17: Random Number Generation Section 3.10 Section 4.12

Program Body

module fig3p37 (A,B,C,D,E);output D,E;input A,B,C;wire w1;

and G1(w1,A,B);not G2(E,C);or G3(D,w1,E);

endmodule

Program body

Page 18: Random Number Generation Section 3.10 Section 4.12

Anatomy of a Test BenchTest Bench

1. `timescale2. module module_tb (, , ,)…endmodule 3. ouput,reg4. Invoke the module5. Define the input vector

Page 19: Random Number Generation Section 3.10 Section 4.12

Use `include to reference a file

Troubleshooting Exercise:verilog +gui fig3p37.v &

Page 20: Random Number Generation Section 3.10 Section 4.12

Introduce a Random Test Vector• flip_me function

Q: What is the function of this module?

Page 21: Random Number Generation Section 3.10 Section 4.12

flip_me_tb.v• Test Bench Definition: Feed a random

sequence of binary numbers to flip_me.v

A=random inputB=flipped version of A

Page 22: Random Number Generation Section 3.10 Section 4.12

Test Bench for flip_me.vReference: Mano page 170-174.

Page 23: Random Number Generation Section 3.10 Section 4.12

`timescaleComment out time scaleEach time interval is one second.

Page 24: Random Number Generation Section 3.10 Section 4.12

include flip_me.v

Page 25: Random Number Generation Section 3.10 Section 4.12

Define outputs,regWe will read random numbers from a file.The random numbers are stored in t_A.vectornum is the index of the t_A.At the falling edge of the t_clock, a randomnumbers stored in t_A is transferred to A.

Page 26: Random Number Generation Section 3.10 Section 4.12

flip_me.v is called.

Page 27: Random Number Generation Section 3.10 Section 4.12

1000 time intervals will be simulated.

Page 28: Random Number Generation Section 3.10 Section 4.12

Clock Generation

t_clock is initially 0.t_clock is flipped every 5 time intervals.The period of t_clock is 10 time intervals.

Page 29: Random Number Generation Section 3.10 Section 4.12

Read numbers from an input file

Random number is stored in t_A.

Page 30: Random Number Generation Section 3.10 Section 4.12

Update at NegEdge of t_clock

At negative edge of t_clock,transfer the random number fromt_A to A.

Page 31: Random Number Generation Section 3.10 Section 4.12

Monitor Numbers

Monitor numbers

Page 32: Random Number Generation Section 3.10 Section 4.12

Waveforms

Page 33: Random Number Generation Section 3.10 Section 4.12

Run Verilog Using Command-line

$monitor only displays the results when A changes.Actual sequence: 101011001011…

Page 34: Random Number Generation Section 3.10 Section 4.12

Implement NOR with NANDs

C

D

E

F

A, B as inputs C,D, E as wiresF as output

G1

G2

G3 G4

Page 35: Random Number Generation Section 3.10 Section 4.12

nor_with_nand.v

Page 36: Random Number Generation Section 3.10 Section 4.12

nor_with_nand_tb.v

Use flip_me_tb.v as a guide. Complete the code for nor_with_nand_tb.v