马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
[color=rgba(0, 0, 0, 0.9)]本文简单看下UART设计,实现笔记本电脑与ZCU106开发板的串口通信。 [color=rgba(0, 0, 0, 0.9)] 串口通信协议很简单,按照特定的时钟频率(称之为波特率)发送数据,数据包括起始位+8bit+可选奇偶校验位+停止位。停止位一般停留在高电平,起始位就采用低电平触发。
[color=rgba(0, 0, 0, 0.9)]虽然接收端采用异步时钟接收,但只要保证接收端时钟与发送端时钟在一个传送周期,最多10个bit之内偏差不超过半个波特率时钟,即可保证正常接收。根据这个原理,串口通信即使我们不知道发送波特率,也可以采用搜索起始位和停止位的方法找到波特率具体值。
[color=rgba(0, 0, 0, 0.9)]笔记本端的串口工具采用串口调试助手,可以只测试串口的物理层通信,而不用考虑高层协议。 [color=rgba(0, 0, 0, 0.9)]笔记本通过USB线连接到ZCU106板卡,板卡内通过USB转串口芯片连接到FPGA。查阅开发板原理图,
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]从USB输入的差分信号,经过CP2108芯片转换成四路串口信号,其中UART2_TXD_0_FPGA_RXD,UART2_RXD_0_FPGA_TXD接到了FPGA的PL侧(可编程逻辑)。原理图上寻找到FPGA的时钟和复位管脚,注意此处复位默认拉低,是高有效复位信号。
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]接口包括连接到FPGA外部的时钟,复位,串口以及FPGA内部的axi流接口,此外还包括一组可不连接的状态接口以及一个配置接口用于配置波特率。简单设计接口如下: [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]增加接口约束:
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]FPGA编译完成,schematic如下: [color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]找到板卡跳线,设置成jtag模式,并通过jtag下载bit文件:打开串口调制助手,窗口已经有连续字节接收,对应数据正好是verilog代码里写的固定数据。
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]通过ila查看到波形如下,串口发送也没有问题
[color=rgba(0, 0, 0, 0.9)]
[color=rgba(0, 0, 0, 0.9)]本文参考的相关文件可在百度网盘下载, [color=rgba(0, 0, 0, 0.9)]--来自百度网盘超级会员v6的分享
|