Module Instantiation and Test Benches: - Professor
Module Instantiation and Test Benches: - Professor
TEST BENCHES
NAME:
STUDENT NUMBER:
DATE OF SUBMISSION:
__________________
PROFESSOR
I. DISCUSSION
A hardware description language (HDL) is a computer-based language that
describes the hardware of digital systems in a textual form. It resembles an
ordinary computer programming language, such as C, but is specifically oriented
to describing hardware structures and behaviour of logic circuits.
HDLs are used in several major steps in the design flow of an integrated
circuit:
design entry,
functional simulation or verification,
logic synthesis,
timing verification,
fault simulation.
Companies that design integrated circuits use proprietary and public HDLs.
In the public domain, there are two standard HDLs that are supported by the IEEE:
VHDL and Verilog.
VHDL
stands for VHSIC (very high speed integrated circuit) HDL
a Department of Defense mandated language
Verilog
began as a proprietary of companies and universities known as Open
Verilog International (OVI) as a step leading to its adoption as an IEEE
standard.
It was initially approved as a standard HDL in 1995; revised and enhanced
versions of the language were approved in 2001 and 2005.
Module Declaration
The port list of a module is the interface between the module and its
environment. This list is enclosed in parentheses, and commas are used to
separate elements of the list. The statement is terminated with a semicolon (;).
The keywords input and output specify which of the ports are inputs and which
are outputs. Internal connections are declared as wires. This connection is
declared with the keyword wire.
input in1;
output out1, out2;
wire x, y, z;
Test Benches
In order to simulate a circuit with an HDL, it is necessary to apply inputs to
the circuit so that the simulator will generate an output response. An HDL
description that provides the stimulus to a design is called a test bench. In its
simplest form, a test bench is a module containing a single generator and an
instantiation of the model that is to be verified. Note that it has no input or
output ports, because it does not interact with its environment. Within the test
bench, the inputs to the circuit are declared with keyword reg and the outputs
are declared with the keyword wire. Note that using a test bench is similar to
testing actual hardware by attaching signal generators to the inputs of a circuit
and attaching probes (wires) to the outputs of the circuit).
reg a, b, c;
wire w1, w2;
The initial keyword is used with a set of statements that begin executing
when the simulation is initialized, and terminates execution when the last
statement has finished executing. The set of statements to be executed is called a
block statement and consists of several statements enclosed by keywords begin
and end. The action specified by the statements begins when the simulation is
launched, and the statements are executed in sequence.
The response to the stimulus generated by the initial and always blocks will
appear in text format as standard output and as waveforms (timing diagrams) in
simulators having graphical output capability. Numerical outputs are displayed by
using Verilog system tasks. These are built-in system functions that are recognized
by keywords that begin with the symbol $. Some of the system tasks that are
useful for display are:
The format specification uses the symbol % to specify radix of numbers that
are to be displayed and may have a string enclosed in quotes. The base may be
binary (%b), decimal (%d), and hexadecimal (%h).
A. Module Declaration
The HDL description of the circuit of the Fig 1.1 is shown in the example below.
Open your ModelSim and place the code inside. Save the file as Drill1_1.v.
A B C
wire1
EOR2 wire3
AND2
X
NOR2
wire2
NOT
Fig 1.1
input A, B, C;
output X;
wire wire1, wire2, wire3;
endmodule
B. Test Bench
Edit the saved file Drill1_1 by placing the following code below the previous code.
//Test bench for the Verilog model of Fig 1.1
module testbench1_1;
reg A, B, C;
wire Z;
circuit1_1 tb1(A, B, C, Z);
initial
begin
A=1’b0; B=1’b0; C=1’b0;
$display(“Simulating output for circuit1_1”);
$monitor($time,,,”A=%b B=%b C=%b Z=%b”,A,B,C,Z);
#2 A=1’b0; B=1’b0; C=1’b1;
#1 A=1’b0; B=1’b1; C=1’b0;
#1 A=1’b0; B=1’b1; C=1’b1;
#1 A=1’b1; B=1’b0; C=1’b0;
#1 A=1’b1; B=1’b0; C=1’b1;
#1 A=1’b1; B=1’b1; C=1’b0;
#1 A=1’b1; B=1’b1; C=1’b1;
#2 $finish;
end
endmodule