- 何时在Verilog模块中执行“GENERATE BLOCK”?
- 生成块内的代码是否会按顺序执行?
执行生成块
回答
生成块不能像总是或初始块一样执行,它在精化阶段进行评估。产生是常用的实例相同模块或逻辑,多个实例,例如:
module and_mod (input bit a, input bit b, output out);
assign out = a & b;
endmodule
module test #(
parameter NUM_INSTANCES = 3
) (
input bit [NUM_INSTANCES - 1 : 0] a,
input bit [NUM_INSTANCES - 1 : 0] b,
output bit [NUM_INSTANCES - 1 : 0] a_and_b,
output bit [NUM_INSTANCES - 1 : 0] a_or_b,
output bit [NUM_INSTANCES - 1 : 0] a_xor_b
);
genvar i;
generate
for(i = 0; i < NUM_INSTANCES; i++)
begin
//module instance
and_mod and_inst (.a(a[i]),.b(b[i]), .out(a_and_b[i]));
//contionous assignement
assign a_xor_b[i] = a[i]^b[i];
//always block
always @(*)
begin
a_or_b[i] = a[i] | b[i];
end
end
endgenerate
endmodule
这生成块将计算为NUM_INSTANCES的代码副本内生成块。正如你所看到的,你可以在模块实例化,赋值,始终/初始块内生成块。请注意,and_mod只有1位宽的端口,因此我们需要3个实例来计算和3位寄存器,但是由于生成了块,您不必在代码中编写3个实例。
执行生成块内部的代码依赖于代码本身,赋值将并发执行,内部始终代码块将按顺序执行,与没有生成块相同。您可以测试here。
感谢您的回答。 –
生成块不用于执行。只是,如果你想在模块中有多个重复块,那么你可以使用生成块。
生成结构用于有条件或多个实例化生成块到模型中。
生成块是一个或多个模块项目的集合。生成块可能不包含端口声明,指定块或specparam声明。在生成块中声明的参数应视为localparams。所有其他模块项目,包括其他生成结构,都可以在生成块中使用。
生成结构提供参数值影响设计结构的能力。它们还允许将具有重复结构的模块更简洁地描述,并使递归模块实例化成为可能。
生成方案在设计过程中进行评估。他们 不会在模拟时间执行。他们在详述 时间被评估,并且结果在模拟开始之前被确定。
有关更多详细信息,请参阅SV1800-2012 LRM中的主题27。
感谢您的回答 –
- 1. 生成的Javascript不执行
- 2. 在运行时生成可执行jar
- 3. 执行Eclipse从命令行生成javadoc
- 4. reverseGeocodeLocation只执行完成块一次
- 5. 成功{}未在.ajax块中执行
- 6. 完成块的不予执行
- 7. jQuery AJAX调用不执行成功块
- 8. XCode - 块完成时执行代码
- 9. 成功块没有在$ .ajax()执行
- 10. 块执行流程,直到脚本执行完成
- 11. C++可执行文件生成器
- 12. g ++为windows生成可执行文件
- 13. 如何使makefile在生成后执行
- 14. 如何从R执行生成文件
- 15. 使Eclipse生成C++可执行文件
- 16. 执行编译器生成的移动
- 17. 错误生成查询执行计划
- 18. 生成器模式VS我的执行
- 19. makefile不生成可执行文件
- 20. 执行hadoop示例,生成jar错误
- 21. mvn发布:执行生成SNAPSHOT?
- 22. 执行VSPackage命令生成后
- 23. 无法执行光标生成语句
- 24. 执行willSelectRowAtIndexPath之后生成EXC_BAD_ADRESS
- 25. py2exe无法生成可执行文件
- 26. Maven的不执行生成资源
- 27. Springfuse - 执行失败的目标:生成
- 28. 如何执行codeDom生成的代码?
- 29. 生成最快的可执行文件
- 30. 在bash中执行生成的命令
请显示与该问题相关的一些代码,因为这样会更容易给出一个好的答案。 –
@MortenZilmer我一直在阅读关于IEEE-Verilog pdf中的'Generate'。它表示'生成块在制定时执行,而不是在模拟时执行'。这种说法是什么意思? –
详细阐述是指将所有模块组合成可以在之后进行仿真的一致设计,并且例如根据模块在使用位置的配置,为模块中的参数分配特定值。 –