VL22 根据状态转移图实现时序电路

这篇博客介绍了一个基于状态转移图实现时序电路的方法。通过定义四个状态aa、bb、cc和dd,并利用两个2位寄存器存储当前状态和下一个状态,实现了电路的状态转换。在rtl代码中,详细展示了如何在verilog中描述状态机,并在testbench中进行了测试,给出了相应的波形图。
摘要由CSDN通过智能技术生成

VL22 根据状态转移图实现时序电路

这里我把 00状态 记为 aa
01状态 记为 bb
10状态 记为 cc
11状态 记为 dd

    parameter aa = 2'b00;
    parameter bb = 2'b01;
    parameter cc = 2'b10;
    parameter dd = 2'b11;
		   因为有四个状态,所以设计两个2位寄存器用来存储当前状态和下一个状态
    reg[1:0] cur;
    reg[1:0] nex;

当初始化是,当前状态为00(aa),下一个状态也是00(aa)

rtl代码

`timescale 1ns/1ns

module seq_circuit(
   input                C   ,
   input                clk ,
   input                rst_n,
 
   output   wire        Y   
);
    parameter aa = 2'b00;
    parameter bb = 2'b01;
    parameter cc = 2'b10;
    parameter dd = 2'b11;

    reg[1:0] cur;
    reg[1:0] nex;
    
    reg yy;

    always @(posedge clk or negedge rst_n)
        if(!rst_n) begin
        cur <= aa;
        nex <= aa;
        end
    else
        cur <= nex;

    always@(*) begin
    case (cur)
        aa: begin
            if(C == 1'b0) 
                nex = aa;
            else 
                nex = bb;
            
            yy = 1'b0;
        end
        bb: begin
            if(C == 1'b0) 
                nex = dd;
            else 
                nex = bb;
           
            yy = 1'b0;
        end
        cc: begin
            if(C == 1'b0) begin
                nex = aa;
                yy = 1'b0;
            end 
            else begin
                nex = cc;
                yy = 1'b1;
            end
        end
        dd: begin
            if(C == 1'b0) 
                nex = dd;
            else
                nex = cc;
            
            yy = 1'b1;
        end
    endcase
end
    assign Y = yy;
endmodule

testbench 代码

`timescale 1ns / 1ps
module aaa1_tb( );
    reg     C  ;
    reg     clk;
    reg    rst_n;
    wire        Y;
    
 aaa aaa_1(
 .clk(clk),
 .rst_n(rst_n),
 .C(C),
 .Y(Y)
 );

 initial begin
 C = 0; clk = 0; rst_n = 0;
 #5  C = 0; clk = 1; rst_n = 1;
 #5  C = 1; clk = 0; rst_n = 1; 
 #5  C = 1; clk = 1; rst_n = 1;
 #5 C = 0; clk = 0; rst_n = 1;
 #5 C = 0; clk = 1; rst_n = 1;
 #5 C = 1; clk = 0; rst_n = 1;
 #5 C = 1; clk = 1; rst_n = 1;
 #5 C = 0; clk = 0; rst_n = 1;
  #5 C = 0; clk = 1; rst_n = 1;
 $stop;
 end
endmodule

波形图
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值