用verilog实现脉冲检测

代码思路和上一篇边沿检测基本一致,通过使用两个触发器,并结合逻辑组合实现检测

但要注意题目里对pulse的定义是什么,本题中pulse是指一个时钟周期宽度的窄脉冲

verilog代码:

module pulse_detector(input clk, rst_n, din, output pulse_high_detect);

reg q0,q1;

assign pulse_high_detect = (~din) & q0 & (~q1);

always@(posedge clk, negedge rst_n)
begin
	if(!rst_n)
	begin
		q0 <= 0;
		q1 <= 0;
	end
	else
	begin
		q0 <= din;
		q1 <= q0;
	end
end

endmodule

testbench:

`timescale 1ns/1ns

module pulse_detector_tb;

reg CLK,RST_N,DIN;
wire PULSE_HIGH_DETECT;
reg i,j;

pulse_detector U_pulse_detector(
.clk(CLK), 
.rst_n(RST_N), 
.din(DIN), 
.pulse_high_detect(PULSE_HIGH_DETECT)
);

initial
begin
	CLK = 0 ;
	for(i = 0 ; i<10000; i=i+1)
	begin
		#1 CLK = ~CLK;
	end
end

initial
begin
	DIN = 0 ;
	for(j = 0 ; j<100; j=j+1)
	begin
		#1 DIN = 0;
		#1 DIN = 1;
		#1 DIN = 1;
		#1 DIN = 1;
		#1 DIN = 0;
		
		#1 DIN = 0;
		#1 DIN = 1;
		#1 DIN = 0;
		#1 DIN = 1;
		#1 DIN = 0;
	end
end

initial
begin
	RST_N = 1;
	#5 RST_N = 0;
	#5 RST_N = 1;
end

endmodule

仿真结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值