verilog hdl中generate的使用说明(一)
欢迎各位朋友关注“郝旭帅电子设计团队”,本篇主要讨论generate for的使用。
在编写verilog hdl时,经常需要编写多个结构相同但是连接关系不同或参数不同的模块(逻辑)。如果每一个都单独编写,则需要大量的时间以及大量的代码篇幅;有时我们不确定需要的是具体几个模块,只能够使用参数来确定,那么单独编写是无法胜任的。
verilog hdl中提供了一种动态生成语句(不用设计人员编写,而是综合器遇到这类代码会自动展开)来帮助设计者解决上述的问题。
下面给出一个简单的例子:
单个的异或门:
module xor_gate ( input wire ina, input wire inb, output wire os ); assign os = ina ^ inb; endmodule
动态例化nbit的异或门:
module generate_for_nxor #( parameter N = 16 )( input wire [N-1:0] dataa, input wire [N-1:0] datab, output wire [N-1:0] odata ); genvar i; generate for(i=0; i<N; i=i+1) begin : xor_gate xor_gate xor_gate_inst(.ina(dataa[i]), .inb(datab[i]), .os(odata[i])); end endgenerate endmodule
在使用时,例化的时候给予合适的N即可。
总结关键点:
A. generate for语句必须有genvar关键字定义for的变量,generate_for用于复制模块;
B. for 的内容必须加begin和end
C. 必须给for语段起个名字
本篇内容中有部分资源来源于网络,如有侵权,请联系作者。
如果您觉得本公众号还不错的话,可以推给身边的朋友们,感谢并祝好!