硬體描述語言 Verilog HDL

Download Report

Transcript 硬體描述語言 Verilog HDL

Graduate Institute of Electronics Engineering, NTU
103-1 Under-Graduate Project
Verilog
Speaker: 朱瑋晴
Adviser: Prof. An-Yeu Wu
Date: 2014/9/30
ACCESS IC LAB
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Outline
Basic Concept of Verilog HDL
Gate Level Modeling
Simulation & Verification
Summary
P. 2
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
What is Verilog HDL ?
 Hardware Description Language
 Mixed level modeling
 Behavioral
 Algorithmic ( like high level language)
 Register transfer (Synthesizable)
 Register Transfer Level (RTL)
 Describing a system by the flow of data and control signals
within and between functional blocks
 Define the model in terms of cycles, based on a defined clock
 Structural
 Gate (AND, OR ……)
 Switch (PMOS, NOMS, JFET ……)
P. 3
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
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)
P. 4
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
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 netlist (gates and wires) in the code
P. 5
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Verilog Language Rules
 Verilog is a case sensitive language (with a few exceptions)
 Identifiers (space-free sequence of symbols)





upper and lower case letters from the alphabet
digits (0, 1, ..., 9) (cannot be the first character)
underscore ( _ )
$ symbol (only for system tasks and functions)
Max length of 1024 symbols
 Terminate lines with semicolon ;
 Single line comments:
 // A single-line comment goes here
 Multi-line comments:
 /* Multi-line comments like this */
P. 6
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Verilog HDL Syntax
module name
declaration
syntax
in/out port
port/wire
declaration
kernel hardware
gate-connection/
behavior
P. 7
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Module
 Basic building block in Verilog.
 Module
1. Created by “declaration” (can’t be nested)
2. Used by “instantiation“
Interface is defined by ports
May contain instances of other modules
All modules run concurrently
P. 8
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Instances
 A module provides a template from which you can
create actual objects.
 When a module is invoked, Verilog creates a unique
object from the template.
 Each object has its own name, variables, parameters
and I/O interface.
P. 9
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Module Instantiation
Adder
instance
example
Adder
Adder
Adder_tree
P. 10
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Port Connection
 Connect module port by order list
 FA1 fa1(c_o, sum, a, b, c_i);
 Connect module port by name .PortName( NetName )
 FA1 fa2(.A(a), .B(b), .CO(c_o),.CI(c_i), .S(sum));
 Recommended
P. 11
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Value Sets
4-value logic system in Verilog
 Four values: 0, 1, x or X, z or Z // Not case sensitive here
P. 12
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Register and Net
 Registers
 Keyword :
reg, integer, time, real
 Event-driven modeling
 Storage element (modeling sequential circuit)
 Assignment in “always” block
 Default value is X
 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
 Default value is Z
P. 13
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Wire & Reg
 reg
 A variable in Verilog
 Use of “reg” data type is not exactly synthesized to a
register.
 Use of wire & reg
 When use “wire”  usually use “assign” and “assign” does not
appear in “always” block
 When use “reg”  only use “a=b” , always appear in “always”
block
module test(a,b,c,d);
input a,b;
output c,d;
reg d;
assign c=a;
always @(b)
d=b;
endmodule
P. 14
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Choosing the Correct Data Types
An input or inout port must be a net.
An output port can be a register data type.
A signal assigned a value in a procedural
block must be a register data type.
P. 15
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Number Representation
 Format: <size>’<base_format><number>
 <size> - decimal specification of number of bits
 default is unsized and machine-dependent but at least 32 bits
 <base format> - ' followed by arithmetic base of number
 <d> <D> - decimal - default base if no <base_format> given
 <h> <H> - hexadecimal
 <o> <O> - octal
 <b> <B> - binary
 <number> - value given in base of <base_format>
 _ can be used for reading clarity
 If first character of sized, binary number 0, 1, x or z, will extend
0, 1, x or z (defined later!)
P. 16
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Number Representation
Examples:
6’b010_111
8’b0110
4’bx01
16’H3AB
24
5’O36
16’Hx
8’hz
gives 010111
gives 00000110
gives xx01
gives 0000001110101011
gives 0…0011000
gives 11110
gives xxxxxxxxxxxxxxxx
gives zzzzzzzz
P. 17
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Net Concatenations
A easy way to group nets
Representation
Meanings
{cout, sum}
{cout, sum}
{b[7:4],c[3:0]}
{b[7], b[6], b[5], b[4], c[3], c[2], c[1], c[0]}
{a,b[3:1],c,2’b10}
{a, b[3], b[2], b[1], c, 1’b1, 1’b0}
{4{2‘b01}}
8‘b01010101
{{8{byte[7]}},byte}
Sign extension
P. 18
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
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.
P. 19
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
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
P. 20
Graduate Institute of Electronics Engineering, NTU
Gate Level Modeling
ACCESS IC LAB
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Gate Level Modeling
Steps
Develop the boolean function of output
Draw the circuit with logic gates/primitives
Connect gates/primitives with net (usually wire)
HDL: Hardware Description Language
Figure out architecture first, then write code.
P. 22
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Primitives
Primitives are modules ready to be instanced
Smallest modeling block for simulator
Verilog build-in primitive gate
and, or, not, buf, xor, nand, nor, xnor
prim_name inst_name( output, in0, in1,.... );
EX. and g0(a, b, c);
User defined primitive (UDP)
building block defined by designer
P. 23
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Case Study
1-bit Full Adder
B
A
Co
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
P. 24
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Case Study
1-bit Full Adder
 co = (a‧b) + (b‧ci) + (ci‧a);
