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;