请问各位大侠,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
