微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 例化时用的模块名是否可参数化

例化时用的模块名是否可参数化

时间:10-02 整理:3721RD 点击:
请问在模块A中例化模块B时,模块B的模块名能用parameter代替吗?RAM模块名里有宽度深度等信息,不同大小的RAM名字不一样,只想用一份模块A的代码,而且不让用define,所以希望例化RAM模块时,用的模块名也是个parameter。

不可以吧。模块名参数化。

不可以。但是可以用define,ifdef之类的。或者用generate.

可以把ram的深度定义成参数,这样不同大小ram的名字就一样,调用时,传参就可以了



    我现在用的就是generate,但是这样做也有弊端。必须在generate体内,用case去对传入的parameter做判断,分别例化不同名字的RAM。有n种可能的话,RAM例化那一段话就要重复写n次。有没有可能只需要出现一次RAM例化的那段话,但使用的RAM名里掺杂有顶层传入的参数变量,参数不同,就能动态地例化出不同模块名的RAM?



    因为RAM模块名里有深度、宽度这些信息的数字,我想要的就是类似这样的效果(伪代码,语法请忽略):

  1. ram${DEPTH}_${WIDTH} u_ram
  2. (
  3. .clk (clk ),
  4. ...
  5. );

复制代码


只需写这么一段话,顶层传入深度、宽度的参数,就能动态地例化出不同的RAM模块。verilog有这种语法吗?

学习学习

关于ram的知识我不太清楚,我只能说一些传参。举个分频器的例子吧。
比如偶数分频,假设为N分频,
module fp_even(clk_out,clk_in,rst);
output clk_out;
input clk_in;
input rst;
reg [1:0] cnt;
reg clk_out;
parameter N=6;
………………
endmodule
在主程序中需要一个8分频,一个16分频
module top(……)
fp_even #(.N(8)) u1_fp_even();
fp_even #(.N(16)) u2_fp_even();
endmodule

可以的吧

学习了,太好嘞

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

网站地图

Top