自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 DDR3AXI4接口读写仿真

然后就是本次仿真最头疼也是最简单的问题,如下图所示,其他错误改正后可以进行仿真,但是我的s_axi_awready信号总是在s_axi_awvalid拉高的同时马上拉低,导致写地址通道不能完成握手,困扰我两天半后终于让我发现了问题,问题也很简单,读写控制模块中的复位信号是由MIG ip核输出的,而这个复位信号是高电平有效信号,我平时用的都是低电平复位信号,因此才会出现这种问题,浪费了好长时间,希望自己以后可以仔细一点,同时以后一定要搞清楚每个信号的来源和作用,防止这种错误再发生。

2024-09-14 16:04:39 1039

原创 AXI4主机测试

设计思路:本次设计的主要目的是验证AXI4_FULL总线的时序,并且提升对AXI4_FULL总线协议的理解,因此可以采用状态机来控制,先向一个地址写入数据,然后读出该地址的数据验证数据的正确性,如果没有错再向下一个地址中写入数据,如此反复执行。读地址通道首先完成握手,下一个时钟周期读数据通道再完成握手,开始读取数据,需要注意的是,每读出一次数据读数据通道完成一次握手,直到读最后一个数据的时候拉高RLAST,本次验证结束。

2024-09-09 16:32:01 545

原创 AXI4总线详解

5个通道都具有的同一类信号:VALIDREADY。这两个信号用来实现AXI协议的握手机制(handshake)。在读写数据两条数据通道中,传输突发传输()中的最后一个数据,必须要给出LAST信号,来标识这是此次突发传输中的最后一个数据。在共同的定义之外,各个通道有自己的定义。

2024-09-07 16:06:15 1474

原创 MIG IP核详解

IP核是Xilinx公司针对DDR存储器开发的 IP,里面集成存储器控制模块,实现DDR读写操作的控制流程,下图是7系列的 MIG IP 核结构框图。MIG IP 核对外分出了两组接口。左侧是用户接口,就是用户(FPGA)同 MIG 交互的接口,用户只有充分掌握了这些接口才能操作MIG。右侧为DDR物理芯片接口,负责产生具体的操作时序,并直接操作芯片管脚。这一侧用户只负责分配正确的管脚,其他不用关心。

2024-09-01 09:52:41 1670

原创 DDR3详解

DDR3 SDRAM,全称第三代双倍速率同步动态随机存取存储器,简称 DDR3,双倍速率(double-data-rate),是指时钟的上升沿和下降沿都发生数据传输;同步,是指DDR3数据的读取写入是按的;动态,是指DDR3中的数据掉电无法保存,且需要周期性的刷新,才能保持数据;随机,是指可以随机操作任一地址的数据。DDR3是当今较为常见的一种储存器,在计算机及嵌入式产品中得到广泛应用,特别是应用在涉及到大量数据交互的场合,比如电脑的内存条。其具有以下特点:1.掉电无法保存数据,需要周期性的刷新。

2024-08-31 14:03:57 2169

原创 基于FPGA的OV5640摄像头图像采集

OV5640的寄存器较多,对于其它寄存器的描述可以参OV5640的数据手册。但是,OV5640的数据手册并没有提供全部的寄存器描述, 而大多数必要的寄存器配置在OV5640的软件应用手册(《OV5640 Camera Module Software Application Notes》)中可以找到,其中还有相关初始化例程。这里我们只介绍几个关键的寄存器配置。输出模式设置如下图所示,可以通过配置0x4300这个寄存器控制输出的像素模式包括REG565YUV422等常用模式。设置输出模式为。

2024-08-30 09:50:15 2385

原创 FPGA实现HDMI传输(二)

之前的文章简单介绍了HDMI接口、TMDS编码以及ADV611工作原理和寄存器配置,本篇博客将给出具体的代码以及板级验证结果,代码参考自米联客的教程。

2024-08-29 12:03:38 638

原创 FPGA实现TMDS编码

