信号滤波模块verilog代码

  1. `timescale 1ns / 1ps
  2. //////////////////////////////////////////////////////////////////////////////////
  3. // Company:
  4. // Engineer: chensimin
  5. //
  6. // Create Date: 2017/12/14 17:15:25
  7. // Design Name:
  8. // Module Name: glitch_filter_1
  9. // Project Name:
  10. // Target Devices:
  11. // Tool Versions:
  12. // Description:
  13. //
  14. // Dependencies:
  15. //
  16. // Revision:
  17. // Revision 0.01 - File Created
  18. // Additional Comments:
  19. //
  20. //////////////////////////////////////////////////////////////////////////////////
  21. module glitch_filter_1 #(
  22. parameter WIDTH = ,
  23. parameter CNT_CLK_FREQUENCY = ) // frequency cnt_clk in MHz
  24. (
  25. input wire cnt_clk,
  26. input wire [WIDTH-:] delay_time_high,
  27. input wire [WIDTH-:] delay_time_low,
  28. input wire clk,
  29. input wire rst,
  30. input wire sign_src,
  31. output wire sign_src_filter
  32. );
  33.  
  34. localparam UNLOCK = 'b0;
  35. localparam LOCK = 'b1;
  36.  
  37. reg get_time_1us;
  38. reg [WIDTH-:]m;
  39. always @ ( posedge cnt_clk or posedge rst )
  40. begin
  41. if( rst )
  42. begin
  43. get_time_1us <= 'b0;
  44. m <= ;
  45. end
  46. else if( m == CNT_CLK_FREQUENCY - )
  47. begin
  48. get_time_1us <= 'b1;
  49. m <= ;
  50. end
  51. else
  52. begin
  53. get_time_1us <= 'b0;
  54. m <= m + 'b1;
  55. end
  56. end
  57.  
  58. reg [WIDTH-:]i;
  59. reg [WIDTH-:]k;
  60. reg get_delay_time_high;
  61. reg get_delay_time_low;
  62. reg current_state;
  63. reg next_state;
  64. always @ ( posedge cnt_clk or posedge rst )
  65. begin
  66. if( rst )
  67. begin
  68. get_delay_time_high <= 'b0;
  69. get_delay_time_low <= 'b0;
  70. i <= ;
  71. k <= ;
  72. end
  73. else
  74. begin
  75. get_delay_time_high <= 'b0;
  76. get_delay_time_low <= 'b0;
  77. case( current_state )
  78. UNLOCK:
  79. if( sign_src == 'b1 )
  80. begin
  81. if( i == delay_time_high - )
  82. begin
  83. get_delay_time_high <= 'b1;
  84. i <= ;
  85. end
  86. else if( get_time_1us )
  87. begin
  88. i <= i + 'b1;
  89. end
  90. end
  91. else
  92. begin
  93. i <= ;
  94. end
  95. LOCK:
  96. if( sign_src == 'b0 )
  97. begin
  98. if( k == delay_time_low - )
  99. begin
  100. get_delay_time_low <= 'b1;
  101. k <= ;
  102. end
  103. else if( get_time_1us )
  104. begin
  105. k <= k + 'b1;
  106. end
  107. end
  108. else
  109. begin
  110. k <= ;
  111. end
  112. endcase
  113. end
  114. end
  115.  
  116. always @ ( posedge cnt_clk or posedge rst )
  117. begin
  118. if( rst )
  119. current_state <= UNLOCK;
  120. else
  121. current_state <= next_state;
  122. end
  123.  
  124. always @ ( * )
  125. begin
  126. case( current_state )
  127. UNLOCK:
  128. if( get_delay_time_high == 'b1 )
  129. next_state = LOCK;
  130. else
  131. next_state = UNLOCK;
  132. LOCK:
  133. if( get_delay_time_low == 'b1)
  134. next_state = UNLOCK;
  135. else
  136. next_state = LOCK;
  137. endcase
  138. end
  139.  
  140. reg sign_src_r;
  141. always @ ( posedge cnt_clk or posedge rst )
  142. begin
  143. if( rst )
  144. sign_src_r <= 'b0;
  145. else
  146. begin
  147. case( current_state )
  148. UNLOCK:
  149. sign_src_r <= 'b0;
  150. LOCK:
  151. sign_src_r <= 'b1;
  152. endcase
  153. end
  154. end
  155.  
  156. reg [:]sign_src_r_delay;
  157. always @ ( posedge clk or posedge rst )
  158. if(rst)
  159. sign_src_r_delay <= 'b00;
  160. else
  161. sign_src_r_delay <= {sign_src_r_delay[], sign_src_r};
  162.  
  163. assign sign_src_filter = sign_src_r_delay[];
  164.  
  165. endmodule
  166.  
  167. /*
  168. add_force {/glitch_filter_1/cnt_clk} -radix hex {0 0ns} {1 50000ps} -repeat_every 100000ps
  169. add_force {/glitch_filter_1/rst} -radix hex {1 0ns} {0 100000ps}
  170. add_force {/glitch_filter_1/sign_src} -radix hex {0 0ns} {1 198000ps} {0 232000ps} {1 308000ps} {0 354000ps} {1 400000ps} {0 450000ps} {1 552000ps} {0 2550000ps} {1 2740000ps} {0 2850000ps} {1 2950000ps} {0 3550000ps}
  171. add_force {/glitch_filter_1/delay_time_high} -radix hex {4 0ns}
  172. add_force {/glitch_filter_1/delay_time_low} -radix hex {5 0ns}
  173. add_force {/glitch_filter_1/clk} -radix hex {0 0ns} {1 25000ps} -repeat_every 50000ps
  174.  
  175. */

备注:对易产生锯齿的信号进行滤波,增强其稳定性。

信号滤波模块verilog代码---UNLOCK,LOCK状态机方式的更多相关文章

  1. Verilog代码规范I

    Verilog代码规范I "规范"这问题 "规范"这个富含专业气息的词汇(个人感觉),其实规范这种东西,就是大家都约定熟成的东西,一旦你不遵守这个东西,专业人士 ...

  2. 总线读写---verilog代码

    总线读写---verilog代码 `timescale 1ns / 1ps ////////////////////////////////////////////////////////////// ...

  3. BT.656 NTSC制式彩条生成模块(verilog)

    BT.656 NTSC制式彩条生成模块(verilog) 1.知识储备 隔行扫描是将一副图像分成两场扫描,第一场扫描第1,2,5,7...等奇数行,第二场扫描2,4,6,8...等偶数行,并把扫奇数行 ...

  4. SDRAM驱动篇之简易SDRAM控制器的verilog代码实现

    在Kevin写的上一篇博文<SDRAM理论篇之基础知识及操作时序>中,已经把SDRAM工作的基本原理和SDRAM初始化.读.写及自动刷新操作的时序讲清楚了,在这一片博文中,Kevin来根据 ...

  5. 分享:FIFO 同步、异步以及Verilog代码实现

    FIFO 很重要,之前参加的各类电子公司的逻辑设计的笔试几乎都会考到. FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线 ...

  6. Verilog代码和FPGA硬件的映射关系(一)

    代码和硬件之间的映射关系是一个很奇妙的过程,也展现出人类的智慧.单片机内部的硬件结构都是固定的,无法改变,我们通过代码操作着寄存器的读写,来执行各种复杂的任务.FPGA的硬件结构并不像单片机一样是固定 ...

  7. 学会使用Hdlbits网页版Verilog代码仿真验证平台

    给大家推荐一款网页版的 Verilog代码编辑仿真验证平台,这个平台是国外的一家开源FPGA学习网站,通过“https://hdlbits.01xz.net/wiki/Main_Page” 地址链接进 ...

  8. 用PCA(主成分分析法)进行信号滤波

    用PCA(主成分分析法)进行信号滤波 此文章从我之前的C博客上导入,代码什么的可以参考matlab官方帮助文档 现在网上大多是通过PCA对数据进行降维,其实PCA还有一个用处就是可以进行信号滤波.网上 ...

  9. -1-5 java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁 sleep()和wait()方法的区别 为什么wait(),notify(),notifyAll()等方法都定义在Object类中

     本文关键词: java 多线程 概念 进程 线程区别联系 java创建线程方式 线程组 线程池概念 线程安全 同步 同步代码块 Lock锁  sleep()和wait()方法的区别 为什么wait( ...

随机推荐

  1. python day05作业

  2. LeetCode--1、26、27、35、53 Array(Easy)

      1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to ...

  3. grep命令相关用法

    grep命令相关参数: -i:忽略大小写 --color:高亮显示匹配到的信息 -v:反向查找,没匹配到的行显示出来 -o:只显示被模式匹配到的串本身 正则表达式: .*:任意长度的任意字符,贪婪模式 ...

  4. msp430板子接485接口的气体传感器问题及处理

    现象:板子的485有问题(能收但是不能发) 485的方向位没有设置因此485芯片一直处于接收的状态,而发送不了处理方法:在需要发送时,把485方向位置于发送,发送完后再把方向位置回接收.但注意,要在发 ...

  5. selenium和PhantomJS的使用

    利用selenium来进行爬取数据 import time from selenium import webdriver # 创建phantomjs浏览器对象 driver = webdriver.P ...

  6. D:\yyy\UNetSegmentation_code_20180301\data\train

    key1 numpy.save("filename.npy",a) 利用这种方法,保存文件的后缀名字一定会被置为.npy,这种格式最好只用 numpy.load("fil ...

  7. HDU 1087:Super Jumping! Jumping! Jumping!(LIS)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...

  8. BFS模板

    bool visit[maxn];///访问标记 ,,,,-,,-,}; ///向左上右下,左下,右上,右下,左上 ,,,-,-,,,-}; struct node { int r; int c; i ...

  9. XTU1254 Blance 如何实现称出1∼n 克的物品,请问最少需要几颗砝码?

    题目描述 小明有一架天平,小明想称出1∼n 克的物品,请问最少需要几颗砝码? 比如小明想称出1∼4 克的物品,需要2颗砝码,为1和3克. balance 输入 第一行是一个整数T(1≤T≤10000) ...

  10. java-代码块-局部代码块、构造代码块、静态代码块

    1.代码块概述: 在Java中,使用{ }括起来的代码被称为代码块. 2.代码块分类: 根据其位置和声明的不同,可以分为局部代码块,构造代码块.静态代码块和同步代码块(多线程). 3.常见代码块的应用 ...