m基于FPGA的积分梳状CIC滤波器verilog设计

news2024/11/17 16:03:42

目录

1.算法描述

2.仿真效果预览

3.verilog核心程序

4.完整FPGA


1.算法描述

积分梳状滤波器,是指该滤波器的冲激响应具有如下形式:

其物理框图如图所示:

可见,CIC滤波器是由两部分组成:累积器H1和H2梳状滤波器的级联。

       现若假设用N级CIC滤波器来代替,每一级的滤波器系数长度为R,每一级的差分延迟为M,抽取数为R,那么可以得到CIC抽取滤波器结构图:

 

       可以看到,N级CIC滤波器在功能上相当于N级完全相同的FIR滤波器的级联。如果按传统的FIR滤波器方式实现,那么N级FIR滤波器的每一级都需要RM个存储单元和一个累加器,但如果用CIC方式实现,那么N级CIC滤波器的每一级只需要M个存储单元。

       通常,由于CIC滤波器的传统结构需要大量的延迟单元,这会大大增加系统的硬件资源消耗,所以,在一般情况下,CIC滤波器采用的设计结构式Hogenauer结构形式,该结构形式如下所示:

 采用这种结构之后,大大降低了系统延迟单元资源。

    这里设计的五级CIC滤波器。那么其基本结构如上图所示,在降采样的左右都有五个延迟单元。

但是在CIC滤波的时候,会导致输出的位宽大大增加,但是如果单独对中间的处理信号进行截位,这会导致处理精度不够,从而影响整个系统的性能,所以,这里我们首先将输入的信号进行扩展。

由于我们输入的中频信号通过ADC是位宽为14,在下变频之后,通过截位处理,其输出的数据仍为14位,所以,我们将CIC滤波的输入为14位,但是考虑到处理中间的益处情况以及保证处理精度的需要,我们首先将输入位宽扩展为40位,从而保证了处理精度以及溢出的情况。

基于FPGA的5级CIC滤波器的设计与实现

       这里首先说明一下为什么使用的级别是5级。从硬件资源角度考虑,CIC滤波器的级数太高,会导致最终输出的数据位宽很大,通过简单的验证,当CIC的级数大于5的时候,输出的位宽>50。这显然会导致硬件资源的大量占用,如果CIC级数太小,比如1,2级。这在其处理效果上没有任何意义,基本无法达到预计的效果,通过仿真分析,一般情况下,选择4级,5级比较合理,因此,这里我们选择5级的CIC滤波器。

       5级滤波器的基本结构为:

2.仿真效果预览

版本vivado2019.2

 

 

 

3.verilog核心程序

module cic_top(
               i_clk,  //input clock
					i_rst,  //system reset
					i_din,  //the input datas
					o_clk16, //the clock 8 clock 
					o_dout  //the output of CIC 
              );
 
parameter WIDTH = 48;				  
				  
input            i_clk;
input            i_rst;
input[13:0]      i_din;
output           o_clk16;
output[WIDTH-1:0]o_dout;				  
				  				  
wire[WIDTH-1:0] result01 ;
wire[WIDTH-1:0] result02 ;
wire[WIDTH-1:0] result03 ;
wire[WIDTH-1:0] result04 ;
wire[WIDTH-1:0] result05 ;
wire[WIDTH-1:0] adders;
 
assign adders = {i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],
                 i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],
                 i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],
                 i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],i_din[13],
                 i_din[13],i_din[13],i_din};//spread the signal 
 
 
//level 1
//level 1	
cic_jifen cic_jifen_u1(
                      .i_clk  (i_clk),
					       .i_rst  (i_rst),
					       .i_din  (adders),
					       .o_dout (result01)
                      );
 
 
 
 
//level 2
//level 2	
cic_jifen cic_jifen_u2(
                      .i_clk  (i_clk),
					       .i_rst  (i_rst),
					       .i_din  (result01),
					       .o_dout (result02)
                      );
							 
//level 3	
//level 3
cic_jifen cic_jifen_u3(
                      .i_clk  (i_clk),
					       .i_rst  (i_rst),
					       .i_din  (result02),
					       .o_dout (result03)
                      );
 
 
//level 4	
//level 4	
cic_jifen cic_jifen_u4(
                      .i_clk  (i_clk),
					       .i_rst  (i_rst),
					       .i_din  (result03),
					       .o_dout (result04)
                      );
 
 
 
//level 5	
//level 5
cic_jifen cic_jifen_u5(
                      .i_clk  (i_clk),
					       .i_rst  (i_rst),
					       .i_din  (result04),
					       .o_dout (result05)
                      );
 
 
//================================================================
//================================================================
 
reg[3:0]cnt = 4'b00000;
always @(posedge i_clk or posedge i_rst)
begin
     if(i_rst)
	  begin
	  cnt <= 4'b0000;
	  end
else begin
     cnt <= cnt + 4'b0001;
     end
end
assign o_clk16 = cnt[3];
 
//================================================================
 
