在FPGA開發的面試中可能會碰到檢測上升沿和下降沿的題目。以上升沿爲例進行分析。
上升沿是信號從低電平變化爲高電平的時候,因此我們可以將信號的上一個狀態和下一個狀態進行採樣保存,然後來判斷是都是從0變化到1的過程。代碼如下:
module posedge_detection(clk,rst_n,i_data_in,o_rising_edge);
input clk;
input rst_n;
input i_data_in;
output o_rising_edge;
reg r_data_in0;
reg r_data_in1;
assign o_rising_edge=r_data_in0&~r_data_in1;
always@(posedge clk or negedge rst_n)begin
if(rst_n==1'b0)begin
r_data_in0<=0;
r_data_in1<=0;
end
else begin
r_data_in1<=r_data_in0;
r_data_in0<=i_data_in;
end
end
endmodule
通過信號i_data_in和時鐘、復位信號,可以仿真出正確的結果。