FPGA verilog基本外设练习(五)-串口通信

串口UART

今天主要记录一下使用黑金开发板EP4CE6F17C8型号的串口的经历。因为这块黑金开发板只有usb转串口,所以实验使用的是USB转串口的通信。如下图:
在这里插入图片描述
在这里插入图片描述
一、任务:采用串口调试助手发送指令控制开发板上面的LED0打开和关闭。
二、实现的RTL图如下:
在这里插入图片描述

三、代码实现过程
1、顶层模块uart_top

module uart_top(
    input           sys_clk,          //外部50M时钟
    input           sys_rst_n,        //外部复位信号,低有效
    //uart接口
    input           uart_rxd,         //UART接收端口
    output          uart_txd,         //UART发送端口
	output			led
    );
    
//parameter define
parameter  CLK_FREQ = 50000000;       //定义系统时钟频率
parameter  UART_BPS = 115200;         //定义串口波特率
    
//wire define   
wire       uart_en_w;                 //UART发送使能
wire [7:0] uart_data_w;               //UART发送数据
wire 	   led_open_flag;				  //串口接收到打开led的标记
wire 	   led_close_flag;				  //串口接收到关闭led的标记
wire       clk_1m_w;                  //1MHz时钟,用于Signaltap调试

//*****************************************************
//**                    main code
//*****************************************************
clk_div u_pll(                        //时钟分频模块,用于调试
    .inclk0         (sys_clk),
    .c0             (clk_1m_w)
);
     
uart_recv #(                          //串口接收模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口接收波特率
u_uart_recv(                 
    .sys_clk        (sys_clk), 
    .sys_rst_n      (sys_rst_n),
    
    .uart_rxd       (uart_rxd),
    .uart_done      (uart_en_w),
    .uart_data      (uart_data_w),
	 .led_open_flag  (led_open_flag),
	 .led_close_flag  (led_close_flag)
    );
    
uart_send #(                          //串口发送模块
    .CLK_FREQ       (CLK_FREQ),       //设置系统时钟频率
    .UART_BPS       (UART_BPS))       //设置串口发送波特率	 
u_uart_send(                 
    .sys_clk        (sys_clk),
    .sys_rst_n      (sys_rst_n),
     
    .uart_en        (uart_en_w),
    .uart_din       (uart_data_w),
    .uart_txd       (uart_txd)
    );
	 
led	led_u1(
	.clk			        (sys_clk        ),
	.rst_n			        (sys_rst_n      ),
	.led_open_flag	        (led_open_flag  )
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
FPGA(现场可编程门阵列)和STM32(一种基于ARM架构的微控制器)可以通过SPI(串行外设接口)协议进行通信。在这种通信方式中,FPGA作为SPI通信的从机,而STM32作为主机。 为了实现这种通信,我们需要使用Verilog语言编写从机FPGA的代码。首先,我们需要确定FPGA的SPI接口的基本参数,如数据位宽、时钟频率和时钟极性等。然后,我们可以使用Verilog语言编写从机的SPI控制器,将其连接到FPGA的其他逻辑电路中。 在Verilog代码中,我们需要实现SPI的Slave模式。在SPI通信中,从机始终被动地响应主机的指令,并将数据传送给主机。从机的Verilog代码需要包括两个关键部分:状态机和数据传输。 状态机是从机的控制核心,它根据主机的指令进行状态切换,并管理数据传输过程的流程控制。例如,当主机发起读取指令时,从机会进入接收状态,并将要传输的数据存储到缓冲区中。当主机发起写入指令时,从机会进入发送状态,并将数据从缓冲区传输给主机。 数据传输部分负责实际的数据传输。从机需要实现接收和发送两个功能。接收部分负责接收主机发送的数据,并将其存储到缓冲区中。发送部分负责从缓冲区中读取数据,并将其传输给主机。 在编写Verilog代码时,需要注意时序问题和信号同步。SPI通信需要精确的时钟同步,在从机和主机之间共享和交换数据需要遵循一定的时序要求。因此,在设计代码时要特别注意时钟同步和数据的正确传输顺序。 最后,我们需要将Verilog代码综合到FPGA芯片中,并进行功能验证和调试。在验证过程中,我们可以通过观察FPGA输出波形和和STM32的通信结果来判断通信是否成功。如果通信出现问题,我们可以通过调试代码和时序分析来进行故障排查和修复。 通过以上步骤,我们可以实现FPGA作为从机与STM32进行SPI协议通信,并使用Verilog语言完成代码的设计与实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值