FPGA IP核 串口实验 signaltap
文章目录
- 前言
- 一、IP核
- 1. 新建工程
- 2. IP核建立和调用
- 3. 工程文件的配置
- 二、串口IP核
- 1
- 2.
- 总结
前言
之前有写过verilog对FPGA串口和sdram的操作,但是我整合代码的能力还是差点,于是想到如果能用IP核直接玩应该会方便很多吧,所以本文就专门对基于quartus 的串口IP核进行了探索。
使用到的平台:
- quartusII 18.0标准版
- 黑金AX301开发板,芯片为EP4CE6F17C8N
- quartusII 内嵌的signaltap
- USB转232设备,看不太清型号,应该是CH340G
一、IP核
IP核可以认为是一个别人写好的模块,我们根据参数直接配置进行。这样的话就类似于STM32CUBEMX对外设进行配置之后就可以调用API直接使用了。
1. 新建工程
新建工程这种操作应该不用再说了,新建都还没操作过的应该也不会看这个。
2. IP核建立和调用
在Tools–>IP Catalog或者Tools–>Platform Designer都能实现相关功能。网上有文章说二者的区别是IP Catalog主要用于NIOS,如果仍然使用verilog进行所有操作还是使用Platform Designer比较好。本文使用的是Platform Designer。Platform Designer中左边有一个IP Catalog窗口,找不到的话在View–>IP Catalog能找到,在上面有一个搜索窗口,搜索232,有两个结果,选择RS232 UART选项然后添加。
添加后会弹出下面的窗口,其中Interface Setting中有Streaming和Memory Mapped两种模式,后者主要用于NIOS,所以选择前者。波特率115200,其他的参数可以视情况而定。
在platform designer窗口最下面有一个Generate HDL…按键,如果就这样直接生成的话会报错,提示时钟未知。可以解释为:在时钟未知的情况下,内部波特率计数器无法进行设置。
因此,还需要一个时钟,同样地,在IP Catalog中搜索Clock Source,选择clock source,如下图所示.
双击之后弹出下图所示的窗口,由于使用的开发板上面的晶振为50MHz,设置时钟频率为50MHz,然后下面的checkBOX中勾选频率已经知晓,相当于告诉串口模块我使用的时钟频率,这样的话才能产生正确的内部波特率计数器。
在finish之后出现下图所示的两个模块,图中是已经连上线的两个模块,图中时钟源的输出与串口模块的时钟输入模块相连;时钟模块的输出复位与串口的输入复位相连接;串口的输入和输出直接相连。
连接完成之后点击右下角的Generate HDL…生成硬件描述文件,无报错说明生成正确。
3. 工程文件的配置
IP核的调用需要将生成的相关文件添加到工程中,在上面我Platform Designer中的文件名为rs232.qsys,生成的文件应该也带有rs232字样,在工程下面的目录出现了rs232名称的文件夹,在该文件夹下有simulation和synthesis两个文件夹,分别为仿真和综合文件,将simulation文件夹中的.sip文件添加到工程,然后将synthesis中的.qip文件添加到工程,最后将rs232文件夹中有rs232_inst.v,这个是生成的一个调用模板,添加到工程,然后在这之上进行修改就行了。
二、串口IP核
1
下图是新建串口模块时给出的模块的管脚图,可以看到除了常用的几个信号之外,中间还有to(from)_uart_error、to(from)_uart_valid和to(from)_uart_ready几个信号,根据经验可以判断是指示数据有效一类的信号。没有找到相关文档,就CSDN了一下。
有老哥说过可以按照下图中红框内的时序来控制。
好,我们就看看这个时序。在valid为高时data能进行传输,然后在valid为低时,数据和错误指示为don’t care,认为valid为类似输出使能的用法。而ready的电平对数据的影响没有看出来。
于是乎,我想的是既然这样我先做一个串口发送的程序看看中间变量。先将to_uart_valid一直拉高,to_uart_data赋值0xaa,一直发,看看能有什么效果。于是在signaltap中看了一下波形,啥变化都没有……调了老半天,没找到结果……一气之下将IP核调用时的串口输出和输入相连,这总会有东西吧,正确的结果应该是我用串口助手发送一个什么东西就能接收到什么东西。
2.
rs232_inst.v文件改写如下
module tr(input wire clk,//50MHz时钟input rst_n,//e15input wire rxd,output wire txd
);rs232 u0 (.clk_clk (clk), // clk.clk.reset_reset_n (rst_n), // reset.reset_n.rs232_0_external_interface_RXD (rxd), // rs232_0_external_interface.RXD.rs232_0_external_interface_TXD (txd) // .TXD);
endmodule
在signal tap中添加中间变量,主要是看几个ready和valid变量与信号之间的关系。
感觉看不出来什么东西,从上图只能知道在一个byte接收或者完成之后valid会在一个时钟周期内产生一个高电平,然后变为低电平。把串口收发相连的线断开,发现使用signaltap也不能探测到valid和ready等模块的电平变化,甚至连bit_counter也检测不到动作电平。
就拿上面的signaltap捕获到的信号的时序也很乱,不知道是不是我触发设置的问题,而且前后rxd与接收到的数据在时序上差了挺多时间的,看IP核内部应该是有使用到FIFO的。
总结
本文使用IP核实现了串口转发的功能,实验发现,较大量数据的传输也会导致误码,这个和自己写的串口效果一样。估计加上校验位就好多了。对于内部valid和ready信号的变化情况的研究也没能实现,希望有知道的老哥能赐教一下。
FPGA IP核 串口实验 signaltap相关推荐
- 【Xilinx AX7103 MicroBalze学习笔记6】MicroBlaze 自定义 IP 核封装实验
目录 实验任务 实验框图 创建自定义 IP 封装 IP IP 封装界面配置 硬件设计(Vivado部分) Block Design搭建 添加 IP 库 约束文件 软件设计(SDK部分) 往期系列博客 ...
- ZYNQ之FPGA学习----RAM IP核使用实验
1 RAM IP核介绍 RAM 的英文全称是 Random Access Memory, 即随机存取存储器, 它可以随时把数据写入任一指定地址的存储单元,也可以随时从任一指定地址中读出数据,其读写速度 ...
- FPGA IP核之ROM
1.ROM介绍 ROM 是只读存储器(Read-Only Memory)的简称,是一种只能读出事先所存数据的固态半导体存储器.FPGA中通过IP核生成的ROM或RAM都是调用FPGA中的RAM生成的, ...
- FPGA IP核之RAM
1.RAM简介 RAM 是随机存取存储器(Random Access Memory)的简称,是一个易失性存储器.RAM 工作时可以随时从任何一个指定的地址写入或读出数据,同时我们还能修改其存储的数据, ...
- 基于 NVMe 的 exFAT 文件系统 FPGA IP 核简介
应用场景 用于需要对大数据量进行实时高速存储且需要文件管理的场景,如: ·超高速高清相机数据记录 ·航空成像与测量数据记录 ·雷达数据模拟与仿真 ·宽带卫星中频记录系统 ·汽车安全碰撞测试 ·高速AD ...
- A7\M4核串口实验
1.分析电路图 UART4_RX------>PB2 UART4_TX------>PG11 2.RCC章节分析 使能GPIOB和GPIOG控制器 RCC_MP_AHB4ENSETR[1] ...
- [从零开始学习FPGA编程-51]:高阶篇 - 基于IP核的FPGA开发- 什么是FPGA IP核(软核、固核、硬核)与学习方法
作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客 本文网址: 目录 前言: 第1章 IP是什么? 1.1 什么是知识产权
- LabVIEW FPGA PCIe开发讲解-7.2节:目前主流的4大Xilinx FPGA PCIe DMA通信IP核讲解
1.要开发一个带PCIe或者PXIe接口的FPGA板卡出来,除了硬件本身外,最重要的就是FPGA芯片里面的PCIe通信代码编写,俗称下位机FPGA编程:还有中间层的驱动文件编写以及上位机PC端的应用程 ...
- Xilinx RS编码IP核仿真验证
最近做的项目中用到了RS编码,FPGA代码中是通过调用Reed-Solomon Encoder IP核来实现的.这里以R-S(255,223)为例,分别对单通道和多通道两种情况进行了仿真验证,下面给出 ...
最新文章
- 吴恩达团队:神经网络如何正确初始化?
- Const *ptr ptr
- 7-9 用天平找小球 (C语言)
- mybatis学习笔记二(接口注解)
- keepalived安装与配置_面试官问LVS+keepalived+nginx怎么实现时该怎么答?
- PYPL 4 月排行:Python 最流行,Java 还行不行?
- everything下载哪个版本_Everything敏感信息泄露
- matlab画交通标志,基于MATLAB的交通标志设计方法研究
- 明天结束一个人的生活
- 设计模式之四 代理模式
- linux文件夹权限_五分钟搞定 Linux 文档全部知识,就看这篇文章
- android qq卡屏代码,2015最新卡死安卓QQ代码 卡到让对方手机QQ无响应及代码分享...
- python用于pmc排产可以吗_有没有免费的PMC生产排程软件啊?
- 小波变换原理及傅里叶变换(极好的文章)
- 职称计算机萧山考点地址,杭州各科目考点一览表(地址+考试时间+电话)
- PDF怎么编辑修改文字?
- MySQL添加新用户、创建数据库、为新用户分配权限、收回权限
- 「击败星际争霸II职业玩家」的 AlphaStar是在作弊?
- 微信开发获取昵称乱码 emoji表情
- Android常见的错误及解决
热门文章
- 英特尔前高管的IC职业生涯分享(文字版)写给想进入IC设计的同学们!
- 【初探篇】反向代理在系统结构中的应用场景
- 量子通信基础知识简介(一)
- pickle.load()和pickle.dump()
- 软件测试面试题:请你分别画出 OSI 的七层网络结构图和 TCP/IP 的四层结构图?
- springboot+dubbo+redis+RabbitMQ 项目整合实例【附完整源码】
- linux下16进制编辑器,需要一个好的十六进制编辑器为Linux
- android访问SD卡的权限
- xp计算机如何查看内存大小,怎样查看电脑内存大小_xp怎么看电脑内存大小
- js混淆 反混淆 在线