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

标题: 参数化模块设计中如何判读参数值? [打印本页]

作者: macrohard    时间: 2015-1-12 09:35
标题: 参数化模块设计中如何判读参数值?
参数化模块设计中,

需要对调用时给出的参数进行判读,

以进行不同的处理,

但参数是常数,

如何在模块的程序里进行判读实现条件编译?》

谢谢。。。

如:
module Decoder(A,F);
         parameterWidth=16,Polarity=1;
         …….
endmodule

Width可能取值:8,16.32 ,

如何判读或者实现条件编译?
作者: freedomistic    时间: 2015-1-12 10:59
`ifdef   xxxxxxxxx
parameter Width=16,Polarity=1;
`endif

`ifdef   xxxxxxxxx
parameter Width=8,Polarity=1;
`endif

…………
作者: macrohard    时间: 2015-1-12 13:43


   
`ifdef   xxxxxxxxx
parameter Width=16,Polarity=1;
`endif

`ifdef   xxxxxxxxx
parameter Width=8, ...
freedomistic 发表于 2015-1-12 10:59




   
谢谢,

这个方法考虑过,

模块的参数个数较多,还有通道数目的参数由1 ~8,

组合起来比较复杂,

还有没有其它方案?

感谢。。。
作者: macrohard    时间: 2015-1-12 14:35


   
`ifdef   xxxxxxxxx
parameter Width=16,Polarity=1;
`endif

`ifdef   xxxxxxxxx
parameter Width=8, ...
freedomistic 发表于 2015-1-12 10:59




   

这个方法还是有问题:

因为参数化模块对于不同的位宽是统一的code供别的模块调用,

顶层模块调用时只提供不同位宽的参数,

而不需另外定义 macro,

所以还是不能实现自动根据参数值实现条件编译。
作者: xduryan    时间: 2015-1-12 23:15
module
   #(
       parameter width = 8;
       parameter polarity = 1
       )
      (
       端口定义
      );

endmodule
作者: xduryan    时间: 2015-1-12 23:15
回复 5# xduryan


   这样在调用一个模块时,参数就可以随便改
作者: macrohard    时间: 2015-1-13 09:23


   
module
   #(
       parameter width = 8;
       parameter polarity = 1
       )
      (
       ...
xduryan 发表于 2015-1-12 23:15




谢谢回复,

我的意思是在参数化模块内部能根据顶层的调用给出的具体参数值在模块内部实现条件编译,

即根据WIDTH= 8,16,32 ,实现条件编译。
作者: eaglelsb    时间: 2015-1-13 14:47
使用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
作者: macrohard    时间: 2015-1-14 10:46


   
使用generate,
generate
if (AXI_DW == 32)        assign awaddr_ram = awaddr_proc[RAM_PW-1:2];
els ...
eaglelsb 发表于 2015-1-13 14:47




    谢谢,

AXI_DW  是模块的参数吧?

那应该是常数,不能当作变量进行判断啊?
作者: glace12123    时间: 2015-1-16 01:01
楼上的generate是你最好的选择,generate语句里的if判断条件,就是常数参数,根据这些参数,选择生成哪一种电路,你不会没看懂吧。。
作者: macrohard    时间: 2015-1-16 10:23
回复 10# glace12123


   
谢谢回复,

测试哈。




欢迎光临 EETOP 创芯网论坛 (原名:电子顶级开发网) (https://bbs.eetop.cn/) Powered by Discuz! X3.5