Verilog Lab 5
Verilog Lab 5
FINITE STATE
MACHINE
ĐTH
OVERVIEW BLOCK DIG RTL CODE TESTBENCH IMPLEMENT
2
if (reset)
tt_ht <=S0;
else tt_ht <= tt_kt;
always @*
case (tt_ht)
SO: if(a) if(b) tt_kt =S2;
else tt_kt =Sl;
else tt_kt =S0;
Sl: if(a) tt_kt =S0;
else tt_kt =S1;
module fsm-eg-mult-seg S2: tt_kt =S0;
(input wire clk , reset , default: tt_kt =S0;
input wire a , b , endcase
output wire yo, yl ); //Moore outputlogic
localparam [1:0] S0 = 2’b00, S1 = assign yl=(tt_ht ==S0)||(tt_ht ==Sl);
2'b01 , S2=2'b10;
reg [1:0] tt_ht, tt_kt;
//Mealy outputlogic
always @ (posedge clk ,posedge assign y0=(tt_ht ==SO)&a&b;
reset) endmodule
9
1. RTL CODE
always @(w, tt_ht)
case (tt_ht)
A: if (w) tt_kt = B;
else tt_kt = A;
B: if (w) tt_kt = C;
else tt_kt = A;
C: if (w) tt_kt = A;
else tt_kt = C;
default: tt_kt = 2'bxx;
module Mtt_moore(
input Clock, Resetn, w, endcase
output z, always @(negedge Resetn, posedge Clock)
output reg [1:0] tt_ht); if (Resetn == 0) tt_ht <= A;
reg [2:1] tt_kt = 0; else tt_ht <= tt_kt;
parameter [2:1] A = 2'b00, // Define output assign z = (tt_ht == B);
B = 2'b01, C = 2'b10; endmodule
OVERVIEW BLOCK DIG RTL CODE TESTBENCH IMPLEMENT
11
2. TB
initial begin
Clock = 0;
Resetn = 0; w = 0; #10;
Resetn=1; w=1; #40; w=0; #20; w=1; #20;
end //***************************
always begin
#10; Clock=~Clock;
end
//***************************
OVERVIEW BLOCK DIG RTL CODE TESTBENCH IMPLEMENT
12
3. RTL CODE
4.IMPLEMENT
NET "clk_50m" LOC = "C9" | IOSTANDARD = LVCMOS33 ; NET "clk_50m"
CLOCK_DEDICATED_ROUTE = FALSE;
NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ;
NET "w" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ;
NET "z" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "clk_1hz" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET “tt_ht<0>" LOC = "E11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET “tt_ht<1>" LOC = "F11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
14
1. RTL CODE
reg [1 : 0] tt_kt = 0 ;
always @ (posedge clk ,posedge reset)
if (reset) tt_ht<=S0;
else tt_ht<=tt_kt;
//next_state logic
always @*
case (tt_ht)
S0: if(a) if(b) tt_kt=S2;
else tt_kt=S1;
else tt_kt=S0;
module MTT_moore_mealy ( input S1: if(a) tt_kt=S1; else tt_kt=S0;
wire clk , reset , input wire a S2: tt_kt=S0;
, b , default: tt_kt=S0;
output wire yl,y0, endcase
output reg [1:0] tt_ht ); //Moore outputlogic assign yl=(tt_ht==S0);
localparam [1:0] S0 = 2'b00, S1 //Mealy outputlogic assign y0=(tt_ht==S0)&a&b;
= 2'b01 , S2=2'b10; endmodule
OVERVIEW BLOCK DIG RTL CODE TESTBENCH IMPLEMENT
16
2. TB initial begin
clk = 0;
reset = 1; a = 1; b = 1; #10;
//****************************
reset = 1; a = 0; b = 0; #20;
reset = 0; a=0; #20; a=1; b=1; #20;
a=1; b=1; #20; a=1; b=0; #20; a=1; #20;
a=0; #20; end
always begin #10; clk=~clk; end
//***************************
OVERVIEW BLOCK DIG RTL CODE TESTBENCH IMPLEMENT
17
3. RTL CODE
4.IMPLEMENT
NET "clk_50m" LOC = "C9" | IOSTANDARD = LVCMOS33 ;
NET "clk_50m" CLOCK_DEDICATED_ROUTE = FALSE;
NET "reset" LOC = "L13" | IOSTANDARD = LVTTL | PULLUP ;
NET "a" LOC = "L14" | IOSTANDARD = LVTTL | PULLUP ;
NET "b" LOC = "H18" | IOSTANDARD = LVTTL | PULLUP ;
NET "clk_1hz" LOC = "C11" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8;
NET "y1" LOC = "E12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET "y0" LOC = "F12" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET “tt_ht<1>" LOC = "F9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
NET “tt_ht<0>" LOC = "E9" | IOSTANDARD = LVTTL | SLEW = SLOW | DRIVE = 8 ;
19
1
21