从零开始利用MATLAB进行FPGA设计(二)用于HDL代码生成的Simulink模型并用于流水线设计

文章灵感来源于MATLAB官方免费教程:HDL Coder Self-Guided Tutorial

考虑到MATLAB官网的英文看着慢,再加上视频讲解老印浓浓的咖喱味,我决定记录利用MATLAB&Simulink&SystemGenerator进行FPGA数字信号处理的学习过程。

往期回顾:

从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型1

从零开始利用MATLAB进行FPGA设计(一):建立脉冲检测模型的Simulink模型2

1.HDLSETUP

在MATLAB命令行中将上一期中制作好的Simulink文件执行:

open hdlsetup('文件名')

这个命令用来设置用于生成HDL代码的模型参数。

其中一个参数是SampleTimeColoes,即用不同颜色表示不同的采样时间,对应FPGA中的时钟速度。

在本例中,所有位置的采样速度相同,所以显示为相同颜色。

2.插入pipiline

FPGA的流水线设计(pipline design)是FPGA设计中的关键,流水线设计就是将组合逻辑系统地分割,并在各个部分之间插入寄存器,暂存中间数据的方法,目的是将一个大操作分解成若干小操作,各小操作并行执行,提高效率,总的来说是一种以面积换取时间的方法。

2.1转置结构的FIR滤波器

首先将滤波器结构改为direct form transposed(转置结构):

转置结构的FIR滤波器于直接型相比,最大的不同是滤波器系数的顺序是相反的,在转置形式中,输入同时到达所有乘法器,而直接型输入在不同周期到达乘法器:

转置型FIR滤波器
直接型FIR滤波器

将pipeline添加到直接型FIR会导致输入到输出的延迟,而转置结构不会;但转置结构同时将输入广播到所有乘法器,在输入存在大量抽头是,必须考虑输入的扇出。考虑到寄存器的数量和延迟,转置结构是首选的实现方式。

2.2编辑块属性

在编辑块属性中添加输入/输出pipeline寄存器:

将AdaptivePipelining设为on可以自动为某些运算插入pipeline寄存器:

2.3流水线设计仿真

通过减少pipeline之间的逻辑运算可以提高时钟速度。在生成HDL代码时,可以查看插入到各个模块中的寄存器,寄存器会影响模型的整体仿真效果。可以通过手动插入延迟达到这样的效果。

为滤波器、积分器和峰值提取定位模块建立一个定成子系统:

在Simulink模型中添加数据有效性检查:

size(RxSignal) 返回的是 RxSignal 的大小(即维度),然后 true(size(RxSignal)) 会创建一个与 RxSignal 相同大小的逻辑数组,其中每个元素都为 true,创建一个与 RxSignal 同样大小的逻辑掩码。

Run Pulse detector test bench (step 2),可以看到结果与黄金参考相匹配:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

明天才有空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值