系列文章目录
文章目录
- 系列文章目录
- VIO(Vivado)
- ISSP(Altera)
- 串口学习
- FPGA串口发送
- FPGA串口接收
VIO(Vivado)
VIO 的全称叫 Virtual Input/Output,建立一个虚拟的输入/输出信号,可以对需要调试的模块的输出信号的数值进行在线的查看,以及模拟一些信号输给需要调试模块,方便调试查找问题和验证模块的实际上板工作的正确性。该工具和 Altera Quartus 中的 ISSP 工具类似。
设置输入
这里有一个提示,提示通过该界面设置最多可设置 64 个探针,如果想设置更多的探针需要使用 Tcl 脚本命令去设置
设置输入输出的个数/位数、默认值
使能 Input Probe 的 Active detectors 功能,每个 VIO Croe 输入都有额外的单元来捕获输入信号的变化。由于设计时钟(待捕获的信号所处的时钟)可能比分析仪的采样时钟要快,因此被监测的信号可能在连续采样之间多次变化。Active detectors 功能就是用来捕获此行为,让其结果与 vivado 逻辑分析器中的值一起显示。
然后我们在对应的模块里面例化该ip核就行
//使用 vio 设置串口发送数据
vio_0 vio_0 (
.clk(clk), // input wire clk
.probe_out0(test_en), // output wire [0 : 0] probe_out0
.probe_out1(data_byte) // output wire [7 : 0] probe_out1
);
之后编译下载 bit 文件,还同时需要下载 ltx 文件,ltx 文件是由于添加在线调试工具 VIO IP Core 额外产生的,这个文件生成位置和 bit 文件是在同一个目录下,下载的时候,软件会自动关联到 ltx 文件和 bit 文件一起下载到板子
下载后,点击右边 vio 界面的 +,选择要添加的信号
对于单bit信号,右键可以设置为按键,以右键Active-High Button为例,可以将其设置为一个按键,按键按下,test_en 的值变为 1,松开鼠标后值变为 0
ISSP(Altera)
IP核–ISSP (Iln-System Sources and Probes),这个IP核可以提供一个输出用来在线输出,相当于一个简单的信号发生器–Source,此外还可以提供探针Probes来在线监控信号的输出。
选择是否指定例化IP的编号,默认设置,不用修改
是否设置IP核的ID号。因为在一个工程中,可以例化多个In-System Sources and Probes Editor IP核,该ID号就是用来区分不同的IP核
用来设置探测(Probes)端口,probe功能我们用来检测信号,以此验证输入数值是否能有对应的正确输出,位宽设置为7,
用来设置驱动(Sources)端口,比如我们检测一个模块是否正常的时候,source可以用于输入,probes用于检测输出
高级设置选项。可以用来设置驱动信号的初始值以及发送驱动信号是否与源时钟同步。(通常保持默认即可)
下载程序后,在Quartus ll中Tools打开In-System Sources and Probes Editor,然后就可以观测数据了,看上去类似signeltap
//例化ISSP IP核
Sou_Pro Sou_Pro_inst (
.probe (xxx ),
.source (xxxxx )
);
串口学习
FPGA串口发送
首先根据波特率设置一个合适的数据发送时钟,之后在发送端口赋值就行,有起始位、数据位、停止位的共10bit
设置一个发送开始和结束标志信号,方便外部模块调用
有一点注意:发送的数据是外部给的,这个数据该打几拍,是否是跨时钟域的
下图是打排一次的情况,这是必要的,串口数据发送的时候,这个数据不能变,但如果跨时钟域,是否该打拍两次呢?这样数据会延后两个时钟周期,对应的程序设计也要打排,可以把使能信号也打排延迟,进行对齐
FPGA串口接收
串口接收,首先要对数据线打拍寄存,捕获边沿,抓取起始位,之后如何获取数据有各自不同的方式
可以在一位数据的时钟周期中间抓取高低电平,也可以抓取几次,例如在中间抓8次,累计,最后计数值大于4就是高电平