wire[WIDTH-1:0] result11 ;
wire[WIDTH-1:0] result12 ;
wire[WIDTH-1:0] result13 ;
wire[WIDTH-1:0] result14 ;
wire[WIDTH-1:0] result15 ;
 
 
//level 1
//level 1
cic_chaf cic_chaf_u1(
                    .i_clk  (o_clk16),
					     .i_rst  (i_rst),
					     .i_din  (result05),
					     .o_dout (result11)
                    );
 
//level 2
//level 2
cic_chaf cic_chaf_u2(
                    .i_clk  (o_clk16),
					     .i_rst  (i_rst),
					     .i_din  (result11),
					     .o_dout (result12)
                    );
						  
//level 3
//level 3
cic_chaf cic_chaf_u3(
                    .i_clk  (o_clk16),
					     .i_rst  (i_rst),
					     .i_din  (result12),
					     .o_dout (result13)
                    );
						  
//level 4
//level 4
cic_chaf cic_chaf_u4(
                    .i_clk  (o_clk16),
					     .i_rst  (i_rst),
					     .i_din  (result13),
					     .o_dout (result14)
                    );
//level 5
//level 5
cic_chaf cic_chaf_u5(
                    .i_clk  (o_clk16),
					     .i_rst  (i_rst),
					     .i_din  (result14),
					     .o_dout (result15)
                    );
 
assign o_dout = result15;
				  
endmodule
01_115m

4.完整FPGA

V

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/70541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(附源码)ssm某村青年人口信息管理系统 毕业设计 271621

ssm某村青年人口信息管理系统 摘 要 随着社会的发展&#xff0c;社会的方方面面都在利用信息化时代的优势。互联网的优势和普及使得各种系统的开发成为必需。 本文以实际运用为开发背景&#xff0c;运用软件工程原理和开发方法&#xff0c;它主要是采用SSM技术和mysql数据库来完…

Python下的Logistic回归模型

以前都是写杂文&#xff0c;今天也写写专业文章。 不讲理论&#xff0c;Logistic回归模型&#xff08;中文简称逻辑回归&#xff09;的形式就是&#xff1a; 其中&#xff0c; 有的人会把Logistic回归模型的形式写成&#xff1a; 其实&#xff0c;它和第一个公式没有区别&…

worldview卫星数据的查询方法

地理遥感生态网平台代理worldview1、worldview2、worldview3、worldview4、quickbird、geoeye、ikonos、 pleiades、spot1、spot2、spot3、spot4、spot5、spot6、spot7、landsat5(tm)、landsat(etm)、landsat8、rapideye、alos、aster、Hyperion(EO-1)、kompsat2、kompsat-3、k…

vue element 动态增加表单并进行表单验证

表单验证: 需要注意的一点是: 普通表单验证单项依靠的是prop…而动态生成的表单要用:prop 书写的语法是:prop=“‘cloudAccounts.’ + index +’.objectDetails’”,cloudAccounts是v-for绑定的数组,index是索引,objectDetails是表单绑定的v-model的名称,然后用.把他们…

一文带你看透天气预报

天气预报是气象台(站)预先发出关于未来一定时期内的天气变化和趋势的报告。气象台运用现代科学技术(如卫星、雷达等)收集了全国甚至全世界的气象资料&#xff0c;根据天气演变规律&#xff0c;进行综合分析&#xff0c;科学判断&#xff0c;然后作出大范围的天气预报。气象站、…

m基于FPGA的分布式FIR滤波器verilog设计,对比普通结构以及DA结构

目录 1.算法描述 2.仿真效果预览 3.verilog核心程序 4.完整FPGA 1.算法描述 DA算法的主要特点是&#xff0c;巧妙地利用查找表将固定系数的MAC运算转化为查表操作&#xff0c;其运算速度不随系数和输入数据位数的增加而降低&#xff0c;而且相对直接实现乘法器而言&#xf…

软件测试面试技巧有哪些?这几点你得知道,不然后悔都来不及

新手测试技术不过硬&#xff0c;最害怕hr在面试时&#xff0c;问到技术方面的问题&#xff0c;那么在进行软件测试面试时&#xff0c;有哪些软件测试面试技巧可以帮助测试人&#xff0c;提高面试通过率呢&#xff1f; 接下来我就给大家总结了几个方面的面试技巧&#xff0c;希望…

【车载开发系列】UDS诊断---写入数据($0x2E)

【车载开发系列】UDS诊断—写入数据&#xff08;$0x2E&#xff09; UDS诊断---写入数据&#xff08;$0x2E&#xff09;【车载开发系列】UDS诊断---写入数据&#xff08;$0x2E&#xff09;一.概念定义二.应用场景三.报文格式1&#xff09;请求报文2&#xff09;肯定响应3&#x…

技术合集 | 【MySQL技术专题】「数据库锁技术」深入浅出透析MySQL数据库的锁基础概念和原理(上下全)

