异步复位同步释放

异步复位和同步复位各有优缺点,两者结合能够使系统更加稳定;
目前这边总结编写了一个自认为比较通用的模块,分享给大家:
参数ACTIVE_HI 表示系统高复位有效还是低复位有效;高复位有效传1’b1,低复位有效传1’b0;
clk 系统时钟;
async 异步复位输入;
sync 同步复位输出;

通过仿真验证,sync输出至少2个clk时钟周期;可以满足同步复位要求,clk至少一次采到sync信号有效;

module async2sync
#(
	parameter	ACTIVE_HI	=	1'b1
)
(
	input				clk		,
	input				async	,
	output	reg			sync	
);
	
	generate 
		if(ACTIVE_HI == 1'b1)begin
			reg	async_flop0;
			always@(posedge clk or posedge async)
				if(async)
					async_flop0 <= 1'b1;
				else 
					async_flop0 <= 1'b0;
			
			reg async_flop1;
			always@(posedge clk or posedge async)
				if(async)
					async_flop1 <= 1'b1;
				else 
					async_flop1 <= async_flop0; 
			
			always@(posedge clk) 
				sync <= async_flop1;
		end 
		else begin
			reg	async_flop0;
			always@(posedge clk or negedge async)
				if(!async)
					async_flop0 <= 1'b0;
				else 
					async_flop0 <= 1'b1;
			
			reg async_flop1;
			always@(posedge clk or negedge async)
				if(!async)
					async_flop1 <= 1'b0;
				else 
					async_flop1 <= async_flop0; 
			
			always@(posedge clk) 
				sync <= async_flop1;
		end 
	endgenerate

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值