微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 例化相同的模块

例化相同的模块

时间:10-02 整理:3721RD 点击:
我想例化64个相同的模块,这个怎么办?可以用FOR吗?

好像可以用python写个脚本,不过我也不会,坐等高手

1. 据我所示,没法用循环的。
2. 可以用C、perl等,打印出相应的verilog代码,再贴回去。


使用generate(genvar,label)
#转自,http://www.cnblogs.com/fbi888/archive/2013/11/27/3445178.html

generate_loop

可以用for语句产生啊,for就是用来干这些循环的事情。
只是要注意一点的是端口信号不能增量命名,但是可以通过把信号定义成 wire [data_width-1:0] signals [63:0] 这样的形式。
忘了还有一点是模块命名,可以直接用 {string, i} 这种形式进行字符连接。
还是举个例子吧,这个我也没试过,不知道能不能综合。

  1. wire [data_width-1:0] data_in [63:0] ;wire [data_width-1:0] data_out [63:0] ;
  2. for(i=0; i<64, i++) begin
  3.    basemodule {“basemodule_inst”,i}
  4.       (
  5.          .din    (data_in[64*i]),
  6.          .dout  (data_out[64*i]),
  7.       );
  8. end

复制代码


    parameter SIZE = 5;
    input [SIZE-1 : 0] sig;
    input [SIZE-1 : 0] sig_in;
    output [SIZE-1 : 0] sig_o;
    genvar i
    generate
        for (i=0;i<SIZE;i=i+1)
        begin: TAG
             module_test inst_ (.a(sig),.b(sig_in),.c(sig_o));
        end
    endgenerate


漏了变量
module_test inst_ (.a(sig\[i\]),.b(sig_in\[i\]),.c(sig_o\[i\]));

这种循环生成,反而会产生问题

刚刚去实践了下,用generate for可以综合

两种办法,generate 或者实例数组,看情况使用



   学习了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top