a
b
b
c
c
a
co
P. 25
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Case Study
1-bit Full Adder
sum = a
b
ci
a
b
sum
c
a
b
c
sum
P. 26
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Case Study
1-bit Full Adder
Full Adder Connection
Instance ins_c from FA_co
Instance ins_s from FA_sum
full adder
a
b
b
c
c
a
a
b
c
carry out
connection
co
sum
connection
sum
P. 27
Graduate Institute of Electronics Engineering, NTU
Timing and Delays
ACCESS IC LAB
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Delay Specification in Primitives
Delay specification defines the propagation
delay of that primitive gate.
not #10 (out,in);
P. 29
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Types of Delay Models
 Distributed Delay
 Specified on a per element basic
 Delay value are assigned to individual in the circuit
a
b
#5
e
#4
c
d
#7
f
out
module and4(out, a, b, c, d);
……
and #5 a1(e, a, b);
and #7 a2(f, c, d);
and #4 a3(out, e, f);
endmodule
P. 30
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Types of Delay Models
 Lumped Delay
 They can be specified as a single delay on the output gate of
the module
 The cumulative delay of all paths is lumped at one location
a
b
e
#11
c
f
out
module and4(out, a, b, c, d);
……
and
a1(e, a, b);
and
a2(f, c, d);
and #11 a3(out, e, f);
endmodule
d
P. 31
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Types of Delay Models
 Pin-to-Pin Delay
 Delays are assigned individually to paths from each input to
each output.
 Delays can be separately specified for each input/output
path.
a
b
e
out
c
f
Path a-e-out, delay = 9
Path b-e-out, delay =9
Path c-f-out, delay = 11
Path d-f-out, delay = 11
d
P. 32
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Timing Checks
setup and hold checks
clock
data
setup
time
hold
time
specify
$setup(data, posedge clock, 3);
endspecify
specify
$hold(posedge clock, data, 5);
endspecify
P. 33
Graduate Institute of Electronics Engineering, NTU
Simulation & Verification
ACCESS IC LAB
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Test Methodology
 Systematically verify the
functionality of a model.
 Simulation:
Test bench
data_i
input ports
(1) detect syntax violations in
source code
(2) simulate behavior
(3) monitor results
Design
Top Module
answer_o
Equal?
output ports
data_o
P. 35
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Testbench for Full Adder
module t_full_add();
reg
a, b, cin;
wire
sum, c_out;
// for stimulus waveforms
full_add M1 (sum, c_out, a, b, cin); //DUT
initial #200 $finish;
// Stopwatch
initial begin
// Stimulus patterns
$fsdbDumpfile(“t_full_add.fsdb”);
$fsdbDumpvars;
#10 a = 0; b = 0; cin = 0; // Statements execute in sequence
#10 a = 0; b = 1; cin = 0;
#10 a = 1; b = 0; cin = 0;
#10 a = 1; b = 1; cin = 0;
#10 a = 0; b = 0; cin = 1;
#10 a = 0; b = 1; cin = 1;
#10 a = 1; b = 0; cin = 1;
#10 a = 1; b = 1; cin = 1;
end
endmodule
P. 36
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Simulation Results
MODELING TIP
A Verilog simulator assigns an initial value of x to all
variables.
P. 37
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Example: Propagation Delay
 Unit-delay simulation reveals the chain of events
module Add_full (sum, c_out, a, b, c_in);
output
sum, c_out;
input
a, b, c_in;
wire
w1, w2, w3;
Add_half
Add_half
or
endmodule
#1
M1 (w1, w2, a, b);
M2 (sum, w3, w1, c_in);
M3 (c_out, w2, w3);
module Add_half (sum, c_out, a, b);
output
sum, c_out;
input
a, b;
xor
and
endmodule
#1 M1 (sum, a, b); // single delay value format
#1 M2 (c_out, a, b); // others are possible
P. 38
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Simulation with delay
P. 39
ACCESS IC LAB
Graduate Institute of Electronics Engineering, NTU
Summary
 Design module
 Gate-level or RT-level
 Real hardware
 Instance of modules exist 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++
P. 40
ACCESS IC LAB
 Verilog is a platform
Graduate Institute of Electronics Engineering, NTU
Note
 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
畫圖(architecture), then 連連看(coding)
 Sequential circuits
register: element to store data
P. 41