异步时钟的同步化,俗称“慢打一拍",寄存一拍
来源:互联网 发布:旧版淘宝2016下载安装 编辑:程序博客网 时间:2024/04/25 09:39
1.输入信号为什么要寄存
一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。
always @ (posedge inputs)
begin
...
end
2.所有信号都需要寄存两拍吗
如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),必须寄存两拍。第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。
如果这个输入信号来自于同一时钟域且需要用到跳变沿,需要寄存一拍。否则时序报告多半会报clock skew > data delay,造成建立/保持时间的冲突。
总而言之,五条原则:
1.全局时钟的跳变沿最可靠。
2.来自异步时钟域的输入需要寄存一次以同步化,再寄存一次以减少亚稳态带来的影响。
3.不需要用到跳变沿的来自同一时钟域的输入,没有必要对信号进行寄存。
4.需要用到跳变沿的来自同一时钟域的输入,寄存一次即可。
5.需要用到跳变沿的来自不同时钟域的输入,需要用到3个触发器,前两个用以同步,第3个触发器的输出和第2个的输出经过逻辑门来判断跳变沿。
给出一个verilog模板:
always @ (posedge Clk) //不对输入信号进行寄存
begin
if (inputs)
begin
...
end
...
end
always @ (posedge Clk) //对输入信号寄存一拍
begin
inputs_reg <= inputs;
if (inputs_reg == 1'b0 && inputs == 1'b1)
begin
...
end
...
end
always @ (posedge Clk) //对输入信号寄存三拍
begin
inputs_reg1 <= inputs;
inputs_reg2 <= inputs_reg1;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)
begin
...
end
...
end
一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。
always @ (posedge inputs)
begin
...
end
2.所有信号都需要寄存两拍吗
如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),必须寄存两拍。第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。
如果这个输入信号来自于同一时钟域且需要用到跳变沿,需要寄存一拍。否则时序报告多半会报clock skew > data delay,造成建立/保持时间的冲突。
总而言之,五条原则:
1.全局时钟的跳变沿最可靠。
2.来自异步时钟域的输入需要寄存一次以同步化,再寄存一次以减少亚稳态带来的影响。
3.不需要用到跳变沿的来自同一时钟域的输入,没有必要对信号进行寄存。
4.需要用到跳变沿的来自同一时钟域的输入,寄存一次即可。
5.需要用到跳变沿的来自不同时钟域的输入,需要用到3个触发器,前两个用以同步,第3个触发器的输出和第2个的输出经过逻辑门来判断跳变沿。
给出一个verilog模板:
always @ (posedge Clk) //不对输入信号进行寄存
begin
if (inputs)
begin
...
end
...
end
always @ (posedge Clk) //对输入信号寄存一拍
begin
inputs_reg <= inputs;
if (inputs_reg == 1'b0 && inputs == 1'b1)
begin
...
end
...
end
always @ (posedge Clk) //对输入信号寄存三拍
begin
inputs_reg1 <= inputs;
inputs_reg2 <= inputs_reg1;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)
begin
...
end
...
end
0 0
- 异步时钟的同步化,俗称“慢打一拍",寄存一拍
- FPGA异步时钟同步化
- S3C6410同步/异步时钟配置
- 时序设计中的异步时钟寄存器同步
- FPGA异步时钟设计中的同步策略
- 时钟同步的含义
- 同步化,同步,异步化,异步操作的区别
- 同步化,同步,异步化,异步操作的区别
- 寄存
- 结绳法:文章详细解读(异步时钟设计的同步策略)(五)
- 以太网的时钟同步(1588时钟)
- FPGA基础知识19(FPGA异步时钟设计中的同步策略 异步时钟 打两拍 握手机制)
- rac的时钟服务器同步
- 什么是同步、异步 (一)
- Godaddy的网页寄存选择
- 委托,线程,同步,异步的学习(一)
- okhttp 一 概述及同步和异步请求的实现
- Generator 异步操作的同步化写法
- java 多线程读取多个文件 和 不用线程读取多个文件
- codility minAveTwoSlice
- 通过mmap函数快速实现文件复制
- Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果
- Android单元测试时如何使用log查看输出结果
- 异步时钟的同步化,俗称“慢打一拍",寄存一拍
- android studio右下角没有分支便签解决办法
- 从C调用Lua
- C语言点滴记录
- 简单网络数据获取与连接判断
- 最小生成树之算法记录【prime算法+Kruskal算法】【模板】
- android studio 怎么调整字体
- Android 单元测试链接整理
- hdu5361