UART串口通信_FPGA和上位机通信实验FPGA设计Verilog逻辑源码Quartus11.0工程文件.
功能描述:串口通信__FPGA和上位机通信(波特率:9600bps,10个bit是1位起始位,8个数据位,1个结束)
** 操作过程:按动key2,FPGA向PC发送“da xi gua"一次,KEY1是复位按键。
** 字符串(串口调试工具设成字符格式接受和发送方式),FPGA接受(0到9)后显示在7段数码管上。
module uart(clk,rst,rxd,txd,en,seg_data,key_input);
input clk,rst;
input rxd; //串行数据接收端
input key_input; //按键输入
output[7:0] en;
output[7:0] seg_data;
reg[7:0] seg_data;
output txd; //串行数据发送端
////////////////////inner reg////////////////////
reg[15:0] div_reg; //分频计数器,分频值由波特率决定。分频后得到频率8倍波特率的时钟
reg[2:0] div8_tras_reg; //该寄存器的计数值对应发送时当前位于的时隙数
reg[2:0] div8_rec_reg; //该寄存器的计数值对应接收时当前位于的时隙数
reg[3:0] state_tras; //发送状态寄存器
reg[3:0] state_rec; //接受状态寄存器
reg clkbaud_tras; //以波特率为频率的发送使能信号
reg clkbaud_rec; //以波特率为频率的接受使能信号
reg clkbaud8x; //以8倍波特率为频率的时钟,它的作用是将发送或接受一个bit的时钟周期分为8个时隙
reg recstart; //开始发送标志
reg recstart_tmp;
reg trasstart; //开始接受标志
reg rxd_reg1; //接收寄存器1
reg rxd_reg2; //接收寄存器2,因为接收数据为异步信号,故用两级缓存
reg txd_reg; //发送寄存器
reg[7:0] rxd_buf; //接受数据缓存
reg[7:0] txd_buf; //发送数据缓存
reg[2:0] send_state; //这是发送状态寄存器
reg[19:0] cnt_delay; //延时去抖计数器
reg start_delaycnt; //开始延时计数标志
reg key_entry1,key_entry2; //确定有键按下标志
////////////////////////////////////////////////
parameter div_par=16'h145;
//分频参数,其值由对应的波特率计算而得,按此参数分频的时钟频率是波倍特率的8
//倍,此处值对应9600的波特率,即分频出的时钟频率是9600*8 (CLK 50M)
////////////////////////////////////////////////
assign txd=txd_reg;
//assign lowbit=0;
assign en=0; //7段数码管使能信号赋值
always@(posedge clk )
begin
if(!rst) begin
cnt_delay<=0;
start_delaycnt<=0;
end
else if(start_delaycnt) begin
if(cnt_delay!=20'd800000) begin
cnt_delay<=cnt_delay+1'b1;
end
else begin
cnt_delay<=0;