Templates Verilog中的“模板”和精化?

Templates Verilog中的“模板”和精化?,templates,parameters,verilog,Templates,Parameters,Verilog,我正在通读并试图理解一些verilog,其中包括编译器指令: // synopsys template 但我不知道这是什么,也不知道它有什么作用。我的Google Fu在研究“verilog模板”变体时,得到了比答案更多的verilog代码示例 我确实找到了这本用户指南,它在p282上提供了一些信息,该指令似乎影响了这个变量: hdlin\u自动保存\u模板 它继续暗示这个指令会影响精化,也许会推迟它?我目前的理解大致类似于传统编译的代码生成步骤,当verilog转换为实际的硬件表示时,是为了

我正在通读并试图理解一些verilog,其中包括编译器指令:

// synopsys template
但我不知道这是什么,也不知道它有什么作用。我的Google Fu在研究“verilog模板”变体时,得到了比答案更多的verilog代码示例

我确实找到了这本用户指南,它在p282上提供了一些信息,该指令似乎影响了这个变量:

hdlin\u自动保存\u模板

它继续暗示这个指令会影响精化,也许会推迟它?我目前的理解大致类似于传统编译的代码生成步骤,当verilog转换为实际的硬件表示时,是为了什么目的

我希望您能解释一下在Verilog中模板是什么/做什么的,也许还可以纠正我在这方面对“精化”的理解——谢谢

synopsys设计编译器工具在将Verilog RTL代码合成到gate网表时使用//synopsys模板注释。pragma只影响包含参数的Verilog代码。它在合成同一Verilog模块的多个实例时特别有用,每个实例都有不同的传递参数值

例如,如果您的FIFO使用参数指定其字深度:

parameter DEPTH = 4;
如果需要,可以合成两个FIFO,覆盖默认深度

使用模板pragma还允许使用其他设计编译器脚本变量控制合成实例名称

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

synopsys设计编译器工具在将Verilog RTL代码合成到gate网表时使用//synopsys模板注释。pragma只影响包含参数的Verilog代码。它在合成同一Verilog模块的多个实例时特别有用,每个实例都有不同的传递参数值

例如,如果您的FIFO使用参数指定其字深度:

parameter DEPTH = 4;
如果需要,可以合成两个FIFO,覆盖默认深度

使用模板pragma还允许使用其他设计编译器脚本变量控制合成实例名称

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

它继续暗示这个指令会影响精化,也许会推迟它?为了什么 end?,我目前的理解与代码大致类似 传统编译的发射步骤,当verilog 转换为实际的硬件表示

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

1364-2005年: 精化是发生在解析和模拟之间的过程。 它将模块绑定到模块实例,构建模型层次结构, 计算参数值,解析层次名称,建立 net连接,并为模拟准备所有这些。和 添加生成构造,这些任务的发生顺序 变得重要

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源文本之前解析generate块内的代码。defparams、函数的前向声明和分层引用使它变得更加复杂

命令//synopsys template和术语“templates”不是verilog的一部分。给定toolic的答案和链接的文档,它似乎告诉工具,在命令之后读取的任何模块都需要参数定义,因此在读取时不应详细说明。例如,网络列表在实例化中不会有任何参数覆盖,因此如果要在网络列表中放置RTL实例,则需要直接告诉合成工具参数应该是什么

它继续暗示这个指令会影响精化,也许会推迟它?为了什么 end?,我目前的理解与代码大致类似 传统编译的发射步骤,当verilog 转换为实际的硬件表示

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

1364-2005年: 精化是发生在解析和模拟之间的过程。 它将模块绑定到模块实例,构建模型层次结构, 计算参数值,解析层次名称,建立 net连接,并为模拟准备所有这些。和 添加生成构造,这些任务的发生顺序 变得重要

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源文本之前解析generate块内的代码。defparams、函数的前向声明和分层引用使它变得更加复杂

命令//synopsys template和术语“templates”不是verilog的一部分。给定toolic的答案和链接的文档,它似乎告诉工具,在命令之后读取的任何模块都需要参数定义,因此在读取时不应详细说明。例如,网络列表在实例化中不会有任何参数覆盖,因此如果要在网络列表中放置RTL实例,则需要直接告诉合成工具参数应该是什么