因为上次做的板子是将FPGA和一块MCU芯片集成在一块的,他们之间就需要通信,当然最容易实现的就是UART串口通信;
下面的代码是一个Demo代码,实现的功能是,RX接收到什么,TX就发送相同的数据;
FPGA芯片 AG1280Q48 时钟频率 48MHZ 波特率 921600 RX引脚 PIN_16 TX引脚 PIN_14 LED引脚 PIN_48 时钟输入引脚 PIN_15 复位引脚 PIN_17
具体代码如下:
顶层模块
1 | module connect_mcu (input clk, |
接收模块
接收模块的主要设计是将起始位下降沿的检测作为接收系统的开始信号,通过起始信号和bit位的计数信号相结合就可以得到一个贯穿整体运行过程的使能信号,通过对使能信号的判断就可以实现对系统的控制。
另一个关键问题是电平采集的时间,应该 在一个bit的中间位置进行采集,这样可以有效避免采集电平不稳定的问题。
接收模块的代码如下:
1 | module uart_receive (input clk, |
发送模块
UART的发送模块的实现过程比接收过程稍简单,因为发送模块无需考虑采集电平的位置,只需要在接收到发送使能之后,通过计算每一个bit的时间,按照顺序将数据发送出去即可。
代码如下:
1 | module uart_send (input wire clk, |
引脚配置
1 | set_location_assignment PIN_15 -to clk |
运行截图
![]() |
|---|
