前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >matlab与FPGA数字滤波器设计(4)—— Vivado DDS 与 FIR IP核设计 FIR 数字滤波器系统

matlab与FPGA数字滤波器设计(4)—— Vivado DDS 与 FIR IP核设计 FIR 数字滤波器系统

作者头像
FPGA探索者
发布于 2021-03-15 02:30:25
发布于 2021-03-15 02:30:25
2.2K00
代码可运行
举报
文章被收录于专栏:FPGA探索者FPGA探索者
运行总次数:0
代码可运行

本讲使用两个 DDS 产生待滤波的信号和matlab产生带滤波信号,结合 FIR 滤波器搭建一个信号产生及滤波的系统,并编写 testbench 进行仿真分析,第五讲、第六讲开始编写 verilog 代码设计FIR滤波器,不再调用IP核。

系统框图如图所示:

1. 添加DDS的IP核

(1) 新建一个原理图文件,添加DDS的IP。

(2) DDS配置1

2处:系统时钟,设为 32 MHz;

4处:通过控制杂散动态范围(Spurious Free Dynamic Range,SFDR)的数值,可以调整正弦和余弦输出数据的数据位宽,这里设置为90,则正余弦输出为15位。

如下图,选择6处的Noise Shaping为None时,输出的正弦波数据的位宽为 90/6 向上取整,即位宽为 15-bit,此处的 m_axis_data_tdata 符合 AXIS 总线协议,位宽必须是 8 的倍数,所以是 16 位([15:0])。

5处:频率分辨率,可以调整相位数据的位宽,设置为1000,32MHz/(1*1000)=32000,以2为底取对数得到大约为14.8,向上取整为15-bit。

(3) DDS配置-2

1/2两处选择 Fixed 固定值,表示输出频率和初始相位都不变,3处输出正弦波,总体配置为频率和初相都不变的正弦波;

(4) DDS配置-3

配置输出信号的频率为 0.5 MHz,结合前面的配置输出 0.5 MHz 的固定的正弦波,其他保持默认;

总结如下,可以看到位宽符合前文的计算。

2. 使用IP核搭建滤波系统

(1) 按照前文的方式生成两个 DDS,一个频率为 0.5 MHz,一个为 5 MHz;(2) 按照第二讲的方式生成1个FIR低通滤波器;matlab与FPGA数字滤波器设计(2)——Vivado调用IP核设计FIR滤波器

(3) 添加加法器Adder/Subtracter;

1处点开可以更改输入位宽,此处因为要将前面DDS输出的AXIS总线上的数据作为输入,是16位位宽(其中只有低15位是有效的DDS数据),所以此处设置加法器输入16位(与AXIS的数据一致,不然位宽不匹配);

2处可以选择是加法还是减法;

3处配置输出位宽16位,输入的两个数据都是16位的,但是都只有低15位是有效数据,两个15位的数据相加,输出用16位表示可以保证不溢出;

4处配置延时,也是插入的流水线,当为1时表示插入1级流水线,输出的和会有1个时钟的延迟,此处不需要流水线,配置为0,此时输入就不会再有时钟;

此外,在第二页的Control页将Clock Enable勾掉,不需要做使能;

(4) 调用常数ip核 Constant,配置输出位宽为1,输出数据为1,整体连接图如下图,三个IP时钟一样,0.5 MHz 正弦波与 5 MHz 正弦波相加,得到的待滤波信号输入到 FIR 滤波器的输入数据端,常数 1 输给 s_axis_data_tvalid,表示输入数据恒有效

3. 例化系统

(1) 对原理图文件按照第二讲的方法 Generate Output Products Create HDL Wrapper,并将 design_2_wrapper 设置为顶层文件(Set as Top)

(2) 打开 design_2_wrapper.v,可以看到如下引脚:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
output [39:0]M_AXIS_DATA_0_tdata;//滤波器输出的滤波后的信号
output M_AXIS_DATA_0_tvalid;//滤波器输出信号有效指示信号,为1时表示//输出的数据有效
output [15:0]M_AXIS_PHASE_0_tdata;//0.5 MHz的DDS的相位数据
output M_AXIS_PHASE_0_tvalid;//0.5 MHz的DDS的相位数据有效指示信号
output [15:0]M_AXIS_PHASE_1_tdata;//5 MHz  的DDS的相位数据
output M_AXIS_PHASE_1_tvalid;//5 MHz  的DDS的相位数据有效指示信号
input aclk_0;//输入时钟,32MHz
output m_axis_data_tvalid_0;//0.5 MHz的DDS正弦波数据有效指示信号
output m_axis_data_tvalid_1;//5 MHz  的DDS正弦波数据有效指示信号

(3) 新建仿真文件testbench

