FPGA基础学习——简易串口发送

首先需要了解uart 的通信协议和传输时序

uart通信首先将接收到的并行数据转换成串行数据来传输。消息帧起始位为低电平,后面接7或8个数据位(大部分为8个数据位),1个可用的奇偶校验位(根据数据中1的个数是否为偶数(偶校验位)还是奇数(奇校验位)),1个或者多个高位停止位。(传输一个字节大约需要10个比特位)


接收器发现开始位时知道数据准备发送,并尝试与发送器时钟频率同步。如果选择了奇偶校验位,可以用来帮助错误校验。在接收过程中,uart从消息帧中去掉起始位和结束位,对进来的字节进行奇偶校验,并将数据字节从串行转成并行。

(T为一个数据位占用的时间,如果波特率为9600,那么T4=1/9600)


实验实现,当按键key1按下,不断发送一个常数,在串口调试助手上可以查看。利用状态机实现

module uart_tx(
input      clk,       //时钟输入
input      rst_n,     //复位输入
input      key,       //一个按键,用于发送控制,低电平有效
output reg txd        //串口发送管脚

);

//状态机状态定义,空闲位+开始位+8bit数据位+停止位
parameter S_IDLE  = 4'd0; //空闲状态
parameter S_START = 4'd1; //发送1BIT起始码0
parameter S_BIT0  = 4'd2; //发送第一位数据
parameter S_BIT1  = 4'd3;
parameter S_BIT2  = 4'd4;
parameter S_BIT3  = 4'd5;
parameter S_BIT4  = 4'd6;
parameter S_BIT5  = 4'd7;
parameter S_BIT6  = 4'd8;
parameter S_BIT7  = 4'd9;

parameter S_STOP  = 4'd10;//发送停止位 1 


reg [3:0] state;    //定义状态寄存器,11个状态,2^4=16,足够

reg[15:0] bit_timer; //用于控制波特率的计数器如果波特率是9600,每个数据位50000000/9600个时钟周期

wire[7:0] tx_data;   //发送的固定数据12

assign tx_data = 8'hAB;   //此处可以修改发送的数据

//----------一段式状态机编写

always@ (posedge clk or negedge rst_n)

begin

        if (!rst_n)

        begin

               state<=S_IDLE;

              bit_timer<=16'd0;

              txd<=1'b1;             //复位

### FPGA 串口通信上位机实现方法 对于FPGA与PC之间的串口通信,通常涉及硬件和软件两部分的设计。在硬件方面,已经明确了FPGA如何处理来自PC端的数据流以及向PC端发送数据的方式[^1]。 #### 上位机实现方式 针对上位机一侧,在Windows操作系统环境下,可以利用多种编程语言来完成UART接口的操作。Python由于其丰富的库支持成为一种理想的选择之一。具体来说,`pySerial`是一个广泛使用的用于访问串行端口的模块,能够轻松配置波特率、停止位等参数并读写数据: ```python import serial ser = serial.Serial('COM3', baudrate=9600, timeout=1) while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').rstrip() print(line) ``` 这段简的脚本展示了怎样打开指定编号的COM端口并与之交互,其中包含了基本的读取操作[^2]。 另外,C++结合Qt框架也是构建图形界面应用程序的好方案,特别是当需要更复杂的UI或者跨平台特性的时候。Qt提供了QextSerialPort类作为扩展功能,简化了串行通信程序开发过程中的许多细节问题。 #### 开发环境搭建建议 为了方便调试和测试目的,推荐使用虚拟串口工具创建一对模拟设备对(例如com1 <-> com2),这样可以在不依赖真实物理连接的情况下验证双方协议逻辑是否正确无误工作。此外,像Tera Term这样的终端仿真器同样有助于观察实时收发情况,辅助定位潜在错误源。 #### 工具链选择 考虑到不同开发者可能偏好各异的工作流程和技术栈,以下是几种常见的组合形式供参考: - **Quartus + Python/pySerial**: 对于熟悉Altera/Intel系列器件的人来说是个不错搭配; - **Vivado/Xilinx SDK + C/C++ (with libserialport)**: 更适合那些倾向于Xilinx产品的工程师们; - **PlatformIO + Arduino IDE**: 如果追求简易快速原型制作,则可以选择这条路线,尽管它主要面向微控制器而非大型FPGA板卡。 综上所述,无论是选用哪种具体的手段去达成目标——即让计算机能有效地同基于现场可编程门阵列(FPGA)构建起来的小型嵌入式系统之间建立起稳定可靠的双向对话机制——都离不开良好规划前期需求分析环节的重要性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值