信号监测---verilog

此模块用于监测某一信号源是否持续稳定的传送。

监测思路:监测信号源高电平或者低电平的宽度是否始终保持一致(一定范围内允许有误差)

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer: chensimin
//
// Create Date: 2018/10/12 14:43:57
// Design Name:
// Module Name: signal_detection
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////// module signal_detection #(
parameter WIDTH = ,
parameter MAXIMUM_ERROR = ,
parameter CNT_CLK_FREQUENCY = ,
parameter DELAY_SIGNAL_OUT = ,
parameter TOTAL_TIME_HIGH = ,
parameter TOTAL_TIME_LOW =
)
(
input wire clk ,
input wire clk_out_syn ,
input wire rst ,
input wire signal_src ,
output wire lock
); //---------------------------------------------------------------------- // Signal source synchronization reg signal_src_delay_1 = ;
reg signal_src_delay_2 = ; always @(posedge clk or posedge rst)
begin
if(rst)
begin
signal_src_delay_1 <= 'b0 ;
signal_src_delay_2 <= 'b0 ;
end
else
begin
signal_src_delay_1 <= signal_src ;
signal_src_delay_2 <= signal_src_delay_1 ;
end
end //---------------------------------------------------------------------- //Rising edge detection assign rising_edge = signal_src_delay_1 && (!signal_src_delay_2) ;
assign falling_edge = (!signal_src_delay_1) && signal_src_delay_2 ; //---------------------------------------------------------------------- //count enable 信号上升沿开始计数,下降沿停止计数,此模块采用的是计算高电平的宽度 reg cnt_en = ; always @(posedge clk or posedge rst)
begin
if(rst)
cnt_en <= 'b0 ;
else if(rising_edge)
cnt_en <= 'b1 ;
else if(falling_edge)
cnt_en <= 'b0 ;
end //---------------------------------------------------------------------- //count clock period reg [:] cnt = ; always @(posedge clk or posedge rst)
begin
if(rst)
cnt <= 'd0 ;
else if(cnt_en)
cnt <= cnt + 'b1 ;
else
cnt <= 'd0 ;
end //---------------------------------------------------------------------- //total 存储两个相邻高电平的宽度 reg [:] total_number = ;
reg [:] total_number_delay = ;
reg [:] total_number_delay_1 = ;
always @(posedge clk or posedge rst)
begin
if(rst)
begin
total_number <= 'd0 ;
total_number_delay <= 'd0 ;
total_number_delay_1 <= 'd0 ;
end
else if(falling_edge)
begin
total_number <= cnt ;
total_number_delay <= total_number ;
total_number_delay_1 <= total_number_delay ;
end
else if(get_total_time_high || get_total_time_low)
begin
total_number <= 'd0 ;
total_number_delay <= 'd0 ;
total_number_delay_1 <= 'd0 ; end
end
//此处或得了相邻三个高电平的宽度值
//---------------------------------------------------------------------- localparam UNLOCK = 'b0;
localparam LOCK = 'b1; //---------------------------------------------------------------------- wire lock_state_1 ;
wire lock_state_2 ;

