请教几个关于基于vhdl的fir数字低通滤波器FPGA实现的问题。

mina_conner 2018-11-10 03:13:29
毕设的预设计,也不懂自己为什么要选一个完全不会的领域,老师也没空鸟我的小白问题。。。

编程软件:maxplus2(老师说用这个就行了,可是仿真的功能真的一般啊。。)

fir滤波器要求:11阶数字低通,截至频率位0.25w,用hanming窗实现

根据要求已用matlab计算量化得到的滤波系数为:{1,-6,-15, 28, 144, 213, 144, 28,-15,-6,1}(乘以512后)

问题:1.用vhdl语言编写程序时所用的大都是二进制的算法,逻辑都很基础,但在计算有符号数时结果与matlab的仿真结果差太多,按照逻辑
   应该是没错的,代码会在后面给出,望各位帮我瞄一眼哪出了问题。

2.因为对FPGA完全不熟,在编完有问题的程序后准备先选硬件,请问做这样的滤波器对硬件有什么要求?如果可以的话请稍微详细一点
   推荐一下,不胜感激~

code:
[code=
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;

PACKAGE eight_bit IS
TYPE ARRAY_BYTE IS ARRAY(0 TO 10)OF STD_LOGIC_VECTOR(8 DOWNTO 0);
--设定一个有11个元素的一维数组且每个元素为9位
END eight_bit;

LIBRARY WORK;
USE work.eight_bit.ALL;

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_SIGNED.ALL;

ENTITY fir_11_next IS
PORT(CLK : IN STD_LOGIC;---信号时钟源
RESET : IN STD_LOGIC;---异步复位信号
DIN : IN STD_LOGIC_VECTOR(7 DOWNTO 0);--输入8BIT信号
DOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));--输出8BIT信号
END fir_11_next;

ARCHITECTURE BEHAV OF fir_11_next IS

SIGNAL TAP : ARRAY_BYTE;--设定内部节点作为移位寄存器
SIGNAL SUM0: STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL SUM1: STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL SUM2: STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL SUM3: STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL SUM4: STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL SUM5: STD_LOGIC_VECTOR(8 DOWNTO 0);--设定系数相同的输入信号和的寄存器
SIGNAL LS0 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL LS1 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL LS2 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL LS3 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL LS4 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL LS5 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL S1 : STD_LOGIC_VECTOR(8 DOWNTO 0);
SIGNAL S2 : STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL S3 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL S4 : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL S5 : STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL S6 : STD_LOGIC_VECTOR(9 DOWNTO 0);
SIGNAL S7 : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL S8 : STD_LOGIC_VECTOR(11 DOWNTO 0);
SIGNAL S9 : STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL S10 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL S11 : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL S12 : STD_LOGIC_VECTOR(15 DOWNTO 0);
SIGNAL S13 : STD_LOGIC_VECTOR(14 DOWNTO 0);
SIGNAL S14 : STD_LOGIC_VECTOR(12 DOWNTO 0);
SIGNAL S15 : STD_LOGIC_VECTOR(10 DOWNTO 0);
SIGNAL D0 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D1 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D2 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D3 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D4 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D5 : STD_LOGIC_VECTOR(16 DOWNTO 0);
SIGNAL D6 : STD_LOGIC_VECTOR(17 DOWNTO 0);


BEGIN
DOUT<=D6(16 DOWNTO 9);--去掉最高位截取8位输出,即除以当初量化值512

PROCESS(CLK)
BEGIN
IF CLK='1' AND CLK'EVENT THEN

--将相同系数的输入信号相加
--为防止溢出LS信号比TAP信号多一位

LS0<=TAP(0)+TAP(10);
SUM0<=LS0(8 DOWNTO 0);--去掉溢出位取低九位,SUM(8)为扩展后的符号位
LS1<=TAP(1)+TAP(9);
SUM1<=LS1(8 DOWNTO 0);
LS2<=TAP(2)+TAP(8);
SUM2<=LS2(8 DOWNTO 0);
LS3<=TAP(3)+TAP(7);
SUM3<=LS3(8 DOWNTO 0);
LS4<=TAP(4)+TAP(6);
SUM4<=LS4(8 DOWNTO 0);
LS5<=TAP(5);
SUM5<=LS5(8 DOWNTO 0);
FOR I IN 10 DOWNTO 1 LOOP---利用loop循环完成信号移位
TAP(I)<=TAP(I-1);
END LOOP;