上篇 前提介绍 在计算机科学中&#xff0c;锁是在执行多线程时用于强行限制资源访问的同步机制&#xff0c;即用于在并发控制中保证对互斥要求的满足。 本文内容 本文主要介绍&#xff1a;行级锁、表级锁、页级锁的相关概念以及原理介绍 本文主要介绍&#xff1a;共享锁、排它…

论文速读系列二:YOLO3D、PIXOR、HDNET、Voxel-FPN、Fast Point RCNN

如有错误&#xff0c;恳请指出。 参考网上资料&#xff0c;对一些经典论文进行快速思路整理 文章目录1. YOLO3D2. PIXOR3. HDNET&#xff08;PIXOR&#xff09;4. Voxel-FPN5. Fast Point RCNN1. YOLO3D paper&#xff1a;《YOLO3D: End-to-end real-time 3D OrientedObject B…

领英怎么用多个账号一起开发客户?进阶知识

1.如何注册账号&#xff1f; LinkedIn经历调整 2021年12月14日起&#xff0c;领英(LinkedIn)正式被改版为领英职-场。在改版后的领英职-场上&#xff0c;我们既无法进行主动搜-索客户&#xff0c;添-加好友&#xff0c;也无法查看和发布动态内容&#xff0c;完完全全的变成了一…

ChatGPT 常见错误原因及解决方案:报错、回答不完整等

最近&#xff0c;由人工智能实验室 OpenAI 发布的对话式大型语言模型 ChatGPT 火得一塌糊涂。它可以与人类轻松地对话&#xff0c;无论是多么奇葩的问题 ChatGPT 都不在话下。在体验 ChatGPT 的同时我们也会遇到各种各样的问题&#xff0c;这里我总结了其对话过程中可能会发生的…

springboot中如何实现跨域请求

Springboot中如何处理跨域请求 一.什么是跨域? 我们知道Url的一般格式&#xff1a;协议 域名&#xff08;子域名 主域名&#xff09; 端口号 资源地址 比如&#xff1a; https://www.itquanmingxing.cn:8080/users 是由https www itquanmingxing.cn 8080 users组成…

普通程序员可以怎么做搞钱程序?

最近海洋问题实在是很严重&#xff0c;人类活动带来的垃圾污染等问题使海洋生物得到了很大的压力。 每年鱼类等海洋生物体内的塑料海量越来越多&#xff0c;不仅仅是由于日常人类日常使用的垃圾袋引起的。 还有很多方面的原因&#xff0c;最直接的因素就是去看海的游客遗留下…

云计算自学笔记(不定期更新)

管道命令使用 linux管道相关命令__小笼包_的博客-CSDN博客_linux管道命令 [cut ]&#xff1a;命令的功能是用于按列提取文件内容 按照字符提取命令&#xff1a;head -2 2.txt | cut -c 5 查看前两行&#xff0c;并按照字符提取第五个字符 -c 按照字符提取 截取出…

剑指Offer40——最小的k个数

摘要 剑指 Offer 40. 最小的k个数 一、排序方法 1.1 排序的方法分析 对原数组从小到大排序后取出前 k 个数即可。 1.2 复杂度分析 时间复杂度&#xff1a;O(nlog⁡n)O&#xff0c;其中 n 是数组 arr 的长度。算法的时间复杂度即排序的时间复杂度。 空间复杂度&#xff1a;…

MQ高级(四)MQ集群

一、集群分类 RabbitMQ的是基于Erlang语言编写&#xff0c;而Erlang又是一个面向并发的语言&#xff0c;天然支持集群模式。 RabbitMQ的集群有两种模式&#xff1a; &#xff08;1&#xff09;普通集群&#xff1a;是一种分布式集群&#xff0c;将队列分散到集群的各个节点&…

【Flink】复杂事件处理CEP底层实现(有限状态机)和应用

文章目录一 Flink CEP简介1 什么是复杂事件处理CEP2 Flink CEP&#xff08;1&#xff09;导入依赖&#xff08;2&#xff09;代码编写&#xff08;3&#xff09;优化模板3 实现CEP底层 -- 有限状态机4 使用CEP处理超时事件一 Flink CEP简介 1 什么是复杂事件处理CEP 一个或多…

239页11万字新型智慧城市运营中心IOC大数据平台建设方案

目录 1 概述 1.1 建设目标 1.2 建设内容 1.3 建设步骤 2 项目建设方案 2.1 总体设计方案 2.2 支撑平台方案 2.2.1 数据治理平台 2.2.2 可视化平台 2.2.3 城市感知平台 2.3 应用系统方案 2.3.1 综合监测系统 2.3.2 事件管理系统 2.3.3 联动指挥系统 2.3.4 辅助决策…

自定义镜像上传阿里云

目录标题一、Docker制作jdk镜像1.jdkv.1.0的制作1.1创建文件夹上传jdk的安装包,和在同级目录下编写Dockerfile文件1.2.编写 Dockerfile 文件1.3.执行Dockerfile文件&#xff0c;初次依赖镜像的时候会下载相应镜像2.jdk2.0的制作3.jdk3.0的制作二、Docker镜像上传至阿里云前期准…