边沿检测—以脉冲形式给出信号
题目描述:
有一个缓慢变化的1bit信号a,编写一个程序检测a信号的上升沿给出指示信号rise,当a信号出现下降沿时给出指示信号down。
注:rise,down应为单脉冲信号,在相应边沿出现时的下一个时钟为高,之后恢复到0,一直到再一次出现相应的边沿。
接口信号图如下:
`timescale 1ns/1ns
module edge_detect(input clk,input rst_n,input a,output reg rise,output reg down
);reg a_reg;always@(posedge clk or negedge rst_n)beginif(!rst_n)a_reg <= 1'b0;elsea_reg <= a;endwire rise_valid,down_valid;assign rise_valid = a & ~(a_reg);assign down_valid = ~a & a_reg;always@(posedge clk or negedge rst_n)beginif(!rst_n)rise <= 1'b0;else if(rise_valid == 1'b1)rise <= 1'b1;else rise <= 1'b0;endalways@(posedge clk or negedge rst_n)beginif(!rst_n)down <= 1'b0;else if(down_valid == 1'b1)down <= 1'b1;elsedown <= 1'b0;endendmodule
知识点