FPGA

您所在的位置:网站首页 ch430g转串口使用 FPGA

FPGA

2023-06-29 00:41| 来源: 网络整理| 查看: 265

      实验目标:通过电脑调试助手向FPGA的UART串口接收模块发送数据,然后数据可以稳定显示在数码管上。

      实验目的: 练习UART串口模块和数码管的使用。之前已经有文章详细讲解了串口和数码管的开发,故这里直接提供设计思路供大家参考。

(串口文章链接)https://mp.csdn.net/mp_blog/creation/editor/128935535https://mp.csdn.net/mp_blog/creation/editor/127933111

(数码管文章链接)https://mp.csdn.net/mp_blog/creation/editor/127933111 

1. 模块框图

2. RTL代码 2.1 顶层模块 `timescale 1ns/1ns module smg_uart ( input wire sys_clk , input wire sys_rst_n , input wire rx , output wire [5:0] sel , //数码管位选信号 output wire [7:0] seg //数码管段选信号 ); parameter UART_BPS = 20'd9600 , //波特率 CLK_FREQ = 26'd50_000_000 ; wire [7:0] data; uart_rx #( .UART_BPS (UART_BPS ), //串口波特率 .CLK_FREQ (CLK_FREQ ) //时钟频率 ) uart_rx_inst ( .sys_clk (sys_clk ), .sys_rst_n (sys_rst_n ), .rx (rx ), .po_data (data ) ); seg_dynamic seg_dynamic_inst ( .sys_clk (sys_clk) , .data (data ) , .sys_rst_n (sys_rst_n) , .sel (sel ) , .seg (seg ) ); endmodule 2.2 UART数据接收模块 `timescale 1ns/1ns //接收8位串行数据后转并行 module uart_rx #( parameter UART_BPS = 'd9600, //9600BPS CLK_FREQ = 'd50_000_000 //50MHZ ) ( input wire sys_clk , input wire sys_rst_n , input wire rx , output reg [7:0] po_data ); localparam BAUD_CNT_MAX = CLK_FREQ/UART_BPS ; //接受1bit数据所需多少个脉冲周期 reg rx_reg1; reg rx_reg2; reg rx_reg3; reg start_nedge; reg bit_flag; reg [3:0] bit_cnt; reg work_en; reg [15:0] baud_cnt; reg [7:0] rx_data; reg rx_flag; reg po_flag; reg [7:0] data; //rx_reg: 进行打拍操作,消除亚稳态 always @(posedge sys_clk or negedge sys_rst_n) if( !sys_rst_n ) begin rx_reg1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3