<数字小IP设计> 一:上、下降沿检测模块;2FF 延迟模块

it2023-09-05  77

在实际设计中,很多简单的功能尽量不要重复设计。通过复用一些常用的模块,可以提高设计效率,减少代码错误率,并且增加代码的可读性。

module RISE_DETECTION # (parameter RESET = 1'b0) ( input clk_i, input rst_i, input dat_i, output wire dat_o ); reg dat_d; always @ (posedge clk_i or posedge rst_i) begin if (clk_i) dat_d <= RESET; else dat_d <= dat_i; end assign dat_o = dat_i & (~dat_d) ; endmodule module FALL_DETECTION # (parameter RESET = 1'b0) ( input clk_i, input rst_i, input dat_i, output wire dat_o ); reg dat_d; always @ (posedge clk_i or posedge rst_i) begin if (clk_i) dat_d <= RESET; else dat_d <= dat_i; end assign dat_o = (~dat_i) & dat_d ; endmodule module SIGNAL_2FF # (parameter RESET = 1'b0) ( input clk_i, input rst_i, input dat_i, output wire dat_o ); reg dat_d; reg dat_2d; always @ (posedge clk_i or posedge rst_i) begin if (clk_i) begin dat_d <= RESET; dat_2d <= RESET; end else begin dat_d <= dat_i; dat_2d <= dat_d; end end assign dat_o = dat_2d; endmodule

这三个模块是数字电路设计中的基础模块,上升沿检测和下降沿检测可以产生一个pulse来提示信号的开始或者结束。2FF延迟模块可以用作信号的同步,主要做单比特数据或者控制信号的跨时钟域数据传输。 单比特信号数据的异步处理,可以直接用2FF小模块处理,但是如果不同时钟域的工作频率差距过大,直接用2FF处理依旧会导致错误,建议使用buffer或者FIFO做数据的处理。 单比特控制信号的异步处理原则上也是一样,但是多比特控制信号的异步传输可以将不同信号做编码,变成不同单比特信号,分别做单比特信号的传输之后再在目标时钟域做解码,产生相应的控制信号。

最新回复(0)