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
四、仿真结果
由仿真结果可看出,输入是一个小于时钟周期的窄脉冲异步信号,输出是宽度为一个时钟周期的同步脉冲信号,满足设计要求。
版权声明:本文标题:同步器 verilog 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1703430009a54714.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论