自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 问答 (14)
  • 收藏
  • 关注

原创 基于FPGA的百兆以太网通信(一)——MDIO配置PHY芯片

PHY地址(这里需要解释一下,这个好像只是在连接多个PHY芯片的时候才有,用于区分不同的PHY芯片,如果只有一个,默认5'b0,以上是我个人分析,我也不太懂,我查看的教程都说在原理图上可以看出来,但是也没具体说怎么看)。一般来说,FPGA以太网通信是需要外接的PHY芯片的,目前的很多FPGA出厂的底板上已经焊好了PHY芯片,所以这一点是比较方便的。这里的引脚很多,我们目前只关注两个,MDIO和MDC,这两个是配置引脚,用于配置PHY芯片的寄存器,类似于前面说的摄像头,同时也可以读取其中寄存器的数据。

2024-03-20 11:30:23 1458 1

原创 基于FPGA的图像数据采集(二)

由于SCCB协议和IIC协议几乎一摸一样,这里的模块命名都是用的IIC。OV5640输出数据类似于VGA和HDMI的时序,接下来会继续更新VGA和HDMI的相关时序分析和代码。根据前面的相关介绍,可以将数据采集分为以下几个模块,分别编写代码:SCCB控制模块,数据发送模块,OV5640上电模块,串口发送模块。PCLK是像素时钟,当HREF拉高时,每一个PCLK,D传输一个字节的数据。上一篇我们讨论了OV5640的上电时序,下面给出数据采集的时序。三、SCCB控制模块代码。七、SCCB顶层文件。

2024-03-16 19:45:13 612 3

原创 基于FPGA的图像数据采集(一)

下面我们将要通过对OV5640配置(支持SCCB协议),从摄像头的数据端口读出数据,由于我手上没有屏幕,做不了图像的验证,所以读出的数据会通过串口发送到电脑。OV5640是一款图像传感器,也就是摄像头,它支持多种格式输出,包括RGB和YUV等,同时支持多种分辨率,和多种图像相关功能,像白平衡,亮度调节等等(这一部分功能在手册里面都有)。关于相关寄存器地址和寄存器数据在数据手册里面都有,下一篇会把数据手册贴出来,具体的配置代码,包括上电时序控制,SCCB写数据,串口控制等,也会在下一篇中给出。

2024-03-16 19:01:41 1085 1

原创 FPGA常用通信协议——I2C(二)

代码主体比较简单,按照时序来写就行了,有几点要说明一下,这里输入的sta_flag来自另一个模块,只要IIC_Ctrl模块的ready_flag拉高,sta_flag就会拉高,写数据就会开始,因为那个模块是在配置摄像头的时候写的,之后讲OV5640的时候再贴代码。状态机那一部分,I2C的应答ACK必须是低电平才可以接着下一步,这里是按照SCCB来写的,基本是一样,但是SCCB的ACK不关心是什么状态,也就是1或0都可以。实际的写法有很多,这种比较简单,他的写法也可以很复杂,感兴趣的兄弟可以自行了解。

2024-03-15 22:31:15 424 1

原创 FPGA常用通信协议——I2C(一)

接着由从机返回一位低电平应答位(ACK),接着发送要读或者写的寄存器地址,这里的寄存器地址可能是一个字节,也可能是两个字节,这取决于外设能配置的寄存器个数,像OV5640可配置的寄存器较多,所以地址是两个字节,第一个字节发完之后要等从机发来应答位(ACK)才能接着发第二个字节,发完之后同样要接受来自从机的一位应答位。I2C协议只有两条信号线,一条单向时钟线SCLK,由主机发送给从机,一般不会太大,几百KHz的样子,一条双向数据线SDA,下图展示了I2C通信的基本模型。

2024-03-14 22:22:14 365 1

原创 FPGA常用通信协议 —UART(三)---UART发送及TOP文件

前面介绍了UART的基本时序和接收器的相关代码,发送器基本逻辑也是一样,只不过相比发送器我们需要反过来思考,从上一个模块里得到的八位并行数据需要在UART时序配合下转成串行数据并从TX端发出。四、数据回环实验TOP文件。五、数据回环实验测试代码。数据有效,也是开始标志。

2024-03-06 17:30:46 387 1

原创 FPGA常用通信协议 —UART(二)---UART接收

代码实际比较简单,只有一点是要解释一下的,UART是异步通信,从其他设备传来的RX是一个不同步的数据,为了减小信号在不同时钟域的亚稳态问题(涉及到数字集成电路设计的专业知识,感兴趣的兄弟们可以自己查一查),这里将输入的RX打了三拍,为了同步数据,也是为了减小亚稳态带来的问题。在接收数据时有一个要注意的地方,就是什么时候读取,由于一个波特维持的时间很长,所以在波特的1/2处左右接收数据最好,这时候数据最稳定,对应代码中的bit_flag,就是实现这一功能的。时钟采用50Mhz,下面是信号列表。

2024-03-05 19:22:34 3198

原创 FPGA常用通信协议 —UART(一)

假设采取9600的波特率,那也就是一秒钟要传输9600个波特,一个波特要维持1/9600s,一个波特携带一个码元,一个完整的数据传输周期,包含一个起始位,八个数据位,一个校验位,一位(或者两位)的停止位,其中校验位可有可无,本次实验不要检验为,只取一个停止位。关于以上三个名次的定义主要来自网上的资料,不一定准确,波特和波特率有时候指的是一个东西,兄弟们有懂的评论区交流,简单点来说,衡量UART通信速率的不是时钟的大小,而是波特率,波特率越大,传输速率越快。最关键也是最重要的一部分,具体时序见下图。

2024-03-05 18:47:06 309

原创 FPGA学习第一天——呼吸灯

时钟为27Mhz,1s等于27×10的6次方个周期,分成1000份,每一份就有27×10的3次方个周期,让其PWM波占空比依次减小,第一个时间段内占空比应该为1,也就是27×10的3次方个周期LED均为1。第二个时间段内选取其中一小部分为0,为了呼吸灯效果的均匀,每一个时间段为0的周期数应该比前一个多27个时钟周期,这样到最后一个时间段内占空比就接近于0,也就是完全亮的状态。为了体现占空比的变化,也就是电压的变化,可以将亮起的一秒钟分成若干等分,每一份的占空比依次递减,直到最后一份整个时间段里全为0。

2024-03-04 17:32:53 431

空空如也

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

TA关注的人

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