ECEN 468 Advanced Digital System...
-
Upload
nguyendiep -
Category
Documents
-
view
230 -
download
1
Transcript of ECEN 468 Advanced Digital System...
Lecture 19 : Logic Design with Ver i log
ECEN 468 Advanced Digital System Design
ECEN 468 Lecture 19
ECEN 468 Lecture 19
Verilog Module
v Description of internal structure/function o Implicit semantic of time
associated with each data object/signal
o Implementation is hidden to outside world
v Communicate with outside through ports o Port list is optional
v Achieve hardware encapsulation
module Add_half ( sum, c_out, a, b ); input a, b;
output sum, c_out; wire c_out_bar;
xor (sum, a, b); nand (c_out_bar, a, b); not (c_out, c_out_bar);
endmodule
c_out
a
b sum
c_out_bar
2
ECEN 468 Lecture 19
Implicit Structural Description
module Add_half ( sum, c_out, a, b ); input a, b;
output sum, c_out; assign { c_out, sum } = a + b; // Continuous assignment
endmodule
a
b
Add_half sum
c_out
Concatenation
3
ECEN 468 Lecture 19
Module Instantiation
v Accomplished by entering o Module name as a module item within a parent module o Signal identifiers at appropriate ports
v Module instantiation needs a module identifier v A module is never declared within another module v The order of ports in instantiation usually matches the
order in module declaration
4
ECEN 468 Lecture 19
Design a Full Adder
sumHA = a ⊕ b c_outHA = a • b sumFA = a ⊕ b ⊕ c_in c_outFA = a • b + b • c_in + a • c_in sumFA = (a ⊕ b) ⊕ c_in c_outFA = (a ⊕ b) • c_in + a • b
a + b
= a(b+b’) + (a+a’)b
= ab + ab’ + a’b
ab + bc + ac
= ab + (a+b)c
= ab + (a⊕ b+ab)c
= ab + a⊕ bc+abc
= ab + (a⊕ b)c
5
ECEN 468 Lecture 19
Full Adder ≈ 2 Half Adders
sumHA = a ⊕ b c_outHA = a • b sumFA = (a ⊕ b) ⊕ c_in c_outFA = (a ⊕ b) • c_in + a • b
Add_half
(a⊕b)•c_in a
b
Add_half a⊕b
a•b
c_in (a ⊕ b) ⊕ c_in
(a ⊕ b) • c_in + a • b
6
ECEN 468 Lecture 19
Module instance name
Full Adder in Verilog
module Add_full ( sum, c_out, a, b, c_in ); // parent module input a, b, c_in; output c_out, sum; wire w1, w2, w3; Add_half M1 ( w1, w2, a, b ); Add_half M2 ( sum, w3, w1, c_in ); // child module or ( c_out, w2, w3 ); // primitive instantiation
endmodule
Add_half
(a⊕b)•c_in a
b
Add_half a⊕b
a•b
c_in (a ⊕ b) ⊕ c_in
(a ⊕ b) • c_in + a • b
w1
w2
w3
sum
c_out
7
ECEN 468 Lecture 19
Verilog Primitives
v Basic element to build a module, such as nand, nor, buf and not gates
v Never used stand-alone in design, must be within a module v Pre-defined or user-defined v Identifier (instance name) is optional v Output is at left-most in port list v Default delay = 0
8
ECEN 468 Lecture 19
Delay Assignment
module AOI_4 ( y, x1, x2, x3, x4 ); input x1, x2, x3, x4; output y; wire y1, y2; and #1 ( y1, x1, x2 ); and #1 ( y2, x3, x4 ); nor #1 ( y, y1, y2 );
endmodule
x1
x2
x3
x4
y1
y2
y
9
ECEN 468 Lecture 19
Explicit Structural Descriptions
module AOI_4 ( y, x1, x2, x3, x4 ); input x1, x2, x3, x4; output y; wire y1, y2;
and #1 ( y1, x1, x2 ); and #1 ( y2, x3, x4 ); nor #1 ( y, y1, y2 );
endmodule
x1
x2
x3
x4
y1
y2
y
10
ECEN 468 Lecture 19
Implicit Structural Description
module nand2_RTL ( y, x1, x2 ); input x1, x2; output y;
assign y = x1 ~& x2;
endmodule
module nand2_RTL ( y, x1, x2 ); input x1, x2; output y; wire y = x1 ~& x2;
endmodule
Explicit continuous assignment Implicit continuous assignment
Continuous assignment –
Static binding between LHS and RHS
No mechanism to eliminate or alter the binding
11
ECEN 468 Lecture 19
Multiple Assignments
module multiple_gates ( y1, y2, y3, a1, a2, a3, a4 ); input a1, a2, a3, a4; output y1, y2, y3;
assign y1 = a1 ^ a2, y2 = a2 | a3, y3 = a1 + a4;
endmodule
12
ECEN 468 Lecture 19
Structural Connections
v By order v By name v Empty port
module child( a, b, c );
…
endmodule
module parent;
wire u, v, w;
child m1( u, v, w );
child m2( .c(w), .a(u), .b(v) );
child m3( u, , w );
endmodule
13
ECEN 468 Lecture 19
Behavioral Descriptions: Data Flow
module comparetor ( lt, gt, eq, A, B ); input A, B; output lt, gt, eq; reg lt, gt, eq; always @ ( A, B ) begin lt = (A < B); gt = (A > B);
eq = (A == B); end
endmodule
14
ECEN 468 Lecture 19
Behavioral Descriptions: Algorithm-based
module comparetor ( lt, gt, eq, A, B ); input A, B; output lt, gt, eq; reg lt, gt, eq; always @ ( A, B ) begin lt = 0; gt = 0; eq = 0; if ( A == B ) eq = 1;
else if ( A > B ) gt = 1; else lt = 1;
end endmodule
15
ECEN 468 Lecture 19
Description Styles
v Structural o Explicit structural
o Implicit structural • Explicit continuous assignment • Implicit continuous assignment
v Behavioral o Data flow/RTL o Algorithm-based
16
ECEN 468 Lecture 19
Arrays of Instances
module flop_array(q, in, clk, rst); input [7:0] in; input clk, rst; output [7:0] q; Flip_flop M[7:0] (q, in, clk, rst);
endmodule module pipeline(q, in, clk, rst );
input [7:0] in; input clk, rst; output [7:0] q; wire [23:0] pipe; flop_array M[3:0] ({q, pipe}, {pipe, in}, clk, rst);
endmodule
rst
clk
in[7:0] q[7:0] pipe[7:0] pipe[23:16]
17
ECEN 468 Lecture 19
Verilog for Synthesis
module comp(lt,gt,eq,a0,a1,b0,b1);
input a0, a1, b0, b1; output lt, gt, eq; wire w1, w2, w3, w4, w5, w6, w7; or (lt, w1, w2, w3); nor (gt, lt, eq); and (w1, w6, b1); and (w2, w6, w7, b0); and (w3, w7, b0, b1); not (w6, a1); not (w7, a0); xnor (w4, a1, b1); xnor (w5, a0, b0); endmodule
module comp(lt, gt, eq, a, b); input [1:0] a, b; output lt, gt, eq; assign it = ( a < b ); assign gt = ( a > b ); assign eq = ( a == b ); endmodule
18