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;