Lecture Note on Verilog, Course #90132300, EE, NTU, CH Tsai

advertisement
Basic Logic Design
with Verilog
TA: Chen-han Tsai
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
Outline
Introduction to HDL/ Verilog
Gate Level Modeling
Behavioral Level Modeling
Test bench
Summary and Notes
Simulation using Silos
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Introduction to HDL/ Verilog
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
What is HDL/Verilog
Why use HDL (Hardware Description Language)?
HDL ←→ layout by human
Reduce cost and time
Verilog is one of the most popular HDLs
VHDL (another popular HDL)
Key features of Verilog
Supports Various levels
Behavior level (Register Transfer Level, RTL)
Gate level
Switch level
Simulate design functions
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Hardware Design Flow
Designer
Level
RTL
Simulation
RTL
Editor
Cost
High
Low
Low
High
RTL Code
Gate Level
Simulation
Verilog
Post Gate
Level
Simulation
Logic
Synthesizer
Gate Level Code
Place & Route
Physical Layout
Tape Out
Chip EE, NTU
Lecture Note on Vrilog, Course #90132300,
C.H Tsai, 10/29/2004
An Example
1-bit Multiplexer
to “select” output
in1
sel
0
out
in2
1
if (sel==0)
out = in1;
else
out = in2;
sel
in1
in2
out
0
0
0
0
0
0
1
0
0
1
0
1
0
1
1
1
1
0
0
0
1
0
1
1
1
1
0
0
1
1
1
1
out = (sel’‧in1) + (sel‧in2)
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Gate Level Description
in1
iv_sel
in2
n1
sel
a1
a2
a1_o
o
1
out
a2_o
iv_sel
Gate Level: you see only gates and wires in the code
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Behavioral Level Description
always block
assign
RTL: you may see high level behavior in the code
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Verilog HDL Syntax
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
A Simple Verilog Code
module name
in/out port
declaration
syntax
port/wire
declaration
kernel hardware
gate-connection/
behavior
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Module
Basic building block in Verilog.
Module
Created by “declaration” (can’t be nested)
2. Used by “instantiation“
1.
Interface is defined by ports
May contain instances of other modules
All modules run concurrently
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Module Instantiation
Adder
instance
example
Adder
Adder
Adder_tree
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Port Connection
Connect module port by order list
FA1 fa1(c_o, sum, a, b, c_i);
Not fully connected
FA1 fa3(c_o,, a, b, c_i);
Connect module port by name
FA1 fa2(.A(a), .B(b), .CO(c_o),.CI(c_i), .S(sum));
Recommended
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Verilog Language Rule
Case sensitive
Identifiers:
Digits 1…9
Underscore _
Upper and lower case letters from the alphabet
Terminate line with semicolon “;”
Comments:
Single line: // it’s a single line comment example
Multiline: /* when the comment exceeds single line,
multiline comment is necessary*/
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Register and Net
Registers
Keyword : reg, integer, time, real
Storage element
Assignment in “always” block
Nets
Keyword : wire, wand, wor, tri
triand, trior, supply0, supply1
Doesn’t store value, just a connection
input, output, inout are default “wire”
Can’t appear in “always” block assignment
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Value and Number expressions
Verilog value set consists of four basic values:
0 represent a logic zero or false condition
1 represent a logic one or true condition
x represent an unknown logic value
z represent a high-impedance stage
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Value and Number
Expressions : Examples
659
// unsized decimal
‘h 837ff // unsized
hexadecimal
‘o7460 // unsized octal
4af
// illegal syntax
4’b1001 // 4-bit binary
5’D 3
// 5-bit decimal
3’b01x // 3-bit number with
unknown LSB
12’hx
// 12-bit unknown
8’d -6 // illegal syntax
-8’d 6 // phrase as - (8’d6)
// underline usage
27_195_000
16’b0001_0101_0001_1111
32’h12ab_f001
// X and Z is sign-extended
reg [11:0] a;
initial
begin
a = ‘hx;
a = ‘h3x;
a = ‘h0x;
end
Lecture Note on Vrilog, Course #90132300, EE, NTU
// yields xxx
// yields 03x
// yields 00x
C.H Tsai, 10/29/2004
Net Concatenations :
An Easy Way to Group Nets
Module B
Module A
Module C
3‘o7
Representations
Meanings
{b[3:0],c[2:0]}
{a,b[3:0],w,3’b101}
{4{w}}
{b,{3{a,b}}}
{b[3] ,b[2] ,b[1] ,b[0], c[2] ,c[1] ,c[0]}
{a,b[3] ,b[2] ,b[1] ,b[0],w,1’b1,1’b0,1’b1}
{w,w,w,w}
{b,a,b,a,b,a,b}
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
(excerpts from CIC training course: Verilog_9807.pdf)
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
(excerpts from CIC training course: Verilog_9807.pdf)
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Compiler Directives
`define
`define RAM_SIZE 16
Defining a name and gives a constant value to it.
`include
`include adder.v
Including the entire contents of other verilog source
file.
`timescale
`timescale 100ns/1ns
Setting the reference time unit and time precision of
your simulation.
Only 1, 10, and 100 are legal values.
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
System Tasks
$monitor
$monitor ($time,"%d %d %d",address,sinout,cosout);
Displays the values of the argument list whenever any
of the arguments change except $time.
$display
$display ("%d %d %d",address,sinout,cosout);
Prints out the current values of the signals in the
argument list
$finish
$finish
Terminate the simulation
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Gate Level Modeling
Gate Level Modeling
Primitives
Case Study
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
Gate Level Modeling
Steps
Design the smallest sub-modules
Construct modules with built sub-modules
Connections
Use “assign a = b;” to connect a and b (a is driven
by b)
HDL: Hardware Description Language
Architecture figure first, then start to write
code!!
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Primitives
Primitives are modules ready to be
instanced
Verilog build-in primitive gate
not, buf
and, or, not, buf, xor, nand, nor, xnor
Design ware
Vender-provided primitive gates
User-built primitive gate
Your building block modules (sub-modules)
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
A
Co
B
Full
Adder
S
Ci
Ci
A
B
Co
S
0
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
1
1
0
1
0
0
0
1
1
0
1
1
0
1
1
0
1
0
1
1
1
1
1
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Co = (A‧B‧Ci’)+(A‧B’‧Ci)+(A’‧B‧Ci)+(A‧B‧Ci)
= (A‧B‧Ci’)+(A‧B’‧Ci)+ (B‧Ci)
= { A‧[ (B‧Ci’)+(B’‧Ci) ] } + (B‧Ci)
B’
Ci
B
Ci’
A0
O0
A1
A
B
Ci
A2
O1
Co
A3
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
S = (A’‧B’‧Ci)+(A’‧B‧Ci’)+(A‧B’‧Ci’)+(A‧B‧Ci)
= { A’‧[ (B’‧Ci)+(B‧Ci’) ] } + { A‧[ (B’‧Ci’)+(B‧Ci) ] }
B’
Ci
A4
B
Ci’
A5
B’
Ci’
B
Ci
O2
A’
A
A7
A6
O4
S
A9
O3
A8
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Design hierarchy
B’
Ci
B
Ci’
AND
OR
O0
A1
A
B’
Ci
A4
B
Ci’
A5
B’
Ci’
B
Ci
Co connect
A0
B
Ci
A2
O1
Co
O4
S
A3
O2
A’
A
A7
A6
A9
O3
A8
S connect
Full Adder
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Basic gate: 1-bit AND
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Basic gate: 1-bit OR
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Connect co
Instance AND, OR gates
B’
Ci
B
Ci’
A0
O0
A1
A
B
Ci
A2
O1
Co
A3
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Connect s
Instance AND, OR gates
B’
Ci
A4
B
Ci’
A5
B’
Ci’
B
Ci
O2
A’
A
A7
A6
O4
S
A9
O3
A8
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Full Adder Connection
Instance co, s
B’
Ci
B
Ci’
O0
A1
A
B’
Ci
A4
B
Ci’
A5
B’
Ci’
B
Ci
Co connect
A0
B
Ci
A2
O1
Co
O4
S
A3
O2
A’
A
A7
A6
A9
O3
A8
S connect
Full Adder
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Code
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
However…
Further Reduction is Possible
B’
Ci
B
Ci’
A1
A
A4
B
Ci’
A5
B
Ci
Ci
O0
B’
Ci
B’
Ci’
B’
A0
O2
B
Ci
A’
A
A7
B
Ci’
A2
O1
A0
O0
A1
Co
A3
A6
O4
S
A9
A
B
Ci
A’
A
-1
A2
O1
Co
O4
S
A3
A6
A9
O3
A8
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Behavioral Level Modeling
Behavioral Level Modeling
Case Study
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
Behavioral Level Modeling
High level description
User friendly
Concise code
Widely used for some common operations
+,-,*
&,|,~
Two main formats
always block
assign
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
A
Co
B
Full
Adder
S
Ci
{Co,S} = A + B + Ci
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Case Study
1-bit Full Adder
LHS signals in always
block should be declared
as “reg”
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Test bench
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
Test bench Usage
Test bench
data_i
input ports
Design
Top Module
answer_o
Equal?
output ports
data_o
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Summary
Design module
Gate level or behavior level
Real hardware
Modules exists all the time
Each module has architecture figure
Plot architecture figures before you write verilog codes
Test bench
Feed input data and compare output values versus
time
Usually behavior level
Not real hardware, just like C/C++
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Note
Verilog is a platform
Support hardware design (design module)
Also support C/C++ like coding (test bench)
How to write verilog well
Know basic concepts and syntax
Get a good reference (a person or some code files)
Form a good coding habit
Naming rule, comments, format partition (assign or always
block)
Hardware
Combinational circuits (today’s topic)
畫圖(architecture), then 連連看(coding)
Sequential circuits (next topic)
register: element to store data
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Simulation using Silos
Lecture Note on Verilog, Course #90132300, EE, NTU, C.H Tsai
Create new project
Write your verilog design code
Create a new project:
Project -> New -> (enter your project name)
Include your verilog file(s)
(choose your .v file) -> (click Add bottom) ->
(click OK)
Note that testbench should be included
Then run and debug
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Run and Debug
Run
Press F5 or click the “GO” icon on tool bar
An output window is generated to show whether
there exists errors.
Debug
Press “open analyzer” on the toolbar
Press “open explorer” on the toolbar
Choose signals you want to watch
Click right button and select “Add signal to analyzer”
Then you can debug with waveform
Lecture Note on Vrilog, Course #90132300, EE, NTU
C.H Tsai, 10/29/2004
Download