FPGA笔试题4

FPGA笔试题4_第1张图片

答:Q->A->D时间:tCo+tComA+tSu=0.1+9.9+1 = 11ns
Q->B->D时间:tCo+tComB+tSu = 0.1 + 24 + 1 = 25.1ns
所以可以看出Q->B->D时间是更大的,只有满足了这个时间要求,整个系统才是正常的,所以最大的时钟是:(1/25.1 *10^3)Mhz
保持时间不影响时钟频率

FPGA笔试题4_第2张图片
答:可以看出这是两个时钟,快时钟到满时钟,另外脉冲信号pulse_a的位宽1bit,所以是1bit的数据传输,可以采用打两拍的方案·

//
always@(posedge clk_a or negedge rst_n)begin
if(rst_n==1'b0)begin
	pluse_a_ff0 <= 0;
	pluse_a_ff1 <= 0;
	end
else begin
		pluse_a_ff0 <= pluse_a; //pluse_a的此刻值
		pluse_a_ff1 <= pluse_a_ff0;//pluse_a的上一刻值
	end
end

//延长脉宽
always  @(posedge clk_a or negedge rst_n)begin
if(rst_n==1'b0)begin
	pluse_a_1 <= 1'b0;
	end
else begin
	pluse_a_1 <= pluse_a || pluse_a_ff0 ||pluse_a_ff1;
	end
end

//异步处理,打两拍

always  @(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
	pluse_a_1_ff0 <= 1'b0;
	pluse_a_1_ff1 <= 1'b0;
	pluse_a_1_ff2 <= 1'b0;
	end
else begin
	pluse_a_1_ff0 <= pluse_a_1;//第一拍
	pluse_a_1_ff1 <= pluse_a_ff0;//第二拍
	pluse_a_1_ff2 <= pluse_a_ff1;	//上升沿检测
	end
end
//上升沿检测
always  @(posedge clk or negedge rst_n)begin
	if(rst_n==1'b0)begin
		pluse_a_2_b <= 1'b0;
	end
	else if(pluse_a_1_ff1 == 1'b1 && pluse_a_1_ff2 == 1'b0)begin
		pluse_a_2_b <= 1'b1;
	end
	else
		pluse_a_2_b <= 1'b0;
end

你可能感兴趣的:(FPGA笔试题4)