FPGA跨时钟域握手信号的结构
FPGA跨时钟数据传输,是我们经常遇到的问题的,下面给出一种跨时钟握手操作的电路结构。先上图

先对与其他人的结构,这个结构最大的特点是使用 req 从低到高或者高到低的变化 来表示DIN数据有效并开始传输。并且同过判断 req与ack信号是否相等就可以判断传输是否完成。当req !=ack时表示正在传输,不可以发起新的传输操作。当req=ack时表示传输完成,可以开始新的传输过程。
并且这样的结构在req传输发生亚稳态时也可以有效的传输信号,可以适应任意时钟域之间的数据传输。仿真图如下

代码:
module handshack2
#(
parameter DATA_SIZE = ,
parameter SREG_LENG =
)
(
input rsta,
input clka,
input reqa,//变化沿表示数据有效
input [DATA_SIZE-:] dina,
output acka, input rstb,
input clkb,
output reg rdyb,
output reg [DATA_SIZE-:] doutb
); reg req_ra;
reg [DATA_SIZE-:] din_ra;
reg[SREG_LENG-:] ack_ra; reg[SREG_LENG-:] req_rb; //clka
always@(posedge clka)begin
if(rsta)begin
req_ra <= ;
end else begin
req_ra <= reqa;
end
din_ra <= dina;
end always@(posedge clka)
if(rsta)begin
ack_ra <= ;
end else begin
ack_ra <= {ack_ra[SREG_LENG-:], req_rb[SREG_LENG-]};
end assign acka = ack_ra[SREG_LENG-]; //clkb
always@(posedge clkb)
if(rstb)begin
req_rb <= ;
end else begin
req_rb <= {req_rb[:], req_ra};
end always@(posedge clkb)begin
if(req_rb[SREG_LENG-]^req_rb[SREG_LENG-])begin
doutb <= din_ra;
end
rdyb <= req_rb[SREG_LENG-]^req_rb[SREG_LENG-];
end endmodule
测试脚本:
module tst_handshack2;
// Inputs
reg rsta;
reg clka;
reg reqa;
reg [:] dina;
reg rstb;
reg clkb;
// Outputs
wire acka;
wire rdyb;
wire [:] doutb;
// Instantiate the Unit Under Test (UUT)
handshack2 uut (
.rsta(rsta),
.clka(clka),
.reqa(reqa),
.dina(dina),
.acka(acka),
.rstb(rstb),
.clkb(clkb),
.rdyb(rdyb),
.doutb(doutb)
);
initial begin
clka = ;
#
forever
# clka = ~clka;
end
initial begin
rsta <= ;
dina <= ;
reqa <= ;
#;
dina <= ;
reqa <= !reqa;
#;
wait( acka == reqa)
#;
dina <= ;
reqa <= !reqa;
end
initial begin
#2.7;
clkb = ;
#
forever
# clkb = ~clkb;
end
initial begin
rstb <= ;
#;
end
endmodule
FPGA跨时钟域握手信号的结构的更多相关文章
- FPGA跨时钟域处理方法
文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...
- 基于FPGA的跨时钟域信号处理——专用握手信号
在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同 ...
- FPGA基础学习(3) -- 跨时钟域处理方法
文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...
- FPGA中亚稳态相关问题及跨时钟域处理
前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolut ...
- cdc跨时钟域处理-结绳握手法
参考文档 https://blog.csdn.net/u011412586/article/details/10009761 前言 对于信号需要跨时钟域处理而言,最重要的就是确保数据能稳定的传送到采样 ...
- 跨时钟域设计【一】——Slow to fast clock domain
跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HD ...
- 异步FIFO跨时钟域亚稳态如何解决?
跨时钟域的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域 ...
- 跨时钟域设计【二】——Fast to slow clock domain
跨时钟域设计中,对快时钟域的Trigger信号同步到慢时钟域,可以采用上面的电路实现,Verilog HDL设计如下: // Trigger signal sync, Fast clock dom ...
- 【iCore、iCore2、iBoard例程】【异步FIFO跨时钟域通信(通过ARM 读FPGA FIFO)】
欢迎访问电子工程师学堂,以便了解更多内容:http://www.eeschool.org 一.本实验基于iCore2 完成,通过简单改动,即可用在 iCore 核心板.iBoard 电子学堂上. iC ...
随机推荐
- [剑指Offer]29-顺时针打印矩阵-Java
题目链接 https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&t ...
- 【C++】undered_map的用法总结(1)
1.介绍 unordered_map是一个关联容器,内部采用的是hash表结构,拥有快速检索的功能. 1.1 特性 关联性:通过key去检索value,而不是通过绝对地址(和顺序容器不同)无序性:使用 ...
- 推荐几个可以从google play(谷歌应用商店)直接下载原版APP的网站
http://apk-dl.com/ https://apkpure.com/ http://apk-downloaders.com
- python 将mysql数据库中的int类型修改为NULL 报1366错误,解决办法
gt.run_sql()是用pymysql 封装的类 distribution_sort_id type: int目的:将此字段值全部修改为NULL g=2gt.run_sql("updat ...
- docker环境下solrcloud+zookeeper集群部署教程
前言:两个月前的16年11月份完成的配置,使用的solr6.1和zookeeper3.4,刚刚写成blog,目前版本可能有小版本的变化. 本例完成结果为:在docker环境下部署solrcloud集群 ...
- [Draft]iOS.Architecture.16.Truth-information-flow-and-clear-responsibilities-immutability
Concept: Truth, Information Flow, Clear Responsibilities and Immutability 1. Truth 1.1 Single Source ...
- 201771010134杨其菊《面向对象程序设计(java)》第十七周学习总结
第十七周学习总结 1. 程序是一段静态的代码,它是应用程序执行的蓝本.进程是程序的一次动态执行,它对应了从代码加载.执行至执行完毕的一个完整过程.操作系统为每个进程分配一段独立的内存空间和系统资源,包 ...
- 部落划分Group[JSOI2010]
--BZOJ1821 Description 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落之间则经常发生 ...
- 01-SpringMVC 原理
说明:所有代码调式的环境:开发环境idea,jdk7,tomcat8.5.27,数据库MySQL5.1,spring3.2 SpringMVC 1.什么是SpringMVC? springmvc是sp ...
- rds
数据库:提供数据的高可用保证,至少要用双节点(一主已备,经典高可用架构:采用基于binlog的数据复制技术维护数据库的可用性和数据一致性.同时,高可用版的性能也可以满足业务生产环境的需求,配置上采用物 ...