0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用matlab生成一个可编程FIR滤波器的硬件HDL代码?

FPGA之家 来源:SoWhat1412 作者:SoWhat1412 2021-05-03 09:37 次阅读

01

概述

本文通过matlab自带的工具箱生成一个可编程FIR滤波器硬件HDL代码,可生成VHDL或者Verilog HDL两种类型的代码。

02

具体操作步骤

新建一个matlab的脚本,键入下面两行代码,这里是直接调用matlab已经定义好的“dspprogfirhdl”模型,然后在simulink工具中打开该系统模型。

modelname = ‘dspprogfirhdl’;open_system(modelname)

运行上面两行代码后,会打开simulink并出现下图:

4ef7597c-a2d1-11eb-aece-12bb97331649.jpg

上图就是“dspprogfirhdl”模型的结构图, 图中Host Behavioral Model 是用来产生可编程FIR滤波器的系数(低通或者高通滤波器系数),Programmable FIR via Registers 是我们要生成的可编程滤波器模块,FIR Behavioral 是一个行为级的参考模块,它用来和可编程滤波器模块做结果的比对。

双击上图中的 Programmable FIR via Registers 模块或者运行如下脚本中:

systemname = [modelname ‘/Programmable FIR via Registers’];open_system(systemname);

会出现下图,这是programmable FIR via Registers模块的内部结构:

4fbbb812-a2d1-11eb-aece-12bb97331649.png

上图中coeffs_registers 是一个FIR 滤波器的系数寄存器,当‘write_enable’ 信号拉高写FIR的系数;当 ‘write_done’ 拉高,也就是写完成时, shadow registers 才会更新一次FIR的滤波器系数,该模型生成的HDL代码默认是全并行的结构实现,可根据需要改为串行流水结构。

开始执行仿真,以及查看仿真波形,执行如下代码;

sim(modelname);open_system([modelname ‘/Scope’]);

会生成如下的仿真结果:

上图中,filter_input是输入的信号,ref_out和dut output是参考模型和dut的输出结果,error是二者的结果比对情况。

也可以使用simulink工具中的 Logic Analyzer逻辑分析仪查看波形,点击本文第一张图中的wifi符号,如下图:

4fe0e970-a2d1-11eb-aece-12bb97331649.png

最后会在 Logic Analyzer中生成如下的波形图:

500a484c-a2d1-11eb-aece-12bb97331649.jpg

将filter滤波器输入信号和输出信号用模拟形式展开,如下图:

5023bab6-a2d1-11eb-aece-12bb97331649.jpg

03

生成HDL代码

下面通过两种方式生成HDL代码

方式一(脚本):

脚本中键入如下代码,生成HDL的dut代码(默认生成.vhd的代码):

workingdir = tempname;makehdl(systemname,‘TargetDirectory’,workingdir);

matlab命令行窗口中出现如下图,表示成功FIR滤波器的DUT代码:

502cd038-a2d1-11eb-aece-12bb97331649.jpg

脚本中键入如下代码,生成HDL的tb代码:

makehdltb(systemname,‘TargetDirectory’,workingdir);

matlab命令行窗口中出现如下图,表示成功FIR滤波器的TB代码:

505b0458-a2d1-11eb-aece-12bb97331649.png

方式二(界面):

在下图中双击箭头所示部分,会出现configration配置界面(生成.v格式的代码):

509bdbc2-a2d1-11eb-aece-12bb97331649.jpg

出现下图,按照如下图操作1,2,3,然后点击下方generate。

50d60180-a2d1-11eb-aece-12bb97331649.png

matlab的命令行出现下图,表示成功生成FIR滤波器的DUT代码:

50ded9a4-a2d1-11eb-aece-12bb97331649.png

在configuration中选取testbench然后点击生成testbench即可。

51252bf2-a2d1-11eb-aece-12bb97331649.jpg

matlab的命令行出现下图,表示成功生成FIR滤波器的TB代码:

5162db82-a2d1-11eb-aece-12bb97331649.png

04

modelsim工具仿真

经过matlab工具生成可编程的FIR滤波器HDL代码后,在工作目录中会有如下的文件(包括:仿真用的数据.dat文件,dut和tb文件,run.do脚本):

516dd690-a2d1-11eb-aece-12bb97331649.png

使用modelsim仿真后的结果如下:

51779f68-a2d1-11eb-aece-12bb97331649.png

原文标题:matlab工具生成可编程FIR滤波器的HDL代码

文章出处:【微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    178

    文章

    2929

    浏览量

    228957
  • 滤波器
    +关注

    关注

    158

    文章

    7419

    浏览量

    175593

