以前我曾一度傻乎乎的使用
always @ (posedge signal)
这样的代码去检测signal的上升沿,闹出了很多问题。
当受实验室的一同学指教后,再也不会傻乎乎的这样干了。当然,你看完下文也不会这样干了。
检测上升沿的原理:使用高频的时钟对信号进行采样,因此要实现上升沿检测,时钟频率至少要在信号最高频率的2倍以上,否则就可能出现漏检测。具体请参见下面代码。
module edge_check(clk, rst_n, signal, pos_edge, neg_edge, both_edge);
input clk;
input rst_n;
input signal;
output pos_edge;
output neg_edge;
output both_edge;
reg sig_r0, sig_r1; // 状态寄存器
always @ (posedge clk or negedge rst_n)
if (!rst_n) begin
sig_r0 <= 1'b0;
sig_r1 <= 1'b0;
end else begin
sig_r0 <= signal;
sig_r1 <= sig_r0;
end
assign pos_edge = (~sig_r1) & (sig_r0);
assign neg_edge = sig_r1 & (~sig_r0);
assign both_edge = sig_r1 ^ sig_r0; // 双边沿检测,或pos_edge|neg_edge
endmodule
使用Quartus II综合布线之后的RTL视图如下:
从RTL视图中可以看出,电路是通过一个异步复位的D触发器实现的。
ModelSim的仿真视图如下,从中可看出已检测出上升和下降沿,但存在一个延时,这是因为使用了时钟同步的检测。
或者上面的Verilog代码还可以换一种写法,效率上差不了太多;
module edge_check(clk, rst_n, signal, pos_edge, neg_edge, both_edge);
input clk;
input rst_n;
input signal;
output pos_edge;
output neg_edge;
output both_edge;
reg [1:0]sig_fifo;
reg sig_r0, sig_r1; // 状态寄存器
always @ (posedge clk or negedge rst_n)
if (!rst_n) begin
sig_fifo <= 2'b0;
end else begin
sig_fifo <= {sig_fifo[0], signal};
end
assign pos_edge = (sig_fifo == 2'b01);
assign neg_edge = (sig_fifo == 2'b10);
assign both_edge = sig_fifo[0] ^ sig_fifo[1]; // 双边沿检测,或pos_edge|neg_edge
endmodule
生成的RTL视图为
分享到:
相关推荐
fpga 实现数据 通信中的边缘检测。基于verilog 语言实现。。
FPGA实现图像采集,自动阈值分割和边缘提取。
本项目采集摄像头的图像数据,然后再屏幕上显示两种图像:屏幕有一个圆,圆内显示经过了边缘处理的图像,而圆外则显示原始图像。通过该工程,可以学到如下知识: 1、灰度转换、二值化、高斯滤波、 sobel算法等图像...
FPGA在边缘检测中的应用.pdf
基于FPGA的sobel边缘检测算法实现,有oled驱动,图片以.hex文件初始化在rom中
基于FPGA的Prewitt边缘检测算子的实现.pdf
基于FPGA的Sobel算子图像边缘检测 开发环境: ISE、Modelsim、Spartan6-xc6slx9 项目概况: 将上位机发送来的图片数据经过两个FIFO进行缓存,然后通过sobel算法把该图片的边沿区域找到,显示在显示器上。 项目描述...
基于fpga的soble边沿检测,图片大小256*256,开发板zybo
基于FPGA的图像边缘检测及显示.pdf
基于FPGA的图像边缘检测系统研究与设计,,基于FPGA的图像边缘检测系统研究与设计
用FPGA实现图像的边缘检测,完整版是通过阅读文献得到的方法,都能仿真的出来的喔!
成功调试成功的VGA显示边沿检测算法,实时的显示CMOS摄像头采集的数据,涉及到了I2C总线协议的编写、异步FIFO的编写
FPGA 图像边缘检测系统的设计与实现.pdf
本文为大家详细介绍一下什么是时钟边沿检测技术。
基于FPGA的实时图像边沿检测系统的实现.pdf
基于FPGA边缘检测算法的设计
fpga实现sobel边缘检测modelsim仿真代码
图像矩阵[122 68 117 151 115 141 123 153 87] x方向算子[-1 0 +1 -2 0 +2 -1 0 +1] y方向算子[+1 +2 +1 0 0 0 -1 -2 -1] Gx_temp1 = 117 + 141*2 + 87 = 486 Gx_temp2 = 122 + 151*2 + 123 = 547 ...
本文章是关于FPGA之尖峰脉冲和边沿检测。
EDA课程实验,基于canny算法的边缘检测,用vga输出显示,时序,测试文件和灰度化都有,亲测可用