目录
1.实验任务——2.硬件设计——3.程序设计
1.实验任务
2.硬件设计
1.正点原子
发送:主机,串口调试助手——USB_UART,D-D+连接CH340C转UART——UART1——TXD传到FPGA。
接收过程正好相反,然后对比发送接收的数据是否一致,验证功能是否成功。
升级版CH340C不需要额外的晶振,已经集成在了CH340C芯片内部,外部无需晶振。
2.我的USB_UART——ZYNQ7200
data_sheet:CP2102-GM (SILABS [单芯片USB至UART桥接]) PDF技术资料下载 CP2102-GM 供应信息 IC Datasheet 数据表 (1/18 页)-芯三七
3.程序设计
1.模块
流程:上位机:PC——发送数据(USB_UART)——FPGA接收、处理数据——环回模块(接收之间的调节器)告诉发送模块接受到了一个有效数据——环回模块传输有效数据到发送模块+发送模块会接收到 发送指令 ——开启发送——发送到上位机串口调试助手。
停止位拉高多少位代码中再细说。当检测到拉高信号后的下降沿,才认为下一数据帧开始传输。
2.时序图——串口接收为例:
1.时钟:50MHZ,波特率115200,所以每434个时钟周期,发送一个bit。
2.由start_flag拉高,打开rx_flag开始接收数据,直到接收到停止位(如下图红色箭头),rx_flag就会拉低,等下一个数据帧。
3.数据线usart_rxd,每当rx_count处于1~8之间的时候,对应的将bit0传递给uart_data的第0位,将bit1传递给uart_data的第1位......最后加入一个停止标志位xxh。
综上:1.首先定义两个计数器,①rx_cnt 比特位计数器(每434个时钟周期技术加1,通过clk_cnt满足要求就+1) ②clk_cnt 波特率计数器(从0-433,通过50MHZ的同步时钟sys_clk控制)。
2.如何启动——由start_flag启动——而start_flag又是通过抓取uart_rxd,即PC端给出的下降沿来启动。
3.当start_flag启动后——拉高rx_flag代表模块进入接收数据状态——当rx_cnt等于1,将uart_rxd对应的“bit 0”数据传输给uart_data的第零位,指导数据传输完毕。
4.当rx_cnt=9时——给出一个uart_down的信号,代表接收数据完毕。
3. 串口发送
对称操作,FPGA端有 uart_txd 、 tx_start_flag、tx_flag等。
不同的是,传输数据从uart_data传送到uart_txd上,传输出去。
4.RTL电路图
重点就是编写三个模块!