技术文章:FPGA杂记之基础篇二及Demo案例

润欣科技
关注

如图所示,MCU支持最大 32 个GPIO,其中低16位,即GPIO_L0~GPIO_L15是直接连接至pad的;而GPIOH0~GPIOH15则是通过FPGA连接至外部,因此,当使用这16个GPIO的时候,需要在FPGA工程的管教约束文件中指定具体连接至哪个脚。

在例化MCU时,使用到哪个脚就可以打开对应的开关,例如本例中,打开了L0、L1和H0,PPM_CLK,其中PPM_CLK是FPGA Fabric 输入时钟,连接至FPGA的PLL输出clk200;L0、L1连接至PAD,观察原理图。

【技术分享】FPGA杂记之基础篇二及Demo案例

GPIO0和GPIO1连接的是调试口;最后H0连接至FPGA 中sw_led并通过管脚约束连接至LED D2。

工程的管教约束文件如下:

【技术分享】FPGA杂记之基础篇二及Demo案例

查开发板原理图,D2连接至FPGA的16脚,且从原理图可观察,keil工程中对该GPIO的操作是置低,具体显示是D2常亮。

【技术分享】FPGA杂记之基础篇二及Demo案例

【技术分享】FPGA杂记之基础篇二及Demo案例

设置完毕后,完成结果声明如下:

【技术分享】FPGA杂记之基础篇二及Demo案例

并在顶层中调用:

【技术分享】FPGA杂记之基础篇二及Demo案例

2.4 下载

Keil和TD的工程都创建编写完成后,编译工程。其中,keil生成的工程bin文件需要与TD关联并通过TD下载至芯片或开发板中。

关联的步骤如下:

在HDL2Bit Flow栏右键选择properties。

【技术分享】FPGA杂记之基础篇二及Demo案例

在generate bitstream的第六项instruct ram中选择keil工程生成的bin文件的目录(此时keil工程已经编译通过),并保存。

【技术分享】FPGA杂记之基础篇二及Demo案例

保存后,双击generate bitstream编译TD工程,假如在选择路径前已经编译过TD工程了,需要右键选择rerun重新编译(注意:假如修改了keil的C文件而TD的HDL文件没有变化,建议也rerun后再将文件下载至开发板)

【技术分享】FPGA杂记之基础篇二及Demo案例

下载:

【技术分享】FPGA杂记之基础篇二及Demo案例

板子现象如图:

D1持续闪烁,D2常亮:

【技术分享】FPGA杂记之基础篇二及Demo案例

FPGA串口通信

本Demo案例基于安路的EF2M45LG48_MINI_DEV2开发板,通过测试板的uart口和PC机的uart口连接来形成一个闭环回路,即PC机发送数据至FPGA测试板,FPGA接收并返回相同的数据。实验结果通过PC机的串口调试助手调试查看。

3.1 UART协议

UART 是一种通用串行数据总线,用于异步通信,将数据在串行通信和并行通信间的传输转换。通俗的讲就是把多比特的数据转化为单比特的数据(tx端),或者把单比特的数据转化为多比特的数据(rx端)。工作原理是将数据的每个 bit 一位接一位地传输。

rx,接收端,位宽为 1 比特, pc 机通过串口往 FPGA 发 8 比特数据时,FPGA 通过串口线 rx 一位一位地接收,从最低位到最高位依次接收,最后在 FPGA 里面位拼接成8 比特数据。

tx,发送端,位宽为 1 比特, FPGA 通过串口往 pc 机发 8 比特数据时, FPGA 把 8 比特数据通过 tx 线一位一位的传给 pc 机,从最低位到最高位依次发送,最后上位机通过串口助手把这一位一位的数据位拼接成 8 比特数据。

注意点:

1、串行数据的发送和接收都是从低位到高位。

2、在不发送或者不接收数据的情况下, rx 和 tx 处于空闲状态,此时 rx 和 tx 线都保持【高电平】,如果有数据传递,首先会有一个起始位0,然后是 8 比特的数据位,接着有 1 比特的停止位(高电平),如果停止位以后不再发数据,将进入空闲状态,否则又将数据线拉低(进入起始位状态)。

3、波特率计算:uart传输有不同的波特率,使用HDL语言描述时,通常使用计数器来实现不同波特率的数据传播。计数器的计数值与具体波特率有关,以常见的115200为例,假设系统时钟是25Mhz,则传输1bit所需要的时钟周期为25 * 1000 *1000 /115200 = 217个,因此计数器计数值即216(从0开始计数)。

3.2 模块总框架

模块的总体框架如下:

【技术分享】FPGA杂记之基础篇二及Demo案例

top层除了时钟和复位信号的输入,还有输入信号rx和输出信号tx,分别来自PC机和输出到PC机,形成闭环。子模块中,Rx信号再作为uart_rx模块的输入,经过uart_rx模块的处理,转换成八位并行数据o_data输出;对于uart_tx模块,主要将输入的i_data并行信号转换成串行数据再输出到PC机。

3.3 代码实现

1. Rx端

【技术分享】FPGA杂记之基础篇二及Demo案例

【技术分享】FPGA杂记之基础篇二及Demo案例

【技术分享】FPGA杂记之基础篇二及Demo案例

【技术分享】FPGA杂记之基础篇二及Demo案例

2.Tx端

【技术分享】FPGA杂记之基础篇二及Demo案例

【技术分享】FPGA杂记之基础篇二及Demo案例

声明: 本文由入驻OFweek维科号的作者撰写,观点仅代表作者本人,不代表OFweek立场。如有侵权或其他问题,请联系举报。
侵权投诉

下载OFweek,一手掌握高科技全行业资讯

还不是OFweek会员,马上注册
打开app,查看更多精彩资讯 >
  • 长按识别二维码
  • 进入OFweek阅读全文
长按图片进行保存