原文标题:matlab工具生成可编程FIR滤波器的HDL代码

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab与FPGA数字信号处理系列 Verilog 实现并行 FIR 滤波器

    rst_n 低电平进行复位; (2)获取滤波器系数 h0 ~ h7; 按照 第讲 通过matlab的fdatool工具箱设计FIR滤波器
    发表于 05-24 07:48

    DSP教学实验箱_DSP算法实验_嵌入式教程:4-3 有限冲激响应滤波器FIR)算法(CCS显示)

    生成滤波器,另外种是纯算法生成滤波器。本实验中是通过FIR
    发表于 05-16 09:30

    Matlab生成fir滤波器抽头系数

    在Vivado调用fir滤波器时,我们会遇到需要填充滤波器抽头系数的问题,手工计算又不现实,所以在此向大家介绍
    发表于 04-30 16:17

    基于MATLABFIR半带滤波器系数生成方法

    matlab设计滤波器时,我们会使用到fdatool工具, 首先大概说一下这个工具的使用。 假设我们需要设计一个半带抽取滤波器: 采样率Fs为122.88MHz。 通带Fpass: 10 MHz, 带内波动: Apass: 0
    的头像 发表于 04-23 15:49 459次阅读
    基于<b class='flag-5'>MATLAB</b>的<b class='flag-5'>FIR</b>半带<b class='flag-5'>滤波器</b>系数<b class='flag-5'>生成</b>方法

    Vivado 使用Simulink设计FIR滤波器

    。 使用vivado的System Generator可以在simulink下快速的通过matlab的强大设计功能设计滤波器。这里使用fdatool设计了15阶的
    发表于 04-17 17:29

    Matlab生成fir滤波器抽头系数的流程

    在Vivado调用fir滤波器时,我们会遇到需要填充滤波器抽头系数的问题,手工计算又不现实,所以在此向大家介绍一个生成系数的工具。
    的头像 发表于 03-25 09:49 433次阅读
    <b class='flag-5'>Matlab</b><b class='flag-5'>生成</b><b class='flag-5'>fir</b><b class='flag-5'>滤波器</b>抽头系数的流程

    如何在Matlab中实现不同窗低通滤波器的设计?

    Matlab中使用汉明窗设计低通滤波器可以通过fir1函数实现。汉明窗通常用于设计滤波器,可以提供更突出的频率特性。
    的头像 发表于 02-27 14:11 1573次阅读
    如何在<b class='flag-5'>Matlab</b>中实现不同窗低通<b class='flag-5'>滤波器</b>的设计?

    FIR滤波器和IIR滤波器的区别与联系有哪些

    FIR滤波器和IIR滤波器是数字信号处理中的两种常见滤波器类型,它们在原理、结构和性能等方面存在显著的差异与联系。
    的头像 发表于 01-29 16:41 1251次阅读
    <b class='flag-5'>FIR</b><b class='flag-5'>滤波器</b>和IIR<b class='flag-5'>滤波器</b>的区别与联系有哪些

    维修斯坦福SR560可编程滤波器烧了overload

    近日某院校送修一台斯坦福可编程滤波器SR560,客户反馈仪器烧了 overload,对仪器进行初步检测,确定与客户描述故障一致。本期将为大家分享本维修案例。 下面就是斯坦福-SR560维修情况
    的头像 发表于 01-09 15:58 226次阅读
    维修斯坦福SR560<b class='flag-5'>可编程</b><b class='flag-5'>滤波器</b>烧了overload

    请问ADXRS453是否有内部可编程滤波器

    了,请问是否有内部的可编程滤波器(PDF里面没有明确找到说明),看其他相关问题说电源可能会影响性能,我用的ADR435B_5V供电,拖三,电路如下图,请问是否有参考意见提供,谢谢。
    发表于 12-29 06:36

    AD6620的FIR滤波器是什么类型的滤波器呢?

    请问AD6620的FIR滤波器是什么类型的滤波器呢?它的功能是什么呢?可不可以直接从AD6620的输出中进行符号同步的时钟提取呢?谢谢!!!
    发表于 12-22 07:00

    AD9866内部的DAC包含插值滤波器,ADC包含三阶可编程低通滤波器,两滤波器的相位特性是怎样的?

    AD9866内部的DAC包含插值滤波器,ADC包含三阶可编程低通滤波器。 请问这两滤波器的相位特性是怎样的?是线性的吗? 多谢各位啦
    发表于 12-18 07:49

    请问AD9689中的可编程FIR滤波器起什么作用?

    请问下AD9689官方文档中提到的可编程FIR滤波器有什么作用,为什么要在adc内核输出数字信号后加
    发表于 12-06 08:22

    基于Matlab和DSP设计FIR数字滤波器方案

    介绍了基于Matlab和DSP设计FIR数字滤波器的四种方法,并经过实验,将一个多频率成分的信号通过该滤波器并进行比对,实验结果表明,这四种方法都能有效地实现
    发表于 10-19 16:29 0次下载
    基于<b class='flag-5'>Matlab</b>和DSP设计<b class='flag-5'>FIR</b>数字<b class='flag-5'>滤波器</b>方案

    利用Matlab工具箱设计FIR和IIR滤波器

    利用Matlab工具箱设计FIR和IIR滤波器
    的头像 发表于 09-26 14:59 659次阅读