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语段起个名字

 

本篇内容中有部分资源来源于网络,如有侵权,请联系作者。

 

 如果您觉得本公众号还不错的话,可以推给身边的朋友们,感谢并祝好!

posted on 2024-05-01 16:41  郝旭帅电子设计团队  阅读(3)  评论(0编辑  收藏  举报

导航