虽然本次代码较为简单,但在实现过程中也遇到了一些问题,首先就是条件1的真假判断我最开始写的时候使用时序逻辑写的,用if-else来判断条件是否成立然后再对q_m进行同或或者异或运算,但在仿真的时候发现q_m延后了好几个时钟周期,因此此处推荐用组合逻辑来实现,然后就是cnt的位宽设置得太大,导致条件3出现了未知态,因此cnt的位宽不应定义过大,合适即可。最后,n1_qm核n0_qm的计算应该用q_m来计算,而不是q_m_r,q_m_r需要进行一个时钟周期的同步,可能会导致后续条件判断出错。

2024-08-19 19:04:54 1080

原创 FPGA实现HDMI传输(一)

比如,可以设置一个蓝屏的信号。引脚对应的RGB模式的R分量输出,P15-P8引脚对应的RGB模式的G分量输出,P7-P0引脚对应的RGB模式的B分量输出。在444的YCBCR模式下,P23-P16引脚对应的为V分量输出,P15-P8引脚对应的Y分量输出,P7-P0引脚对应的U分量输出。在422的YCBCR模式下,P23-P16引脚无对应分量输出,P15-P8引脚对应的Y分量输出,P7-P0引脚对应的CBCR分量输出。前面提到过,这个地址是可编程的,如果用户修改了CP地址,这里就要对应使用修改后的地址。

2024-08-15 19:26:45 1401

原创 ibert ip核测试

串行信号的抖动,反映在时域上,信号的稳定时间会变小,眼图宽度会变窄;信号的噪声,反映在信号幅度上,眼图高度变小。SFP/SFP+/QSFP最关键的区别在于速率上的区别,这是因为使用的协议不同,SFP是基于IEEE802.3和SFF-8472,传输速率能够达到4.25 Gbps,SFP+规范是基于SFF-8431最高传输速率可以达到16Gbps,相较SFP和SFP+的1路收发通路,QSFP和QSFP+增加到了4路,也就是数据速率提高4倍,如下所示光模块协议发展到不同过程中一些版本的速率和接口类型。

2024-08-13 17:26:54 1225

原创 高速收发器(四)

由此处可知,可以在一个IP中勾选多个通道,这种方式也行,但是更加常用的方法是生成单通道的IP,需要使用多通道时,多次例化该IP即可,这也是为什么需要把QPLL放在IP外部,防止将QPLL多次例化。此界面中的GT Type是固定的,我用的是K7的板子,因此固定就是GTX,而红框中的部分就是需要我们设置的,通过前面的学习,我们已经知道一个Qaud只有一个QPLL,红框中的上面一个选项表示将QPLL的控制放在IP的内部,用户不能自行控制,而下面一个选项表示将QPLL的代码放在IP核外面,方便后续扩展收发通道。

2024-08-11 16:58:08 1297

原创 高速收发器(三)

8b/10b编码解码是高速串行通信,如PCIe、SATA(串行ATA),以及Fiber Channel中常用的编解码方式。在发送端,编码电路将串行输入的8比特一组的数据转变成为10比特一组的数据并输出;在接收端,解码器将10比特一组的输入数据转变成8比特一组的输出数据。编码和解码均采用一样的算法,整个过程就是8b/10b编码/解码过程。这种编码方式中的0-1、1-0跳变丰富,0和1分布均匀,不会出现长连0和长连1的情况。

2024-08-06 16:49:15 1017

原创 高速收发器(二)

1.发送通道TX框图如下所示:各部分的功能分别如下:1.1 FPGA TX InterfaceFPGA的TX接口是FPGA到GTX/GTH收发器的TX数据路径的网关。应用程序通过将数据写入TXUSRCLK2正边的TXDATA端口,通过GTX/GTH收发器传输数据。端口宽度可配置为2字节、4字节或8字节。端口的实际宽度取决于TX_DATA_WIDTH和TX_INT_DATAWIDTH属性和TX8B10BEN端口设置。端口宽度支持16位、20位、32位、40位、64位和80位。接口上并行时钟

2024-08-05 17:31:06 1000

原创 高速收发器(一)

