问答 店铺
热搜: ZYNQ FPGA discuz

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

微信扫一扫 分享朋友圈

已有 42 人浏览分享

开启左侧

第十四课 Verilog 语法_同步与异步设计

[复制链接]
42 0
AMD-FPGA课程
AMD课程: 04-FPGA语法和硬件基础 » X
1 概述
       本小节主要讲解 Verilog 语法的同步与异步设计,需要掌握同步时钟和异步时钟的设计方法。

2 同步时钟
       数字电路设计中,一般认为,频率相同或频率比为整数倍、且相位相同或相位差为固定的两个时钟称为同步时钟。换句话说,时钟同源且频率比为整数倍的两个时钟为同步时钟。
大致有三类同步时钟:
(1)同源同频率同相位
时钟频率和相位均相同,是同步的。时钟间数据传输只要满足正常的建立时间和保持时间即可,不需要特殊的同步设计。
(2)同源同频不同相位
       两个时钟同频但不同相位时,只要相位差保持固定,也可以认为是同步的。因为只要控制两个时钟间传输的数据延迟在合理范围内,就不会导致时序问题。固定的相位差可以理解为同源时钟下两个时钟因路径不同而导致的偏斜。
(3)同源不同频但存在整数倍分频比
       一个时钟往往是另一个时钟的分频,即便存在相位差也是固定的。
       当单 bit 信号从慢时钟域传递到快时钟域时,因为同源,只要满足建立时间和保持时间,快时钟域总会采集到从慢时钟域传递来的信号。
       例:
image.jpg
       如果要求 clk_100m 域的信号 data_2 只需要持续一个时钟周期,则需要对 data_1 进行上升沿检测。例:
reg [1:0] data_ff ;
always @(posedge clk_100m)
//按照 clk_100m 的时钟进行采样
begin
data_ff <= {data_ff[0], data_1} ;
//对 data_1 的数据进行寄存
End
//data_ff[0]表示最新采样的数据,!data_ff[1]为上一个时钟周期采样的数据
assign data_2 = !data_ff[1] && data_ff[0];
//最新的电平为 1,之前的电平为 0,判断为上升沿检测
当单 bit 信号从快时钟域传递到慢时钟域时,只要慢时钟域能安全采集到从快时钟域传递来的信号,就不存在异步问题。
例:
image.jpg
       但是如果快时钟域信号过窄,慢时钟域可能会漏掉该信号,如上图 data_1 到 data_11 的传输。此时就需要对快时钟域的窄脉冲信号进行展宽。例:
reg [1:0] data_ff ;
reg data_1f ;
always @(posedge clk_100m)
//按照 clk_100m 的时钟进行采样
begin
data_ff <= {data_ff[0], data_1} ;
//对 data_1 的数据进行寄存
end
always @(posedge clk_50m)
//按照 clk_50m 的时钟进行采样,属于慢速时钟域采样
begin
data_1f <= |data_ff ;
//窄脉冲信号进行缩减或操作
end
assign data_11 = data_1f ;
//data_1f 采样信号赋值给 data_11

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

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

0

关注

10

粉丝

114

主题
精彩推荐
热门资讯
    网友晒图
      图文推荐
        
        • 微信公众平台

        • 扫描访问手机版