uisrc 发表于 2024-1-7 13:30:53

14 Verilog语法_同步与异步设计

软件版本:无操作系统:WIN10 64bit硬件平台:适用所有系列FPGA登录"米联客"FPGA社区-www.uisrc.com视频课程、答疑解惑!1概述本小节主要讲解Verilog语法的同步与异步设计,需要掌握同步时钟和异步时钟的设计方法。2同步时钟数字电路设计中,一般认为,频率相同或频率比为整数倍、且相位相同或相位差为固定的两个时钟称为同步时钟。换句话说,时钟同源且频率比为整数倍的两个时钟为同步时钟。大致有三类同步时钟:(1)同源同频率同相位时钟频率和相位均相同,是同步的。时钟间数据传输只要满足正常的建立时间和保持时间即可,不需要特殊的同步设计。(2)同源同频不同相位两个时钟同频但不同相位时,只要相位差保持固定,也可以认为是同步的。因为只要控制两个时钟间传输的数据延迟在合理范围内,就不会导致时序问题。固定的相位差可以理解为同源时钟下两个时钟因路径不同而导致的偏斜。(3)同源不同频但存在整数倍分频比一个时钟往往是另一个时钟的分频,即便存在相位差也是固定的。当单 bit 信号从慢时钟域传递到快时钟域时,因为同源,只要满足建立时间和保持时间,快时钟域总会采集到从慢时钟域传递来的信号。例:如果要求 clk_100m 域的信号data_2只需要持续一个时钟周期,则需要对data_1进行上升沿检测。例:
reg     data_ff ;always @(posedge clk_100m) //按照clk_100m的时钟进行采样begin   data_ff<= {data_ff, data_1} ; //对data_1的数据进行寄存End //data_ff表示最新采样的数据,!data_ff为上一个时钟周期采样的数据assign data_2 = !data_ff && data_ff; //最新的电平为1,之前的电平为0,判断为上升沿检测


当单 bit 信号从快时钟域传递到慢时钟域时,只要慢时钟域能安全采集到从快时钟域传递来的信号,就不存在异步问题。例:但是如果快时钟域信号过窄,慢时钟域可能会漏掉该信号,如上图 data_1 到 data_11 的传输。此时就需要对快时钟域的窄脉冲信号进行展宽。例:
reg     data_ff ;reg          data_1f ;always @(posedge clk_100m) //按照clk_100m的时钟进行采样begin   data_ff<= {data_ff, data_1} ; //对data_1的数据进行寄存endalways @(posedge clk_50m) //按照clk_50m的时钟进行采样,属于慢速时钟域采样begindata_1f<= |data_ff ; //窄脉冲信号进行缩减或操作endassign data_11 = data_1f ; //data_1f 采样信号赋值给data_11


3异步时钟异步时钟主要分为三类:(1)非同源时钟由两个不同的时钟源产生的两个时钟是异步的。即便两个时钟频率相同,但是也不能保证每次上电后两者的相位或相位差是相同的,所以信号间的传输与时钟关系是不确定的。(2)同源但频率比不是整数倍此时两个时钟间相位差也可能会有多个,例如同源的 63MHz时钟和24MHz 时钟,它们之间也会出现多个相位差,一般情况下进行异步时钟处理。(3)同源虽频率比为整数倍但不满足时序要求上一小节介绍同步时钟时,当信号从快时钟域传递到慢时钟域时,只要慢时钟域能安全采集到从快时钟域传来的信号,就不存在异步问题。但如果信号在快时钟域翻转速率过快,慢时钟域可能不会安全的采集到从快时钟域传来的信号,这可以认为是异步问题。
页: [1]
查看完整版本: 14 Verilog语法_同步与异步设计