同步器

同步器

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



三、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. 仿真结果



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


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值