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