我正在阅读IEEE标准Verilog硬件描述语言(特别是IEEE Std 1364-2001),该语言明确地定义和讨论了可模拟的Verilog。不幸的是,该文件没有涉及综合概念。
我还没有找到类似的可合成Verilog的参考资料。我发现的只是模糊的规则,或者不必要的限制性规则。
我在哪里能学到合成Verilog的正式语言?
发布于 2012-04-05 18:06:30
IEEE 1364.1是名为Verilog寄存器传输电平综合的1364年Verilog标准的附属物,该标准试图定义一个通用的可综合子集。然而,正如曾傑瑞所指出的,不同的工具支持不同的构造,并且要确定特定于工具的行为,您需要查阅工具文档。
对于可综合的Verilog,没有正式的(BNF风格的)语法定义。代码是否可综合取决于用法和语法。例如,始终具有不完全敏感性的构造(如always @(a) o = a || b )所描述的行为是不可综合的。(大多数工具都会合成代码,就像灵敏度列表已经完成一样,从而导致可能的模拟/合成不匹配。)
电路结构,如锁存和多驱动网,可以从Verilog描述中合成,但在大多数设计规则下是不允许的或不鼓励的。在选择目标库时,也有不受支持或不可取的可综合结构。例如,描述大于所选FPGA技术支持的最大RAM的RAM,或者描述目标库中不存在的三状态驱动程序。
对于可综合的Verilog来说,要坚持的一般结构是:
assign语句)always @*。顺序逻辑最安全的编码方式是只在顺序始终块中编码重置逻辑:
always @(posedge clk or posedge reset)
if (reset)
q <= reset_value;
else
q <= next_value;但是,如果您很小心,您可以在顺序块中编码额外的组合逻辑。一种常见的情况是,在失败之前使用一个mux,这样做是有意义的:
always @(posedge clk)
if (!sel)
q <= sel0_value;
else if (sel)
q <= sel1_value;
else
q <= 'bx;https://stackoverflow.com/questions/10032257
复制相似问题