要有足够的时间给信号,要不亚稳态等着你

这里的时间是指信号传输的建立时间和保持时间。

建立时间:时钟有效沿到来之前数据必须保持稳定的最小时间;

保持时间:时钟有效沿到来之后数据必须保持稳定的最小时间;

实际上亚稳态是无法完全消除的,只能降低。

上述时间不够时,会使信号在0和1之间不定的漂浮如图:

 在硬件逻辑电路中,可以通过打两拍的方式降低亚稳态。上代码:

module yawentai(
	input clk,
	input rst_n,
	input signal_in,
	output signal_out
);
/*
reg signal_r1;
reg signal_r2;

always@(posedge clk or negedge rst_n)
	if(!rst_n)begin
		signal_r1 <= 1'b0;
		signal_r2 <= 1'b0;
		end
	else begin
		signal_r1 <= signal_in;
		signal_r2 <= signal_r1;
		end
assign signal_out = signal_r2;
*/
reg [1:0]signal_r;
always@(posedge clk or negedge rst_n)
	if(!rst_n)
		signal_r <= 2'b0;
	else
		signal_r <= {signal_r[0],signal_in};
		
assign signal_out = signal_r[1];

endmodule

测试代码:

`timescale 1ns/1ns
`define clock_period 20

module yawentai_tb;

reg clk;
reg rst_n;
reg signal_in;
wire signal_out;


yawentai u_yawentai(
	.clk			(clk),
	.rst_n		(rst_n),
	.signal_in	(signal_in),
	.signal_out	(signal_out)
);

initial clk = 1;
always#(`clock_period/2)clk = ~clk;
initial begin
	rst_n = 1'b0;
	signal_in = 1'b0;
	#(`clock_period*200)
	rst_n = 1'b1;
	#(`clock_period*200)
	signal_in = 1'b1;
	#2000;
		$stop;
	end

endmodule

仿真图:

 可以看出相差正好时一个周期20ns

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值