【问题标题】:System Verilog simulation versus execution系统 Verilog 模拟与执行
【发布时间】:2015-01-30 00:19:37
【问题描述】:

关于 SystemVerilog (SV) 被用于编程芯片和模拟 SV 代码的问题很多。这种语言结构的经济性给我带来了一些困惑:SV Reference 的第 9.2.2 节指出

“always 过程有四种形式:always、always_comb、always_latch 和 always_ff。所有形式的 always 过程在整个模拟过程中不断重复。”

当然,这些结构也指定了组合逻辑和锁存逻辑的创建。那么 SV 标准是否主要针对仿真,让芯片 OEM 来告知客户哪些 SV 构造将产生实际硬件,就像 Altera 所做的那样here

Altera 制造 CPLD 和 FPGA,其中一些并不太贵(因此我有学习 SV 的动力)。被 Altera 支持为可综合的 SV 结构子集将在 Quartus 中编译成适合下载到芯片的形式。 Altera 将其他构造标记为“支持。忽略综合”,例如许多断言(上述参考的第 16 节)。以并发断言为例。

因此,我的结论是,在此处获得新信息之前,我可以仅对测试台模块使用并发断言,但可以在任何地方使用即时断言。

基本上,我试图了解 SV 的工作原理,以及我如何最好地解释上面引用的 SV 标准。谢谢。

【问题讨论】:

  • 考虑到您的评论,@Morgan,我修改了我的问题,以更清楚地说明我如何最有利于研究 SV 标准。
  • 您的答案以及您链接到的非官方指南正是我想要的。非常感谢!
  • 玩得开心学习verilog,有时会很棘手。

标签: simulation system-verilog


【解决方案1】:

Verilog 语言非常低级,因此在为 FPGA 或 ASIC 设计硬件时,我们有组合逻辑和时序逻辑。任何工具中的断言都是为了验证,这个概念是为了能够获得你想要的硬件。

SystemVerilog 不仅用于仿真,而且使用正确的设计子集将允许 RTL 和综合后门文件在仿真中匹配。您编写 SystemVerilog 设计的方式将决定综合工具生成的内容。触发器和锁存器只有在您暗示它们时才会创建。不同的工具可能会以不同的方式优化组合部分,但如果使用最佳实践编写,那么它们在功能上应该都是等效的。

Verilog in a day 提供设计指南。 SystemVerilog LRM 不会在可合成组件和验证之间拆分规范,但unofficial guide to synthesising SystemVerilog 是一个很好的指南。

关于使用不同always 块的问题部分。

从 Verilog 我们有:

always @*             // For combinatorial logic
always @(posedge clk) // For flip-flops (sequential) Logic

暗示闩锁涉及不完整的 if/else 分支,并且很难判断这是意外还是实际意图。

//Latch from bug or actually intended?
always @* begin
  if (enable) begin
    //..
  end
end

系统 verilog 保留了简单的 always 以向后兼容 verilog 代码,但添加了三种类型,以便设计人员可以明确地表达设计意图。

always_comb  //For Combinatorial logic
always_latch //For implying latches
always_ff    //For implying flip-flops (sequential logic)

always_comb 具有比always @* 更严格的规则,用于在模拟中触发,以进一步减少 RTL 与门级模拟不匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-15
    相关资源
    最近更新 更多