weixin_38646136 2021-06-18 15:36 采纳率: 0%
浏览 20

SV assertion 怎么写在某信号起来时clock 被拉为0

请问是SV的assertion 怎么写, 如果当信号a被拉为1的时候, clock为关掉,当a为0的时候, clock会再打开?

  • 写回答

1条回答 默认 最新

  • 檀越剑指大厂 Java领域优质创作者 2024-03-03 16:22
    关注

    weixin_38646136 下午好🌅🌅🌅
    本答案参考ChatGPT-3.5

    在SystemVerilog中,assertion是一种用于检查设计是否满足预期行为的机制。当你想要确保在信号a变为1时,clock信号被拉低(即为0),而在a变为0时,clock会被重新打开(即为1),你可以使用以下步骤编写assertion

    1. 首先,你需要定义一个event来表示a信号的变化。这通常通过posedgenegedge关键字完成,它们分别表示上升沿和下降沿触发:
    event a_change;
    always @(posedge a) begin
        a_change = 1'b1; // 当a变为1时触发
        if (a == 1'b0) begin
            // 当a变为0时执行恢复操作
            // ...
        end
    end
    
    1. 然后,你可以编写一个assertion来检查clocka_change事件发生时的状态:
    assert (
        @(posedge a_change) clock == 1'b0, 
        $display("Assertion failed: clock should be low when a is high"),
        "clock_not_low_on_a_high"
    );
    

    这个assert检查在a变为1时,clock是否为0。如果clock不是0,那么它将打印一条错误消息,并触发assertion失败。

    1. a变为0时,你可能需要添加一个条件来检查clock是否恢复到高电平:
    if (a == 1'b0 && @(posedge a) clock == 1'b1) begin
        $display("Assertion passed: clock recovered to high after a was low");
        // 释放assertion
        $finish;
    end
    

    这里,我们假设clock会在a变为0后恢复为1。如果clock没有恢复,你需要修改assertion以处理这种情况。

    请注意,assertion通常在设计的验证阶段使用,而不是在实际硬件运行时。在模拟器或仿真器中,你可以看到assertion是否成功。在实际硬件中,它们通常被忽略。

    评论

报告相同问题?

悬赏问题

  • ¥15 数学的三元一次方程求解
  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题