• Verilog-消除复位毛刺(全志科技)


    原题

    题目理解

    该题目有2个要求,首先是要对输入的rstn_i进行过滤,小于等于32个时钟周期的当作“不正常”复位请求;另外,正常复位请求撤销后,也就是有效的rstn_i恢复高电平后,rstn_o能够在2个时钟周期后恢复高电平。

    代码思路

    1、外围rstn_i作为异步信号,需要进行打2拍处理,缓解亚稳态;由于此处已经对rstn_i打了2拍,按照题目要求,正常复位撤销后,rstn_o能够在2个时钟周期后恢复高电平,因此rstn_o由低到高的跳变与rstn_reg2必须一致,assign rstn_o = (count==6'd32 && rstn_reg2==1'b0)? 1'b0 : 1'b1; 的判断条件有rstn_reg2==1'b0, 不加这个的话rstn_o在正常复位撤销后需要3个时钟周期后才能恢复高电平
    2、设置一个计数器对打拍后的rstn_reg2进行统计,只要检测到高电平,计数清零,否则计数加1,直到32

    代码

    `timescale 1ns / 1ps
    
    module rstn_allwinner(
    	input clk,
    	input rstn_i,
    	
    	output rstn_o
        );
    	 
    reg rstn_reg1,rstn_reg2;
    reg [5:0] count;
    
    always @(posedge clk) begin
    	{rstn_reg1,rstn_reg2} <= {rstn_i,rstn_reg1};
    end
    
    always @(posedge clk) begin
    	if(rstn_reg2) count <= 6'd0;
    	else begin
    		if(count == 6'd32) count <= count;
    		else count <= count + 1'b1;
    	end
    end 
    
    assign rstn_o = (count==6'd32 && rstn_reg2==1'b0)? 1'b0 : 1'b1;
    
    endmodule
    

    仿真波形

    1、rstn_i持续31个周期,rstn_o无复位动作

    2、rstn_i持续32个周期,rstn_o仍无复位动作

    3、rstn_i持续33个周期,rstn_o产生复位动作

  • 相关阅读:
    Hive学习之路 (三)Hive元数据信息对应MySQL数据库表
    Hive学习之路 (二)Hive安装
    Hive学习之路 (一)Hive初识
    MyBatis+Spring SQL效率测试报告
    Java NIO
    Endianess(字节次序)简介
    Maven重复类的解决
    [转]Unicode和UTF-8的关系
    Java IO 体系结构
    建造者模式(Builder)
  • 原文地址:https://www.cnblogs.com/wt-seu/p/13430052.html
Copyright © 2020-2023  润新知