FPGA实验报告


文章目录

  • 一、概述
    • 1、目的及意义:
    • 2、主要功能:
  • 二、原理及步骤
    • 1、原理框图:
    • 2、工作原理
    • 3、功能模块简介
    • 4、实验步骤
  • 三、程序设计及描述
  • 四、仿真与综合测试
  • 五、总结

一、概述

1、目的及意义:

设计居于双端口RAM的串口的通信系统。实现用COMPORT发送数据,并在FPGA上用七段数码管显示出来。

2、主要功能:

FIFO队列是一种数据缓冲器,用于数据的缓存。他是一种先入先出的存储器,即最先写入的数据,最先读。FIFO的参数有数据深度和数据宽度。数据宽度是指存储数据的宽度。深度是指存储器可以存储多少个数据。

二、原理及步骤

1、原理框图:

2、工作原理

双口RAM分伪双口RAM与双口RAM(Xilinx称为true two-dual RAM),伪双口RAM,一个端口只读,另一个端口只写,且写入和读取的时钟可以不同,位宽比可以不是1:1;而双口RAM两个端口都分别带有读写端口,可以在没有干扰的情况下进行读写,彼此互不干扰。

3、功能模块简介

 RAM2:RAM核用于数据的存储和读取。UART通信协议:用于数据传输,将串行数据和并行数据进行转换,完成数据在PC端和FPGA之间进行传输。

4、实验步骤

1、因为项目是在UART通信协议的基础上设计的,所以先仿照前面的实验设计UART通信协议(修改项目名防止报错)。
2、添加IP核,按照实验要求添加双口RAM,勾选inst文件。

3、编写代码:使用函数调用的方式连接RAM核与UART通信协议,使其成为一个完整的项目。编写项目时利用receive_ack信号(完整接收到一个数据),作为触发条件修改地址,在实际操作中将数据一位一位的传入(可以使用空格作为分隔符)。
4、使用SignalTap进行仿真验证,观察数据传输的过程,充分理解双口RAM的工作原理。

三、程序设计及描述

代码:)

module RAM_uart_top
(output txd,output [6:0] hex0,hex1,hex2,hex3,   //两个七段数码管对数据进行显示input rxd,input clk,input r_den_b,      input w_ren_a,input [7:0]data_tx    //实际传输数据
);wire clk_9600;wire receive_ack;wire [7:0] data;wire [7:0] datas;reg [7:0] dataz;reg [7:0 ]qb[3:0];reg [7:0] wdress;//写地址reg [7:0] rdress;//读地址integer i;integer j;//reg [4:0] i;//异步读写//receive_ack变1收到一个数据// 在receive_ack的上升沿进行写always @(posedge receive_ack)beginif (wdress == 8'd132)begin wdress = 8'd128;end   if(j < 4)begindataz[j] = dataS;endelsebeginj = 0;dataz[j] = dataS;endj = j+1;wdress = wdress +1;//更新地址end//在receive_ack的下降沿进行读    always @(negedge receive_ack)beginif (rdress == 8'd132)begin    rdress = 8'd128;endif(i < 4)beginqb[i] = qb_tmp1;endelsebegini = 0;qb[i] = qb_tmp1;endi = i+1;rdress = rdress +1;end//发送模块uart_tx uart_tx(.clk(clk_9600),.txd (txd),.data_o(data_tx),      //实际发送值.send (start)         //允许发送怎么填写);//接受模块uart_rx uart_rx(.clk(clk_9600),.rxd (rxd),.receive (receive),.data_i (data),.data_s (datas),//          .receive_ack(receive_ack));//时钟模块clk_div clk_div(.clk (clk),.clk_out (clk_9600));RAM2 RAM2_inst(.clock(clk),.address_a(wdress),//.address_b(rdress), .data_a(datas),.data_b(),.rden_a(),.rden_b(r_den_b),.wren_a(w_ren_a),.wren_b(),.q_a(),.q_b(qb_tmp1)
);//数码管显示 num进行显示hex_7seg seg0 (.hex(qb[0]),.sseg(hex0));hex_7seg seg1 (.hex(qb[1]),.sseg(hex1));hex_7seg seg2 (.hex(qb[2]),.sseg(hex2));hex_7seg seg3 (.hex(qb[3]),.sseg(hex3));
endmodule

四、仿真与综合测试

1、 仿真图

2、 实物图

五、总结

1、此次实验要求做真双口,但由于我们注释掉了另一个端口,实际操作只在一个端口上实现,所以也只能算伪双口的RAM通信协议。
2、FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区
别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址;异步时钟域的缓存只要是双口器件都可以完成,但FIFO不需对地址进行控制,是最方便的。

