在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 3418|回复: 9

[求助] 例化时用的模块名是否可参数化

[复制链接]
发表于 2014-3-27 14:35:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
请问在模块A中例化模块B时,模块B的模块名能用parameter代替吗?RAM模块名里有宽度深度等信息,不同大小的RAM名字不一样,只想用一份模块A的代码,而且不让用define,所以希望例化RAM模块时,用的模块名也是个parameter。
发表于 2014-3-27 15:08:49 | 显示全部楼层
不可以吧。。模块名参数化。。。
发表于 2014-3-28 03:35:28 | 显示全部楼层
不可以。但是可以用define,ifdef之类的。或者用generate.
发表于 2014-3-28 09:16:14 | 显示全部楼层
可以把ram的深度定义成参数,这样不同大小ram的名字就一样,调用时,传参就可以了
 楼主| 发表于 2014-3-28 16:38:44 | 显示全部楼层
回复 3# tigerjade


    我现在用的就是generate,但是这样做也有弊端。必须在generate体内,用case去对传入的parameter做判断,分别例化不同名字的RAM。有n种可能的话,RAM例化那一段话就要重复写n次。有没有可能只需要出现一次RAM例化的那段话,但使用的RAM名里掺杂有顶层传入的参数变量,参数不同,就能动态地例化出不同模块名的RAM?
 楼主| 发表于 2014-3-28 16:43:18 | 显示全部楼层
回复 4# haimo


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




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


复制代码


只需写这么一段话,顶层传入深度、宽度的参数,就能动态地例化出不同的RAM模块。verilog有这种语法吗?
发表于 2014-3-28 17:36:55 | 显示全部楼层
学习学习
发表于 2014-3-31 09:54:39 | 显示全部楼层
关于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
发表于 2014-3-31 15:07:48 | 显示全部楼层
可以的吧
发表于 2014-3-31 18:19:04 | 显示全部楼层
学习了,太好嘞
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

X

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-6-22 05:18 , Processed in 0.021780 second(s), 8 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表