IF RESET='0' THEN--复位信号为0
TAP(0)<=(DIN(7)&DIN);--将输入信号的值赋值给第一个寄存器
--高位符号位扩展防止溢出

ELSE
TAP(0)<="000000000";
END IF;
END IF;
END PROCESS;

PROCESS(CLK,DIN)
BEGIN
IF CLK='1' AND CLK'EVENT THEN

S1<=SUM0;--与系数1相乘
D0<=(SUM0(8)&SUM0(8)&SUM0(8)&SUM0(8)&SUM0(8)&SUM0(8)&SUM0(8)&SUM0(8)&S1);

S2<=(SUM1&"00");--向左移2位完成与4相乘
S3<=(SUM1&'0');--向左移1位完成与2相乘
D1<=(SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&S2)
   +(SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&SUM1(8)&S3);
--高位补符号并累加完成与系数6相乘并存入17位
S4<=(SUM2&"000");--向左移3位与8相乘
S5<=(SUM2&"00");--向左移2位与4相乘
S6<=(SUM2&'0');--向左移1位与2相乘
D2<=(SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&S4)
   +(SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&S5)
    +(SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&S6)
  +(SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2(8)&SUM2);
     --实现与系数15相乘并存入17位

S7<=(SUM3&"0000");--与16相乘
S8<=(SUM3&"000");--与8相乘
S9<=(SUM3&"00");--与4相乘
D3<=(SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&S7)
+(SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&S8)
+(SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&SUM3(8)&S9);
--实现与系数28相乘并存入17位

S10<=(SUM4&"0000000");--与128相乘
S11<=(SUM4&"0000");--与16相乘
D4<=(SUM4(8)&S10)
+(SUM4(8)&SUM4(8)&SUM4(8)&SUM4(8)&S11);--实现与系数144相乘并存入17位

S12<=(SUM5&"0000000");--与128相乘
S13<=(SUM5&"000000");--与64相乘
S14<=(SUM5&"0000");--与16相乘
S15<=(SUM5&"00");--与4相乘
D5<=(SUM5(8)&S12)
+(SUM5(8)&SUM5(8)&S13)
+(SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&S14)
+(SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&S15)
+(SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5(8)&SUM5);--实现TAP(5)与系数213相乘并存入17位

D6<=D0+D3+D4+D5-D1-D2;--实现所有处理后的信号累加
END IF;
END PROCESS;

END BEHAV;][/code]

