Document 7809950
Download
Report
Transcript Document 7809950
Verilog Basics
Nattha Jindapetch
November 2008
Agenda
Logic design review
Verilog HDL basics
LABs
Logic Design Review
Basic Logic gates
Additional Logic Gates
Two Types
Combinational circuit
No "memory"
Its output depends only upon the current
state of its inputs.
Sequential circuit
Contains memory elements
Its output depends not only upon the current
state of its inputs, but also on the current
state of the circuit itself.
Two Styles: Synchronous and Asynchronous
Combinational Circuits: examples
Multiplexers
2n x 1 multiplexer receives 2n input bits and n selector
bits, and outputs exactly one of the input bits,
determined by the pattern of the selector bits.
Combinational Circuits: examples
Demultiplexers
1 x 2n DMUX is the
inverse of MUX
It takes 1 input and
transmits that input on
exactly one of its outputs,
determined by the
pattern of its n selector
bits.
Combinational Circuits: examples
Encoders
2n x n encoder takes 2n
inputs and sets each of
its n outputs, based
upon the pattern of its
inputs.
an encoder is the
inverse of a decoder.
Combinational Circuits: examples
Decoders
An n x 2n decoder
takes n inputs and
sets exactly one of
its 2n outputs,
based upon the
pattern of its
inputs.
Sequential Circuits
R
Circuits with feedback
Q
Q'
S
R
0
1
0
1
Cross-coupled NOR gates
S
0
0
1
1
Q Q’
No change
0 1 Reset
1 0 Set
Not allowed
Sequential Elements
Latches vs Flip-Flops
Latches work on Level-sensitive
Flip-Flops work on Edge-triggered
RS, JK, D, T
S
R
Q Q’
J
K
Q Q’
0
0
No change
D
Q
T
Q
0
0
No change
0
1
0
1 Reset
0
0
0
1
0
1
0
1
1
1
1
0
1
0
1
0 Set
1
0
1
0
1
1
1
1
Toggle
Not allowed
Counters
Synchronous counter
Clock of synchronous
counter are same clock.
Asynchronous counter
Clock of second flipflop is Q of first flipflop.
The clock of
asynchronous counter
are different source.
Registers
A register is used for storing several bits of
digital data.
It basically consists of a set of flip-flops.
each flip-flop representing one bit of the register.
Thus, an n-bit register has n flip-flops.
A Simple Shift Register Consisting of D-type Flip-flops
Verilog HDL basics
HDL (Hardware Description Language)
Big picture: Two main HDLs out there
VHDL
Verilog HDL
Designed by committee on request of the
Department of Defense
Based on Ada
Designed by a company for their own use
Based on C
Both now have IEEE standards
Both are in wide use
Verilog Description Styles
Verilog supports a variety of description
styles
Structural
Behavioral
explicit structure of the circuit
e.g., each logic gate instantiated and connected to
others
program describes input/output behavior of
circuits
Mixed
Verilog Module
module module-name (list-of-port);
input/output declarations
local net declarations
parallel statements
endmodule
Structural Module: example1
module half_adder (s, a, b, co);
input
a, b;
output
s, co;
wire
w0, w1, w2;
assign
w0 = a & b,
w1 = ~w0,
w2 = a | b,
s = w1 & w2,
co = w0;
endmodule
co
a
b
w0
w1
s
w2
a
b
s
co
0
0
0
0
0
1
1
0
1
0
1
0
1
1
1
1
Structural Module: example1
module full_adder (s, a, b, co, ci);
input
a, b, ci;
output
s, co;
a
i0
a
co
w1
co
HA
b
wire
w0, w1, w2;
w0
assign
co = w1 | w2;
half_adder i0
(.co(w1), .s(w0), .a(a), .b(b)); ci
half_adder i1
(.co(w2), .s(s), .a(w0), .b(ci));
endmodule
b
s
i1
a
co
HA
b
s
w2
s
Structural Module: example1
module adder4
input [3:0]
input ci;
output [3:0]
output
(s, a, b, co, ci);
a, b;
s,
co;
wire
w0, w1, w2;
full_adder i0
(.co(w0), .s(s[0]), .a(a[0]), .b(b[0]),
.ci(ci));
full_adder i1
(.co(w1), .s(s[1]), .a(a[1]), .b(b[1]),
.ci(w0));
full_adder i2
(.co(w2), .s(s[2]), .a(a[2]), .b(b[2]),
.ci(w1));
full_adder i3
(.co(co), .s(s[3]), .a(a[3]), .b(b[3]),
.ci(w2));
endmodule
ci
a[0]
b[0]
i0
ci
a
b
a[1]
b[1]
i1
ci
a
b
a[2]
b[2]
i2
ci
a
b
a[3]
b[3]
i3
ci
a
b
FA
s
co
FA
s
co
FA
s
co
FA
s
co
s[0]
w0
s[1]
w1
s[2]
w2
s[3]
co
Behavioral Module: example1
module adder4 (s, a, b, co, ci);
input
[3:0] a, b;
input
ci;
output [3:0]
s,
output
co;
reg [3:0] s;
reg co;
always @(a or b or ci)
{co, s} = a + b + ci;
endmodule
Verilog Data Types
Possible Values:
0: logic 0, false
1: logic 1, true
X: unknown logic value
Z: High impedance state
Registers and Nets (wires) are the main data
types
Integer, time, and real are used in behavioral
modeling, and in simulation
Note that they are not synthesized !
Verilog Registers
Abstract model of a data storage element
A reg holds its value from one assignment
to the next
The value “sticks”
Register type declarations
reg a; // a scalar register
reg [3:0] b; // a 4-bit vector register
Verilog Nets
Nets (wires) model physical connections
They don’t hold their value
They must be driven by a “driver” (i.e. a
gate output or a continuous assignment)
Their value is Z if not driven
Wire declarations
wire d; // a scalar wire
wire [3:0] e; // a 4-bit vector wire
Verilog Parameters
Used to define constants
parameter size = 16, value = 8;
wire [size-1:0] bus; // defines a 15:0 bus
Verilog Operators
Arithmetic operators:
Logical operators:
Bitwise operators:
Equality operators:
Relational operators:
Reduction operators:
Shift operators:
Conditional:
+, -, *, /, %
&&, ||, !
&, |, ~, ^, ^~
==, !=,
>, <, >=, <=
&, ~&, |, ~|, ^
>>, <<
?:
Example2: 4:1 multiplexer
module mux4 (s, d, z); //bitwise operators
input [1:0] s;
input [3:0] d;
output z;
assign z =(~s[1] & ~s[0] & d[0]) |
(~s[1] & s[0] & d[1]) |
( s[1] & ~s[0] & d[2]) |
( s[1] & s[0] & d[3]) ;
endmodule
Example2: 4:1 multiplexer
module mux4 (s, d, z); //using conditional operators
input [1:0] s;
input [3:0] d;
output z;
assign z = s[1] ? (s[0] ? d[3] : d[2]) : (s[0] ? d[1] : d[0]);
endmodule
Verilog Assignments
Two types:
Continuous Assignments
assign values to nets
This means combinational logic
Procedural Assignments
assign values to registers
Only allowed inside procedural blocks
(initial and always)
Continuous Assignments
Models combinational logic using a logical
expression instead of gates
Assignment is evaluated whenever any signal
changes
wire a, b, out;
assign out = ~(a & b);
wire [15:0] sum, a, b;
wire cin, cout;
assign {cout,sum} = a + b + cin;
Procedural Assignments
Assigns values to register types
They do not have a duration
They occur only within procedural
blocks
The register holds the value until the next
procedural assignment to that variable
initial and always
They are triggered when the flow of
execution reaches them
always Blocks
When is an always block executed?
always
always @(a or b or c)
Whenever there is a change on a, b, or c
Used to describe combinational logic
always @(posedge foo)
Starts at time 0
Whenever foo goes from low to high
Used to describe sequential logic
always @(negedge bar)
Whenever bar goes from high to low
Inside always blocks
Procedural assignments
if statements
case statements
for, while, forever statements
wait statements
Blocking vs Non-blocking
Blocking vs Non-blocking
Blocking
begin
end
q1 = x1;
q2 = q1;
z1 = q2;
Non-Blocking
begin
end
q1 <= x1;
q2 <= q1;
z1 <= q2;
Quick Review
Continuous assignments to wires
assign variable = exp;
Result in combinational logic
Procedural assignment to regs
Always inside procedural blocks (always blocks in
particular for synthesis)
blocking
non-blocking
variable = exp;
variable <= exp;
Can result in combinational or sequential logic
Quick Review
module name (args…);
input …; // define inputs
output …; // define outputs
wire… ;
reg …;
// internal wires
// internal regs, possibly output
// the parts of the module body are
// executed concurrently
<continuous assignments>
<always blocks>
endmodule
comment in Verilog_HDL
// Single-line comment
/*………….
…………..*/ multiple-line comment
module mux2_1(out,a,b,sel); // port declare.
input a,b,sel;
output out;
wire sel_,a1,b1
/* structural design using logic operator
mux2_1 */
not (sel_,sel);
and (a1,a,sel),(b1,b,sel);
or (out,a1,b1);
endmodule;
Naming in Verilog_HDL
ื่ ไฟล์ กำรตัง้ ชอ
ื่ อุปกรณ์ และ
ข ้อกำหนด ในกำรตัง้ ชอ
ื่ มต่อ
กำรเชอ
ั ญำณ จะต ้องไม่เป็ นคำสงวนของภำษำ
สำยสญ
ระหว่ำงข ้อควำม หรือตัวเลข สำมำรถใช ้ เครือ
่ งหมำย _
หรือ $ ได ้
ื่ ต ้องเป็ น ตัวอักษร a-z หรือ A-Z หรือ _
ตัวแรกทีต
่ งั ้ ชอ
ตัวอักษรตัวใหญ่ และ ตัวเล็ก จะมีควำมหมำยแตกต่ำงกัน
ึ ษาเพิม
ศก
่ เติม ....
Evita_Verilog
Teerayod_Verilog_Thai