题解 | #脉冲同步电路#

脉冲同步电路

http://www.nowcoder.com/practice/b7f37e6c55e24478aef4ec2d738bbf07

简析

输入:data_in
输出:dataout
总体思路是将A时钟域的脉冲信号转换为电平信号,打两拍后再转换为B时钟域的脉冲信号。

代码

`timescale 1ns/1ns

module pulse_detect(
	input 				clk_fast	, 
	input 				clk_slow	,   
	input 				rst_n		,
	input				data_in		,

	output  		 	dataout
);
    reg data_level, data_level1, data_level2, data_level3;
    
  	// 脉冲信号转电平信号
    always@(posedge clk_fast or negedge rst_n) begin
        if(~rst_n)
            data_level <= 0;
        else
            data_level <= data_in? ~data_level: data_level;
    end
    
  	// 电平信号打两拍再转为脉冲信号
    always@(posedge clk_slow or negedge rst_n) begin
        if(~rst_n) begin
            data_level1 <= 0;
            data_level2 <= 0;
            data_level3 <= 0;
        end
        else begin
            data_level1 <= data_level;
            data_level2 <= data_level1;
            data_level3 <= data_level2;
        end
    end
    assign dataout = data_level3^data_level2;
endmodule
Verilog篇题解 文章被收录于专栏

本人对牛客网verilog篇题目一些理解

全部评论
和文章crossing the Abyss- asynchronous signals in a synchronous world思路一样
2 回复 分享
发布于 2022-10-17 16:23 上海
请问画图的软件叫啥
点赞 回复 分享
发布于 2022-06-06 15:15
360集团
校招火热招聘中
官网直投
这个打拍的目的是什么
点赞 回复 分享
发布于 2022-07-31 22:39
最后一步 异或data_level3^data_level2怎么理解啊
点赞 回复 分享
发布于 2022-08-31 16:48 四川
data_level <= data_in? ~data_level: data_level;这里为什么要写成翻转data_level呢?
点赞 回复 分享
发布于 2023-05-11 11:26 广东
这个脉冲转电平,脉冲太长的话电平会一直翻转出问题,感觉最好还是脉冲下降沿检测转电平
点赞 回复 分享
发布于 2023-08-24 16:07 河北
为什么注释里写的打2拍,但实际上打的是3拍呢?
点赞 回复 分享
发布于 07-09 21:15 浙江
第一步脉冲转电平有问题,这样电平信号会一直不释放,最好还是要一个反馈信号把电平拉下来
点赞 回复 分享
发布于 07-23 20:47 黑龙江

相关推荐

33 6 评论
分享
牛客网
牛客企业服务