CPLD/FPGA同步电路具有最稳定的工作状态和工作性能,因此经常需要将外部输入的异步信号进行同步处理(与系统时钟同步)和整形(将输入信号由不规则波形提取为具备一个或多个时钟周期长得脉冲信号)。 同步整形的基本方法就是通过时钟对异步信号连续采样得到同步信号,然后由前后两次的同步采样进行逻辑组合得到整形输出。下面给出一个利用上升沿完成信号同步整形的设计,同步信号被整形成为两个时钟周期长度。
源代码:
module syn_reshape(
clk,
rst_n,
din,
dout
);
input clk;
input rst_n;
input din;
output dout;
reg dtmp1;
reg dtmp2;
reg dtmp3;
always @(posedge clk) begin
if (!rst_n) begin
dtmp1 <= 0;
dtmp2 <= 0;
dtmp3 <= 0;
end
else begin
dtmp1 <= din;
dtmp2 <= dtmp1;
dtmp3 <= dtmp2;
end
end
assign dout = dtmp1 && (!dtmp3);
endmodule
原理说明:首先,通过D触发器采样输入信号,将其数值宽度划分为一个时钟周期宽度的数值。其次,设定三次采样,则是结合后面的处理电路,将输出信号同步到两个时钟宽度。如果要将输入信号同步到N个时钟宽度,则需要N+1级D触发器级联,然后将第1级和第N+1级触发器的值送入后续处理逻辑。第三,对D触发采样值的处理逻辑,就是一个简单地判断上升沿的组合逻辑。