2012-02-19 112 views
0

我读通过,并试图了解一些Verilog和通过洒是编译器指令:“模板”和Verilog中的详细说明?

// synopsys template 

但我不知道这是什么,或者做什么。我的Google Fu研究'verilog模板'的变体,导致更多的示例verilog代码比答案。

我没有找到这个简介用户指南:http://acms.ucsd.edu/info/documents/dc/syn3.pdf,其对P282提供了一些信息,指令似乎影响这个变量:

hdlin_auto_save_templates

Controls whether HDL designs containing parameters are read in as templates. 
... 

它接着暗示该指令影响“精化”(可能延迟它到底是什么?),当我将Verilog转换为“实际”硬件表示时,我目前的理解与传统编译的代码发射步骤大致类似?

我希望能解释一下Verilog中的模板是什么和做什么的,也许是对我在这种情况下对'精化'的理解的一种修正 - 谢谢!

回答

2

它接着暗示该指令影响“阐述”(也许是延缓它?什么 结束了吗?),这我目前的理解是松散类似于传统编译的代码 发送步骤,当Verilog的是 转换为“实际”硬件表示?

不是。精化是语言规范的一部分,是处理设计的必需步骤。处理Verilog通常需要两个不同的步骤,其规范描述为解析细化。 SystemVerilog更精确地定义了这些,并将它们称为汇编细化

1364-2005: 精化是解析和仿真之间发生的过程。 它将模块绑定到模块实例,建立模型层次结构, 计算参数值,解析分层名称,建立网络连接,并准备所有这些以进行仿真。随着 添加生成结构,这些任务发生的顺序 变得重要。

Verilog包含一些结构,使得它不可能完全建立一个模块,然后'链接'到一个更大的设计。请看下面的代码:

module mod1 #(parameter WIDTH = 0) (output [WIDTH:0] port1); 

generate 
if(WIDTH > 3) 
    assign port1 = {WIDTH{1'b1}}; 
else 
    assign port1 = {WIDTH{1'b0}}; 
endgenerate 

endmodule 

当上述模块读取,解析器不知道什么宽度将因为给定的值可以在实例化覆盖。这会阻止它解析生成块内的代码,直到读取完整个Verilog源文本。 defparams,函数的前向声明和分层引用会变得更加复杂。

命令// synopsys template和术语“模板”不是verilog的一部分。考虑到工具的回答以及你链接的文档,它似乎告诉工具,在命令之后读取的任何模块都需要参数定义,因此在读取时不应该详细说明。例如,一个网表在实例中不会有任何参数覆盖,所以如果你想在网表中放置一个RTL实例,你需要直接告诉综合工具该参数应该是什么。

0

// synopsys template评论由Synopsys Design Compiler工具在将Verilog RTL代码合成到门网表中时使用。编译指示只影响包含parameters的Verilog代码。当合成相同Verilog模块的多个实例时,它们都非常有用,每个实例都具有不同的传递参数值。

例如,如果你有一个使用parameter指定其字深度的FIFO:

parameter DEPTH = 4; 

可以合成两个FIFO,覆盖默认的深度,如果需要的话。

使用template编译指示还可以使用其他Design Compiler脚本变量来控制合成实例名称。

template pragma只对合成工具有意义;它不影响模拟。

相关问题