little_white321 2023-07-18 11:51 采纳率: 66.7%
浏览 56
已结题

怎么在vivado头文件中用宏定义大数组

怎么在vivado头文件中用宏定义大数组
我在用verilog完成数字滤波抽取,然后就要用到matlab生成的滤波系数来完成滤波器的设计,因为设计滤波器时需要的阶数比较大,所以对应的滤波器系数也比较多,我想将滤波器系数放在头文件中,但语法上一直会有问题,原始系数如下图:

img

如上,COE_DEFAULT_1是一个有300个数据的大数组,CW是系数位宽,18位,下图是我在头文件中用define定义的数组:

img

然后在代码文件中用`include "filter_coe.vh"调用头文件,在代码中将大数组拼位,如下:

img

然后就有语法报错了,上面这一段代码,原则上来说我应写为`COE_DEFAULT_1,但这样写会报错该参数没有定义,可是我不是在头文件中已经定义了这个数组么,这个问题困惑我好几天了,还有什么更好的办法在头文件中定义大数组吗,希望各位友友解答。

  • 写回答

1条回答 默认 最新

  • 老皮芽子 2023-07-19 09:52
    关注

    用宏来做不太好实现
    我一般是在代码中直接读文件
    在我的文章里,有 FIR 重新载入系数的设计,你可以参考一下

        wire[15:0]        fir_reload_dat[3:0][127:0];
        reg    [15:0]        fir_dat0[127:0];
        reg    [15:0]        fir_dat1[127:0];
        reg    [15:0]        fir_dat2[127:0];
        reg    [15:0]        fir_dat3[127:0];
    
        genvar  m;
    
        for(m=0;m<128;m=m+1)
        begin:for_mx
            assign    fir_reload_dat[0][m]    = fir_dat0[m];
            assign    fir_reload_dat[1][m]    = fir_dat1[m];
            assign    fir_reload_dat[2][m]    = fir_dat2[m];
            assign    fir_reload_dat[3][m]    = fir_dat3[m];
        end
    
        initial
        begin
            $readmemh("../../../../../reload_bandpass_10k_30k_30k_50k_1m.txt",    fir_dat0);
            $readmemh("../../../../../reload_bandpass_30k_50k_50k_70k_1m.txt",    fir_dat1);
            $readmemh("../../../../../reload_bandpass_50k_70k_70k_90k_1m.txt",    fir_dat2);
            $readmemh("../../../../../reload_bandpass_70k_90k_90k_110k_1m.txt",    fir_dat3);
        end
    

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月27日
  • 修改了问题 7月18日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥20 想用ollama做一个自己的AI数据库
  • ¥15 关于qualoth编辑及缝合服装领子的问题解决方案探寻
  • ¥15 请问怎么才能复现这样的图呀