参数化模块设计中如何判读参数值?
需要对调用时给出的参数进行判读,
以进行不同的处理,
但参数是常数,
如何在模块的程序里进行判读实现条件编译?》
谢谢。
如:
module Decoder(A,F);
parameterWidth=16,Polarity=1;
…….
endmodule
Width可能取值:8,16.32 ,
如何判读或者实现条件编译?
`ifdef xxxxxxxxx
parameter Width=16,Polarity=1;
`endif
`ifdef xxxxxxxxx
parameter Width=8,Polarity=1;
`endif
…………
谢谢,
这个方法考虑过,
模块的参数个数较多,还有通道数目的参数由1 ~8,
组合起来比较复杂,
还有没有其它方案?
感谢。
这个方法还是有问题:
因为参数化模块对于不同的位宽是统一的code供别的模块调用,
顶层模块调用时只提供不同位宽的参数,
而不需另外定义 macro,
所以还是不能实现自动根据参数值实现条件编译。
module
#(
parameter width = 8;
parameter polarity = 1
)
(
端口定义
);
endmodule
这样在调用一个模块时,参数就可以随便改
谢谢回复,
我的意思是在参数化模块内部能根据顶层的调用给出的具体参数值在模块内部实现条件编译,
即根据WIDTH= 8,16,32 ,实现条件编译。
使用generate,
generate
if (AXI_DW == 32) assign awaddr_ram = awaddr_proc[RAM_PW-1:2];
else if (AXI_DW == 64) assign awaddr_ram = awaddr_proc[RAM_PW-1:3];
else if (AXI_DW == 128) assign awaddr_ram = awaddr_proc[RAM_PW-1:4];
//else if (AXI_DW == 256) assign awaddr_ram = {awaddr_proc[RAM_PW-1:5], 1'b0};
endgenerate
谢谢,
AXI_DW 是模块的参数吧?
那应该是常数,不能当作变量进行判断啊?
楼上的generate是你最好的选择,generate语句里的if判断条件,就是常数参数,根据这些参数,选择生成哪一种电路,你不会没看懂吧。
谢谢回复,
测试哈。
