Drill 5 - Soquiat - Marc-Hendri
Drill 5 - Soquiat - Marc-Hendri
SCHOOL OF EE-ECE-CpE
Behavioral Modeling
DRILL 5
The primary mechanisms for modeling the behavior of a design are the
following two statements:
• Initial statement
• Always statement
An initial statement executes only once and begins its execution at start of
simulation which is at time 0. initial [timing_control] procedural_statement
An always statement executes repeatedly and also begins its execution at
start of simulation which is at time 0. always [timing_control] procedural_statement
One-Way Selection:
if (condition)
statements; Two-Way
Selection (if-else): if
(condition)
statements;
else
statements;
3
Nested if (if-else-if):
if (condition) statements;
else if (condition)
statements;
else statements;
Case construct
A case statement is a multi-way conditional branch. It has the following
syntax:
case ( case_expr ) case_item_expr {,case_item_expr } :
procedural_statement
…
…
[ default : procedural_statement ]
endcase
The case construct has two important variations: casex and casez
The program below describes a behavioral model of the circuit obtained from the
state table above. Once compiled, save the file as drill5_1.vl
module testff;
reg clk, reset,d;
wire q;
circuit_ff cff(clk, reset, d, q);
initial begin
clk=0; reset=1; d=0;
$monitor("clk=%b reset=%b d=%b q=%b",clk,reset,d,q);
end
initial begin forever #1 clk=~clk;
end
initial fork
#1 reset=0;
#2 d=1; #3 reset=1;
6
#4 reset=0;
#5 d=0;
#8 d=1;
#10 $finish;
join endmodule
7
2. Create a behavioural description of an eight-to-one line multiplexer.
The program below is a behavioural description of an 8-1 MUX. Compile the
file then save it as drill5_2.vl
module testMux();
reg [7:0] x; reg
[2:0] select; wire
m_out;
9
3. Create an HDL model of the operation of a sequential circuit based from the given
state diagram:
10
0/0 1/0
0/1
00 10
0/1
1/0 0/1 1/0
01 1/0 11
The program below is formulated based from the given diagram above.
Compile the file then save it as drill5_3.vl
module state_diagram(
output reg y_out,
input x_in, clock, reset
);
module sdiag;
wire t_y_out;
reg t_x_in, t_clock, t_reset;
state_diagram sd(t_y_out, t_x_in, t_clock, t_reset);
initial #200 $finish; initial begin
t_clock=0;
forever #5 t_clock=~t_clock;
end
initial fork
$monitor($time,,"reset=%b clock=%b x=%b y=%b" ,t_reset, t_clock, t_x_in,
t_y_out);
t_reset=0;
#2 t_reset=1;
#87 t_reset=0;
#89 t_reset=1;
#10 t_x_in=1;
#30 t_x_in=0;
#40 t_x_in=1;
#50 t_x_in=0;
#52 t_x_in=1;
#54 t_x_in=0;
#70 t_x_in=1;
#80 t_x_in=1;
#70 t_x_in=0;
#90 t_x_in=1;
#100 t_x_in=0;
#120 t_x_in=1;
12
#160 t_x_in=0;
#170 t_x_in=1;
join
endmodule
13
14
IV. Review Questions
1. How is race condition experienced in Verilog HDL programming?
A race condition in Verilog HDL programming occurs when two or more
statements that are scheduled to execute in the same simulation time-step,
would give different results when the order of statement execution is
changed, as permitted by the IEEE Verilog Standard.
2. Is there a difference between the instructions
always #1 a=!a;
and forever #1 a=!a;
If yes, what is/are their difference/s?
INTERPRETATION OF RESULTS
16