大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
基于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×106≈5280
3、编写UART_RX与UART_TX的目的在于让PC与FPGA能够通过统一的通信标准——串口通信进行数据的交流,在对两个模块进行整合后由于没有FPGA板子进行测试,所以又编写了一个测试文件进行模拟。模拟结果如图1.7。
图1.7 RX/TX TOP模块仿真结果
可以看到,在RS232模块的数据接收端rs232_rx(PC数据发送端)收到的数据与一定延迟后数据发送端rs232_tx(FPGA数据接收端)发送的数据保持一致。
6.代码
7.参考资料
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/160099.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...