//考虑高电平宽度误差量
assign lock_state_1 = (total_number >= total_number_delay_1) && ((total_number - total_number_delay_1) <= MAXIMUM_ERROR) && (total_number > 'd100) ;
assign lock_state_2 = (total_number < total_number_delay_1) && ((total_number_delay_1 - total_number) <= MAXIMUM_ERROR) && (total_number > 'd100) ;
//用total_number 与 total_number_delay_1 两个值来参与运算,是考虑到了隔行视频,相邻两个高电平的宽度是不一样的,因为一帧有两场,即一帧中有两个V信号的有效区间
//---------------------------------------------------------------------- // 1us reg get_time_1us ;
reg [WIDTH-:] m ;
always @ ( posedge 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 get_total_time_high ;
reg get_total_time_low ;
reg [WIDTH-:] i ;
reg [WIDTH-:] k ; always @ (posedge clk or posedge rst)
begin
if(rst)
begin
get_total_time_high <= 'b0 ;
get_total_time_low <= 'b0 ;
i <= ;
k <= ;
end else
begin
get_total_time_high <= 'b0 ;
get_total_time_low <= 'b0 ; if(signal_src_delay_2 == 'b0)
begin
if( i == TOTAL_TIME_LOW - )
begin
get_total_time_low <= 'b1 ;
i <= ;
end else if(get_time_1us)
i <= i + 'b1 ;
end else
i <= ; if(signal_src_delay_2 == 'b1)
begin
if( k == TOTAL_TIME_HIGH - )
begin
get_total_time_high <= 'b1 ;
k <= ;
end else if(get_time_1us)
k <= k + 'b1 ;
end else
k <= ;
end
end //---------------------------------------------------------------------- reg current_state ;
reg next_state ; always @ ( posedge clk or posedge rst )
begin
if( rst )
current_state <= UNLOCK;
else
current_state <= next_state;
end //---------------------------------------------------------------------- always @ ( * )
begin
case( current_state )
UNLOCK:
if( lock_state_1 || lock_state_2 )
next_state = LOCK;
else
next_state = UNLOCK;
LOCK:
if( get_total_time_high || get_total_time_low )
next_state = UNLOCK;
else
next_state = LOCK;
endcase
end //---------------------------------------------------------------------- //output reg reg lock_r; always @ (posedge clk or posedge rst)
begin
if(rst)
lock_r <= 'b0 ; else
begin
case(current_state)
UNLOCK: lock_r <= 'b0;
LOCK : lock_r <= 'b1;
endcase
end
end reg dly_reg[:DELAY_SIGNAL_OUT-]; genvar var_i;
generate
for (var_i=;var_i<=DELAY_SIGNAL_OUT-;var_i=var_i+)
begin:delay_generate_block
if (var_i==)
begin
always @ (posedge clk_out_syn or posedge rst)
if (rst)
dly_reg[var_i] <= ;
else
dly_reg[var_i] <= lock_r;
end
else
begin
always @ (posedge clk_out_syn or posedge rst)
if (rst)
dly_reg[var_i] <= ;
else
dly_reg[var_i] <= dly_reg[var_i-];
end
end
endgenerate assign lock = dly_reg[DELAY_SIGNAL_OUT-]; endmodule

仿真结果:

信号监测---verilog的更多相关文章

  1. 关于初次使用Verilog HDL语言需要懂的基本语法

    关于初次使用Verilog HDL语言需要懂的基本语法 1.常量 数字表达式全面的描述方式为:<位宽><进制><数字> 8’b10101100,表示位宽为8的二进制 ...

  2. 时钟分频方法---verilog代码

    时钟分频方法---verilog代码 本文以SDI播出部分的工程为例,来说明一种时钟分频的写法.SD-SDI工程中播出时钟tx_usrclk为148.5MHz,但tx_video_a_y_in端的数据 ...

  3. Verilog学习笔记基本语法篇(一)·········数据类型

    Verilog中共有19种数据类型. 基本的四种类型: reg型.wire型.integer型.parameter型. 其他类型:large型.medium型.small型.scalared型.tim ...

  4. modelsim脚本文件的编写

    第一章 ModelSim介 绍 本指南是为 ModelSim5.5f版本编写的,该版本运行于UNIX和Microsoft Windows 95/98/Me/NT/2000的操作系统环境中.本指南覆盖了 ...

  5. IZT复杂电磁环境记录回放和模拟系统

    结合实验室复杂电磁环境特性与模拟研究需求,实现对复杂多变的电磁环境录制.分析.重构和模拟,记录回放系统应具备如下几项能力: 1.电磁环境信号记录能力:能够实现对9KHz-18GHz频带范围内射频信号的 ...

  6. passat / maintenance / baoyang

    s s 南京迎客隆汽车租赁有限公司 / 地址:常府街54号 / 电话:025-84546836 84507610 二手车养不起.修不起?果真如此吗?http://www.che168.com/list ...

  7. APM飞控系统详细介绍

    APM飞控系统详细介绍2013-04-05 12:28:24   来源:   评论:2 点击:10303 APM飞控系统是国外的一个开源飞控系统,能够支持固定翼,直升机,3轴,4轴,6轴飞行器.在此我 ...

  8. [Idea Fragments]2013.08.08

    # 1 今晚看到好几篇文章把golang,Node.js还有Nginx-lua拿来说事,Node.js现在自然比较熟悉,golang则有过一些了解,而Nginx-lua则少有听到. 有好事者对Node ...

  9. 基于TI 多核DSP 的大数据智能计算处理解决方案

    北京太速科技有限公司 大数据智能计算,是未来的一个发展趋势,大数据计算系统主要完成数据的存储和管理:数据的检索与智能计算. 特别是在智能城市领域,由于人口聚集给城市带来了交通.医疗.建筑等各方面的压力 ...

随机推荐

  1. C++面试笔记(1)

    1. C和C++的区别 C++面向对象的三大特性 面向对象的三个基本特征:封装.继承.多态 1.封装:把客观事物封装成抽象的类,类进行信息隐藏 关键字 |当前类 |包内 |子孙类| 包外 --|--| ...

  2. 20165214 2018-2019-2 《网络对抗技术》Exp1+ 逆向进阶 Week4

    <网络对抗技术>Exp2 PC平台逆向破解之"MAL_简单后门" Week4 一.实验内容 Task1 自己编写一个64位shellcode.参考shellcode指导 ...

  3. redis cluster的conf配置文件配置

    redis cluster的conf配置文件配置 master配置文件如下: bind 127.0.0.1 port tcp-backlog timeout tcp-keepalive logleve ...

  4. Vue中通过v-for动态添加图片地址

    由于组件化问题,webpake在打包以后,src目录下的assets里面存放的img图片,路径已经更换.很多入坑的前端程序员在使用的时候,可能专破头也弄不清地址是什么个情况: 这里在使用vue-cli ...

  5. python学习笔记3-函数

    一.函数高级特性 1)列表生成式,列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式. eg: >>> list(r ...

  6. vi编辑器之删除操作

    参见 1.vi列删除 方法一: ctrl+v进入列编辑模式: 将光标定位子想要删除的起始列: 移动光标至结束列(直接通过移动光标选中,对列不对齐时,可能比较长的行,无法全部选中,尤其是需要一直删除到行 ...

  7. Python 多线程的程序不结束多进程的程序不结束的区别

    import time from threading import Thread from multiprocessing import Process #守护进程:主进程代码执行运行结束,守护进程随 ...

  8. mybatis 源码分析二

    1.SqlSession下的四大对象 Executor.StatementHandler.ParameterHandler.ResultSetHandler StatementHandler的作用是使 ...

  9. Mac pip install mysql-python

    首次在mac os 下,用pip install MySQL-Python时经常出现如下错误: sh: mysql_config: command not foundTraceback (most r ...

  10. Codeforces Hello 2018 E题Logical Expression dp+最短路 好题

    j题目链接: http://codeforces.com/contest/913/problem/E 题意: 给你x,y,z三个变量,与&   或|  非!  括号()   四种运算符,规定括 ...