FPGA 基于双端口RAM的串口通信系统相关推荐

  1. FPGA基于双端口RAM的乒乓操作

    如果需要重读,需要用ram,如果不需要重读的话就用FIFO 双buffer不太好实现错误重传机制!!!! 双buffer作用: 1.跨时钟域 2.完成数据位宽转换 3.完成数据缓冲 双buffer缓冲 ...

  2. 【FPGA】双端口RAM的设计(同步读写)

    之前的博文都是讲单端口RAM的,它们仅有一套控制输入,例如cs,we,oe,还有数据总线以及地址. [FPGA]单端口RAM的设计(同步读.同步写) 附上太多链接,我也累,自己找吧. 双端口RAM,顾 ...

  3. 【FPGA】双端口RAM的设计(异步读写)

    上篇写了双端口RAM设计(同步读写):https://blog.csdn.net/Reborn_Lee/article/details/90647784 关于异步读写和同步读写,在单端口RAM设计中也 ...

  4. 【正点原子FPGA连载】第十九章IP核之双端口RAM实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1

    1)实验平台:正点原子新起点V2开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=609758951113 2)全套实验源码+手册+视频下载地址:ht ...

  5. (195)FPGA编程:双端口RAM(一)

    (195)FPGA编程:双端口RAM(一) 1.1.1 本节目录 1)本节目录: 2)本节引言: 3)FPGA简介: 4)FPGA编程:双端口RAM(一): 5)结束语. 1.1.2 本节引言 &qu ...

  6. Quartus 平台 FPGA 片内 RAM 使用

    Quartus 平台 FPGA 片内 RAM 使用 本文将以 Quartus 自带的 RAM:2-PORT 为例,介绍 EP4CE6E22C8 On Chip Memory 的使用 一.在 IP Ca ...

  7. 基于可见光(LIFI)通信系统 的机动车智能辅助装置(课程设计)

    基于可见光(LIFI)通信系统 的机动车智能辅助装置(课程设计) 创新性 (1)解决了会车时因为驾驶员的疏忽而没有及时切换远光灯为近光灯,通过LED车灯的可见光通信途径完成智能辅助车灯远近光束切换功能 ...

  8. FPGA设计中RAM的一些基本概念

    1.FPGA中双口RAM的基本概念 在FPGA的设计中,常用的数据缓存IP有FIFO和RAM,其中RAM又分为单口RAM,伪双口RAM和双口RAM. 单口RAM与双口RAM的区别在于,单口RAM只有一 ...

  9. 基于PC与单片机串口通信的温度监控系统程序设计

    基于PC与单片机串口通信的温度监控系统程序设计 1.系统介绍 1)本系统主要讲解基于PC与单片机串口通信的温度监控系统程序设计(如图1),上位机采用常用的PC机,下位机使用的是STC89C52单片机, ...

最新文章

  1. 彻底解决PHP Session不过期以及SessionId保持不变的问题
  2. 【OpenCV3】将图像指定区域使用另一图像(或ROI)覆盖
  3. OData元数据在浏览器里以Feed视图显示的解决办法
  4. 【TensorFlow】TensorFlow函数精讲之value()
  5. MAVEN利用Profile构建不同环境的部署包
  6. IDEA好看的主题安装
  7. 计算机网络工程课程设计
  8. 计算机怎么用鼠标,如何正确使用鼠标,这些知识你知道吗?
  9. dateutil模块
  10. Python 救救我!如何连接串口实现一个报警灯报警器
  11. Excel常用电子表格公式大全1-1
  12. 计算机显示器性能指标的是,简述显示器的主要性能指标
  13. 【Java】我的世界Java版外挂制作 [2] - 游戏内GUI
  14. c语言编译器中cu是什么意思,.c文件调用.cu中的函数
  15. 证券交易系统搭建的架构方案
  16. WordPress Feed跳转
  17. springboot整合数据库
  18. PG+POSTGIS地图空间位置网格聚合算法
  19. 基于C#通过PLCSIM ADV仿真软件实现与西门子1500PLC的S7通信方法演示
  20. 软件安全与脆弱性分析-对于freenote小程序的Poc分析

热门文章

  1. linux 网卡设置双ip,CentOS7单网卡设置双IP的方法
  2. 网站排名算法——Reddit 排名算法工作原理
  3. JSP虚拟旅游商店系统myeclipse开发sql数据库BS模式java编程网页结构
  4. 检查单 2016-06-11-01
  5. 检查单 2014-10-22
  6. 【docker系列】docker ps 命令详解
  7. Android玩乐系列:修改汇编代码支持原生高清来电大头贴(二)
  8. 软件测试面试——如何测试一个杯子
  9. 腾讯超级vip可以登陆几个电视
  10. 『JavaScript』基础笔记