首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统Verilog仿真与执行

系统Verilog仿真与执行
EN

Stack Overflow用户
提问于 2015-01-30 00:19:37
回答 1查看 304关注 0票数 3

对于SystemVerilog ( SV )被用于编程芯片和模拟SV代码进行了大量的讨论。这种语言结构的经济性给我造成了一点混乱: SV引用状态第9.2.2节

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

当然,这些构造也指定了组合逻辑和锁存逻辑的创建。同样,SV标准主要是针对仿真的,由芯片OEMs来建议客户哪些SV结构将产生实际的硬件,就像Altera做的这里一样。

Altera生产CPLD和FPGAs,其中有些并不太贵(因此我想学习SV)。被Altera认为是可合成的SV结构的子集将在Quartus中编译成适合下载到芯片中的形式。Altera将其他结构(如许多断言(上述引用的第16节)标记为“支持、忽略合成”。以并发断言为例。

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

基本上,我试图得到一个关于SV如何工作的图片,以及我如何最好地解释SV标准,上面引用。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-30 11:27:08

Verilog语言水平较低,因此在设计FPGA或ASIC硬件时,采用了组合逻辑和时序逻辑。任何工具中的断言都是用于验证的,概念是高级别的,以便能够获得所需的硬件。

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

一天中的Verilog给出了一个设计指南。SystemVerilog LRM没有将规范划分为可合成组件和验证之间,但非官方的SystemVerilog合成指南是一个很好的指南。

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

我们从Verilog得到:

代码语言:javascript
复制
always @*             // For combinatorial logic
always @(posedge clk) // For flip-flops (sequential) Logic

暗指插销涉及一个不完整的if/else分支,很难判断它是意外事故还是实际意图。

代码语言:javascript
复制
//Latch from bug or actually intended?
always @* begin
  if (enable) begin
    //..
  end
end

System保留了简单的always,以便与verilog代码向后兼容,但是添加了三种类型,这样设计人员就可以在设计意图中显式化。

代码语言:javascript
复制
always_comb  //For Combinatorial logic
always_latch //For implying latches
always_ff    //For implying flip-flops (sequential logic)

在仿真中,always_comb有比always @*更严格的触发规则,以进一步减少RTL到门级的仿真失配。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28227164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档