基于FPGA的SDRAM控制器设计(一)

1. SDRAM控制器整体框架

在这里插入图片描述

图1.1整体框架

PC端通过串口模块UART_RX发送读写命令以及数据到Cmd_encode模块,由后者分离出数据存入wfifo模块,剩下的读写命令传送到Sdram_top模块对SDRAM进行写操作或者从SDRAM读数据到rfifo模块并通过UART_TX模块将数据送出到PC端。

2.UART_RX模块

主体代码(见本文最后)由六个时序逻辑块组成,对波特计数器、接收信号线标志位、比特计数器、接收数据、以及Po标志位进行操作,使其能够遵从固定的时序逻辑(图1.2),完成串口的接收功能。
在这里插入图片描述

图1.2 UART接收模块时序图

测试代码主要由两个task组成,从txt文件中读取待传输数据,然后按位、按每位560个时钟周期的时序发送。仿真结果如下图1.3所示。
在这里插入图片描述

图1.3 UART接收模块仿真结果

观察到rx_data信号端口已输出预先设定好的数据(h55 h12 h34 haa)。

3.UART_TX模块

主体代码主要由六个时序模块组成,分别对数据发送寄存器、数据发送标志位、波特计数器、比特标志位、串口发送端进行设置,使其能够遵从图1.4所示的时序逻辑,完成串口的发送功能。
在这里插入图片描述

图1.4 UART发送模块时序图

测试代码将固定的数据(如:h55)送入UART_TX模块的Tx_data端并在tx_trig端给到一个小脉冲用以激活发送模块,仿真结果如图1.5所示。
在这里插入图片描述

图1.5 UART发送模块仿真结果

可以观察到rs232_tx端口已输出给定数据(h55)。

4. RX与TX模块的整合

整合两个模块使PC端与FPGA能够通过串口进行通信,如图1.6所示将po_flag与tx_trig,rx_data与tx_data相连,外部只留出时钟信号线、复位信号线以及数据的输入输出信号线。
在这里插入图片描述

图1.6 RX/TX TOP模块

5.需要注意的问题

1、采样时间点的选择:应在rs232_tx信号线每一位的最中间进行采样,这样能得到最稳定的信号
2、时钟周期的计算:串口每发送一位数据所占用的FPGA的时钟周期计算公式为:
一 位 数 据 占 用 时 钟 周 期 = 系 统 时 钟 串 口 波 特 率 一位数据占用时钟周期 = \frac{系统时钟}{串口波特率} =
例如:波特率为9600的串口每发送一位数据占用50M Hz FPGA时钟周期数为
50 × 1 0 6 9600 ≈ 5280 \frac{50 \times10^6}{9600}\approx5280 960050×1065280

3、编写UART_RX与UART_TX的目的在于让PC与FPGA能够通过统一的通信标准——串口通信进行数据的交流,在对两个模块进行整合后由于没有FPGA板子进行测试,所以又编写了一个测试文件进行模拟。模拟结果如图1.7。
在这里插入图片描述

图1.7 RX/TX TOP模块仿真结果

可以看到,在RS232模块的数据接收端rs232_rx(PC数据发送端)收到的数据与一定延迟后数据发送端rs232_tx(FPGA数据接收端)发送的数据保持一致。

6.代码

我的Github

7.参考资料

【开源骚客】基于FPGA的SDRAM控制器设计

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值