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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 5573|回复: 7

[求助] 请问各位大侠,verilog中如何根据不同条件进行实例化

[复制链接]
发表于 2011-11-28 22:35:39 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 lmz05 于 2011-11-29 00:04 编辑

由于我的项目中一些模块中的memory的大小类型因不同的参数(如精度)而不同,
     比如parameter DP=1024, DW=32时,选用ram1p_1024x32,  DP=2048, DW=36时选用ram1p_2048x36,
      DP=512, DW=16时选用ram1p_512x16……等等,根据DP与DW确定memory类型,每次只实例化一个instance,
     每次如果调整精度之类,都必须同时修改DP,DW还有memory的module名字。
     我现在只知道用下面的方法,穷举所有的可能,比较难维护,不知道哪位大侠有更妙的方法,大家互相交流一下啊:

    module  mem_wrap  (......);
    .......
    parameter DP =1024;
    parameter DW = 32  ;
     ......
    generate
         if((DP == 1024) && (DW == 32) ) begin
               ram1p_1024x32      u_mem(.......);
         end
         else if ((DP == 2048) && (DW == 36)) begin
               ram1p_2048x36     u_mem(.......);
         end
         ......
   endgenerate

   ....

   endmodule
发表于 2011-11-28 22:45:01 | 显示全部楼层




   你都想到用if了,就没用想到用case吗...用case,起码少一半的代码行数....
因为你每一种情况要做的处理是不同的,没法缩减这个条件的数目....
最多用更简洁的语法缩减一下行数
 楼主| 发表于 2011-11-28 22:49:52 | 显示全部楼层
回复 2# jack888518


    嘿嘿  if/case我都知道,只是例子用if罢了,这个不是本质区别。
发表于 2011-11-28 22:52:43 | 显示全部楼层
似乎有更简便的办法....
用generate,genvar ,for 这个组合循环生成......
但我突然发现,你的问题挺含糊的......
如果你每次只例化一个module,只是类型不同的话..我没想到更好的办法...只能每种条件都写进去..
这是具体问题..如果每种类型之间有一定的相关性,应该是有办法的....
 楼主| 发表于 2011-11-28 22:56:41 | 显示全部楼层
回复 4# jack888518


    我的问题是每次只例化一个且一种memory
发表于 2011-11-29 13:53:23 | 显示全部楼层
能不能只做一个实例,其参数做成可配的  看到很多IPcore就是这样的  一般没必要这么完美吧

[DW-1:0] ram1p [DP-1:0]
发表于 2011-11-29 19:03:58 | 显示全部楼层
那就自己写RAM的代码吧,这样就可以参数化实现了
 楼主| 发表于 2011-11-29 20:00:52 | 显示全部楼层
回复 7# justshuashua


    不行哦, 要用memory compiler产生的memory
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-24 21:20 , Processed in 0.025693 second(s), 9 queries , Gzip On, Redis On.

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