verilog - 在实例化的 Verilog 模块 (Yosys/CVC) 中动态检查建立/保持时间违规
问题描述
我有一个 SystemVerilog 测试台 tb_top 实例化给定的 Verilog 模块顶部。上面的代码对我来说实际上是未知的(它来自多个来源),但我知道端口包括一个 100 Hz 时钟(在本文中称为 hundo)、21 个输入和 75 个输出。
我使用 CVC 来模拟带有 Verilog 模块的测试平台,并使用 Yosys 来执行综合。我的目标是在综合后对 Verilog 模块中的任何潜在触发器进行时序检查,并在它们发生时发出警告。
我知道 $setup/$hold 方法,它们在 SystemVerilog 和 CVC 模拟中工作。但是,我想不出一种方法将这些方法动态地应用于顶部模块中的每个触发器。建立时间违规的示例:
module top (hundo, reset, [rest of inputs], ex_output, [rest of outputs]);
// ... port declarations ...
reg ex_out;
always @(posedge hundo, posedge reset)
if (reset)
ex_out <= 0;
else
ex_out <= hundo;
assign ex_output = ex_out;
endmodule
这将是我指定设置违规的测试平台:
module tb_top ();
// ... tb_port declarations ...
// ... generate clock on tb_hundo ...
specify
specparam tsetup = 1;
$setup(tb_ex_output, posedge tb_hundo, tsetup);
endspecify
top inst (.hundo (tb_hundo), ...);
endmodule
在 CVC 模拟中,这应该会引发警告。但是,它不起作用。有没有办法让它识别模块内触发器的时序违规(不管触发器是否连接到端口输出)?
解决方案
您不必在每次翻牌上都应用时序约束。当您运行门级仿真时,您应该有一个供应商门级库。这包括设置和保持时间检查。
正常程序是工具从综合网表中提取时序并生成“SDF”(标准延迟格式)文件。然后运行门级仿真,在其中读取和应用 SDF 文件。只有当门级网表具有时序结构时,SDF 注释才是可能的并且才有意义,不仅适用于门,而且适用于所有互连。
推荐阅读
- javascript - 符号与数字文字的性能?
- javascript - 使用 Azure AD 身份验证库(角度 5 中的 ADAL)获取 Id_token,但如何从 Id_token 获取访问令牌?
- python - 根据熊猫数据框中的条件,使用不同的标记在底图上绘制点
- android - 当我单击按钮运行主要活动时应用程序停止
- regex - 使用正则表达式允许除包含特定数字格式的字符串之外的任何字符串
- c - 尝试映射设备的 BAR-0 时出现“错误的文件描述符”错误
- sql - FORALL Bulk Collect - 需要在不使用循环的情况下添加插入语句的序列?
- python - 画布中的图表
- android - Room kotlin: Entities and Pojos must have a usable public constructor. Stuck on this error
- python - 包含类的动态填充字典的自动完成?