![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
FPGA
Sterne365
这个作者很懒,什么都没留下…
展开
-
FPGA实现IIC接口协议
问题改正以后还是出现了各种各样的问题,比如状态跳转不对或者响应信号不对等问题,主要是状态机的第三段出了问题,对比刀哥的代码检查了好多遍终于写操作没有问题了,但是读操作中第二次发送器件地址+读操作,最后发送的一个是1,但是SDA却出现了未知态,折腾半天原来是EEPROM的寄存器地址位数不对,刀哥给的寄存器地址是16位,而我的代码设计的是只有8位的,我有参照夏宇闻老师的书把EEPROM的代码改了一遍,终于成功实现了仿真。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。原创 2024-07-26 19:29:13 · 724 阅读 · 0 评论 -
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 · 271 阅读 · 0 评论 -
FPGA实现同步FIFO
例如,所设计的FIFO中还剩余2到3个位置时almost_full有效,那么当almost_full有效时,负责写人的外围电路就应该考虑停止写入,因为从决定停止到w_en信号被置为无效可能还需要多个时钟周期。在代码编写过程中,博主想利用计数器来控制full和empty信号的拉高和拉低,结果却出现了有一位写入的数据读不出来的情况,思考了很久还是没有发现问题出在哪里,如果有懂得大佬可以在评论区地点一下,最后又是借鉴了刀哥的代码才实现功能,不得不说刀哥YYDS.fifo_empty信号表示FIFO为空的状态。原创 2024-07-29 13:53:35 · 570 阅读 · 0 评论 -
FPGA实现UART串口发送和接收
每次数据发生包含10bit数据(1位起始位,8位数据,1位终止位),可以设计两个计数器,其中一个计数器在计数到预设时钟数时清零,此时另一个计数器加一,知道计数为9时表示一次数据发生完成进入空闲状态,同时还需要设置波特率,以确定所需时钟数。0作为起始位,发送开始时第一个bit为低电平,然后发送8bit数据,8bit数据发送完成后检测到1,即停止位时,进入空闲状态,等待下一次数据发送。串口发送模块设计框图如下所示。Baud_set为波特率设置信号,Send_end为发送结束信号,Tx为输入发送数据线的数据。原创 2024-07-22 15:29:18 · 631 阅读 · 0 评论 -
FPGA实现异步FIFO
跟同步FIFO的设计思路一样,总体分为三部分:读操作、写操作和判断“空”“满”,读写操作也和同步FIFO类似,每当读时钟或写时钟上升沿到来时,读写指针加一,并将数据读出或者写入,但还要加上读写指针步操作,即将读写指针分别在写时钟和读时钟下打两拍。异步FIFO和同步FIFO一样,也需要写使能和读使能来控制FIFO的读写,同样也可以利用读写指针来指示读写地址,每写入一个数据,写指针加一,同样的,每读出一个数据,读指针加一。实现读写指针同步的方法就是把读指针在写时钟域下打两拍或者将写指针在读时钟域下打两拍。原创 2024-07-30 13:54:44 · 503 阅读 · 0 评论