同步器

同步器

一、RTL代码


/**********************************************************

程序名称:同步器

简要说明:异步输入脉冲宽度小于时钟周期的信号,输出一个时钟周期的同步脉冲信号

写:武书肖

最后更新:2015412星期日

**********************************************************/

module synch(synch_in,synch_out,clk,rst);

input clk,rst,synch_in;

output synch_out;


reg q1,q2,synch_out;


wire rst_q1_q2=(!synch_in&&synch_out)||rst;


always @(posedgesynch_in or posedge rst_q1_q2)

begin

if(rst_q1_q2) q1<=0;

else q1<=1;

end


always @(posedge clk orposedge rst_q1_q2)

begin

if(rst_q1_q2) q2<=0;

else q2<=q1;

end

always @(posedge clk orposedge rst)

begin

if(rst) synch_out<=0;

else synch_out<=q2;

end


endmodule

二、RTLNetlist


同步器_第1张图片

三、Testbench

`timescale 1 ns/ 1 ps

module synch_vlg_tst();

reg clk;

reg rst;

reg synch_in;

wire synch_out;

synch i1 (

.clk(clk),

.rst(rst),

.synch_in(synch_in),

.synch_out(synch_out)

);


initial

begin

clk=0;

rst=0;

#20 rst=1;

#100 rst=0;

#10000 $stop;

end


initial

begin

synch_in=0;

#330 synch_in=1;

#50 synch_in=0;

#500 synch_in=1;

#50 synch_in=0;

end


always #50 clk=~clk;

endmodule

  1. 仿真结果



由仿真结果可看出,输入是一个小于时钟周期的窄脉冲异步信号,输出是宽度为一个时钟周期的同步脉冲信号,满足设计要求。


你可能感兴趣的:(FPGA)