ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

日常记录(91)分频、序列检测、建立保持时间、DVE操作

2022-06-06 19:31:50  阅读:258  来源: 互联网

标签:分频 begin end clk DVE 91 taa rst


三分频器

https://zhuanlan.zhihu.com/p/367798872

module taa (output clk_o, input clk_i, rst_n);
    reg [3:0] cnt;
    reg clk1, clk2;

    assign clk_o = clk1 ^ clk2;

    always @(posedge clk_i, negedge rst_n) begin
        if (!rst_n) begin
            cnt <= 0;
            clk1 <= 0;
        end else if (cnt == 2'h2) begin
            clk1 <= ~clk1 ;
            cnt <= 0;
        end else begin
            cnt <= cnt + 1;
        end
    end

    always @(negedge clk_i, negedge rst_n) begin
        if (!rst_n) begin
            clk2 <= 0;
        end else if (cnt == 2'h1) begin
            clk2 <= ~clk2;
        end
    end
    
endmodule

测试
vcs -sverilog -R test_taa.sv taa.sv -gui

点击查看代码
module test_taa ();
    logic clk_o, clk_i, rst_n;
    taa taa_inst(clk_o, clk_i, rst_n);

    initial begin
        clk_i = 0;
        forever begin
            #1 clk_i = ~clk_i;
        end
    end

    initial begin
        rst_n = 0;
        #100 rst_n = 1;
    end

endmodule

序列检测器

https://blog.csdn.net/SummerXRT/article/details/118879287
状态机和移位方式,检测111序列。

module taa (output zo, input x, clk, rst_n);

    reg [1:0] state, next_state;
    parameter A = 2'b00;
    parameter B = 2'b01;
    parameter C = 2'b10;
    parameter D = 2'b11;

    always @(posedge clk, negedge rst_n) begin
        if (!rst_n) begin
            state <= A;
            next_state <= A;
        end else begin
            state <= next_state;
        end
    end

    always @(state, x) begin
        case(state)
            A:if (x) begin
                next_state = B;
            end else begin
                next_state = A;
            end
            B:if (x) begin
                next_state = C;
            end else begin
                next_state = A;
            end
            C:if (x) begin
                next_state = D;
            end else begin
                next_state = A;
            end
            D:if (x) begin
                next_state = D;
            end else begin
                next_state = A;
            end
        endcase
    end
    assign zo = (state == D);
endmodule
module tbb (output z, input x, clk, rst_n);
    reg [2:0] q;

    always @(posedge clk, negedge rst_n) begin
        if(!rst_n) begin
            q <= 3'b0;
        end else begin
            q <= {q[1:0], x};
        end
    end

    assign z = (q == 3'b111);
endmodule

测试
vcs -sverilog test_taa.sv taa.sv tbb.sv -R -gui

module test_taa ();
    logic clk, rst_n;
    logic z, x;
    /* taa taa_inst(z, x, clk, rst_n); */
    tbb tbb_inst(z, x, clk, rst_n);
    initial begin
        clk = 0;
        forever begin
            #5 clk = ~clk;
        end
    end

    initial begin
        rst_n = 0;
        #100;
        rst_n = 1;
    end

    initial begin
        forever begin
            #10
            x = $random();
        end
    end

    initial begin
        #1000000
        $finish;
    end
endmodule

建立、保持时间和亚稳态--从门电路来看

  • STA(静态时序分析),时序验证,主要检查建立保持时间是否存在违例。
  • STA在功能仿真、综合、综合后的仿真之后进行。

https://mp.weixin.qq.com/s/cuspahsUouq4uWnuBfP-ng
在以RS锁存器构成的D触发器实现后
image
当信号从外部传递,需要在CLK为低电平,等待信号传入到第一段RS锁存器,经历两次门电路和线网的数据传递后,达到信号稳定,得到输入。
输入后,需要在CLK为高电平,信号维持一定时间等待第二段RS锁存器经历各种电路以及开关,达到数据稳定输出。
image

  • 建立保持时间影响了系统最大时钟频率。

DVE的force value

  • 选中信号,实现force value,在面向soc的验证上,在中间过程对bug假定修复,节约从验证到设计的修复时间。
  • force 的freeze是持久性,deposit模式是一次性的。

DVE的expand time

在仿真前,使能simulator->CaptureDelta cycle values,然后记录相应波形信号。在波形对应的时间点,单击右键,选择"Expand Time",接下来时钟沿附近各个变量的变化顺序将显现出来。
image

DVE的在特定实例下的断点

image

DVE跟踪信号变化和驱动

image

DVE的时间点回退

首先记录(add checkpoint),后续可以选择回退到该点
image

VCS常用tcl命令

  • 实现自动化
    restart重启
    finish结束
    get获得信号
    force强制信号
    release释放强制
    dump保存波形
    do 执行tcl脚本
    vbus创建虚拟总线

标签:分频,begin,end,clk,DVE,91,taa,rst
来源: https://www.cnblogs.com/bai2022/p/16349433.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有