具体步骤参考上一讲;matlab与FPGA数字滤波器设计(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器

(4) 编写testbench例化 design_2_wrapper 模块;

具体参考上一讲matlab与FPGA数字滤波器设计(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器

(5) 给定时钟信号;

使用 initial 块always 块设定时钟为 32 MHz(大约),具体见上一讲;

此处只有一个输入是时钟,不需要再配置其他输入信号;

此外,需要将新的仿真文件 fir_dds_tb 设为顶层文件(Set as Top),这样仿真时才能对新建的文件进行仿真;

4. 仿真分析

(1) 点击仿真,可以看到滤波器输出一个0.5MHz的正弦波,滤波效果很好;

(2) 观察内部其他信号的波形

首先,复位整个仿真,输入tcl 命令 restart

输入 tcl命令 log_wave -r /*,注意空格,-r前后都有一个空格;

找到下图中对应的模块,比如 DDS 模块的正弦波输出数据目前看不到,没有相应的引脚引出,找到 DDS 模块,对2箭头所指的信号 m_axis_data_tdata 右键,把信号添加到波形窗口 Add to Wave Window

添加两个 DDS 的信号和加法器的输出信号,如下图,1处是滤波器的输出信号2处是 0.5 MHz 的正弦波输出信号3处是 5 MHz 的正弦波信号,4处是加法器输出的两个正弦波的叠加信号;

下一讲使用verilog 编写 FIR 滤波器,并编写testbench进行仿真分析。

matlab与FPGA数字滤波器设计(3)—— Matlab 与 Vivado 联合仿真 FIR 滤波器

matlab与FPGA数字滤波器设计(2)——Vivado调用IP核设计FIR滤波器

matlab与FPGA数字滤波器设计(1)——通过matlab的fdatool工具箱设计FIR数字滤波器

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA探索者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
Java-JDK动态代理(AOP)
使用JDK的反射机制,创建对象的能力,创建的时代理类的对象.而不用我们创建类的文件.
Java架构师必看
2021/05/14
2760
Java-JDK动态代理(AOP)
Feign原理 (图解)_feign原理
从上图可以看到,Feign通过处理注解,将请求模板化,当实际调用的时候,传入参数,根据参数再应用到请求上,进而转化成真正的 Request 请求。通过Feign以及JAVA的动态代理机制,使得Java 开发人员,可以不用通过HTTP框架去封装HTTP请求报文的方式,完成远程服务的HTTP调用。
全栈程序员站长
2022/11/10
4.3K0
Feign原理 (图解)_feign原理
SpringCloud原理之feign
前面一节我们学习了一下eureka,我们来回顾一下,首先它是一个cs架构,分为客户端和服务端,
用户9927510
2022/07/29
6500
SpringCloud原理之feign
Spring Cloud Feign工作原理、负载均衡及使用示例
Feign 是一个开源的Java HTTP客户端框架,主要用于简化服务间的HTTP调用,特别是针对微服务架构中的服务间通信。它允许开发者采用声明式的方式来定义HTTP请求,即将HTTP请求抽象成Java接口的方法调用,从而让服务间的调用看起来像是在调用本地方法一样简洁易懂。
用户7353950
2024/04/24
1.1K0
Spring Cloud Feign工作原理、负载均衡及使用示例
Feign 体系架构解析
正所谓麻雀虽小五脏俱全,HTTP 调用看着简单,实则下面隐藏的是一套非常复杂的流程。
程序员波特
2024/01/29
1940
Feign 体系架构解析
10000字 | 深入理解 OpenFeign 的架构原理
上次我们深入讲解了 Ribbon 的架构原理,这次我们再来看下 Feign 远程调用的架构原理。
悟空聊架构
2022/05/13
2.4K0
10000字 | 深入理解 OpenFeign 的架构原理
简单理解Feign的原理与使用
Spring Cloud 常见的集成方式是使用Feign+Ribbon技术来完成服务间远程调用及负载均衡的,如下图
ha_lydms
2023/08/09
8560
简单理解Feign的原理与使用
程序员不可不学的REST服务集成,Feign实现REST调用?
Feign 是 一 个 声 明 式 的 Web Service 客 户 端 , 它 使 得 编 写 WebService客户端更为容易。Feign受到Retrofit、JAXRS2.0、WebSocket的影响,采用声明式的API调用模式。
愿天堂没有BUG
2022/10/28
7920
程序员不可不学的REST服务集成,Feign实现REST调用?
spring cloud服务间调用之feign
在微服务架构盛行的年代,我们将一个大型的系统,拆解成各个服务,要完成一个业务逻辑,就可能需要,调用不同服务。比如订单服务调用会员服务。当然我们可以使用JDK自带的URLConnection,或者Apache的Http Client来调用,但是最为优雅的使用feign。
丁D
2022/08/12
9820
spring cloud服务间调用之feign
花一个周末,掌握 SpringCloud OpenFeign 核心原理
现在的微服务在互联网圈子里应用已经相关广泛了,SpringCloud 是微服务领域当之无愧的 "头牌"
Java识堂
2021/08/05
8.1K0
花一个周末,掌握 SpringCloud OpenFeign 核心原理
Feign的核心功能(三)
Feign支持通过集成Ribbon和Eureka来实现负载均衡和服务发现的功能。Ribbon是一个客户端负载均衡器,它可以根据不同的负载均衡算法来选择要调用的服务实例。Eureka是一个服务发现组件,它可以帮助我们动态地发现和注册服务实例,以实现服务的动态扩缩容和高可用性。
堕落飞鸟
2023/04/07
3220
SpringCloudRPC远程调用核心原理:Feign远程调用的执行流程
由于Feign中生成RPC接口JDK动态代理实例涉及的InvocationHandler调用处理器有多种,导致Feign远程调用的执行流程稍微有所区别,但是远程调用执行流程的主要步骤是一致的。这里主要介绍与两类InvocationHandler调用处理器相关的RPC执行流程:
愿天堂没有BUG
2022/10/31
1.5K0
SpringCloudRPC远程调用核心原理:Feign远程调用的执行流程
Feign的工作原理
Feign是一个伪Java Http 客户端,Feign 不做任何的请求处理。Feign 通过处理注解生成Request模板,从而简化了Http API 的开发。开发人员可以使用注解的方式定制Request API模板。
全栈程序员站长
2022/11/09
6580
Feign的工作原理
万字+33张图探秘OpenFeign核心架构原理
在很久之前,我写过两篇关于OpenFeign和Ribbon这两个SpringCloud核心组件架构原理的文章
三友的java日记
2024/02/29
1.4K0
万字+33张图探秘OpenFeign核心架构原理
你都用过SpringCloud的哪些组件,它们的原理是什么?
看到文章的题目了吗?就是这么抽象和笼统的一个问题,确实是我面试中真实被问到的,某共享货车平台的真实面试问题。 SpringCloud确实是用过,但是那是三四年前了,那个时候SpringCloud刚开始流行没多久,我们技术总监让我们调研一下,然后算上我在内的三个同事就一人买了一本SpringCloud的书籍,开始看,开始研究,正好那个时候DDD也比较火,然后我们就一边研究的SpringCloud一边按照DDD的模型搭建自己的项目。 但是这个项目最后做了三个月,才完成了一期。后面二期还没开始,我就撤了。所以SpringCloud总共的使用时间就两三个月,所以对这部分知识掌握的并不扎实,而且入职了新公司之后,都是使用公司自己封装的框架,也已经三年没有用过SpringCloud了,这次是要面试换工作了,所以决定将这方面的知识,总结一下。
纪莫
2021/01/21
7420
配置Spring Cloud Feign(一)
Spring Cloud Feign是一个声明式的HTTP客户端,它简化了使用HTTP客户端调用RESTful API的过程。使用Spring Cloud Feign,我们可以将RESTful API的调用看做是一个普通的方法调用,而不需要关心具体的HTTP请求和响应的细节。
堕落飞鸟
2023/04/07
3820
Feign:简化微服务通信的利器
Feign 是一个声明式、模板化的 HTTP 客户端,它简化了编写 Web 服务客户端的过程。它的主要目的是使 HTTP API 客户端的开发变得更加简单和直观。Feign 的设计理念是将 HTTP 客户端的细节隐藏在背后,使开发者可以专注于定义与服务端通信的接口而无需关注底层的实现细节。
繁依Fanyi
2024/05/13
6510
面试系列之-Spring Cloud Feign
根据传入的Bean对象和注解信息,从中提取出相应的值,来构造Http Request 对象;
用户4283147
2023/11/20
3600
面试系列之-Spring Cloud Feign
Feign源码解析4:调用过程
前面几篇分析了Feign的初始化过程,历经艰难,可算是把@FeignClient注解的接口对应的代理对象给创建出来了。今天看下在实际Feign调用过程中的一些源码细节。
低级知识传播者
2024/01/17
4260
Feign源码解析4:调用过程
SpringCloudRPC远程调用核心原理:FeignRPC动态代理实例创建流程
首先回顾一下Feign的整体运作流程。Feign英文直译为假装/装作,也就是说Feign是一个伪客户端,即它不做任何的HTTP请求处理。
愿天堂没有BUG
2022/10/31
8600
SpringCloudRPC远程调用核心原理:FeignRPC动态代理实例创建流程
相关推荐
Java-JDK动态代理(AOP)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档