找回密码
 注册
关于网站域名变更的通知
查看: 337|回复: 1
打印 上一主题 下一主题

转——【FPGA开源教程连载】第十三章B 搭建串口收发与存储双口RAM简易应用系统 

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-1 07:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
搭建串口收发与存储双口RAM简易应用系统
实验目的:1.学习系统模块化设计技巧并学会用Visio的基本使用
2.以模块化设计为基础利用已编写的串口收发模块、按键模块以及RAM的IP模块来设计一个简易应用系统
实验平台:芯航线FPGA学习套件核心板
' a5 s7 P* ?, V  E3 g& @
实验原理:
为了实现通过串口发送数据到FPGA中,FPGA接收到数据后将数据存储在双口ram的一段连续空间中,当需要时,按下按键0,则FPGA将RAM中存储的数据通过串口发送出去。先进行功能划分:串口接收模块、按键消抖模块、RAM模块、串口发送模块以及控制模块。前几讲除了控制模块均已经详细介绍,得益于当时的设计这里就不用再次编写这些模块,可以直接在本工程下进行调用。
利用Visio画出系统的结构图,Visio的使用方法可以参看本节配套视频,此处不再详述。

6 U, v- A! g+ F" M
13-1 系统结构图
实验步骤:
以13_A讲建立的工程为基础,先将已编写好的模块设计文件添加进工程中,并新建一个以名为UART_DPRAM.v的设计文件保存在rtl下,并设置为顶层文件。
这样对照图13-1 用Top-Down的设计方式就可以先把顶层文件写出。结构图左边的端口为input类型,右边的为output类型,内部连线均为wire型。可以看出在进行一个系统设计时,良好的模块划分以及设计的重要性。然后例化各个模块,这里将波特率设置为9600bps。

/ t1 \7 O7 c6 J( v& t* a, z7 c( X
* e7 M, T# S& r  p7 r, c0 m" u
         
现在编写本系统的控制模块CTRL.v,模块的接口可参照系统结构图写出。为了实现FPGA接收到数据后将数据存储在双口ram的一段连续空间中,这样就需要设计一个写地址自加的控制部分,且其控制信号为串口接收模块输出的Rx_Done信号。每来一个Rx_Done也就是每接收成功一字节数,地址数进行加一。

$ t0 L+ c2 g9 o& d, X; Z! B' q. ]( v; v% ~

; R) @$ `1 R7 U. o. \( q2 u- ~0 F: m0 \
为了实现当按下按键0,FPGA将RAM中存储的数据通过串口发送出去,这样也就是实现一旦按键按下即启动连续读操作,再次按下即可暂停发送。

; P5 Z+ }2 b+ I5 S! _9 u# c. _* Z$ D3 s- ?6 C. V' q- z
/ w# Q! d2 f1 I: n1 I3 X

) c3 I- Z# K! V* U- |: q9 n& p' n
$ r  a0 \0 P/ P# y: {& n
         
在上一讲中仿真双端口RAM时发现其输出延迟两个系统时钟周期。这样为了保证数据变化稳定之后才进行数据输出,将驱动Send_en的信号接两级寄存器进行延迟两拍。当按键按下后启动一次发送,然后判断上一字节是否发送结束,是则进行下一字节发送否则不进行下一次发送。
, W7 d3 u1 h7 l" E" J
% ]0 m8 o6 c- W% T) ~
         
编译无误后,可以在RTL viewer中查到如图13-2所示的顶层结构图,可与实验之初设计的系统结构图进行对比。

/ |+ n+ L9 e' z; \2 k
13-2 系统顶层RTL viewer
为了测试仿真编写测试激励文件,这里由于使用了按键消抖模块,因此须将创建的key_modle.v仿真模型加入到工程中。新建UART_DPRAM_tb.v文件除了例化各模块,其激励文件可以直接复制串口发送模块的测试激励文件。再次进行分析和综合直至没有错误以及警告,保存到testbench文件夹下。
这里需将按键的仿真模型加仿真脚本后进行功能仿真可以看到如图13-4所示的波形文件。每当写入地址加一时数据均可以有效的写入,按键按下后每当一次输出结束后读地址也进行加一,实现数据输出。
: M/ U. Q' A% m$ {5 s$ N
13-3 仿真脚本中加入按键仿真模型
- V7 F5 E9 W  z
13-4 功能仿真波形文件
放大波形文件的发送部分,如图13-5所示。可看出在第一次给出写使能信号后,将数据aa写入地址0,写入成功后写入地址再加一。tx_data之所以会在没有Send_en时数据会更新,是因为读取地址在复位时地址给的为0,在成功写入数据aa后,自然就会显示更新,但是Rs232_Tx不会有数据更新。延迟两个系统时钟周期是因为RAM IP本身的性质。可以放大后面数据写入的过程,tx_data的值并不会更新。

3 T7 y3 A$ `  a" }  s& ?2 _& P
1 b4 Y- R' ~7 d# G2 V: N6 C& F
图13-5 数据接收及写入部分波形
       放大波形文件的发送部分,如图13-6所示。可看出湖每当Send_en有效后均会进行一字节数据的发送。传输完激励中的四个数据后即输出0,这是由于这里将RAM定为256宽度,只用的前四个,没有用到的数据即全为0。且可以看出Send_en与数据发送严格对齐,与设计预期相符。

  }/ n; X! v( P1 }
13-6-1 数据读取及发送部分波形

$ }+ i3 A/ V$ h/ U) r; ?. ?
13-6-2数据读取及发送部分波形
       分配引脚后进行全编译无误后,下载进开发板后,打开串口助手依次输入1122aadd3467。按下按键key0后即可看见数据源源不断的发送,再次按下可停止。且可以计算得每一个循环的数据宽度均为256个,与设计的RAM宽度相符合。

/ c1 Q2 ^4 q% K# j+ X
13-7 串口助手接收数据显示
现在即使按下复位再次发送68、76、ff可以看出,RAM中已有的数据并不会消除,只是会加入新的数据。且一个循环数据间隔也是256。

) M- Y, C. a7 }2 E8 y
13-8 串口助手接收数据显示
这样即完成了一个简易系统的模块化设计,并且学习了Visio的基本使用。

7 l3 {1 S' J& ]. q2 g1 N$ E2 g) w. e' L% g4 Z7 O5 G

2 t7 |3 u# b, {( F$ c
小梅哥
芯航线电子工作室
, r" y0 V  J- {& k9 |' ?" A. Y
游客,如果您要查看本帖隐藏内容请回复
+ R1 ]6 n. C% Q9 Z/ J; b; m* @
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-10-8 20:43 , Processed in 0.125000 second(s), 26 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表