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跨时钟域握手信号的结构的更多相关文章

  1. FPGA跨时钟域处理方法

    文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...

  2. 基于FPGA的跨时钟域信号处理——专用握手信号

    在逻辑设计领域,只涉及单个时钟域的设计并不多.尤其对于一些复杂的应用,FPGA往往需要和多个时钟域的信号进行通信.异步时钟域所涉及的两个时钟之间可能存在相位差,也可能没有任何频率关系,即通常所说的不同 ...

  3. FPGA基础学习(3) -- 跨时钟域处理方法

    文章主要是基于学习后的总结. 1. 时钟域 假如设计中所有的触发器都使用一个全局网络,比如FPGA的主时钟输入,那么我们说这个设计只有一个时钟域.假如设计有两个输入时钟,如图1所示,一个时钟给接口1使 ...

  4. FPGA中亚稳态相关问题及跨时钟域处理

    前言 触发器输入端口的数据在时间窗口内发生变化,会导致时序违例.触发器的输出在一段时间内徘徊在一个中间电平,既不是0也不是1.这段时间称为决断时间(resolution time).经过resolut ...

  5. cdc跨时钟域处理-结绳握手法

    参考文档 https://blog.csdn.net/u011412586/article/details/10009761 前言 对于信号需要跨时钟域处理而言,最重要的就是确保数据能稳定的传送到采样 ...

  6. 跨时钟域设计【一】——Slow to fast clock domain

    跨时钟域设计是FPGA设计中经常遇到的问题,特别是对Trigger信号进行同步设计,往往需要把慢时钟域的Trigger信号同步到快时钟域下,下面是我工作中用到的慢时钟域到快时钟域的Verilog HD ...

  7. 异步FIFO跨时钟域亚稳态如何解决?

    跨时钟域的问题:前一篇已经提到要通过比较读写指针来判断产生读空和写满信号,但是读指针是属于读时钟域的,写指针是属于写时钟域的,而异步FIFO的读写时钟域不同,是异步的,要是将读时钟域的读指针与写时钟域 ...

  8. 跨时钟域设计【二】——Fast to slow clock domain

    跨时钟域设计中,对快时钟域的Trigger信号同步到慢时钟域,可以采用上面的电路实现,Verilog HDL设计如下:   // Trigger signal sync, Fast clock dom ...

  9. 【iCore、iCore2、iBoard例程】【异步FIFO跨时钟域通信(通过ARM 读FPGA FIFO)】

    欢迎访问电子工程师学堂,以便了解更多内容:http://www.eeschool.org 一.本实验基于iCore2 完成,通过简单改动,即可用在 iCore 核心板.iBoard 电子学堂上. iC ...

随机推荐

  1. uvm_scoreboard

    http://www.eetop.cn/blog/index.php?uid/13812/action/viewspace/itemid/6826765/php/1 uvm_in_order_comp ...

  2. 【Spring学习】SpringMVC demo搭建

    前言:今天会通过IDEA建立一个SpringMVC的demo项目,在其中会涉及到一些基础模块和相关知识,然后结合这个具体的知识点,理解清楚SpringMVC的框架原理(以图的形式展示),顺藤摸瓜分析源 ...

  3. c/c++一维数组简单介绍

    定义:同一种类型数据的集合 通俗的讲就是,将多个同一种类型的数据按一定的内存顺序写在一起. 注意我的几个关键字“多个”,“同一种”,“一定的内存顺序”.如果理解了这几个关键词,说明你的数组已经掌握了. ...

  4. maven之如何将自己的写的 maven 构件发布到 nexus 私服

    概念:Nexus服务器是一个代码包管理的服务器,可以理解 Nexus 服务器是一个巨大的 Library 仓库.Nexus 可以支持管理的工具包括 Maven , npm 等,对于 JAVA 开发来说 ...

  5. ListBox设置背景色无效的问题。 listview类似

    <Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Template"&g ...

  6. hbase-数据恢复流程

    引用<https://blog.csdn.net/nigeaoaojiao/article/details/54909921> hlog介绍: hlog构建: 从图中可以看出,对于一个hl ...

  7. 第一次面试经历(hr面)

    经过介绍,我有幸去到一家国际背景的广告公司面试前端开发实习生.收到的邮件是复试通知,看来我已经跳过了第一轮面试. 来到hr请我进了一个小间坐下里填求职书,里面有各种个人信息,有兴趣爱好,有工作经历,以 ...

  8. day 14:深浅copy,数据结构 ,函数,set集合,变量作用域、返回值

    本节内容: 1,深浅copy 2,数据结构 3,函数 4,变量作用域 5,返回值,return 一.深浅copy 首先理解当给变量赋值的时候,是给变量存在值所在的内存地址 a = 10000 b = ...

  9. 结对项目——四则运算GUI项目

    一.项目地址:https://git.coding.net/lvgx/wsz.git 二.PSP: PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min) Plannin ...

  10. 博客1--tensorflow的图像基本处理操作

    话不多,具体内容在开源中国里我的博客:https://my.oschina.net/u/3770644 代码: #!/usr/bin/env python# -*- coding:utf-8 -*-# ...