inst.eecs.berkeley.edu/~cs61c cs61c : machine...
TRANSCRIPT
![Page 1: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/1.jpg)
CS 61C L30 Verilog I (1) Garcia, Spring 2004 © UCB
Lecturer PSOE Dan Garcia
www.cs.berkeley.edu/~ddgarcia
inst.eecs.berkeley.edu/~cs61cCS61C : Machine Structures
Lecture 30 –Verilog I
2004-04-07
U Conn! ⇒ Amazing hoop
story, never been donebefore. Both Men’s and
Women’s team win 2004NCAA basketball titles!Diana Taurasi for Prez!
![Page 2: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/2.jpg)
CS 61C L30 Verilog I (2) Garcia, Spring 2004 © UCB
What about overflow?
•Consider a 2-bit signed # & overflow:•10 = -2 + -2 or -1•11 = -1 + -2 only•00 = 0 NOTHING!•01 = 1 + 1 only
•Highest adder• C1 = Carry-in = Cin, C2 = Carry-out = Cout• No Cout or Cin ⇒ NO overflow!• Cin, and Cout ⇒ NO overflow!• Cin, but no Cout ⇒ A,B both > 0, overflow!• Cout, but no Cin ⇒ A,B both < 0, overflow!
± #
Whatop?
![Page 3: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/3.jpg)
CS 61C L30 Verilog I (3) Garcia, Spring 2004 © UCB
What about overflow?
•Consider a 2-bit signed # & overflow:10 = -2 + -2 or -111 = -1 + -2 only00 = 0 NOTHING!01 = 1 + 1 only
•Overflows when…• Cin, but no Cout ⇒ A,B both > 0, overflow!• Cout, but no Cin ⇒ A,B both < 0, overflow!
± #
![Page 4: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/4.jpg)
CS 61C L30 Verilog I (4) Garcia, Spring 2004 © UCB
Extremely Clever Subtractor
What’s another way to say: A-B?A + (-B)How do we negate B?Complement and add 1 (conditional inv…)
![Page 5: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/5.jpg)
CS 61C L30 Verilog I (5) Garcia, Spring 2004 © UCB
Peer Instruction
A. # rows in mux truth table with 5bits of signals is ≤ 128,000,000,000
B. We could cascade N 1-bit shiftersto make 1 N-bit shifter for sll, srl
C. If 1-bit adder delay is T, the N-bitadder delay would also be T
ABC1: FFF2: FFT3: FTF4: FTT5: TFF6: TFT7: TTF8: TTT
![Page 6: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/6.jpg)
CS 61C L30 Verilog I (6) Garcia, Spring 2004 © UCB
“And in semi-conclusion…”
•Use muxes to select among input• S input bits selects 2S inputs• Each input can be n-bits wide, indep of S
• Implement muxes hierarchically•ALU can be implemented using a mux
• Coupled with basic block elements
•N-bit adder-subtractor done usingN 1-bit adders with XOR gates on input• XOR serves as conditional inverter
![Page 7: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/7.jpg)
CS 61C L30 Verilog I (7) Garcia, Spring 2004 © UCB
Administrivia
•Reading quiz not up by 6pm; most didit, but it’ll officially be due Friday(there’s also the Friday Quiz too)
![Page 8: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/8.jpg)
CS 61C L30 Verilog I (8) Garcia, Spring 2004 © UCB
Verilog Overview (1/3)
•A Hardware Description Language(HDL) for describing & testing logiccircuits.
• text based way to talk about designs• easier to simulate before silicon• translate into silicon directly
•No sequential execution, normallyhardware just “runs” continuously.•Verilog: A strange version of C, withsome changes to account for time
• VHDL is alternative; similar and can pickit up easily. Verilog simpler to learn!
![Page 9: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/9.jpg)
CS 61C L30 Verilog I (9) Garcia, Spring 2004 © UCB
Verilog Overview (2/3)
•Verilog description composed ofmodules:module Name ( port list ) ;Declarations and Statements;endmodule;
•Modules can have instantiations ofother modules, or use primitivessupplied by language•Note that Verilog varies from C syntax,borrowing from Ada programminglanguage at times (endmodule)
![Page 10: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/10.jpg)
CS 61C L30 Verilog I (10) Garcia, Spring 2004 © UCB
Verilog Overview (3/3)
•Verilog has 2 basic modes1. Structural composition: describesthat structure of the hardwarecomponents, including how ports ofmodules are connected together
• module contents are builtin gates (and,or, xor, not, nand, nor, xnor, buf) orother modules previously declared
2. Behavoral: describes what should bedone in a module
• module contents are C-like assignmentstatements, loops
![Page 11: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/11.jpg)
CS 61C L30 Verilog I (11) Garcia, Spring 2004 © UCB
Example: Structural XOR (xor built-in,but..)module xor(X, Y, Z);input X, Y;output Z;wire notX, notY,XnotY, YnotX;
not (notX, X); (notY, Y);and
(YnotX, notX, Y); (XnotY, X, notY);or
(Z, YnotX, XnotY);endmodule;
XY
XY
Z
XnotY
YnotXnotX
notY
which “ports” input, output
“ports” connect components
Note: order of gates doesn’t matter, since structure determines relationship
Default is 1 bit wide data
![Page 12: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/12.jpg)
CS 61C L30 Verilog I (12) Garcia, Spring 2004 © UCB
Example: Behavoral XOR in Verilogmodule xorB(X, Y, Z);input X, Y;output Z;reg Z;always @ (X or Y)
Z = X ^ Y;endmodule;
•Unusual parts of above Verilog• “always @ (X or Y)” => whenever X orY changes, do the following statement
• “reg” is only type of behavoral data thatcan be changed in assignment, so mustredeclare Z
• Default is single bit data types: X, Y, Z
![Page 13: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/13.jpg)
CS 61C L30 Verilog I (13) Garcia, Spring 2004 © UCB
Verilog: replication, hierarchy
•Often in hardware need many copiesof an item, connected together in aregular way
• Need way to name each copy• Need way to specify how many copies
•Specify a module with 4 XORs usingexisting module example
![Page 14: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/14.jpg)
CS 61C L30 Verilog I (14) Garcia, Spring 2004 © UCB
Example: Replicated XOR in Verilogmodule 4xor(A, B, C);input[3:0] A, B;output[3:0] C;xorB My4XOR[3:0] (.X(A), .Y(B), .Z(C) );
endmodule;
• Note 1: can associate portsexplicitly by name,
• (.X (A), .Y(B), .Z(C) )
• or implicitly by order (as in C)• (A, B, C)
• Note 2: must give a name tonew instance of xors (My4XOR) C[0]A[0]
B[0]
A[0]B[0]
C[1]A[1]B[1]
A[1]B[1]
C[2]A[2]B[2]
A[2]B[2]
C[3]A[3]B[3]
A[3]B[3]
![Page 15: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/15.jpg)
CS 61C L30 Verilog I (15) Garcia, Spring 2004 © UCB
Verilog big idea: Time
•Difference from normal prog. lang. isthat time is part of the language
• part of what trying to describe is whenthings occur, or how long things will take
• In both structural and behavoral Verilog,determine time with #n : event will takeplace in n time units
• structural: not #2(notX, X) says notXdoes not change until time advances 2 ns
• behavoral: Z = #2 A ^ B; says Z doesnot change until time advances 2 ns
• Default unit is nanoseconds; can change
![Page 16: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/16.jpg)
CS 61C L30 Verilog I (16) Garcia, Spring 2004 © UCB
Example:
• “Initial” means dothis code once•Note: Verilog usesbegin … end vs.{ … } as in C•#2 stream = 1means wait 2 nsbefore changingstream to 1• Output called a“waveform”
module test(stream);output stream;reg stream;inital
beginstream = 0;#2 stream = 1;#5 stream = 0;#3 stream = 1;#4 stream = 0;
end;endmodule;
stream0
1 time
2 7 10 14
![Page 17: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/17.jpg)
CS 61C L30 Verilog I (17) Garcia, Spring 2004 © UCB
Testing in Verilog
•Code above just defined a new module•Need separate code to test the module(just like C/Java)•Since hardware is hard to build, majoremphasis on testing in HDL•Testing modules called “test benches”in Verilog; like a bench in a labdedicated to testing•Can use time to say how things change
![Page 18: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/18.jpg)
CS 61C L30 Verilog I (18) Garcia, Spring 2004 © UCB
Testing Verilog
•Create a test module that instantiatesxor:module testxor;reg x, y, expected; wire z;xor myxor(.x(x), .y(y), .z(z)); /* add testing code */endmodule;
•Syntax: declare registers, instantiatemodule.
![Page 19: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/19.jpg)
CS 61C L30 Verilog I (19) Garcia, Spring 2004 © UCB
Testing continued
•Now we write code to try differentinputs by assigning to registers:…initial begin x=0; y=0; expected=0;#10 y=1; expected=1;#10 x=1; y=0;#10 y=1; expected=0; end
![Page 20: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/20.jpg)
CS 61C L30 Verilog I (20) Garcia, Spring 2004 © UCB
Testing continued
•Pound sign syntax (#10) indicatescode should wait simulated time (10nanoseconds in this case).•Values of registers can be changedwith assignment statements.•So far we have the xor module and atestxor module that iterates over allthe inputs. How do we see if it iscorrect?
![Page 21: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/21.jpg)
CS 61C L30 Verilog I (21) Garcia, Spring 2004 © UCB
Testing continued
•Use $monitor to watch some signals andsee every time they change:…initial$monitor(“x=%b, y=%b, z=%b, exp=%b, time=%d”,x, y, z, expected, $time);
•Our code now iterates over all inputs andfor each one: prints out the inputs, thegate output, and the expected output.•$time is system function gives currenttime
![Page 22: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/22.jpg)
CS 61C L30 Verilog I (22) Garcia, Spring 2004 © UCB
Output
x=0, y=0, z=0, exp=0, time=0
x=0, y=1, z=1, exp=1, time=10
x=1, y=0, z=1, exp=1, time=20
x=1, y=1, z=0, exp=0, time=30
• Expected value matches actual value, soVerilog works
![Page 23: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/23.jpg)
CS 61C L30 Verilog I (23) Garcia, Spring 2004 © UCB
Peer Instruction
•How many mistakes in this module? module test(X); output X; initial begin X = 0; X = 1; end end;
1. 12. 23. 34. 45. 56. 0
![Page 24: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/24.jpg)
CS 61C L30 Verilog I (24) Garcia, Spring 2004 © UCB
Peer Instruction
•How many mistakes in this module? module test(X); output X; reg X; // To change initial begin X = 0; #2 X = 1; // delay! end endmodule; // Ada naming
1. 12. 23. 34. 45. 56. 0
![Page 25: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/25.jpg)
CS 61C L30 Verilog I (25) Garcia, Spring 2004 © UCB
Peer Instruction
•Who’ll be the next apprentice?
1 2 3 4 5
Don’tcare/know
![Page 26: inst.eecs.berkeley.edu/~cs61c CS61C : Machine Structurescs61c/sp04/lectures/L30-dg-VERILOG1.pdf•Code above just defined a new module •Need separate code to test the module (just](https://reader030.vdocuments.site/reader030/viewer/2022040521/5e7c727c896df074b52297f5/html5/thumbnails/26.jpg)
CS 61C L30 Verilog I (26) Garcia, Spring 2004 © UCB
In conclusion•Verilog allows both structural andbehavioral descriptions, helpful in testing•Syntax a mixture of C (operators, for,while, if, print) and Ada (begin… end,case…endcase, module …endmodule)•Some special features only in HardwareDescription Languages
• # time delay, initial vs. always
•Verilog can describe everything fromsingle gate to full computer system; youget to design a simple processor