信号滤波模块verilog代码

 `timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: chensimin
//
// Create Date: 2017/12/14 17:15:25
// Design Name:
// Module Name: glitch_filter_1
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
//////////////////////////////////////////////////////////////////////////////////
module glitch_filter_1 #(
parameter WIDTH = ,
parameter CNT_CLK_FREQUENCY = ) // frequency cnt_clk in MHz
(
input wire cnt_clk,
input wire [WIDTH-:] delay_time_high,
input wire [WIDTH-:] delay_time_low,
input wire clk,
input wire rst,
input wire sign_src,
output wire sign_src_filter
); localparam UNLOCK = 'b0;
localparam LOCK = 'b1; reg get_time_1us;
reg [WIDTH-:]m;
always @ ( posedge cnt_clk or posedge rst )
begin
if( rst )
begin
get_time_1us <= 'b0;
m <= ;
end
else if( m == CNT_CLK_FREQUENCY - )
begin
get_time_1us <= 'b1;
m <= ;
end
else
begin
get_time_1us <= 'b0;
m <= m + 'b1;
end
end reg [WIDTH-:]i;
reg [WIDTH-:]k;
reg get_delay_time_high;
reg get_delay_time_low;
reg current_state;
reg next_state;
always @ ( posedge cnt_clk or posedge rst )
begin
if( rst )
begin
get_delay_time_high <= 'b0;
get_delay_time_low <= 'b0;
i <= ;
k <= ;
end
else
begin
get_delay_time_high <= 'b0;
get_delay_time_low <= 'b0;
case( current_state )
UNLOCK:
if( sign_src == 'b1 )
begin
if( i == delay_time_high - )
begin
get_delay_time_high <= 'b1;
i <= ;
end
else if( get_time_1us )
begin
i <= i + 'b1;
end
end
else
begin
i <= ;
end
LOCK:
if( sign_src == 'b0 )
begin
if( k == delay_time_low - )
begin
get_delay_time_low <= 'b1;
k <= ;
end
else if( get_time_1us )
begin
k <= k + 'b1;
end
end
else
begin
k <= ;
end
endcase
end
end always @ ( posedge cnt_clk or posedge rst )
begin
if( rst )
current_state <= UNLOCK;
else
current_state <= next_state;
end always @ ( * )
begin
case( current_state )
UNLOCK:
if( get_delay_time_high == 'b1 )
next_state = LOCK;
else
next_state = UNLOCK;
LOCK:
if( get_delay_time_low == 'b1)
next_state = UNLOCK;
else
next_state = LOCK;
endcase
end reg sign_src_r;
always @ ( posedge cnt_clk or posedge rst )
begin
if( rst )
sign_src_r <= 'b0;
else
begin
case( current_state )
UNLOCK:
sign_src_r <= 'b0;
LOCK:
sign_src_r <= 'b1;
endcase
end
end reg [:]sign_src_r_delay;
always @ ( posedge clk or posedge rst )
if(rst)
sign_src_r_delay <= 'b00;
else
sign_src_r_delay <= {sign_src_r_delay[], sign_src_r}; assign sign_src_filter = sign_src_r_delay[]; endmodule /*
add_force {/glitch_filter_1/cnt_clk} -radix hex {0 0ns} {1 50000ps} -repeat_every 100000ps
add_force {/glitch_filter_1/rst} -radix hex {1 0ns} {0 100000ps}
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}
add_force {/glitch_filter_1/delay_time_high} -radix hex {4 0ns}
add_force {/glitch_filter_1/delay_time_low} -radix hex {5 0ns}
add_force {/glitch_filter_1/clk} -radix hex {0 0ns} {1 25000ps} -repeat_every 50000ps */

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

信号滤波模块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. 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 ...

  2. java pojo类

    POJO POJO是Plain OrdinaryJava Object的缩写 可以当作简单的Java对象 实际就是普通JavaBeans 外文名 POJO 实际意义 普通JavaBeans 全     ...

  3. java用字符io流复制文件

    一.小文件一次快速读写 import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExceptio ...

  4. Python之路PythonThread,第四篇,进程4

    python3  进程/线程4 进程间同步互斥方法: from multiprocessing import Lock 创建 进程锁对象 lock = Lock() lock.acquire()  给 ...

  5. 数据结构HUFFman求权值

    #include <bits/stdc++.h>using namespace std;priority_queue< int, vector <int>, greate ...

  6. multi-head attention

    ■ 论文 | Attention Is All You Need ■ 链接 | https://www.paperweekly.site/papers/224 ■ 源码 | https://githu ...

  7. Codeforces 978E:Bus Video System

    题目链接:http://codeforces.com/problemset/problem/978/E 题意 一辆公交车,在每站会上一些人或下一些人,车的最大容量为w,问初始车上可能有的乘客的情况数. ...

  8. vim 介绍安装 复制 剪切 粘贴

    1. vim 产生:对于linux 文件的编辑,最初是vi,然后对于其功能的扩展,就产生了vim vim 的安装 yum install vim 2.光标的移动 用得最多的就是方向键上的 上下左右,和 ...

  9. 矩阵快速幂(以HDU1757为例)

    对于数据量大的求余运算,在有递推式的情况下,可以构造矩阵求解. A - A Simple Math Problem Lele now is thinking about a simple functi ...

  10. 【java编程】Java魔法类:Unsafe应用解析

    转载来源:https://tech.meituan.com/2019/02/14/talk-about-java-magic-class-unsafe.html 前言 Unsafe是位于sun.mis ...