一. 模块功能与应用场景

模块功能:对输入信号进行降采样。

应用场景:

  • 输入数据量太大,后级难以处理,需要减小信号量而不丢失关键信息

二. 模块框图与使用说明

参数DOWN_SAMPLING_TIME控制降采样倍数,参数DIN_WIDTH控制输入信号位宽。

注意:

  1. din与din_valid应对齐
  2. clk应就是din与din_valid产生的时钟,这是为了保证一个有效数据din_valid只持续一个时钟周期的高电平

三. 模块代码

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-21 15:02:16* @LastEditors  : Xu Dakang* @LastEditTime : 2021-05-05 15:44:39* @Filename     : downSampling.sv* @Description  : 降采样模块
*//*
* 思路: 对din_valid进行计数,到达DOWN_SAMPLING_TIME输出一次值
* 注意:1.din与din_valid应对齐2.clk应就是din与din_valid产生的时钟,这是为了保证一个有效数据din_valid只持续一个时钟周期的高电平
*/module downSampling
#(parameter DOWN_SAMPLING_TIME = 10, // 降采样倍数parameter DIN_WIDTH = 24
)(output logic [DIN_WIDTH-1 : 0]  down_sampling_dout,output logic                    down_sampling_dout_valid,input  logic [DIN_WIDTH-1 : 0]  din,input  logic                    din_valid,input  logic clk,input  logic rstn
);//< 输入数据同步 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic [DIN_WIDTH-1 : 0] din_r1;
logic [DIN_WIDTH-1 : 0] din_r2;
always_ff @(posedge clk) begindin_r1 <= din;din_r2 <= din_r1;
endlogic din_valid_r1;
logic din_valid_r2;
always_ff @(posedge clk) begindin_valid_r1 <= din_valid;din_valid_r2 <= din_valid_r1;
end
//< 输入数据同步 ------------------------------------------------------------//> 信号计数 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
logic [$clog2(DOWN_SAMPLING_TIME+1)-1 : 0] din_valid_cnt;
always_ff @(posedge clk, negedge rstn) beginif (~rstn)din_valid_cnt <= '0;else if (din_valid_r2)if (din_valid_cnt == DOWN_SAMPLING_TIME)din_valid_cnt <= 'd1;elsedin_valid_cnt <= din_valid_cnt + 1'b1;else if (din_valid_cnt == DOWN_SAMPLING_TIME)din_valid_cnt <= '0;elsedin_valid_cnt <= din_valid_cnt;
end
//> 信号计数 ------------------------------------------------------------//> 输出降采样值和有效信号 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
always_ff @(posedge clk, negedge rstn) beginif (~rstn)down_sampling_dout <= '0;else if (din_valid_cnt == DOWN_SAMPLING_TIME)down_sampling_dout <= din_r2;elsedown_sampling_dout <= down_sampling_dout;
endalways_ff @(posedge clk, negedge rstn) beginif (~rstn)down_sampling_dout_valid <= 1'b0;else if (din_valid_cnt == DOWN_SAMPLING_TIME)down_sampling_dout_valid <= 1'b1;elsedown_sampling_dout_valid <= 1'b0;
end
//> 输出降采样值和有效信号 ------------------------------------------------------------endmodule

四. testbench

/** @Author       : Xu Dakang* @Email        : XudaKang_up@qq.com* @Date         : 2021-04-21 15:02:16* @LastEditors  : Xu Dakang* @LastEditTime : 2021-05-05 15:45:16* @Filename     : downSampling_tb.sv* @Description  : testbench of downSampling
*/module downSampling_tb();timeunit 1ns;
timeprecision 10ps;localparam DOWN_SAMPLING_TIME = 10;
localparam DIN_WIDTH = 24;logic [DIN_WIDTH-1 : 0]  down_sampling_dout;
logic                    down_sampling_dout_valid;logic [DIN_WIDTH-1 : 0]  din;
logic                    din_valid;logic clk;
logic rstn;downSampling #(.DOWN_SAMPLING_TIME (DOWN_SAMPLING_TIME), // 降采样倍数.DIN_WIDTH          (DIN_WIDTH)
) downSampling_inst(.*);// 导入输入波形文件
string din_path = "F:/OneDrive/VivadoPrj/downSampling/downSampling.srcs/sim_1/new/sinc.txt"; // 可选 sin  exp_cos  sinclocalparam DATA_NUM = 10000; // 数据量, 也就是txt文件的行数, 如果此参数大于数据行数, 读取到的内容为不定态
logic [DIN_WIDTH-1 : 0] din_wave_data [DATA_NUM]; // 读取输入波形数据initial begin$readmemb(din_path, din_wave_data, 0, DATA_NUM-1); // vivado读取txt文件
end// 生成时钟
localparam CLKT = 2;
initial beginclk = 0;forever #(CLKT / 2) clk = ~clk;
endinitial beginrstn = 0;din_valid = 0;#(CLKT * 10)  rstn = 1;for (int i = 0; i < DATA_NUM; i++) begindin = din_wave_data[i];din_valid = 1;#(CLKT);end#(CLKT * 10) $stop;
endendmodule

五. 仿真验证

仿真工具:Vivado 2020.2 Simulator。

  1. 输入为sin信号:

  2. 输入为振荡信号:

  3. 输入为sinc信号:

六. 工程分享

downSampling 降采样模块 vivado 2020.2工程.7z

链接:https://pan.baidu.com/s/12-0MQzUJdn9r2WlmgpPzEA
提取码:bowg

Verilog功能模块——降采样相关推荐

  1. Verilog功能模块 —— 按键消抖

    一. 什么是按键消抖 按键消抖_百度百科 (baidu.com) 按键消抖通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断 ...

  2. Verilog功能模块——取滑动平均值(使用寄存器组)

    我的另一篇博客:Verilog功能模块--取滑动平均值(使用FIFO) 两者用不同的方式实现相同的功能, 使用FIFO占用较少寄存器资源,适用于取值N较大的场合. 使用寄存器组不需要额外的IP,更简单 ...

  3. Verilog功能模块——取滑动平均值(使用FIFO)

    前言 我的另一篇博客:Verilog功能模块--取滑动平均值(使用寄存器组) 两者用不同的方式实现相同的功能, 使用FIFO占用较少寄存器资源,适用于取值N较大的场合. 使用寄存器组不需要额外的IP, ...

  4. Verilog功能模块——AXI4-Lite协议主机-单次写-使用FIFO

    一. 模块功能与应用场景 模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中读取地址和数据,实现将数据写入到设定的地址中的操作. 二. 模块框图与使用说明 2.1 模块框 ...

  5. Verilog功能模块——AXI4-Lite协议主机-连续区间写-使用FIFO

    一. 模块功能与应用场景 模块功能:AXI4-Lite协议主机,从FWFT FIFO(首字直通FIFO)中不断读取数据,写入到一段地址中. 应用场景:DDR读写,BRAM读写等AXI接口的存储器件读写 ...

  6. Verilog功能模块——符号位扩展

    一. 模块功能与应用场景 模块功能:符号位扩展 应用场景:DDR等存储器通常是32/64位的,数据需要转为合适的位数再存入. 二. 模块框图与使用说明 输入和输出都是二进制补码,补码的符号位扩展就是补 ...

  7. Verilog功能模块——串行数据转并行数据

    一. 模块功能与应用场景 模块功能:接收串行数据,转为并行数据. 应用场景:在SPI,Uart等串行协议接收侧均有应用. 二. 模块框图与使用说明 有两种模式(通过参数SDATA_IS_CONTINU ...

  8. Verilog功能模块——时钟分频

    一. 模块功能与应用场景 模块功能:对输入时钟进行任意倍数分频. 应用场景: 需要对时钟进行分频,而PLL不能满足要求或者使用起来不方便 需要固定倍数关系的时钟 二. 模块框图与使用说明 通过参数DI ...

  9. 避免重复造轮子,我们去哪找FPGA IP或是HDL功能模块?

    一. 各FPGA厂家IP库 对于一些常用的IP,通常各FPGA厂商的开发软件中会自带,并长期免费提供给用户使用或者允许申请IP评估免费使用一段时间.这些IP通常是不开源的,但使用起来很方便,有助于开发 ...

最新文章

  1. Tomcat9 访问 Manager App
  2. JavaScript的格式--从格式做起,做最严谨的工程师
  3. Linuxshell之高级Shell脚本编程-创建菜单
  4. 【亚伦博客】我们勇敢的审查者
  5. MySQL多个条件更新多个字段
  6. Razor语法(四)
  7. 从零基础入门Tensorflow2.0 ----九、44.2 keras加载保存的参数
  8. PTA程序设计第六周
  9. IP地址管理(IPAM)解决方案有哪些?
  10. 【python】7-10 将输入的字符串中的字符头尾间隔输出(PTA)
  11. 极点五笔状态栏和候选窗口显隐
  12. MySQL中如何定义一个自己写的函数
  13. TPM1.2到TPM 2.0的变化
  14. Codeforces Round #406 (Div. 1) A. Berzerk 记忆化搜索
  15. OpenHarmony 开发者大会2023 活动开始报名啦!抢票中ing
  16. 渲染服务器自动渲染软件有哪些,BIM渲染软件有哪些?Keyshot渲染软件及功能简介...
  17. 基于视频流传输 — 在线教育白板技术
  18. Flutter Scaffold脚手架
  19. 去掉tppabs冗余代码和注释
  20. 嵌入式Linux开发环境部署

热门文章

  1. 使用VMware进行基于Ubuntu16.04LTS的Spark集群搭建
  2. JZOJ__Day 5:【普及模拟】权势二进制
  3. c语言复制的代码不能运行,刚学C语言,在Linux下写的代码能正常编译,复制到VC下就无法运行...
  4. rhel6上使用udev配置oracle asm,Red Hat Enterprise Linux 6使用udev配置Oracle ASM总结文档
  5. win7 clr20r3程序终止_mscorsvw.exe是什么进程 win7系统怎么禁用mscorsvw.exe进程【禁用方法】...
  6. ubuntu开启端口_RChain节点运行无门槛教程(二)--Windows-Ubuntu
  7. 面向服务的计算(SOC)课程相关资料
  8. 【LeetCode刷题记】鹅厂秋招题集(2)
  9. 《ACM国际大学生程序设计竞赛题解Ⅰ》——模拟题
  10. 自己的缺省(sheng)源