Verilog跨时钟域处理之脉冲同步电路详解
创作时间:
作者:
@小白创作中心
Verilog跨时钟域处理之脉冲同步电路详解
引用
CSDN
1.
https://m.blog.csdn.net/galaxyerkw/article/details/127619676
在数字电路设计中,跨时钟域处理是一个常见的挑战。本文将详细介绍如何使用Verilog实现脉冲同步电路,该电路能够将一个时钟域的脉冲信号准确地转换到另一个时钟域。
跨时钟域处理的概念
在数字电路设计中,跨时钟域处理是一个常见的挑战。当两个时钟域需要进行数据传输时,必须确保数据在目标时钟域中能够正确地被采样和处理。本文将详细介绍如何使用Verilog实现脉冲同步电路,该电路能够将一个时钟域的脉冲信号准确地转换到另一个时钟域。
脉冲同步电路的概念和框架
从A时钟域提取一个单时钟周期宽度脉冲,然后在新的时钟域B建立另一个单时钟宽度的脉冲。A时钟域的频率是B时钟域的10倍;A时钟域脉冲之间的间隔很大,无需考虑脉冲间隔太小的问题。
电路的接口如下图所示。data_in是脉冲输入信号,data_out是新的脉冲信号;clk_fast是A时钟域时钟信号,clk_slow是B时钟域时钟信号;rst_n是异步复位信号。
脉冲同步电路 解析和代码
本电路设计三个过程:
1. 脉冲输入时,将“脉冲信号转化为电平信号”:当检测到data_in拉高(持续一周期的脉冲),pulse_sig记录。
//脉冲信号转电平信号,参照快时钟
//检测到一个clk的脉冲,在pulse_sig记录一个1。
reg pulse_sig;
always@(posedge clk_fast or negedge rst_n)
begin
if(!rst_n) pulse_sig <= 0;
else pulse_sig <= (data_in) ? ~pulse_sig : pulse_sig;
end
2. clk_fast向clk_slow切换时,clk_slow打两拍作为缓冲。
//慢时钟打两拍
reg pulse_sig_clap_1;
reg pulse_sig_clap_2;
always@(posedge clk_slow or negedge rst_n)
begin
if(!rst_n) begin
pulse_sig_clap_1 <= 0;
pulse_sig_clap_2 <= 0;
end
else begin
pulse_sig_clap_1 <= pulse_sig;
pulse_sig_clap_2 <= pulse_sig_clap_1;
end
end
3. 输出端还原一次脉冲,即将“电平信号转化为脉冲信号”。
//电平信号转脉冲信号,参照慢时钟
reg pulse_sig_convert; //准备转化为脉冲输出的电平信号
always@(posedge clk_slow or negedge rst_n)
begin
if(!rst_n) pulse_sig_convert <= 0;
else pulse_sig_convert <= pulse_sig_clap_2;
end
/*
如果接收到脉冲,pulse_sig、接下来打两拍的触发器、准备转化的触发器内的值分别为:
100 0->010 0->001 0(输出脉冲)->000 1(输出脉冲)
*/
assign dataout = ( (!pulse_sig_convert && pulse_sig_clap_2) || (pulse_sig_convert && !pulse_sig_clap_2)) ? 1 : 0;
完整代码:
module pulse_detect(
input clk_fast ,
input clk_slow ,
input rst_n ,
input data_in ,
output dataout
);
//脉冲信号转电平信号,参照快时钟
//检测到一个clk的脉冲,在pulse_sig记录一个1。
reg pulse_sig;
always@(posedge clk_fast or negedge rst_n)
begin
if(!rst_n) pulse_sig <= 0;
else pulse_sig <= (data_in) ? ~pulse_sig : pulse_sig;
end
//慢时钟打两拍
reg pulse_sig_clap_1;
reg pulse_sig_clap_2;
always@(posedge clk_slow or negedge rst_n)
begin
if(!rst_n) begin
pulse_sig_clap_1 <= 0;
pulse_sig_clap_2 <= 0;
end
else begin
pulse_sig_clap_1 <= pulse_sig;
pulse_sig_clap_2 <= pulse_sig_clap_1;
end
end
//电平信号转脉冲信号,参照慢时钟
reg pulse_sig_convert; //准备转化为脉冲输出的电平信号
always@(posedge clk_slow or negedge rst_n)
begin
if(!rst_n) pulse_sig_convert <= 0;
else pulse_sig_convert <= pulse_sig_clap_2;
end
/*
如果接收到脉冲,pulse_sig、接下来打两拍的触发器、准备转化的触发器内的值分别为:
100 0->010 0->001 0(输出脉冲)->000 1(输出脉冲)
*/
assign dataout = ( (!pulse_sig_convert && pulse_sig_clap_2) || (pulse_sig_convert && !pulse_sig_clap_2)) ? 1 : 0;
endmodule
热门推荐
多久进行一次金融风险评估比较合适?
咽痛中医针灸案例分享
新能源车牌可以过户给别人吗?各地政策详解
天府通卡使用指南:种类、优惠及服务说明
Excel格式刷使用指南:从基础到进阶技巧详解
怎么用Excel把word批量命名
川椒种业:科学种植与管理,助力辣椒高产
商纣王与姬昌:一场关乎命运的较量
含氟牙膏还是不含氟牙膏?一文读懂牙膏选购指南
买车预算指南:避免面子消费陷阱
股价市盈率以及每股收益的关系
个人之间车辆过户流程
王者荣耀匹配机制优化:上分体验即将全面升级
安徽马鞍山最有名的九大特色美食,第七道是面食,吃法却像火锅!
蔡司人工晶体和博士伦谁的好?从价格|优缺点|适合人群|设计区别对比来选择!
探究古代华山论剑的真相是什么?历史上有这件事情吗?
数字人才——内容策略师(Content Strategist)
马鞍山的美食有哪些?
如何到银行咨询利率问题
中规中矩的黎元洪,注定活成一个过客
价值投资者经验之谈:投资股市为什么一定要买龙头股?
闯黄灯会被拍照吗
送您九大名家的20幅喜鹊,祝您2025喜上加喜!
北交所,77股涨幅翻倍!回调后,市场怎么走?
5个中医减肥方法:辨证减肥,饮食调理!
都有哪些纤维面料
裁判文书网的反爬虫技术详解
长得好看的人一定更聪明?| 你被心理学“光环效应”影响了吗?
未成年人保护 | 你知道不同年龄段的未成年人都受哪些法律保护吗?
高效规划减肥:用管理软件记录饮食与运动,提升减重效果