Professional Documents
Culture Documents
Prelim Module3 - B
Prelim Module3 - B
COURSE INTENDED On the completion of the course, student is expected to be able to do the
LEARNING OUTCOMES: following:
II. OBJECTIVES: By the end of this module you should be able to:
1. Predict the output of a gate level Verilog model given its inputs
2. Describe how to correct a gate level Verilog model given its source
code, inputs and output
3. Write a Verilog gate-level model corresponding to a given simple
schematic
III. INTRODUCTION:
The purpose of this module is to introduce what Gate Level Modelling is.
Each Verilog model is of a particular "level." The level of a model
depends on statements and constructs it contains.
.
IV. CONTENTS:
Lesson Coverage:
Describes the flow of data between registers and how a design processes these data.
Gate Level
The gate-level modeling describes the available built-in primitive gates and how these can be used to describe
hardware.
(and, nand, or, nor. xor, xnor ) These logic gates have only one output and one or more inputs.
Syntax: multiple_input_gate_type[instance_name]
(OutputA,Input1,Input2,….,Input1);
Note: A value z at an input is handled like an x and the output can never be a z.
(buf, not ) These gates have only one input and one or more outputs.
Syntax: multiple_output_gate_type[instance_name]
(Out1,Out2,…..,OutN, InputA);
Tristate Gates
These gates model three state drivers and have one output, one data input and one control input.
Note:
For a bufif0 gate, the output is z if control is 1, else data is transferred to output.
For a bufif1 gate, the output is z if control is 0.
For a notif0 gate, the output is z if control is 1, else output is the invert of the input data value.
For a notif1 gate, the output is z if control is 0.
Pull Gates
pullup , pulldown
Note:
A pullup gate places a 1 on its output.
A pulldown gate places a 0 on its output.
Syntax:
pull_gate_type[instance_name](OutA);
Examples:
Pullup PUP(Pwr) ;
MOS Switches
These gates model unidirectional switches, that is, data flows from input to output and the data flow can be
turned off by appropriately setting the control input(s).
Note:
• The pmos( p-type MOS transistor), nmos(n-type MOS transistor), rnmos( r stands for resistive) and
rpmos switches have one output, one input, and one control input.
• If control is 0 for nmos and rnmos switches and 1 for pmos and rpmos switches, the switch is turned off,
that is, output has a value z; if control is 1, data at input passes to output.
Syntax:
gate_type[instance_name](OutputA, InputB, ControlC);
Bidirectional switches
These switches are bidirectional, that is, data flows both ways and there is no delay when data propagates
through the switches. The last four switches can be turned off by setting a control signal appropriately. The tran
and rtran switches cannot be turned off. If control is 1 for tranif0 and rtranif0, and 0 for tranif1 and rtranif1, the
bidirectional data flow is disabled.
Gate Delays
The signal propagation delay from any gate input to the gate output can be specified using a gate delay using the
syntax:
With the above statement the positive (0 to 1) transition at the output has a delay of 2 time steps while the
negative (1 to 0) transition has a delay of 1 time step
When no gate delay is specified, the default delay is zero . A gate delay can be comprised of up to three
values:
• Rise delay
• Fall delay
• Turn-off delay
Example
1 bit multiplexer
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
and a1(a1_o,in1,sel);
not n1(iv_sel,sel);
and a2(a2_o,in2,iv_sel);
or o1(out,a1_o,a2_o);
endmodule
Steps
Test Methodology
Stimulus
Hardware Design
Testbench
(Design Under Test)
Response
Example A B
Full Adder
Full
Co Ci
Adder
Truth Table
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
Equation
Co = AB + BCi + CiA
A input a , b, ci;
out co;
B wire ab , bc,ca;
B
Co and g0 ( ab, a, b );
Ci and g1 ( bc, b, c );
and g2 ( ca, c, a );
Ci or g3 ( co, ab, bc, ca );
A
endmodule
Solution
Equation sum = a b ci
xor g1 ( sum , a , b, ci );
endmodule
Testbench
module TestBench;
reg a,b,ci;
wire sum,cout;
initial
begin
$display(“a b ci sum cout");
a = 1'b0; b = 1'b0;ci = 1'b0;
#8 $finish;
end
always #4 b = ~b;
always #2 a = ~a;
always #1 ci = ~ci;
FA_sum U1(sum,a,b,ci,cout);
initial
$monitor("%b %b %b %b %b“, a, b, ci, sum, cout);
endmodule
V. REFERENCES: Roth, C.H. Jr. And John, L. K. (2018). Digital Systems Design Using VHDL (3rd
ed.). Texas, USA: Cengage Unlimited