1 lecture 2: data types, modeling combinational logic in verilog hdl
TRANSCRIPT
![Page 1: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/1.jpg)
1
Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL
![Page 2: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/2.jpg)
2
Why use an HDL?
Increase digital design engineer’s productivity (from Dataquest)
Behavioral HDL 2K – 10K gates/weekRTL HDL 1K – 2K gates/weekGates 100 – 200 gates/weekTransistors 10 – 20 gates/week
![Page 3: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/3.jpg)
3
Variables and Logic Value Set
Variables: represent the values of signals in a circuit
Two kinds of variables: Nets and Registers
Nets: represent the structural connectivity in a circuit
Registers: represent storage elements
Logic Value Set
Logic Value Interpretation
0 Logic 0, or false condition
1 Logic 1, or true condition
x represent an unknown logic value
z represent a high impedance condition
![Page 4: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/4.jpg)
4
Data Types
• Nets– Nets are physical connections between devices– Nets always reflect the logic value of the driving device– Many types of nets, but all we care about is wire
• Registers– Implicit storage – unless variable of this type is modified it retains previously assigned value– Does not necessarily imply a hardware register– Register type is denoted by reg– int is also used
![Page 5: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/5.jpg)
5
Data Types: NetsNets for connectivity:wire establishes connectivitytri same as wire and it will be tri-stated in hardwarewand a net has multiple drivers, wires and, i.e., open collector
circuitwor a net has multiple drivers, wired or, i.e., emitter coupled circuittriand a net that has multiple drivers. It models wired-and.
It is tri-stated.trior a net that has multiple drivers. It models wired-or. It
is tri-stated.supply0 a global net connected to the circuit groundsupply1 a global net connected to the power supplytri0 a net connected to the ground by a resistive pulldown
connection.tri1 a net connected to the power supply by a resistive
pullup connection.trireg a net that models the charge stored on a physical net.
![Page 6: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/6.jpg)
6
wire Variables referenced, but undeclared are implicit wires
Gates drive nets. The output of a gate by default is a wire
module Add_half (sum, c_out, a, b);output sum, c_out; // declare output port of type net, actually wireinput a, b; // declare input port of type net, actually wirewire c_out_bar;xor G1 (sum, a, b);nand G2 (c_out_bar, a, b);not G3 (c_out, c_out_bar);
endmodule
module Add_half (sum, c_out, a, b);output sum, c_out;input a, b;xor G1 (sum, a, b);nand G2 (c_out_bar, a, b);not G3 (c_out, c_out_bar);
endmodule
These two modules are equivalent
input port of type netoutput port of type net
![Page 7: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/7.jpg)
7
module dff (data, clk, q);input data, clk;output q;reg q; always @(posedge clk)q <= data; // Tools require left-hand
// side must be a register // for statements in an always blockendmodule
Data Types: Registers
Registers for storageA register variable is an abstraction of a hardware storage element.
Rising Edge Flip-Flop
“<=“ is non-blocking assignment for flip flopsMore about “<=“ non-blocking, “=“ block assignment later
![Page 8: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/8.jpg)
8
Rising Edge Flip-Flop with Asynchronous Reset
module dff_async_rst (data, clk, reset, q);input data, clk, reset;output q;reg q;always @(posedge clk or negedge reset)if (~reset)q <= 1'b0;elseq <= data;endmodule
![Page 9: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/9.jpg)
9
Rising Edge Flip-Flop with Asynchronous Preset
module dff_async_pre (data, clk, preset, q);input data, clk, preset;output q;reg q;always @(posedge clk or negedge preset)if (~preset)q <= 1'b1;elseq <= data;endmodule
![Page 10: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/10.jpg)
10
Rising Edge Flip-Flop with Asynchronous Reset and Preset
module dff_async (reset, preset, data, q, clk);input clk;input reset, preset, data;output q;reg q;always @ (posedge clk or negedge reset or posedge preset)if (~reset)q <= 1'b0;else if (preset)q <= 1'b1;else q <= data;endmodule
![Page 11: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/11.jpg)
11
Rising Edge Flip-Flop with Synchronous Reset
module dff_sync_rst (data, clk, reset, q);input data, clk, reset;output q;reg q;always @ (posedge clk)if (~reset)q <= 1'b0;else q <= data;endmodule
![Page 12: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/12.jpg)
12
Rising Edge Filp-Flop with Synchronous Preset
module dff_sync_pre (data, clk, preset, q);input data, clk, preset;output q;reg q;always @ (posedge clk)if (~preset)q <= 1'b1;else q <= data;endmodule
![Page 13: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/13.jpg)
13
D-Latch with Data and Enable
module d_latch (enable, data, y);input enable, data;output y;reg y;always @(enable or data)if (enable)y <= data;endmodule
![Page 14: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/14.jpg)
14
D-Latch with Gated Asynchronous Data
module d_latch_e(enable, gate, data, q);input enable, gate, data;output q;reg q;always @ (enable or data or gate)if (enable)q <= (data & gate);endmodule
![Page 15: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/15.jpg)
15
D-Latch with Gated Enable
module d_latch_en(enable, gate, d, q);input enable, gate, d;output q;reg q;always @ (enable or d or gate)if (enable & gate)q <= d;endmodule
![Page 16: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/16.jpg)
16
Net Declaration
wire [7:0] data_bus; // 8 bit bus, data_bus[7] is MSBwire [0:3] control_bus; // control_bus[0] is MSB
//access bus examplesdata_bus[3] // access data_bus bit 3data_bus[3:0] // access bit 3 to bit 0 of data_busdata_bus[k+2] // access a bit of the data_bus,
// depending on k+2
wire y, x, z; // y, x, z are three wireswand A, B,C; // A, B, C wired and nets
Undeclared nets will default implicitly to type wire.
![Page 17: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/17.jpg)
17
What if a wire or tri type net is driven by multiple drivers?
Verilog issues a warning and determines the value by pairwise
application of the following table
wire/tri 0 1 x z
0 0 x x 0
1 x 1 x 1
x x x x x
z 0 1 x z
Design engineers don't want to drive a wire with more than one signals.
![Page 18: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/18.jpg)
18
What is the initial value of a net?
A net driven by a primitive, module, or continuous assignment has a value "x" at the start of simulation.
A net without any drivers is default to "z".
wire a, b, c;
assign a = b+ c; // initial value by default b = z, c = z, a = x
The initial value for a register variable is by default also "x".
![Page 19: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/19.jpg)
19
Register Data Types
Register Data Types: reg, integer, time, realtime
Register type Usagereg Stores a logic valueinteger Supports computationtime Supports time as a 64-bit unsigned numberreal Stores values (e.g., delay) as real numbersrealtime Stores time values as real numbers
A register may never be the output of a primitive gate, or the target of a continuous assignment (an example of a continuous assignment in next slide)
![Page 20: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/20.jpg)
20
module adder_4_RTL (a, b, c_in, sum, c_out);output [3:0] sum;output c_out;input [3:0] a, b;input c_in;
assign {c_out, sum} = a + b + c_in;// continuous assignment, any change of a, b, c_in// Verilog re-evaluates the output
endmodule
Continuous assignment allows you to specify combinational logic in equation form. Anytime an input (value on the right-hand side) changes, the simulator re-evaluates the output
No gate structure is implied — logic synthesis can design it.
![Page 21: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/21.jpg)
21
Verilog has the following operators for continuous assignments and register manipulations Arithmetic Operators: +, -, *, / , % (modulus)
Bitwise/Logical Operators
• Bitwise operators operate on the bits of the operand or operands. – For example, the result of A & B is the AND of each corresponding bit of A with B.
Operator Name~ Bitwise negation& Bitwise AND | Bitwise OR ^ Bitwise XOR~& Bitwise NAND~| Bitwise NOR~^ or ^~ Equivalence (Bitwise NOT XOR)
{ , } concatenation
![Page 22: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/22.jpg)
22
Bitwise/Logical Operators
• Bitwise operators operate on the bits of the operand or operands. – For example, the result of A & B is the AND of each corresponding bit of A with B.
Operator Name~ Bitwise negation& Bitwise AND | Bitwise OR ^ Bitwise XOR~& Bitwise NAND~| Bitwise NOR~^ or ^~ Equivalence (Bitwise NOT XOR)
![Page 23: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/23.jpg)
23
Reduction Operators
Reduction Operators: producing a single bit value by
operating on a single data word.
& reduction and
| reduction or
~& reduction nand
~| reduction nor
^ reduction exclusive or
~^ reduction xnor
![Page 24: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/24.jpg)
24
Verilog Example
module synTriState (bus, in, driveEnable);input in, driveEnable;output bus;reg bus;
always @(in or driveEnable)
beginif (driveEnable)
bus = in;else bus = 1`bz;end
endmodule
Wait for any change on in, driveEnable then execute the begin-end block containing the if. Then wait for another change.
![Page 25: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/25.jpg)
25
Initial Value of a Register Variable
reg A, B;
initial
begin
A = 0; // assign an initial value to A
B = 1; // assign an initial value to B
end
// All registers have an initial value of "x" by default.
![Page 26: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/26.jpg)
26
Passing Variables Through Ports
Port Mode
Variable Type Input Output InOut
net variable yes yes yes
register variable no yes no
input port of a module is of type net.
output port of a module is of type net, or reg.
inout port of a module is of type net.
![Page 27: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/27.jpg)
27
Memory Declaration
Memory Declaration
reg [31:0] m [0:8191]; // 8192 x 32 bit memory
reg [15:0] pc; // 16 bit program counter
reg [31:0] acc; // 32 bit accumulator
reg [15:0] ir; // 16 bit instruction register
reg ck; // a clock signal
![Page 28: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/28.jpg)
28
Hierarchical De-referencing
module test_Add_rca_4();reg [3:0]a,b;reg c_in;wire [3:0] sum;wire c_out;
initial
begin$monitor ($time,, "c_out= %b c_in4=%b c_in3=%b c_in2=%b c_in=%b ", c_out, M1.c_in4, M1.c_in3, M1.c_in2, c_in);end
initialbegin// stimus patterns generated hereend Add_rca_4 M1 (sum, c_out, a, b, c_in); // Add_rca_4 in next slide
endmodule
![Page 29: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/29.jpg)
29
Verilog model: 4 bit RCA
module Add_rca_4 (sum, c_out, a, b, c_in);output [3:0] sum;output c_out;input [3:0] a, b;input c_in;wire c_out, c_in4, c_in3, c_in2;
Add_full G1 (sum[0], c_in2, a[0], b[0], c_in);Add_full G2 (sum[1], c_in3, a[1], b[1], c_in2);Add_full G3 (sum[2], c_in4, a[2], b[2], c_in3);Add_full G2 (sum[3], c_out, a[3], b[3], c_in4);
endmodule
![Page 30: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/30.jpg)
30
module Add_full(sum, cOut, aIn, bIn, cIn);output sum, cOut;input aIn, bIn, cIn;
nand (x2, aIn, bIn),(cOut, x2, x8);
xnor (x9, x5, x6);nor (x5, x1, x3),
(x1, aIn, bIn);or (x8, x1, x7);not (sum, x9),
(x3, x2),(x6, x4),(x4, cIn),(x7, x6);
endmodule
A full adder usesVerilog primitivelogic gates.Anytime the input to a gatechanges, its output is evaluated,via its output wire to other inputs
A default gate delay is 0
![Page 31: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/31.jpg)
31
Parameters Substitution
module modXnor (y_out, a, b);parameter size=8, delay=15;output [size-1:0] y_out;input [size-1:0] a, b;wire [size-1:0] #delay y_out=a~^b;
endmodule
module Param;wire [7:0] y1_out;wire [3:0] y2_out;reg [7:0] b1, c1;reg [3:0] b2, c2;modXnor G1 (y1_out, b1, c1);modXnor #(4, 5) G2 (y2_out, b2, c2); // size = 4, delay =5
endmodule
![Page 32: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/32.jpg)
32
Indirect Parameters Substitution module modXnor (y_out, a, b);
parameter size=8, delay=15;output [size-1:0] y_out;input [size-1:0] a, b;wire [size-1:0] #delay y_out=a~^b;
endmodulemodule hdref_Param;
wire [7:0] y1_out;wire [3:0] y2_out;reg [7:0] b1, c1;reg [3:0] b2, c2;modXnor G1 (y1_out, b1, c1);modXnor G2 (y2_out, b2, c2);
endmodulemodule annotate;
defparamhdref_Param.G2.size = 4,hdref_Param.G2.delay = 5;
endmodule
![Page 33: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/33.jpg)
33
Verilog Model Example Design a 4-to-1 mux by cascading 2-to-1 muxes. module mux2to1 (f, a, b, sel);
output f;input a, b, sel;and g1 (f1, a , nsel),
g2 (f2, b, sel);or g3 (f, f1, f2);not g4 (nsel, sel);
endmodule module mux4to1 (f, a, b, c, d, sel0, sel1);
output f;input a, b, c, d, sel0, sel1;wire w1, w2;mux2to1 m1 (w1, a, b, sel0),
m2 (w2, c, d, sel0),m3 (f, w1, w2, sel1);
endmodule
![Page 34: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/34.jpg)
34
module test_mux4to1 (a, b, c, d, sel0, sel1, f);// generating all inputs to the mux4to1, // receiving f from the mux4to1 output
input f;output a, b, c, d, sel0, sel1;reg a, b, c, d, sel0. sel1;initial begin$monitor ($time,, "a = %b, b = %b, c = %b, d = %b,sel1 = %b, sel0 = %b, f = %b", a, b, c, d, sel1, sel0, f);a = 1; b =0; c =1; d =0;sel1 = 0; sel0 = 0; #10 sel1= 0; sel0 = 1;#10 sel1 = 1; sel0 = 0;#10 sel1 = 1; sel0 = 1;#10 a = 0; b =0; c= 1; d = 1;
sel1 = 0; sel0 = 0; #10 sel1= 0; sel0 = 1;#10 sel1 = 1; sel0 = 0;#10 sel1 = 1; sel0 = 1;#10 $finish;end
endmodule
![Page 35: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/35.jpg)
35
module testbench;wire a, b, c, d, sel0, sel1, f;
test_mux4to1 my_tester (a, b, c, d, sel0, sel1, f);mux4to1 my_design (f, a, b, c, d, sel0, sel1);
endmodule the simulation output should look similar to the following 0 a =1, b = 0, c= 1, d= 0, sel1= 0, sel0=0. f = 110 a =1, b = 0, c= 1, d=0, sel1=0, sel0=1, f = 0203040506070
![Page 36: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/36.jpg)
36
Ready: sim 10 a = 1, b = 0, c = 1, d = 0, sel1 = 0, sel0 = 1, f = 0 20 a = 1, b = 0, c = 1, d = 0, sel1 = 1, sel0 = 0, f = 1 30 a = 1, b = 0, c = 1, d = 0, sel1 = 1, sel0 = 1, f = 0 40 a = 0, b = 0, c = 1, d = 1, sel1 = 0, sel0 = 0, f = 0 50 a = 0, b = 0, c = 1, d = 1, sel1 = 0, sel0 = 1, f = 0 60 a = 0, b = 0, c = 1, d = 1, sel1 = 1, sel0 = 0, f = 1 70 a = 0, b = 0, c = 1, d = 1, sel1 = 1, sel0 = 1, f = 1
75 State changes on observable nets.
Simulation stopped at the end of time 80.
copied from Silos output window
![Page 37: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/37.jpg)
37
A Behavioral Model for MUX
module mux (f, sel, b, c);output f;input sel, b, c;reg f;
always @ (sel or b or c)if (sel == 1)
f = b;else
f = c;endmodule
Behavioral model uses Always, Initial construct.
The register is there as an “artifact” of the descriptions.
The left-hand side of statements used in an always block must be registers.
This is a combinational circuitNo register needed
![Page 38: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/38.jpg)
38
module test_mux4to1 (a, b, c, d, sel0, sel1, f);// generating all inputs to the mux4to1, // receiving f from the mux4to1 output
input f;output a, b, c, d, sel0, sel1;reg a, b, c, d, sel0, sel1;initial begin$monitor ($time,, "a = %b, b = %b, c = %b, d = %b,sel1 = %b, sel0 = %b, f = %b", a, b, c, d, sel1, sel0, f);a = 1; b =0; c =1; d =0;sel1 = 0; sel0 = 0; #10 sel1= 0; sel0 = 1;#10 sel1 = 1; sel0 = 0;#10 sel1 = 1; sel0 = 1;#10 a = 0; b =0; c= 1; d = 1;
sel1 = 0; sel0 = 0; #10 sel1= 0; sel0 = 1;#10 sel1 = 1; sel0 = 0;#10 sel1 = 1; sel0 = 1;#10 $finish;end
endmodule
Behavioral constructInitial is used in this module
The left-hand side must be a register for all statementsused in an Initial block
![Page 39: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/39.jpg)
39
Behavioral Model for Combinational Logic
Each “always” statement turns into Boolean functions
module example (f, a, b, c);output f;input a, b, c;reg f;
always @ (a or b or c)begin
logic...logic...logic...
endendmodule
Declare the combinational output f as register. Make tool think you are putting these computed outputs somewhere.
Do logic here.
List all the block’s inputs here in the “sensitivity list”
In Verilog, always statement is considered as procedural statementInitial is another procedural statement
![Page 40: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/40.jpg)
40
The rules for specifying combinational logic using procedural statements1. Every element of the input set must be in the sensitivity list
2. The combinational output must be assigned in every control path
module exam1 (f, sel, b, c);output f;input sel, b, c;reg f;
always @ (sel or b or c)if (sel == 1)
f = b;else
f = c;endmodule
module exam2 (f, g, sel, b, c);output f, g;input sel, b, c;reg f, g;
always @ (sel or b or c)if (sel == 1)
f = b;else
g = c;endmodule
wrongmodelcorrect
model
![Page 41: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/41.jpg)
41
module logic1 (f, a, b, c);output f;input a, b, c;reg f;
always @ (a or b or c)case ({a, b, c})
3’b000: f = 1’b0;3’b001: f = 1’b1;3’b010: f = 1’b1;3’b011: f = 1’b1;3’b100: f = 1’b1;3’b101: f = 1’b0;3’b110: f = 1’b0;3’b111: f = 1’b1;
endcaseendmodule
Behavioral Model for Combinational Logic: Case statement
Generate a truth table, assign output f in each case item
{a, b, c} concatenates a, b,
and c together, considering
them as a single item
![Page 42: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/42.jpg)
42
module mux2x1_df (A,B,select,OUT); input A,B,select; output OUT; assign OUT = select ? A : B; endmodule
module mux4x1_bh (i0,i1,i2,i3,select,y); input i0,i1,i2,i3; input [1:0] select; output y; reg y; always @ (i0 or i1 or i2 or i3 or select) case (select) 2'b00: y = i0; 2'b01: y = i1; 2'b10: y = i2; 2'b11: y = i3; endcaseendmodule
OUT = A if select = 1 ,else OUT = B if select =0
![Page 43: 1 Lecture 2: Data Types, Modeling Combinational Logic in Verilog HDL](https://reader035.vdocuments.us/reader035/viewer/2022062221/56649f1a5503460f94c2fce7/html5/thumbnails/43.jpg)
43
module name (<output names>, <input names>);output <output names>;input <input names>;reg <output names>;
always @ (<names of all input vars>)begin
< LHS = RHS assignments>< if ... else statements>< case statements >
endendmodule
Verilog behavioral model for combinational logic