手撕Verilog面试题专题——(1)边沿检测

1 实现信号边沿检测功能,输出一个周期宽度的脉冲信号。

Verilog代码:

module edge_detect(
	input 	clk,
	input	rst,
	input 	din,
	output 	dout1,	//上升沿
	output 	dout2,	//上升沿
	output 	dout3	//上升沿
);
	reg	[1:0]	res;
	always@(posedge clk or negedge rst)	begin
		if(!rst)
			res	<= 2'b00;
		else
			res	<= {res[0], din};	
	end
	
	assign dout1	= (~res[1]) && res[0];
	assign dout2	= res[1] && (~res[0]);
	assign dout3	= res[1] ^ res[0];
	
endmodule

testbench仿真文件:

module edge_detect_tb();
    reg     clk;
    reg     rst;
    reg     din;
    wire    pos_edge;
    wire    neg_edge;
    wire    data_edge;
    
    initial begin
        clk = 0;
        rst = 0;
        din = 0;
        #15 rst = 1;
        #20 din = 1;
        #20 din = 0;
    end
    initial begin
        forever #3 clk = ~clk;
    end
    
    
    edge_detect onedetect(
    .clk(clk),
    .rst(rst),
    .din(din),
    .dout1(pos_edge),
    .dout2(neg_edge),
    .dout3(data_edge)
    );
endmodule

仿真波形:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值