首先我们知道信号的传输经历了串行到并行再到串行的发展历程,由于并行传输的传输距离有限,误码率高等缺点,现在的通信方式一般都采用串行传输,但FPGA中产生处理的一般都是并行信号,因此人们提出来SERDES技术,即串行解串,通过该技术将待发送的并行信号转化为串行信号,接收的时候再将串行信号转化为并行信号,从而实现高速串行通信。如下图所示,差分时钟进入FPGA之后,先经过IBUFDS_GTE2转换为单端时钟,然后作为QPLL或者CPLL的时钟输入,QPLL或者CPLL的输出时钟作为发送和接收部分的时钟信号。

2024-08-02 16:58:14 1158

原创 FPGA实现异步FIFO

跟同步FIFO的设计思路一样,总体分为三部分:读操作、写操作和判断“空”“满”,读写操作也和同步FIFO类似,每当读时钟或写时钟上升沿到来时,读写指针加一,并将数据读出或者写入,但还要加上读写指针步操作,即将读写指针分别在写时钟和读时钟下打两拍。异步FIFO和同步FIFO一样,也需要写使能和读使能来控制FIFO的读写,同样也可以利用读写指针来指示读写地址,每写入一个数据,写指针加一,同样的,每读出一个数据,读指针加一。实现读写指针同步的方法就是把读指针在写时钟域下打两拍或者将写指针在读时钟域下打两拍。

2024-07-30 13:54:44 865

原创 FPGA实现同步FIFO

例如,所设计的FIFO中还剩余2到3个位置时almost_full有效,那么当almost_full有效时,负责写人的外围电路就应该考虑停止写入,因为从决定停止到w_en信号被置为无效可能还需要多个时钟周期。在代码编写过程中,博主想利用计数器来控制full和empty信号的拉高和拉低,结果却出现了有一位写入的数据读不出来的情况,思考了很久还是没有发现问题出在哪里,如果有懂得大佬可以在评论区地点一下,最后又是借鉴了刀哥的代码才实现功能,不得不说刀哥YYDS.fifo_empty信号表示FIFO为空的状态。

2024-07-29 13:53:35 756

原创 FPGA实现IIC接口协议

问题改正以后还是出现了各种各样的问题,比如状态跳转不对或者响应信号不对等问题,主要是状态机的第三段出了问题,对比刀哥的代码检查了好多遍终于写操作没有问题了,但是读操作中第二次发送器件地址+读操作,最后发送的一个是1,但是SDA却出现了未知态,折腾半天原来是EEPROM的寄存器地址位数不对,刀哥给的寄存器地址是16位,而我的代码设计的是只有8位的,我有参照夏宇闻老师的书把EEPROM的代码改了一遍,终于成功实现了仿真。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

2024-07-26 19:29:13 886

原创 FPGA实现SPI协议驱动模块

clk为系统时钟,rst_n为复位信号,send_data为主机发送给从机的8位数据,spi_start为发送开始信号,spi_end为发送结束信号,rec_data为主机接收从机的8位信号,rec_done为成功接收8位数据,send_done为成功发送8位数据,spi_clk为整个通信模块的时钟,决定了通信的速率。SPI协议使用四条线来实现通信,分别为SCK(时钟信号),MISO(主机输入从机输出),MOSI(主机输出从机输入),CS(片选信号)。文章主要是记录之前的学习,如有侵权,请联系博主。

2024-07-24 14:06:02 380

原创 FPGA实现UART串口发送和接收

每次数据发生包含10bit数据(1位起始位,8位数据,1位终止位),可以设计两个计数器,其中一个计数器在计数到预设时钟数时清零,此时另一个计数器加一,知道计数为9时表示一次数据发生完成进入空闲状态,同时还需要设置波特率,以确定所需时钟数。0作为起始位,发送开始时第一个bit为低电平,然后发送8bit数据,8bit数据发送完成后检测到1,即停止位时,进入空闲状态,等待下一次数据发送。串口发送模块设计框图如下所示。Baud_set为波特率设置信号,Send_end为发送结束信号,Tx为输入发送数据线的数据。

2024-07-22 15:29:18 717

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除