1-verilog的串行滤波器FIR实现

verilog的串行滤波器FIR实现

      • 1,RTL代码
      • 2,RTL原理框图
      • 3,测试代码
      • 4,输出FIR滤波器的波形

参考文献:
1,基于FPGA的串行FIR滤波器设计与实现
2,FPGA实现FIR滤波器

1,RTL代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/11/21 22:55:41
// Design Name: 
// Module Name: fir_tops
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module	fir_tops(
input	i_clk,
input	i_rst,
input	signed	[1:0]	i_din,	//	 signed是默认的,
						//	表示这个变量是有符号的,
						//	可以用来存储整数和负数
output	signed	[15:0]	o_dout
);
// 滤波器系数
parameter	b0 	= 14'd82;
parameter	b1	= 14'd317;
parameter	b2	= 14'd788;
parameter	b3	= 14'd1023;
parameter	b4	= 14'd788;
parameter	b5	= 14'd317;
parameter	b6	= 14'd82;

reg		signed	[1:0]	x0;
reg		signed	[1:0]	x1;
reg		signed	[1:0]	x2;
reg		signed	[1:0]	x3;
reg		signed	[1:0]	x4;
reg		signed	[1:0]	x5;
reg		signed	[1:0]	x6;

//	延迟
always@(posedge i_clk or posedge i_rst)	begin
	if(i_rst)	begin
		x0	<= 2'd0;
		x1	<= 2'd0;
		x2	<= 2'd0;
		x3	<= 2'd0;
		x4	<= 2'd0;
		x5	<= 2'd0;
		x6	<= 2'd0;
		end
	else	begin     // 移位
		x0	<= i_din;
		x1	<= x0;
		x2	<= x1;
		x3	<= x2;
		x4	<= x3;
		x5	<= x4;
		x6	<= x5;
		end
end

//	使用乘法器ip核计算乘法
wire	signed	[15:0]	r0;
multer	u0_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x0),		// input  wire [1:0]  A
.B			(b0),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r0)		// output wire [15:0] P
);

wire	signed	[15:0]	r1;
multer	u1_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x1),		// input  wire [1:0]  A
.B			(b1),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r1)		// output wire [15:0] P
);

wire	signed	[15:0]	r2;
multer	u2_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x2),		// input  wire [1:0]  A
.B			(b2),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r2)		// output wire [15:0] P
);

wire	signed	[15:0]	r3;
multer	u3_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x3),		// input  wire [1:0]  A
.B			(b3),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r3)		// output wire [15:0] P
);

wire	signed	[15:0]	r4;
multer	u4_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x4),		// input  wire [1:0]  A
.B			(b4),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r4)		// output wire [15:0] P
);

wire	signed	[15:0]	r5;
multer	u5_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x5),		// input  wire [1:0]  A
.B			(b5),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r5)		// output wire [15:0] P
);

wire	signed	[15:0]	r6;
multer	u6_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x6),		// input  wire [1:0]  A
.B			(b6),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r6)		// output wire [15:0] P
);

assign	o_dout	= r0 + r1 + r2 + r3 + r4 + r5 + r6;

endmodule

2,RTL原理框图

在这里插入图片描述

3,测试代码

