View
43
Download
1
Category
Preview:
DESCRIPTION
Introduction to Verilog. Multiplexers. Introduction to Verilog. Verilog Hardware Description Language (Verilog HDL) released by Gateway Design Automation in 1983 Cadence buys Gateway in 1989 Cadence releases Verilog HDL to the public domain in 1990 - PowerPoint PPT Presentation
Citation preview
Introduction to Verilog
Multiplexers
Introduction to Verilog
• Verilog Hardware Description Language (Verilog HDL) released by Gateway Design Automation in 1983
• Cadence buys Gateway in 1989
• Cadence releases Verilog HDL to the public domain in 1990
• Verilog adopted by the IEEE as IEEE standard 1364 in 1995
Combinational Circuit Example
n-line 2-to-1 Multiplexer
n-line
2 x 1 MUX
a(n-1:0)
b(n-1:0)y(n-1:0)
sel
sel y
0 a
1 b
An n-line 2 x 1 MUX
a(n-1:0)
b(n-1:0)
y(n-1:0)
sel
n-line2 x 1MUX
module mux2p(a,b,sel,y);
parameter width = 2;
input [width-1:0] a;
input [width-1:0] b;
input sel;
output [width-1:0] y;
reg [width-1:0] y;
always @(sel, a, b)
begin
if(sel == 0)
y = a;
else
y = b;
end
endmodule
parameter statement defines width of bus
module mux2p(a,b,sel,y);
parameter width = 2;
input [width-1:0] a;
input [width-1:0] b;
input sel;
output [width-1:0] y;
reg [width-1:0] y;
always @(sel, a, b)
begin
if(sel == 0)
y = a;
else
y = b;
end
endmodule
module name
always sensitivity list
Sequential statements (if…else) must be in
an always block
Note optional begin…end
in always block
An n-line 2 x 1 MUX
reg defines y as a variable
module mux2p(a,b,sel,y);
parameter width = 2;
input [width-1:0] a;
input [width-1:0] b;
input sel;
output [width-1:0] y;
reg [width-1:0] y;
always @(sel, a, b)
begin
if(sel == 0)
y = a;
else
y = b;
end
endmodule
Note: = is a blocking assignment
An n-line 2 x 1 MUX
Note: == is
logical equality operator
Digilab2 – DIO1 Boards
Spartan IIFPGA
8 LEDsLD
8 SwitchesSW4 Pushbuttons
BTN
Four 7-segmentdisplays
Pushbuttonbn
74HC373 latch ldg <= ‘1’
Top-level Design – Lab 1
a(3:0)
b(3:0)
mux2g
Lab1
sel
ySW(1:4)
SW(5:8)
LD(1:4)
BTN4
ldg‘1’
a(3:0)
b(3:0)
mux2g
Lab1
sel
ySW(1:4)
SW(5:8)
LD(1:4)
BTN4
ldg‘1’
module Lab1v(SW,BTN4,ldg,LD);
input [1:8] SW;
input BTN4;
output ldg;
output [1:4] LD;
mux2p SWmux(.a(SW[1:4]),.b(SW[5:8]),.sel(BTN4),.y(LD));
defparam SWmux.width = 4;
assign ldg = 1; // enable 74HC373 latch
endmodule
module Lab1v(SW,BTN4,ldg,LD);
input [1:8] SW;
input BTN4;
output ldg;
output [1:4] LD;
mux2p SWmux(.a(SW[1:4]),.b(SW[5:8]),.sel(BTN4),.y(LD));
defparam SWmux.width = 4;
assign ldg = 1; // enable 74HC373 latch
endmodule
a(3:0)
b(3:0)
mux2g
Lab1
sel
ySW(1:4)
SW(5:8)
LD(1:4)
BTN4
ldg‘1’
module Lab1v(SW,BTN4,ldg,LD);
input [1:8] SW;
input BTN4;
output ldg;
output [1:4] LD;
mux2p SWmux(.a(SW[1:4]),.b(SW[5:8]),.sel(BTN4),.y(LD));
defparam SWmux.width = 4;
assign ldg = 1; // enable 74HC373 latch
endmodule
a(3:0)
b(3:0)
mux2g
Lab1
sel
ySW(1:4)
SW(5:8)
LD(1:4)
BTN4
ldg‘1’
Note: assign statement used for
concurrent logic equations
Note: defparam statement
used to override parameter width
An n-line 4 x 1 multiplexer
a(n-1:0)
b(n-1 :0)y(n-1 :0)
sel(1:0)
n-line4 x 1MUXc(n-1 :0)
d(n-1 :0)
Sel y
“00” a
“01” b
“10” c
“11” d
An n-line 4 x 1 multiplexer module mux4p(a,b,c,d,sel,y);
parameter width = 4;
input [width-1:0] a,b,c,d;
input [1:0] sel;
output [width-1:0] y;
reg [width-1:0] y;
always @(sel, a, b, c, d)
case(sel)
0: y = a;
1: y = b;
2: y = c;
3: y = d;
default: y = a;
endcase
endmodule
Must include ALL posibilities
in case statement
Signals can have values0, 1, z, x
sel y
“00” a
“01” b
“10” c
“11” d
Note: default
is decimal
module Lab1bv(SW,BTN,ldg,LD);
input [1:8] SW;
input [1:2] BTN;
output ldg;
output [1:2] LD;
mux4p SWmux(.a(SW[1:2]),.b(SW[3:4]),
.c(SW[5:6]),.d(SW[7:8]),.sel(BTN),.y(LD));
defparam SWmux.width = 2;
assign ldg = 1; // enable 74HC373 latch
endmodule
Top-level design
Verilog Always Block
always @(<sensitivity list>)begin <sequential statements>end
Within an always block:
Variables (reg) are assigned using = (Blocking)
and are updated immediately. (Used for combinational signals)
Sequential signals are assigned using <= (Non-blocking)
and are updated at the end of the always block.
Recommended