admin管理员组

文章数量:1531721

2023年12月24日发(作者:)

同步器

一、RTL代码

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

程序名称:同步器

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

编 写:武书肖

最后更新:2015年4月12日 星期日

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

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 @ (posedge synch_in or posedge rst_q1_q2)

begin

if(rst_q1_q2) q1<=0;

else q1<=1;

end

always @ (posedge clk or posedge rst_q1_q2)

begin

if(rst_q1_q2) q2<=0;

else q2<=q1;

end

always @ (posedge clk or posedge rst)

begin

if(rst) synch_out<=0;

else synch_out<=q2;

end

endmodule

二、RTL Netlist

综合出来的RTL 网表和电路要求一致。

三、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

四、仿真结果

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

本文标签: 时钟信号脉冲宽度