`timescale 1ns / 1ps
//
// Company: 
// Engineer: 
// 
// Create Date: 2023/11/21 22:55:41
// Design Name: 
// Module Name: fir_tops
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//

module	fir_tops(
input	i_clk,
input	i_rst,
input	signed	[1:0]	i_din,	//	 signed是默认的,
						//	表示这个变量是有符号的,
						//	可以用来存储整数和负数
output	signed	[15:0]	o_dout
);
// 滤波器系数
parameter	b0 	= 14'd82;
parameter	b1	= 14'd317;
parameter	b2	= 14'd788;
parameter	b3	= 14'd1023;
parameter	b4	= 14'd788;
parameter	b5	= 14'd317;
parameter	b6	= 14'd82;

reg		signed	[1:0]	x0;
reg		signed	[1:0]	x1;
reg		signed	[1:0]	x2;
reg		signed	[1:0]	x3;
reg		signed	[1:0]	x4;
reg		signed	[1:0]	x5;
reg		signed	[1:0]	x6;

//	延迟
always@(posedge i_clk or posedge i_rst)	begin
	if(i_rst)	begin
		x0	<= 2'd0;
		x1	<= 2'd0;
		x2	<= 2'd0;
		x3	<= 2'd0;
		x4	<= 2'd0;
		x5	<= 2'd0;
		x6	<= 2'd0;
		end
	else	begin     // 移位
		x0	<= i_din;
		x1	<= x0;
		x2	<= x1;
		x3	<= x2;
		x4	<= x3;
		x5	<= x4;
		x6	<= x5;
		end
end

//	使用乘法器ip核计算乘法
wire	signed	[15:0]	r0;
multer	u0_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x0),		// input  wire [1:0]  A
.B			(b0),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r0)		// output wire [15:0] P
);

wire	signed	[15:0]	r1;
multer	u1_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x1),		// input  wire [1:0]  A
.B			(b1),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r1)		// output wire [15:0] P
);

wire	signed	[15:0]	r2;
multer	u2_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x2),		// input  wire [1:0]  A
.B			(b2),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r2)		// output wire [15:0] P
);

wire	signed	[15:0]	r3;
multer	u3_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x3),		// input  wire [1:0]  A
.B			(b3),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r3)		// output wire [15:0] P
);

wire	signed	[15:0]	r4;
multer	u4_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x4),		// input  wire [1:0]  A
.B			(b4),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r4)		// output wire [15:0] P
);

wire	signed	[15:0]	r5;
multer	u5_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x5),		// input  wire [1:0]  A
.B			(b5),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r5)		// output wire [15:0] P
);

wire	signed	[15:0]	r6;
multer	u6_multer(
.CLK		(i_clk),	// input  wire CLK
.A			(x6),		// input  wire [1:0]  A
.B			(b6),		// input  wire [13:0] B
.SCLR		(i_rst),	// input  wire SCLR
.P			(r6)		// output wire [15:0] P
);

assign	o_dout	= r0 + r1 + r2 + r3 + r4 + r5 + r6;

endmodule

4,输出FIR滤波器的波形

在这里插入图片描述

注意:
1,输出波形有误差,需要修改;
2,vivado对IP catalog进行了调用;这里要注重调用的方法。
3,测试代码结合起来理解输出波形。

使用zynq-7000的IP核:

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

某60区块链安全之Call函数簇滥用实战一学习记录

区块链安全 文章目录 区块链安全Call函数簇滥用实战一实验目的实验环境实验原理实验内容实验过程 Call函数簇滥用实战一 实验目的 学会使用python3的web3模块 学会以太坊Delegatecall漏洞分析及利用 实验环境 Ubuntu18.04操作机 实验工具 python3 实验原理 call 外部调用…

重生之我是一名程序员 37

哈喽啊大家晚上好&#xff01; 今天呢给大家带来一个烧脑的知识——C语言中的栈溢出问题。那什么是栈溢出呢&#xff1f;栈溢出指的是当程序在执行函数调用时&#xff0c;为了保护函数的局部变量和返回地址&#xff0c;将这些数据存储在栈中。如果函数在函数调用时使用了过多的…

Tensorrt 实现 yolov5-cls 遇到的问题

yolov5-6.2增加了分类训练、验证、预测和导出&#xff08;所有 11 种格式&#xff09;&#xff0c;还提供了 ImageNet 预训练的 YOLOv5m-cls、ResNet&#xff08;18、34、50、101) 和 EfficientNet (b0-b3) 模型. 官方Git : https://github.com/ultralytics/yolov5 分类模型与…

解决VSCode运行时自动保存问题【图文解析】

用VSCode写前端时老是自动保存&#xff0c;代码还没写完就开始 刷新页面 调用接口 出现报错之类的&#xff0c;很烦人&#xff0c;所以就写一篇修改VSCode自动保存文件的文章&#xff0c;以免自己忘记在哪设置。 同事总是用不自动保存&#xff0c;每次写完都要ctrls一下&#x…

2023 年爆肝将近 20 万字讲解最新 JavaEE 全栈工程师基础教程(更新中)

1. Java 语言基本概述 Java 是一种广泛使用的编程语言&#xff0c;由 James Gosling 在 Sun Microsystems&#xff08;现在是 Oracle Corporation 的一部分&#xff09;于 1995 年发表。Java 是一种静态类型的、类基础的、并发性的、面向对象的编程语言。Java 广泛应用于企业级…

C语言scanf_s函数的使用

因为scanf函数存在缓冲区溢出的可能性&#xff1b;提供了scanf_s函数&#xff1b;增加一个参数&#xff1b; scanf_s最后一个参数是缓冲区的大小&#xff0c;表示最多读取n-1个字符&#xff1b; 下图代码&#xff1b; 读取整型数可以不指定长度&#xff1b;读取char&#xf…

第十二章 pytorch中使用tensorboard进行可视化(工具)

PyTorch 从 1.2.0 版本开始&#xff0c;正式自带内置的 Tensorboard 支持了&#xff0c;我们可以不再依赖第三方工具来进行可视化。 tensorboard官方教程地址&#xff1a;https://github.com/tensorflow/tensorboard/blob/master/README.md 1、tensorboard 下载 step 1 此次…

『 Linux 』使用fork函数创建进程与进程状态的查看

文章目录 &#x1f5a5;️ 前言 &#x1f5a5;️&#x1f5a5;️ 通过系统调用获取进程标识符 &#x1f5a5;️&#x1f4bb; 进程标识符PID&#x1f4bb; 父进程标识符PPID &#x1f5a5;️ 通过系统调用创建子进程 fork() &#x1f5a5;️&#x1f4bb; 那么为什么在fork()函…

华为ac+fit漫游配置案例

Ap漫游配置: 其它配置上面一样,ap管理dhcp和业务dhcp全在汇聚交换机 R1: interface GigabitEthernet0/0/0 ip address 11.1.1.1 255.255.255.0 ip route-static 12.2.2.0 255.255.255.0 11.1.1.2 ip route-static 192.168.0.0 255.255.0.0 11.1.1.2 lsw1: vlan batch 100 200…

dvwa 代码注入impossible代码审计

dvwa 代码注入impossible代码审计 <?phpif( isset( $_POST[ Submit ] ) ) {// Check Anti-CSRF tokencheckToken( $_REQUEST[ user_token ], $_SESSION[ session_token ], index.php ); // 检查token值是否正确// Get input$target $_REQUEST[ ip ]; $target stripslas…

Servlet执行流程Servlet 生命周期

Servlet 生命周期 对象的生命周期指一个对象从被创建到被销毁的整个过程 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; WebServlet(urlPatterns "/demo",loadOnStartup 10) public class ServletDemo imple…

智能座舱架构与芯片- (5) 硬件篇 下

四、短距无线连接 随着汽车智能化的发展与新型电子电气架构的演进&#xff0c;传统车内有线通信技术存在着诸多痛点&#xff1a; 线束长度增加&#xff1a;由于智能化与自动化的发展&#xff0c;车内传感器和执行器均大幅增加。采用有线技术连接&#xff0c;则线束长度&#…

【C++】泛型编程 ⑩ ( 类模板的运算符重载 - 函数实现 写在类外部的同一个 cpp 代码中 | 类模板 的 外部友元函数二次编译问题 )

文章目录 一、类模板 - 函数声明与函数实现分离1、类模板 外部 实现 构造函数2、类模板 外部 实现 普通函数3、类模板 外部 实现 友元函数( 1 ) 错误示例及分析 - 类模板 的 外部友元函数 二次编译 问题( 2 ) 正确写法 二、代码示例 - 函数声明与函数实现分离1、代码示例2、执行…

【运维】永久关闭selinux不当,导致无法启动

现象: 卡centos loading进度条 按esc键发现,启动报错: Failed to load SElinux policy ,freezing 可能的原因: selinuxdisabled 写错成disable 或者 错误的把selinuxtype改了&#xff0c;要改文中红框的部分。 解决方案: 1. 重启 2. 出现选择画面的时候 按e 3. 方向下键…

树莓派的的串口通信协议

首先&#xff0c;回顾一下串口的核心知识点&#xff0c;也是面试重点&#xff1a; 串口通信通常使用在多机通讯中串口通信是全双工的决定串口通信的成功与否的是 数据格式 和 波特率数据格式&#xff1a;1. 数据位 2.停止位 3. 奇偶校验位 树莓派恢复串口 回忆前几节树莓派刷机…

时序预测 | Pytorch实现TCN-Transformer的时间序列预测

时序预测 | Pytorch实现TCN-Transformer的时间序列预测 目录 时序预测 | Pytorch实现TCN-Transformer的时间序列预测效果一览基本介绍程序设计 效果一览 基本介绍 基于TCN-Transformer模型的时间序列预测&#xff0c;可以用于做光伏发电功率预测&#xff0c;风速预测&#xff0…

【libGDX】使用Mesh绘制三角形

1 Mesh 和 ShaderProgram 简介 1.1 创建 Mesh 1&#xff09;Mesh 的构造方法 public Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttribute... attributes) public Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttributes attribut…

使用VSCode+PlatformIO搭建ESP32开发环境

Arduino IDE本来就是为创客们开发的&#xff0c;虽然没代码提示功能&#xff0c;文件的关系也不清晰&#xff0c;函数不能跳转&#xff0c;头文件也打不开&#xff0c;但人家的初衷就是为了简单而生的&#xff1b;但还是有一些同学喜欢高级点的IDE&#xff0c;也没问题&#xf…

局域网无法上网主机通过TinyProxy代理主机访问公网Internet

1.代理主机搭建: 系统:ubuntu 网卡:2个 运行于 VMWare上 第一个网卡用于NAT 第二个网卡用于私有网络 两个IP如下: 192.168.31.243为NAT可访问Internet 192.168.144.141属于私有网络,用于访问局域网 安装tinyproxy sudo apt install tinyproxy 查看服务状态

场景驱动的 AI 体验设计:如何让智能 IDE 赋能遗留系统重写

作为 AutoDev 的核心开发&#xff0c;我们不仅在不断丰富 AutoDev 的功能以满足不同公司的定制需求&#xff0c;还在与各种团队进行持续交流。在处理遗留系统时&#xff0c;我们发现程序员们日常工作中需要面对大量使用过时技术、基础设施混乱的系统。 在这个背景下&#xff0c…
最新文章