微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > define用法

define用法

时间:10-02 整理:3721RD 点击:
我现在想在子模块用define定义个位宽,使之可以在调用的时候调节,比如输入为a时定义位宽为10,输入为b时定义位宽为20,不知道该如何定义,希望能有简单的代码说明,谢谢

希望能用简单的代码说明下,有点迷茫

比如在子模块中'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用来指导编译的,不是用来干这个的

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

网站地图

Top