RS232发送接收模块
可以参考下面文档,这里就不贴出来了。
RS232发送模块(Verilog)
RS232接收模块(Verilog)
以上程序均标注了J
调用串口发送接收模块
`timescale 1ns / 1ps
module serialfun(clk, RxD, TxD);
input clk; //系统时钟
input RxD;
output TxD;
//////////////////////////////////////////////////
wire RxD_data_ready;
wire [7:0] RxD_data;
async_receiver deserializer( //RS-232接收模块
.clk(clk),
.RxD(RxD),
.RxD_data_ready(RxD_data_ready),
//当接收到一个字节的数据时,"RxD_data_ready"有效一个周期
.RxD_data(RxD_data) //接收一个字节数据
);
///////////////////////////////////////////////////
async_transmitter serializer( //RS-232发送模块
.clk(clk),
.TxD(TxD),
.TxD_start(RxD_data_ready),
//"TxD_start"置位后开始传输
.TxD_data(RxD_data) //发送一个字节数据
);
endmodule
这个程序的结果是在从计算机发送八个字节到FPGA,FPGA再把这八个字节转发回计算机。
要注意是如果以十六进制发送的话,就要以十六进制显示,8个字节可以发送2个字符(0~F)。如果没选以十六进制发送的话,会以ASCII码发送,只能发送一个字符(一个字符的ASCII有8个字节)。
在Spartan3E Starter Kit开发板上有两个串口,所以设置管脚时要注意选择哪个串口,选择母头的话(DCE)与计算机相连的串口线选择交叉的公母线;选择公头的话(DTE),与计算机相连的串口线选择交叉的母母线。
我选择了公头,UCF文件如下(约束管脚)
NET
"clk" LOC
= "C9" |
IOSTANDARD
= LVCMOS33 ;
NET
"RxD" LOC
= "U8" |
IOSTANDARD
= LVTTL ;
NET
"TxD" LOC
= "M13" |
IOSTANDARD
= LVTTL |DRIVE
= 8 |SLEW
= SLOW ;
本文Xilinx ISE工程文件(在Spartan3E Starter Kit开发板上实现)
|