FPGA单bit信号跨时钟域处理
发布时间
阅读量:
阅读量
1.单bit脉冲信号的跨时钟域处理
module signal_sync(
input rsta_n, // active low
input clka,
input plusea,
input rstb_n, // active low
input clkb,
output pluseb
);
reg level;
reg syn1;
reg syn2;
reg syn2_f;
/***************************将a时钟域的脉冲信号转为电平信号************************/
always@(posedge clka or negedge rsta_n) begin
if(!rsta_n)
level <= 1'b0;
else if(plusea)
level <= ~level;
else
level <= level;
end
28. /***************************用两级寄存器同步电平信号************************/
always@(posedge clkb or negedge rstb_n) begin
if(!rstb_n) begin
syn1 <= 1'b0;
syn2 <= 1'b0;
end
else begin
syn1 <= level;
syn2 <= syn1;
end
end
40. /***************************在b时钟域将同步过来的电平信号转为脉冲信号************************/
always@(posedge clkb or negedge rstb_n) begin
if(!rstb_n)
syn2_f <= 1'b0;
else
syn2_f <= syn2;
end
assign pluseb = syn2^syn2_f;
endmodule
AI写代码

仿真结果如下:
1.快时钟跨慢时钟

2.慢时钟跨快时钟

2.单bit非脉冲信号的跨时钟域
1.慢时钟转快时钟(打两拍)
`timescale 1ns / 1ps
/*
.clk (),
.rst_n_in (),
.rst_n_out ()
*/
module rst_clk_controller(
input clk,
input rst_n_in,
output rst_n_out
);
reg rst_n_d;
reg rst_n_dd;
assign rst_n_out = rst_n_dd;
always @(posedge clk or negedge rst_n_in) begin
if (!rst_n_in) begin
rst_n_d <= 0;
rst_n_dd <= 0;
end
else begin
rst_n_d <= rst_n_in;
rst_n_dd <= rst_n_d;
end
end
endmodule
AI写代码

全部评论 (0)
还没有任何评论哟~
