本篇文章仅用于个人学习,如有雷同,我抄他的。
跨时钟域是每个FPGA初学者都会遇到的问题,跨时钟域分情况有以下几种:
首先谈谈单bit数据的跨时钟域问题,当从慢时钟域到快时钟域时,常用方法为打两拍。首先快时钟域是肯定可以采集到慢时钟域的数据的,所以需要解决的就是亚稳态的问题。打两拍的基本原理就是,数据(处于10Mhz时钟下)在跳变过程中不是瞬时的,总有一个跳变时间。如果在clk(处于125Mhz下)的上升沿采集到了数据的跳变过程时,此时的数据是不确定的,可能是1,可能是0,这就导致了亚稳态的产生。具体如下图所示,图片来自以下博客。
此时Q1的采集就会有很大概率出现亚稳态的问题,但在下个时钟的上升沿就可以采集到一个确定的数值了,此时就可以很大程度上解决亚稳态的问题。顺便记录一个跨时钟域的使能信号的传输方法,具体代码如下。
reg R_data_en ;
reg R_data_en_1 ;
reg R_data_en_2 ;
wire W_data_en ;//125mhz下的使能信号
always@(posedge I_clk_125mhz or I_reset_n)
begin
if (~I_reset_n) begin
R_data_en <= 'b0;
R_data_en_1 <= 'b0;
R_data_en_2 <= 'b0;
end
else begin
R_data_en <= I_data_en ;//I_data_en 是时钟为10mhz下的使能信号
R_data_en_1 <= R_data_en ;
R_data_en_2 <= R_data_en_1;
end
end
assign W_data_en = R_data_en_1 & (!R_data_en);
时序图如下所示,红色表示亚稳态采集的数据是个不确定的值。一般来说,数据延时一个时钟后,R_data_en基本可以满足R_data_en1的建立时间和保持时间的要求。

而后就是单bit数据的快时钟域到慢时钟域的跨时钟域,慢时钟域想采集到快时钟域的数据是非常困难的,因此我们需要对数据进行展宽。
单bit数据大多数都是使能信号或者标志类信号,此时只需要将信号展宽到慢时钟域能采集到的长度即可,一般来说要超过慢时钟域的一个时钟周期长度。如下图所示,如果是第一种情况,慢时钟很明显可以采集的到,但如果是第二种情况,在慢时钟的上升沿,就采集不到输入信号的变化了。

