微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请问各位大侠,verilog中如何根据不同条件进行实例化

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

时间:10-02 整理:3721RD 点击:

由于我的项目中一些模块中的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

   你都想到用if了,就没用想到用case吗...用case,起码少一半的代码行数....
因为你每一种情况要做的处理是不同的,没法缩减这个条件的数目....
最多用更简洁的语法缩减一下行数



    嘿嘿  if/case我都知道,只是例子用if罢了,这个不是本质区别。

似乎有更简便的办法....
用generate,genvar ,for 这个组合循环生成......
但我突然发现,你的问题挺含糊的......
如果你每次只例化一个module,只是类型不同的话..我没想到更好的办法...只能每种条件都写进去..
这是具体问题..如果每种类型之间有一定的相关性,应该是有办法的....



    我的问题是每次只例化一个且一种memory

能不能只做一个实例,其参数做成可配的  看到很多IPcore就是这样的  一般没必要这么完美吧
[DW-1:0] ram1p [DP-1:0]

那就自己写RAM的代码吧,这样就可以参数化实现了



    不行哦, 要用memory compiler产生的memory

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

网站地图

Top