上升沿检测电路学习笔记

上升沿检测电路的原理:输入信号d,经过一拍的延迟后,产生delay信号,将dout=d&(~delay)的结果当作是有上升沿的标志,结果为1则检测到上升沿。从波形图上理解就是下图这样。

三条红线处检测到的上升沿,故输出dout是1.

我的代码如下

//rtl代码
module r_edge (
  d,
  clk,
  rstn,
  dout
  );
  
	input	d,clk, rstn;
    output dout;
  
    reg   d_delay;
    //reg     dout;
	
    assign dout=d&(~d_delay);  //描述组合逻辑

	always@(posedge clk or negedge rstn)  //描述时序逻辑
	begin
		if(~rstn)
			d_delay<=0;
		else
			d_delay <= d;
	end
	
	endmodule

在写testbench测试时,发现d触发器部分的代码,由于需要建立保持时间,我就人为的延迟了0.1ns,仿真代码如下。

//testbench代码
`timescale 1ns/100ps
module tb ();
 
    reg	clk, rstn,d;
    wire   dout;
    parameter clk_period=10;
r_edge  U_edge(
  .clk(clk),
  .rstn(rstn),
  .d(d),
  .dout(dout)
  ); 
 
initial 
begin  
    clk = 0;  
    forever  
        #(clk_period/2) clk = ~clk;   //设置时钟信号
end  
  
initial 
    begin
        rstn = 1'b0;d=0;
        #7  rstn = 1'b1;  //设置复位信号和输入信号的激励
        #8  d=1;
        #10 d=0;
        #15 d=1;
        #15 d=0;
        #15 d=1;
        #5  d=0;
        #120 $stop;
    end 



endmodule 

纯小白入门,还有很多不懂得地方需要学习。

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值