⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.v

📁 用Verilog实现的串口异步通信
💻 V
字号:
`timescale 1ns / 1ps
////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer:
//
// Create Date:    15:15:34 01/11/08
// Design Name:    
// Module Name:    uart
// Project Name:   
// Target Device:  
// Tool versions:  
// Description:
//
// Dependencies:
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
////////////////////////////////////////////////////////////////////////////////
module uart(CLK,data_in,data1,data_out);
 input CLK;
 input data_in;
 output reg [7:0]data1;
 output data_out;
 reg [29:0]cnt1=0;
 reg [25:0]cnt2=0;
 reg busy=0;
 reg [9:0]rxdata;
 reg hunt=0,hunt1=0;
 reg flag=0;			  //帧结束标志

 always@(posedge CLK) begin
  hunt1<=hunt;
  if(hunt1==0&&hunt==1) begin
   busy<=1;
  end

  if(busy) begin
   cnt1<=cnt1+1;
	cnt2<=cnt2+1;
  end

  if(cnt1==34133-1-2500) begin
   if(rxdata[0]==1&&rxdata[9]==0) begin
	 busy<=0;
	 cnt1<=0;					  //如果检测帧起始位停止位正确,则并行输出数据
	 cnt2<=0;
	 data1[7:0]<=rxdata[8:1];
	 flag<=1;
	end
	else begin
	 cnt1<=cnt1-3413;						 //如果检测帧起始位停止位错误,则丢弃此帧
	 flag<=0;
	end
  end
  else begin
   flag<=0;
  end

  if(cnt2==200&&busy==1) begin			//在第二百个采样点处引入输入数据
   rxdata[0]<=data_in;
	rxdata[9:1]<=rxdata[8:0];
  end

  if(cnt2==3413-1) begin			//每一位采3413个点
   cnt2<=0;
  end

  if(busy==0&&data_in==0) begin
   hunt<=1;
  end
  else begin 
   hunt<=0;
  end

end

send u1(.CLK(CLK),.flag(flag),.data_in(data1),.data_out(data_out),.data_out_flag());

////////////////////chipscope///////////////////////////////////////
wire [35:0] control0;


  //-----------------------------------------------------------------
  //
  //  ICON core instance
  //
  //-----------------------------------------------------------------
  icon i_icon
    (
      .control0(control0)
    );

wire [31:0] data;
wire [0:0] trig0;

assign data[31:9]='b0;
assign data[7:0]=data1[7:0];
assign data[8]=data_out;
assign trig0=hunt;

  //-----------------------------------------------------------------
  //
  //  ILA core instance
  //
  //-----------------------------------------------------------------
  ila i_ila
    (
      .control(control0),
      .clk(CLK),
      .data(data),
      .trig0(trig0)
    );



endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -