FPGA实验之串口收发整合
功能:接收一个8位二进制数,并把它传给上位机。
数据包括1个起始位,8个二进制位,1个奇校验位,1个停止位,共11位。
(1) 建立工程
(2) 编写程序
顶层模块如下:
module UART_TOP(input CLK,RST,RXD,
output TXD);
UART_send_receive U1(.CLK(CLK),
.RST(RST),
.RXD(RXD),
.call_send(call_send),//CLK:时钟信号; RST:复位信号; RXD:接收数据引脚;
.Send_Data(Send_Data),//Send_Data:数据输入信号;call_send:发送使能信号
.Send_Done(Send_Done),//Send_Done:发送完成输出信号;
.Receive_Done(Receive_Done), //Receive_Done:接收完成信号;
.Receive_error(Receive_error), //接收错误的信号
.TXD(TXD), //TXD:发送输出
.Receive_data(Receive_data)); //Receive_data:接收完成的数据
reg call_send,Send_Done,Receive_Done,Receive_error;
reg [7:0] Send_Data,Receive_data;
reg [7:0] i;
always @(posedge CLK or negedge RST) // 测试串口收发模块
if(!RST)
begincall_send<=1'b0; end
else
case(i)
0:if(Receive_error) begin i<=1'b0; end //如果接收错误,则停留在这一步,继续等待接收
elseif(Receive_Done) begin i<=i+1'b1; end //如果接收完成到达下一步,否则停留在这一步
elsei<=8'b0;
1:if(Send_Done) begin i<=i+1'b1; call_send<=1'b0;end // 将发送使能信号置1,将收到的数据发送给串口
elsebegin call_send<=1'b1;Send_Data<=Receive_data; end
2:i<=8'b0; //返回第一步
endca