RS232串口通信的verilog实现

本文介绍了使用Verilog实现RS-232串口通信的过程,包括异步通信和全双工通信的特点。通过设计波特率发生器、发射器和接收器三个模块,实现了数据的发送和接收。在发射器中,数据由起始位、8位有效数据和2个停止位组成;在接收器中,通过8倍频率的脉冲波形进行采样。仿真结果显示,RxD_data中的数据成功传输到了TxD_data。
摘要由CSDN通过智能技术生成

RS-232串口通信的verilog实现

RS-232是一种串行数据通信的接口标准,广泛应用于计算机串行接口外设连接。
具有以下几个特征:
(1)异步通信
(2)能够进行全双工通信

RS-232可以使用DB-9连接器,如下所示,共有9个管脚
在这里插入图片描述
实际上,只需要三个管脚就可以实现RS-232串行通信了
pin2 :RxD (reciever data)
pin3:TxD(transmitter data)
pin5:GND

下面用verilog代码来实现该过程的仿真
语言:verilog
运行环境:modelsim 10.4

代码设计思路如下:
在这里插入图片描述
说明:
(1)由于要将发和收的频率统一起来,所以设计了一个脉冲发生器BaudGen,脉冲的频率就是通信的波特率。
(2)在发送阶段,每到一个脉冲,TxD_data[7:0]中的一位传送到TxD端口。
(3)在接收阶段,在每个脉冲处采样一个RxD数据,将其送入RxD_data[7:0]

因此,代码分为三个module设计
(1)波特率发生器,用于设定发出信号的频率和接受信号的频率
(2)发射器,在TxD_start有效时,发射数据,数据由一个起始位(低电平),8位有效数据,2个停止位组成。
(3)接收器,在RxD端口信号采集到低电平后,开始对8个有效数据进行采样,将每次采到的样放入寄存器RxD_state中。

代码部分如下:
(1)波特率发生模块。此处使用了一个OverSampling参数,可以在调用这个模块时设置这个参数,当OverSampling=8,就会输出一个频率为8倍的脉冲波形,这可以用于接收模块的排除偶然的异常跳转。

module BaudGen(clk,Clk_Sampling);
input clk;
output Clk_Sampling;
reg Clk_Sampling = 0;
reg [7:0] Baud_Count = 0;

parameter OverSampling = 1;
parameter N1 = 176/OverSampling;
//50000000HZ clk/ x bps = 176 
//actually 176 is a number you can set according to the baud
parameter N2 = N1/2-1;//half of N1

always @(posedge clk) begin
 if(Baud_Count == N1-1) 
  Baud_Count <= 0;
 else
  Baud_Count <= Baud_Count + 1;
end
always @(posedge clk) begin
 if(Baud_Count == N2) 
  Clk_Sampling <= 1;
 else
  Clk_Sampling <= 0;
end

endmodule 

(2)发射模块。

module transmitter(clk,TxD_start,TxD_data,TxD
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值