define用法
希望能用简单的代码说明下,有点迷茫
比如在子模块中'define a=8;
reg [(a-1):0]b;
那么在调用这个模块的时候 我该怎么写才能让位宽改变
‘define WIDTH_A 10
‘define WIDTH_B 20
assign wid_sig=(din==a)? ‘WIDTH_A :‘WIDTH_B;
reg 【wid_sig-1 :0】 sig;
试试这样行不行
一个模块摸个信号的位宽必须是固定的,你定义为register,则位宽是几综合出来时几个寄存器,若位宽变掉,难道硬件也跟着变?个人见解,仅供参考
你应该用parameter,不是define,你是要实现模块可以参数化吧
`define WIDTH 10
reg [`WIDTH-1:0] bus_a;
parameter
localparam
localparam参数传递不进去
用parameter,比如 YOUR_MODULE 定义了parameter1,parmaeter2
传递的方法:
UP_MODULE #( transfer_parameter1, transfer_parameter2) INST_YOUR_MODULE ( port_map);
貌似你这样写不可综合,寄存器的位宽必须固定,我以前也是在寄存器中使用可变位宽,结果不可综合。
不过这是1年多之前的事情了,不知道现在的综合工具能不能综合这样的代码了
不能用一些软件的想法来考虑HDL硬件描述语言吧!
软件可以动态内存分配,寄存器不行吧。寄存器的宽度设置好了,你少用多用都是那么多,硬件都占了。
在顶层重新define这个宏就覆盖模块内部的宏值了,建议参数化设计要用parameter,define用来指导编译的,不是用来干这个的
