Drill 5
Drill 5
BEHAVIORAL MODELING
NAME:
STUDENT NUMBER:
DATE OF SUBMISSION:
__________________
PROFESSOR
I. DISCUSSION
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
2
A block statement provides a mechanism to group two or more statements
to act syntactically like a single statement. There are two kinds of blocks in Verilog
HDL. These are:
Sequential block (begin…end): Statements are executed sequentially in the
given order.
Parallel block (fork…join): Statements in this block execute concurrently.
One-Way Selection:
if (condition)
statements;
Two-Way Selection (if-else):
if (condition)
statements;
else
statements;
Nested if (if-else-if):
if (condition)
statements;
3
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
4
II. Drill Exercises
1. Design a Verilog behavioural model of a sequence detector using D flip-
flops.
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;
#4 reset=0;
#5 d=0;
#8 d=1;
#10 $finish;
join
endmodule
6
7
The Code:
Output Waveform:
always@(in_x[0],in_x[1],in_x[2],in_x[3],in_x[4],in_x[5],in_x[6],in_x[7],select)
case(select)
3'b000: m_out=in_x[0];
3'b001: m_out=in_x[1];
3'b010: m_out=in_x[2];
3'b011: m_out=in_x[3];
3'b100: m_out=in_x[4];
3'b101: m_out=in_x[5];
3'b110: m_out=in_x[6];
3'b111: m_out=in_x[7];
endcase
endmodule
module testMux();
reg [7:0] x;
reg [2:0] select;
wire m_out;
8
mux_8_1 MUX1(m_out, x, select);
initial begin
select=2'b00; x=8'h4F;
$strobe("Select Input Output");
$monitorb(select," ", x, " ", m_out);
#1 select=3'b000;
#1 select=3'b001;
#1 select=3'b010;
#1 select=3'b011;
#1 select=3'b100;
#1 select=3'b101;
#1 select=3'b110;
#1 select=3'b111;
#1 $display("Changing value of input");
#1 x=8'h98;
#1 select=3'b000;
#1 select=3'b001;
#1 select=3'b010;
#1 select=3'b011;
#1 select=3'b100;
#1 select=3'b101;
#1 select=3'b110;
#1 select=3'b111;
#100 $finish;
end
endmodule
9
The Code:
10
Output Waveform:
3. Create an HDL model of the operation of a sequential circuit based from the
given state diagram:
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;
12
#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;
#160 t_x_in=0;
#170 t_x_in=1;
join
endmodule
Output Waveform:
13