希望能够帮帮我,问题太小白资料都没有提到,但我是真搞不明白的
...全文
25 点赞 收藏 2
写回复
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
mina_conner 2018-11-10
你好,谢谢给的资料,我想问一下在第一篇中提到的将滤波后的数据用matlab仿真,其中有fpga仿真结果的图,那个是怎么实现在matlab中画出FPGA的仿真图,他们的数据是怎么互相调用的呢?我只会写用matlab生成的滤波系数来仿真过滤有噪声的信号,没办法把FPGA的仿真结果在matlab里搞出来,是MAXPLUS2与matlab可以联合仿真吗?
另外,这个贴不能单独回复人吗?
回复
相关推荐
基于vhdl设计fir低通滤波器
本人课程设计时候编写的代码,通俗易懂,有各种波形生成的文件,滤波效果良好,最终可以在实验箱上通过D/A模块在示波器上显示出来,亲手撰写,很不错得资源。
一种基于MATLAB及FPGAFIR低通滤波器的设计与实现
充分利用有限冲击响应数字滤波器(Finite Impulse Response digital filter ,FIR)系数的对称特性,借助于MATLAB语言和现场可编程门阵列(FPGA实现了一种高效的低通滤波器。设计过程中通过简化的VHDL语言编写程序...
FIR数字滤波器设计及其FPGA实现
FPGA为硬件平台,利用FPGA的DSP开发工具DSP Builder对数字滤波器进行建模设计及系统模型仿真,生成VHDL工程文件,编制相应顶层文件,使其符合滤波器硬件系统。利用QuartusⅡ对项目进行综合、编译和调试,生成原理...
基于IIR数字低通滤波器的设计
基于IIR数字低通滤波器的设计、电子技术,开发板制作交流
基于FPGA的通用FIR滤波器VHDL源代码
基于FPGA的通用FIR滤波器VHDL源代码
基于VHDL多路数据采集系统中FIR低通滤波器设计与实现.pdf
基于VHDL多路数据采集系统中FIR低通滤波器设计与实现.pdf
基于FPGA数字低通滤波器设计
通过VHDL编写代码,采用分布式,串行,并行三种结构实现滤波器
基于FPGAFIR数字滤波器的设计与实现 (2011年)
文章介绍了有限脉冲响应(FIR)数字滤波器的结构特点和基本原理,提出了一种基于FPGA的高效实现方案。该方案用Matlab工具确定滤波器的系数,然后用VHDL语言实现了16 阶常系数FIR滤波器,并用MAX+plus II软件对滤波器进行...
基于FPGAFIR 数字滤波器设计方案
摘要:本文简要介绍了FIR数字滤波器的结构特点和基本原理,提出基于FPGA和DSP Builder的FIR数字滤波器的基本设计流程和实现方案。  在Matlab/Simulink环境下,采用DSP Builder模块搭建FIR模型,根据FDATool工具对...
FIR数字滤波器FPGA实现(一)-FIR滤波器基本原理
(一)FIR数字滤波器FPGA实现-FIR滤波器基本原理 文章目录(一)FIR数字滤波器FPGA实现-FIR滤波器基本原理1 FIR滤波器基本原理   对于FIR滤波器主要涉及到滤波器的设计和滤波器的实现,设计和实现的区别如下...
基于VHDL的一种数字低通滤波器设计 (2014年)
在了解FPGA设计原理的基础上,利用MAX+plus软件和MATLAB,对横截型数字低通滤波器进行了设计,得到VHDL程序语言设计的相关参数;最后通过仿真对滤波器性能结果进行了分析和总结。
数字滤波器的 MATLAB 与 FPGA 实现VHDL版本)
数字滤波器的 MATLAB 与 FPGA 实现VHDL版本)。 《数字滤波器的MATLAB与FPGA实现》详细阐述了数字滤波器实现原理、结构、方法及仿真测试过程,并通过大量工程实例分析其在FPGA实现过程中的具体技术细节。其主要...
单片机与DSP中的基于FPGAFIR 数字滤波器设计方案
摘要:本文简要介绍了FIR数字滤波器的结构特点和基本原理,提出基于FPGA和DSP Builder的FIR数字滤波器的基本设计流程和实现方案。  在Matlab/Simulink环境下,采用DSP Builder模块搭建FIR模型,根据FDATool工具对...
毕设:基于FPGAFIR数字滤波器设计
本篇介绍基于FPGAFIR数字滤波器设计,针对毕业设计要做的基本工作有如下点: (一)掌握有限冲击响应FIR(Finite Impulse Response, FIR)的基本结构,研究现有的实现方法,对各种方案和步骤进行比较和论证...
基于FPGA设计的FIR滤波器实现与对比
描述了基于FPGAFIR滤波器设计。根据FIR的原理及严格线性相位滤波器具有偶对称的性质给出了FIR滤波器的4种结构,即直接乘加结构、乘法器复用结构、乘累加结构、DA算法。在本文中给出上述种算法的结构框图,并通过...
数字滤波器的MATLAB和FPGA实现 VHDL与Verilog双版本
仅供个人学习使用。 本文件包含两本pdf,分别为VHDL版本Verilog版本。
数字滤波器的MATLAB与FPGA实现VHDL版本)
数字滤波器的MATLAB与FPGA实现》详细阐述了数字滤波器实现原理、结构、方法及仿真测试过程,并通过大量工程实例分析其在FPGA实现过程中的具体技术细节。其主要内容包括FIR滤波器、IIR滤波器、多速率滤波器、...
单片机与DSP中的快速实现基于FPGA的脉动FIR滤波器
本文提出一种基于Stratix系列FPGA器件的新的实时高速脉动FIR滤波器的快速实现方法。利 用FGPA集成的DSP(数字信号处理器)乘加模块定制卷积运算单元,利用VHDL(甚高速集成电路硬件描述语言)元件例化语句快速生成脉动...
17阶FIR滤波器VHDL代码,滤波器FPGA实现
17阶FIR滤波器VHDL代码,滤波器FPGA实现 阶数你自己可根据自己的意愿修改
数字滤波器matlab与FPGA实现读书笔记(三)FIR滤波器matlab和VHDL实现
FIR滤波器FPGA实现 ex:设计一高通最优FIR滤波器,过渡带为1000~1500Hz,采样频率为8000Hz,通带纹波最大为0.01,阻带纹波最大为0.001绘制比较系数12位、14位量化以及无量化是的幅度响应曲线,将14位量化结果转换...
数字滤波器的matlab与fpga实现课件杜勇版第4章-fir滤波器的fpga设计与实现解析.pptx
数字滤波器的MATLAB和FPGA实现;第4章 FIR滤波器的FPGA设计与实现 ;4.1.1 线性时不变系统 ;4.1.1 线性时不变系统的特性;信号chp5离散时间傅立叶变换; 表明:离散时间序列可以分解为频率在2区间上分布的幅度为 的复指数...
基于FPGA的AVS的环路滤波器实现
并且适当增加片上存储空间来缓解外存的压力来提高滤波模块的效率,采用VHDL 语言进行设计、仿真,通过FPGA验证。综合仿真结果表明,该设计占用资源较少。频率可达170MHz,可实时解码D1 分辨率序列的AVS 码流。
FIR滤波器VHDL实现
本程序是分布式算法实现FIR滤波器VHDL实现部分,与本程序对应的matlab仿真见“FIR滤波器的matlab仿真”程序,说明文档见“FIR滤波器的matlab仿真与VHDL实现
数字滤波器的MATLAB与FPGA实现VHDL
数字滤波器的MATLAB与FPGA实现VHDL数字滤波器的MATLAB与FPGA实现VHDL
基于VHDL语言的FIR滤波器设计
基于VHDL语言的FIR滤波器设计 期末大作业 满分
数字滤波器的MATLAB与FPGA实现 第2版 [杜勇 编著] 2014年版.pdf
杜勇写的数字滤波器的matlab与FPGA实现,非常经典的一本书
使用vhdl设计八位数字滤波器
demodulateur.vhd是主程序,内附testbench,这是一八位平滑滤波器
数字滤波器的MATLAB与FPGA实现——杜勇(配套光盘).rar
本书以Xilinx公司FPGA为开发平台,采用MATLAB及VHDL语言开发工具,详细阐述了数字滤波器工作原理、结构、方法和仿真实验过程,并通过大量的工程实例分析其在FPGA实现中的具体技术细节。其主要内容包括FIR滤波器、IIR...
根升余弦脉冲成形滤波器FPGA实现
文中所述的基于电路分割技术的查表法,实现通信系统发送端根升余弦滚降成形滤波器FPGA实现方法简单可行,且当截断码元数目增多时或码内样点数目增加时,仅通过改变地址移位寄存器的长度或计数器的长度与ROM的长度...
APP内置IM 系统——从入门到千万级在线
IM (即时通讯)系统是一种大型实时系统,其对技术方面的要求非常高。在APP社交化的今天,很多APP都希望为自己的应用增加IM系统,但却不得其法。本课程抽丝剥茧,搭建一套简IM 系统,先让开发者了解如何实现这类系统,然后会不断的对系统进行扩展,并详述要支撑千万级别的用户,系统架构要经过哪些方面的演变,在每个阶段需要具体考量哪些因素;其中涉及到大型网络开发、协议的制定解析、数据库的优化、负载均衡、监控、测试等方面的知识。相信通过此课程,开发者对IM 系统将有一个全面的认识。 a:0:{}
发帖
非技术区
创建于2007-09-28

1056

社区成员

硬件/嵌入开发 非技术区
申请成为版主
帖子事件
创建了帖子
2018-11-10 03:13
社区公告
暂无公告