- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经阅读了“ Verilog综合中的非阻塞分配,令人难以置信的编码样式!”由Clifford Cummings撰写。他说,此问题底部的代码“被保证”可以合成到三个触发器流水线中,但是不能保证正确模拟(示例pipeb3,第10页;“保证”注释在第12页上) )。该文件获得了最佳论文奖,因此我认为这一说法是正确的。 http://www.sunburst-design.com/papers/CummingsSNUG2000SJ_NBA.pdf
我的问题:如果不参考仿真语义,如何定义Verilog综合的正确性?非常感谢。
我想加分问题是:给出最简单的Verilog程序,该程序具有定义明确的合成语义,但没有定义明确的模拟语义,并假设它不是下面的代码。再次感谢。
实际上,有人可以给我一段Verilog,它在模拟和综合时都定义良好,但是两者产生的结果不同吗?
代码:
module pipeb3 q3, d, clk);
output [7:0] q3;
input [7:0] d;
input clk;
reg [7:0] q3, q2, q1;
always @(posedge clk) q1=d;
always @(posedge clk) q3=q2;
always @(posedge clk) q1=d;
endmodule
最佳答案
全部-
是时候让我了解有用的背景信息和我自己的见解。
首先-IEEE-1364.1-2002 Verilog RTL综合标准从未被任何供应商完全实施,这就是为什么我们每个人都不急于更新标准或提供综合标准的SystemVerilog版本的原因。据我所知,该标准并未被“替换”,而已过期。据我所知,该标准中描述的属性从未被任何供应商完全实现。我认为该标准中唯一有用的功能是由所有供应商实施的,该供应商应在读取任何用户代码之前设置宏`define SYNTHESIS,以便现在可以使用`ifndef SYNTHESIS-`endif作为通用替代品。对于特定于供应商的// // synopsys translation_on-// synopsys translation_off编译注释。
Verilog是作为一种模拟语言而发明的,从来没有打算成为一种合成语言。在1980年代后期,Synopsys意识到工程师真的很喜欢这种Verilog仿真语言,并开始定义他们(Synopsys)可以识别并通过综合转换为硬件的语言子集。现在,我们将其称为RTL综合子集,并且随着综合工具供应商发现将新型描述转换为硬件的独特创新方法,该子集会随着时间的推移而增长。
确实没有“定义Verilog综合的正确性”。我和唐·米尔斯(Don Mills)在1999年撰写了一篇论文,题为“产生模拟和综合不匹配的RTL编码样式”,以警告工程师注意合法的Verilog编码样式,这些样式可能会推断出具有不同行为的合成硬件。
http://www.sunburst-design.com/papers/CummingsSNUG1999SJ_SynthMismatch.pdf
考虑到这一点,如果综合结果始终与Verilog仿真的行为相匹配,则无需运行门仿真。如RTL模拟的设计将是正确的。由于没有保证的匹配,工程师运行gate-sims来证明门行为与RTL行为相匹配,或者他们尝试运行等效检查工具以数学方式证明合成前的门TLT代码与合成后的门模型等效,因此不需要gate-sims。
至于奖金问题,这确实很难,因为Verilog语义已经很好地定义了,即使定义是合法的竞争条件。
至于在模拟和综合中具有不同结果的定义明确的代码,请考虑:
module code1c (output reg o, input a, b);
always
o = a & b;
endmodule
关于verilog - 从Verilog代码合成的硬件正确意味着什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11199123/
我在 OS X 中构建菜单栏项时找到了一些示例代码。它使用了单个 |我不确定它的实际含义。 (我想做的是在菜单项左键单击时调用一个函数,但在右键单击时显示菜单) 这是我的代码 //Get refere
为什么它在第 23 行抛出编译错误。'a' 是 Apple 类的对象,col 是包含 Apple 对象的列表,但它仍然是抛出下面提到的编译错误: 类型 Collection 中的方法 add(capt
我有一个类A,它扩展了抽象类B。 让B有一个 protected 字段值 我想在 A 中使用这个字段。如果 A 没有 value,我可以编写 this.value 从 B 获取它。 与super.va
DBLint 用于检查数据库状态。有46条规则。在 www.dblint.org 上对每条规则都有一些简单的解释,但对规则 31 的描述如下: 定义的主键不是最小键:主键是最小的 super 键。如果
var aa: (()?) = (john.residence?.address = someAddress) var bb: ()? = john.residence?.printNumberOfR
我对 jquery 的可重用插件有点陌生。我已经多次遇到这段代码,但无法弄清楚究竟发生了什么。 (function( $ ){ ... })( jQuery ); 谁能帮我解答一下吗? 最佳答案
这个问题已经有答案了: int foo (int argc, ...) vs int foo() vs int foo(void) in C (4 个回答) 已关闭 9 年前。 所以我最近在 Hack
typedef struct Element { struct Element *next; void *data; } Element; 在 pop 函数中,(!(elem = *s
数据加载两次...意味着 AsyncTask onPostExecute 加载相同的数据两次?我的 AsyncTask onPostExecute 运行两次它加载相同的数据...我正在运行异步任务以从
运行“yomeanjs”时,我无限期地挂起“这可能需要几分钟”。当我尝试运行 grunt 时,它失败了,与 npm start 相同。 我使用的是 Win 8.1,并安装了最新的 Node 和 Mon
我正在看 big nerd ranch 的“Android Programming”中的这个页面,我对下面的句子感到困惑。它声明“当 Activity 被隐藏时, Activity 对象不存在”。这让
是否 const vector意味着它的元素是const也一样? 在下面的代码中, v[0].set (1234);在 void g ( const vector & v )产生编译器错误 const
我是 xml 相关事物的新手 我无法理解: SelectNodes(@"//Form/*[. = 'on']"); 注:SelectNodes是 XmlNode 的函数.(与 XmlDocument
我想方便地控制命令行参数。因此我想使用 ShellLib。 我的代码是这样的: ... #include ... EFI_STATUS EFIAPI UefiMain ( EFI_HANDL
着眼于更正 Debian 上/etc/init.d/hostapd 中的一个问题。但是,我不知道这行代码是做什么的,也不知道它是如何工作的 [ -n "$DAEMON_CONF" ] || exit
有没有人遇到过类似我下图所示的情况? 我有一个变量 landingBools.didSlowPast40Knots(正如您从调试打印输出中看到的那样)为假,但出于某种原因,if 语句评估为真。 知道为
我设法使用 flexbox 和一些非常基本的 JavaScript 为自己构建了三个下拉菜单。 因为我不太了解,所以我使用了一个简单的函数三次,而不是使用参数、变量和其他东西。我将其称为丑陋的“蛮力”
这周刚开始学习 javascript。我有一个非常菜鸟的问题。 exports.displayName = (undefined: ?string); 在 React Native 中意味着什么? 这
我正在阅读有关 NaN here 的内容它说: A comparison with a NaN always returns an unordered result even when compari
编码格式:引入*表示“从头开始重复”。例子。输入-{a,b,a,b,c,a,b,a,b,c,d}可以写成{a,b,*,c,*,d}。输出:5;例如2:ABCABCE,输出- 5。 这里*表示从头开始重
我是一名优秀的程序员,十分优秀!