展宽的方式在网上看到许多种 ,比较常用的是结绳法,反馈法。具体参照以下博客。
单bit控制信号的跨时钟域传输_拉钩上吊一百年的博客-CSDN博客
https://blog.csdn.net/qq_42322644/article/details/115725735?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%8D%95bit%20%E8%B7%A8%E6%97%B6%E9%92%9F%E5%9F%9F&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-9-115725735.first_rank_v2_pc_rank_v29&spm=1018.2226.3001.4187
多bit数据的跨时钟域常用方法之一是使用异步FIFO( First Input First Output),在vivado中有许多的IP核可供使用,其中的FIFO IP核就是非常常用的IP核,FIFO的基本使用方法如以下博客。
Vivado IP核fifo使用指南_Kevin-CSDN博客
https://blog.csdn.net/baidu_25816669/article/details/88941458?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163806879416780261961570%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163806879416780261961570&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-88941458.first_rank_v2_pc_rank_v29&utm_term=FIFO+ip&spm=1018.2226.3001.4187 需要注意的几个点是,如果FIFO IP的读写位宽不一致的话,都是先 出/入 的在高位,后出/入 在低位。
跨时钟域有两种实现方案,第一种是边读边写,第二种是分时读写。
1、边读边写:
比如读时钟为100MHz,写时钟为10MHz,便可以让读数据一方进行计数,每计数10个时钟便读出一个数据,反过来,若写时钟为100MHz,读时钟为10MHz,便10个时钟写一个数据。
2、分时读写
分时读写,其实本质就是乒乓操作
FPGA重要的设计思想——乒乓操作_dongdongnihao_的博客-CSDN博客_乒乓操作
https://blog.csdn.net/dongdongnihao_/article/details/80037171?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163808144916780357220465%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163808144916780357220465&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-4-80037171.first_rank_v2_pc_rank_v29&utm_term=%E4%B9%92%E4%B9%93%E6%93%8D%E4%BD%9C&spm=1018.2226.3001.4187 基本原理就是有两个存储单元,比较常用的存储单元为双口RAM(Dual RAM),SRAM,SDRAM,FIFO等。第一个存储周期对第一个存储单元进行写操作,第二个存储周期对第二个存储单元进行写操作,并与此同时对第一个存储单元进行读操作。第三个存储周期对第一个存储单元进行写操作,并对第二个存储单元进行读操作,循环往复。
乒乓操作的优点:
通过“输入数据选择单元”和“输出数据选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有停顿地送到“数据流运算处理模块”进行运算与处理。把乒乓操作模块当做一个整体,站在这个模块的两端看数据,输入数据流和输出数据流都是连续不断的,没有任何停顿,因此非常适合对数据流进行流水线式处理。所以乒乓操作常常应用于流水线式算法,完成数据的无缝缓冲与处理。
当写数据的时钟远慢于读时钟,可以只使用一个存储单元,例如写时钟为10MHz,读时钟为100MHz,每当写入10个数据时,读已经可以读出100个数据了,此时就可以使用一个深度为128的FIFO,读写双方各自计数。我们保持写操作持续不断,每当写数据计数到100时,便开始读数据100个,当读完后便等待下一次写数据计数到100,此时最多同时占用110的深度,仍还有18个空余位置,所以读写操作不会产生冲突导致写数据时产生拥塞,导致数据丢失的问题,其实就等同于乒乓操作中的两个存储单元在同一FIFO中。
如有错漏,后续补充
2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动
FPGA时钟和时钟域时钟树所谓时钟树为FPGA内部资源,分:全局时钟树,区域时钟树,IO时钟树原则上优先使用全局时钟树,在GT接口上使用IO时钟树,一般工具也会对GT时钟加以限制;时钟树使用方式正确的物理连接FPGA会由物理管脚专门用于全局时钟设置,通过查询数据手册可以在PCB设计阶段进行确认,当外部时钟接入此管脚时,工具会自动占有全局时钟树资源,当接入普通信号时不会分配时钟树资源;恰当的代码描述原语的使用,即BUFG的使用,可以将PLL的输出等内部时钟进行全局时钟资源的分配;IO时钟资源需要参考相应接口手册,以ultrascale的GTH为例,其JESD204的时钟方案针对不同的子类会由不同
外部SPIFLASH:MicronN25Q128A13ESE40G(128Mbit(16MByte))FPGA:XC7A100T CPU:Microblaze第一种情况:Microblaze在简单的应用,比如运行LED,IIC,SPI,UART之类的低俗接口驱动,或做一些简单的辅助型工作时,一般生成的applicationelf文件都不大,在10几KB或者几十,百几KB,此时使用FPGA内部的BRAM资源已经足够。XC7A100T本身就有600几KB的BRAM资源。这种情况下直接将硬件流文件和elf文件合并为download.bit文件,在直接烧录到外部SPIFLAH即可。1.Xilinx--
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、设计原理1.DS1302介绍2.闹钟音乐播放原理二、程序设计1.DS1302.h2.ds1302.c3.music.h4.main.c三、电路图四、运行结果1.proteus仿真2.开发板实验五、总结六、附件提示:以下是本篇文章正文内容,下面案例可供参考一、设计原理1.DS1302介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路,它可以对年、月、日、周、时、分、秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V。该芯片采用普通32.768kHz晶振,DS1302工作时功耗很
1FPGA启动流程图1 7SerialsFPGA配置流程1.1DevicePower-Up1.2ClearConfigurationMemory在上电后的任何时间内,可以对Slave-FPGA配置存储器(BlockRAM)进行复位处理。复位方式是将PROGRAM_B信号拉低(下降沿有效)。1.3SampleModePins当复位完成后,INIT_B恢复高电平,Slave-FPGA对M[2:0]模式引脚进行采样,然后开始在CCLK上升沿接收配置数据。1.4Synchronization在接收配置数据前,Slave-FPGA首先进行总线位宽检测。主机发送的配置文件中,“BusWidthAutoDe
ESP32学习笔记(七)复位和时钟目录:ESP32学习笔记(一)芯片型号介绍ESP32学习笔记(二)开发环境搭建VSCode+platformioESP32学习笔记(三)硬件资源介绍ESP32学习笔记(四)串口通信ESP32学习笔记(五)外部中断ESP32学习笔记(六)定时器ESP32学习笔记(七)复位和时钟1.复位2.系统时钟2.1时钟树2.2时钟源从时钟树可以看出时钟源共七种ESP32的时钟源分别来自外部晶振、内部PLL或振荡电路具体地说,这些时钟源为:2.2.1快速时钟PLL_CLK320MHz或480MHz内部PLL时钟XTL_CLK2~40MHz外部晶振时钟,模组板载的是40MHz晶
我正在努力让Rails3应用程序准备好使用时区。我的开发机器在美国东部时间,我托管的服务器在UTC。在我的rspec测试中有没有一种方法可以更改ruby使用的系统时区,这样我就可以使用相同的系统时区运行测试,而不必更改我计算机上的系统时钟?我研究过Delorean和Timecop,它们不是我要找的。我正在寻找类似的东西Time.system_time_zone="UTC"...然后Time.now将返回UTC时间,而不是我的系统时区设置的时间。 最佳答案 before{Time.stub(:now){Time.now.utc}}
我有一个场景,其中一台客户端PC将驱动多个LCD显示器,每个显示器显示一个浏览器窗口。这些浏览器窗口使用jquery显示动画循环中的不同数据。我需要确保两个浏览器可以同步旋转以完全同时旋转,否则它们将在不同时间显示动画。所以我的问题是-我可以触发jquery以根据本地PC时钟交替显示内容吗?例如每次时钟秒==0,显示版本1,每次时钟秒==30,显示版本2等等? 最佳答案 这是(根据我的经验)让计时器尽可能接近时钟时间触发的最精确方法://getcurrenttimeinmsecstonearest30secondsvarmsecs=
我想重置时钟,以便clock.getElapsedTime()给我一个新的时间,从我重置时钟开始(例如,在第二次重新启动游戏关卡/场景时很有用).我在init()和我的游戏循环update()中启动clock=newTHREE.Clock();,我正在使用这个时钟。但是当游戏结束时,我想重置时钟(我不会再次启动关卡,只是将玩家定位回起点,所以我不会启动新时钟)。我怎样才能做到这一点? 最佳答案 坏消息:从r73开始,不可能将THREE.Clock重置为零时间,2015年10月发布。解释如下,唯一可能的解决方法在此答案的末尾。深入研究
文章目录1、行为级与RTL级的区别1.1RTL级(可综合成门级电路)1.2行为级2、关于LUT2.1LUT是什么2.2N维查找表2.3FPGA中的LUT3、`include和条件编译4、写异步D触发器(扬智电子笔试)4.1八位同步D触发器4.2具有异步清零,同步复位信号功能的D触发器5、静态、动态时序分析的优缺点(威盛VIA2003.11.06上海笔试试题)6、采用二选一多路器mux2和inv非门实现异或操作(飞利浦-大唐笔试)7、寄存器和锁存器的区别,为什么多用寄存器,行为级描述中锁存器如何产生8、D触发器实现2分频的Verilog描述(汉王笔试)9、D触发器实现带同步高置数和异步高复位端的