信号滤波模块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. menson 使用方法

    参考:http://mesonbuild.com/Running-Meson.html#configuring-the-source https://github.com/google/googlet ...

  2. [转]Ubuntu安装Python3.6

    Ubuntu安装Python3.6   Ubuntu默认安装了Python2.7和3.5 输入命令python

  3. 2017-2018-2 20165228 实验三《敏捷开发与XP实践》实验报告

    2017-2018-2 20165228 实验三<敏捷开发与XP实践>实验报告 相关知识点 (一)敏捷开发与XP 通过 XP准则来表达: 沟通 :XP认为项目成员之间的沟通是项目成功的关键 ...

  4. ORA-15025 搭建DG环境,restore controlfile报错,提示oracle无法使用ASM存储

    环境说明: #主库RAC环境 #备库RAC环境,操作系统AIX 6.1 数据库版本11.2.0.3 报错说明: #主库备份控制文件,传输至备库,备库restore 报错 本篇文档,分为两大阶段:第一阶 ...

  5. Java中的初始化顺序

    一.在创建类时为成员变量赋值和在构造函数中的赋值的先后顺序  在未用构造器之前其实已经将类的字段进行了赋值只是在调用构造器时,又将类的字段进行了重新的赋值.如下: package com.cjm.in ...

  6. Python 字符串中 startswith()方法

    Python startswith() 方法用于检查字符串是否是以指定子字符串开头,如果是则返回 True,否则返回 False.如果参数 beg 和 end 指定值,则在指定范围内检查. str.s ...

  7. [LeetCode&Python] Problem 784. Letter Case Permutation

    Given a string S, we can transform every letter individually to be lowercase or uppercase to create ...

  8. HDU 1425 C++使用sort函数

    sort Time Limit: 6000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submissi ...

  9. 杭电oj2000-C语言

    题目 题目 Problem Description 输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符. Input 输入数据有多组,每组占一行,有三个字符组成,之间无空格. Outp ...

  10. NET Core MVC中创建PDF

    使用Rotativa在ASP.NET Core MVC中创建PDF 在本文中,我们将学习如何使用Rotativa.AspNetCore工具从ASP.NET Core中的视图创建PDF.如果您使用ASP ...