FPGA的入门学习笔记
文章平均质量分 73
Fairy Blossom
一只正在学习FPGA的小蜗牛
展开
-
Xilinx_IESD204B手册《pg066-jesd204》阅读(2)
上面关于计算N的公式可不可以理解为:一个传输周期指的是接收方和检测到SYSREF信号到全部将数据接收完毕(N个LMFC后)。(是从接收方的角度来定义T)另一端是发送方输出数据延迟到线路延迟再到接收方接收数据延迟(这些延迟都是相对于SYSREF)外加发送方检测到SYSREF延迟(是从发送方角度来定义)。发送数据要比接收数据用的延迟少,这样才可以保证数据完整接收。大于N*LMFC且小于(N+1)*LMFC表示是在N个之后但是要在N+1个之前。这里提到的是:当经过N个LMFC后在第N+1个LMFC前数据被接收。原创 2023-06-29 10:20:01 · 481 阅读 · 1 评论 -
Xilinx_IESD204B手册《pg066-jesd204》阅读(1)
LMFC的值是((F*K/4)-1),当这个计算器大于发送器编码时间+线路传输时间+接收器解码时间,那么接收数据将在下一个LMFC来临之前从接收器的SERDES传输出去将数据送入FIFO中。,所以SYSREF的时钟周期也必须是4字节的时钟周期倍数,具体实现手段是在核心板时钟的下降沿(默认,也可以字节设计)捕获SYSREF,在时钟上升沿和SYSREF在设备的边缘对齐。这一阶段(发4个多帧)工作是对齐链路的所有通道,验证链路参数(第二帧会会包含配置信息),确定帧和多帧边界在接收器的输入数据流位置。原创 2023-06-28 17:08:24 · 1727 阅读 · 1 评论 -
ug473[BRAM和FIFO介绍手册]学习笔记(2)
FIFO由RAM配置而来。7系列中配置FIFO不需要额外的CLB组成计数器,比较器,状态转换标志位。所以通过将地址转化为格雷码,再把格雷码同步到另一个时钟域,以此来作为空满状态的检测。当一个二进制计数值从一个时钟与同步到另一个时钟域时,可能有很多位同时变化,在同一个时钟沿同步多个信号的变化会带来。almost_full和almost_empty可以配置在FIFO地址范围的几乎任何位置。在复位期间,是将读写地址指针指向首地址处,而不是把内部数据清零。但是需要注意的是独立的读写宽度的配置需要额外的CLB.原创 2023-04-08 23:05:19 · 325 阅读 · 0 评论 -
ug473[BRAM和FIFO介绍手册]学习笔记(1)
当两个端口都对同一地址进行读的时候,两个端口都可以成功读。当两个端口对同一地址写不同数据的时候存储器中会被写入不确定的数据,当同一地址一个端口读一个端口写时,写一定会成功但是读出的数据会变化。一般情况下,在读写地址不发生冲突时,我们将写状态设置为NO_CHANGE.因为这一工作状态最节能。而read_first模式我们一般在功能需要时或者读写地址会发生冲突时使用。关于WE和EN:在两者都有效的时候进行写操作,只有EN 有效的时候进行读操作。原创 2023-04-08 20:20:59 · 789 阅读 · 0 评论 -
DDR3(AXI接口例程)知识点笔记
即如果芯片的数据位宽是16bit的话那么接口数据位宽是32bit,64bit以及128bit。因为 L-Bank一次就存取两倍于芯片位宽的数据,所以芯片至少也要进行两次传输才可以。我认为芯片位宽就是DDR3中bank中每个地址存储的数据的位宽,这个是芯片型号以及确定的,是DDR3存储的最小单位位宽。②根据DDR突发传输类型的选择,当选择类型是INCR(没传输一次地址增加一次)其突发长度在1-256之间(AXI中规定)但是DDR是2,4,8。要一定注意的是这里的突发长度一定不要DDR的突发长度混淆。原创 2023-03-09 11:34:02 · 3250 阅读 · 4 评论 -
FPGA与CYUSB3014实现USB3.0数据传输学习笔记(1)
PKTEND:包结束信号,外部逻辑控制,在正常情况下,外部逻辑向FX2的FIFO中写数,当写入FIFO端点的字节数等于FX2固件设定的包大小时,数据将自动被打成一包进行传输,但有时外部逻辑可能需要传输一个字节数小于FX2固件设定的包大小的包,这时,它只需在写入一定数目的字节后,声明此信号,此时FX2硬件不管外部逻辑写入了多少字节,都自动将之打成一包进行传输。当SLWR#有效时,在时钟上升沿数据被写入FIFO.在vivado写的时候可以认为写使能和数据是同时的不需要提前拉起(和一般fifo一样)。原创 2023-02-28 20:22:55 · 3358 阅读 · 0 评论 -
差分信号,单端信号和FPGA中的时钟总结
还提到了一个问题是当外部传输数据和随路时钟传给FGPA时,随路时钟和传入数据有满足建立时间关系,但是进来以后介入到BUFG上后clk_in和clk_reg之间就会一定延迟,这样如果将传输进来的时钟直接用BUFG并使用在采集数据时会出现因为建立时间关系不对等的采集错误问题。同时,差分信号的接收端是在n/p发生正负跳变的交叉点。所有的时钟尽量都要使用全局的时钟树资源,如果全局时钟资源不够,需要用到长线资源或本地走线资源的话,多留意时序报告中的clock skew,注意保持时间(hold time)问题。原创 2023-02-24 20:46:40 · 4076 阅读 · 0 评论 -
IMX264MYR-C手册笔记(1)
指定传感器从地址,然后指定地址(M),将传感器索引值设置为M,然后生成Start Condition。接下来,当Master发送带有读请求的从地址时,传感器立即输出一个Acknowledge,随后输出SDA上的索引地址数据。当Master接收到数据后输出一个Acknowledge时,传感器内部的索引值增加,下一个地址的数据在SDA上输出。主站接收到数据后,生成Negative Acknowledge和Stop Condition以结束通信,但索引值增加,因此可以通过向从站发送读请求来读取下一个地址的数据。原创 2023-02-19 22:00:30 · 1040 阅读 · 0 评论 -
IIC学习笔记(1)
读:控制器发送START-> 控制器发送7位地址外加读写标志位->控制器释放SDA-匹配到控制器发出的地址的target发送应答->target继续占用SDA线向控制器发送8bit数据->target释放SDA控制器获取拉低SDA发送应答acknowledge->target继续占用SDA线向控制器发送8bit数据->target释放SDA控制器获取拉低SDA发送应答non--acknowledge>控制器发送STOP信号。SDA and SCL signals——通过电流源或者上拉电阻连接至正电压;原创 2023-02-18 22:16:37 · 411 阅读 · 0 评论 -
DDR3(MT41J128M16)手册学习笔记
如果在app_en asserted之后,MIG未声明该信号,则必须重试当前的请求,在以下三种情况下,MIG不会声明app_rdy的输出:内存初始化未完成;MIG输入,该输入表示当前周期中app_wdf_data[]总线上的数据是当前请求写入到外部DDR存储器的数据。,之后声明app_en将该请求提交给MIG,在MIG接收之后会发送app_rdy确认握手成功。MIG输出,读取的数据有效。原创 2023-02-17 21:29:21 · 2380 阅读 · 0 评论 -
AXI知识点总结(4):补充原子访问(Atomic Accesses)
如果在排他写时,该地址没有被相同的AWID值监视,这表明以下情况之一:自排他读访问以来,该位置已被更新;在这些情况下,独占写都不能更新地址位置,下级必须返回ok响应而不是EXOKAY响应。:①主机从某地址排他读取②主机对这一地址进行排他写,AWID和ARID要对应③如果在排他访问写后没有其他主机在写就证明排他访问成功,否则是失败。因此,若将某一部分的32bits当做一个原子,如果执行原子访问时就不能将突发读变成16bits。:原子不可分割,因此原子访问具有。从manager的角度看排他访问。原创 2023-02-16 14:26:12 · 854 阅读 · 0 评论 -
AXI知识点总结(3):补充信号握手的依赖关系
主机不可以等从机拉高AWREDAY和WREADY在拉高主机的AWVALID和WVALID,从机可以在主机拉高AWVALID和WVALID之后或者之前就拉高AWREADY。从机必须在主机拉高WVALID和WREADY之后,才可以拉高BVALID,从机必须等待主机拉高WLAST之后,才可以拉高BVALID。BVALID是从机发出的,表示写响应通道信号有效,BREADY是主机发出,表示接收写响应通道上的传输。读事务:双箭头表示只有在肩头起始的信号拉高后才可以拉高,存在依赖关系,单箭头不存在依赖关系。原创 2023-02-15 13:24:13 · 1443 阅读 · 1 评论 -
AXI知识点总结(2)
Cache的基本原理是通过时间局部性(使用过的数据之后还可能使用到)和空间局部性(使用的数据周围的数据也可能使用)预测CPU下一次要用到的数据将他们提前放到Cache中。关于修改以后的解释在手册的A4-64有详细解释,当[1]拉高拉低的时候对突发传输的地址,大小,长度和类型可以改变或者不改变,但是AxLOCK和AxPROT是无法改变的。Cache称为高速缓冲存储器,位置介于CPU和存储器之间,设置原因是CPU太快了,内存以下无法满足CPU的访问速度,如果没有Cache的话,处理器大部分时间都是在等待数据。原创 2023-02-15 12:39:36 · 719 阅读 · 0 评论 -
AXI知识点总结(1)
就A-57第二幅图个人理解是总线是64bits,若首地址是0x07,那么0x00——0x06就这8*7bits是无法传输的,总线上只有56:63可以传输,这不足一次要求的传输的32bits但是也能传——方法是首次传输会填充使其对其,可以通过WSTRB来表示数据是否有效,第二次传输就正常了。分为AXI4(高性能内存映射:内存映射接口对一个地址可以进行256突发传输),AXI4-Lite(简单低吞吐量内存映射),AXI-Stream(高速流数据:允许无限大小的数据突发传输,没有地址,不是内存映射)原创 2023-02-14 14:57:43 · 4150 阅读 · 0 评论 -
有关SPI的知识点总结
举个栗子:当两个全配置成1时,表示空闲状态是1高电平,在第二个跳边沿进行数据采样;也就是当时钟信号第一次由高变成低时数据输出,再由低变成高时数据采样偶数次边沿采样(),即每个周期的上升沿数据采样。SCLK串行时钟信号由主设备产生 CS/SS 从设备片选信号 主设备控制。MISO 主设备输入连从设备输出 MOSI 主设备输出从设备输入。分为主从两种模式,有一个主设备和多个从设备,通过片选信号管理从设备。存在两个特殊的寄存器配置:CPOL CPHA。SPI接口的读写操作都是由主设备发起的。原创 2023-02-12 16:32:43 · 478 阅读 · 0 评论 -
DDR3学习笔记(二)
接上一篇,介绍mem_burst程序。【图片来源于黑金】通过vivado自带的IP core可生成一个MIG IP控制器.我们的任务就是设计程序控制与DDR相连的MIG 以及用户的逻辑程序,如下图需要设计mem_burst和mem_tset封装程序【mem_burst的设计思路】内存读取读取内存需要以上粉色框标记的部分输入输出。大致思路是:状态机:IDLE——MEM_READ——MEM_READ_WAIT——READ_END①用户传来rd_burst_req【请求读】原创 2022-05-11 21:34:27 · 902 阅读 · 0 评论 -
DDR3的学习笔记(一)
写在前面—— DDR3的英文全称是Double-Data-Rate Three Synchronous Dynamic Random Access Memory——第三代双倍数据率同步动态随机存取存储器。外观看上去就是内存条,属于SDRAM。简单介绍他的原理和功能就是:通过预读取和CQS的产生以及DLL的延时功能传输2倍于芯片位宽的数据。一、工作流程的介绍【下面图片来源于网络】①工作时首先进行芯片的初始化,这一点和SDRAM的MRS一样。②如上图(左),进行Ban...原创 2022-05-10 16:22:53 · 1366 阅读 · 0 评论 -
vivado中实现VGA驱动学习笔记
一、原理图原理图应用小梅哥上课的笔记的截图【行扫描和场扫描的图一样】二、行扫描和场扫描的关系以显示像素位640*480的图像为例,每一行显示640个像素,一共显示480行。行扫描相当于显示一行的像素,场扫描显示列的像素。没当一行扫描完事(计数器计满)列扫描的计数器增一(列计数器未满的情况下),直到记满列计数器(480).这样的行和列组成一个二维矩阵,只有当二维矩阵都为visible area的时段时才会显示图像。下面以一个网上的图为例,这个图非常形象。...原创 2022-05-09 16:49:48 · 866 阅读 · 0 评论 -
DDS在vivado中的实现
一、注意事项:1、在matlab中生成正弦波的时候要加个上移系数,如果不加的话存在小于0的数会溢出,最后还原不出来完成波形,下面是sin的还有三角波或者锯齿波用sawtooth在matlab中实现就行。clc;clear all;N=2^12;A=2^8;f=1;F1=0;F2=256;n=[0:N-1];s1=round(A*sin(2*pi*n/N+pi*F1)+F2); fild=fopen('wave_dds_sin_4096.coe','wt');fprint...原创 2022-05-08 12:22:03 · 2082 阅读 · 0 评论