Home Articles

系统Verilog仿真与执行

Asked
Viewed 1813 times
3

关于SystemVerilog(SV)用于编程芯片和模拟SV代码的问题很多 . 语言结构的这种经济性给我带来了一些困惑:SV参考文献的第9.2.2节说明

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

当然,这些结构当然也指定了组合逻辑和锁存逻辑的创建 . 因此,SV标准主要针对仿真,让芯片OEM厂商建议哪些SV结构会产生实际硬件,因为Altera已经完成了here

Altera制造CPLD和FPGA,其中一些并不太昂贵(因此我开始学习SV) . 由Altera祝福的SV构造子集是可合成的,可以在Quartus中编译成适合下载到芯片的形式 . Altera标记其他构造,例如许多断言(上面引用的第16节),“支持 . 忽略合成” . 以并发断言为例 .

因此,我的结论是,在此处获得的新信息之外,我可以使用例如仅针对测试平台模块的并发断言,但是可以在任何地方使用立即断言 .

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

1 Answer

  • 7

    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到门级仿真不匹配 .

Related