simulation - System Verilog 仿真与执行

标签 simulation system-verilog

关于 SystemVerilog (SV) 用于编程芯片和模拟 SV 代码的大量工作。这种语言结构的经济性让我有点困惑:SV Reference states 的第 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 标准。谢谢。

最佳答案

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

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

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

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

从 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

System 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 到门级模拟不匹配。

关于simulation - System Verilog 仿真与执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28227164/

相关文章:

verilog - 为什么我们在使用 Vivado 在 Verilog 中形成 T 触发器时必须添加 "clr"(干净的输入线)?

system-verilog - 从调用函数的位置获取层次范围

Verilog 中的字符串操作

simulation - 两相 Modelica 媒体示例

haskell - Haskell 中的程序设计 : how to do simulation without mutability

java - 有没有可以使用 eclipse 的 Java 卡模拟器?

java - 同步多个计时器以提高/降低速度

c++ - 我将如何为下一次迭代清理 SDL_surface 中的翻转图像?

verilog - 分析 SystemVerilog 中的打包结构以确定它的大小?

system-verilog - 系统verilog : scope of text substitution macro