一个基于硬件描述语言的uart核 该软核灵巧方便
源代码在线查看: txd.v
//////////////////////////////////////////////////////// // File : txd.v // Author :xinggang xu // Organization: // Created : 07/05/2008 // Last update : // Platform : // Simulators : // Synthesizers: // Targets : // Dependency : ///////////////////////////////////////////////////////// // Description:uart ///////////////////////////////////////////////////////// // Copyright (C) 2008 xu /////////////////////////////////////////////////////////// `timescale 1 ps / 1 ps module txd(//input bclk, rstr, t_mit, tbuf, //output t_done, txd ); input bclk; input rstr; input t_mit; input [7:0]tbuf; output t_done; output txd; reg [7:0]tbufs; reg [3:0]tcnt; reg txds; reg [3:0]t_bitcnt; reg [2:0]state; parameter tp=1; parameter framelen=8; //************************** //reciever state parameter t_idle=3'b001; parameter t_start=3'b010; parameter t_wait=3'b011; parameter t_shift=3'b100; parameter t_stop=3'b101; assign t_done=(((state==t_stop) && tcnt==14) && ~t_mit); always @(posedge bclk or negedge rstr) begin if(~rstr) state else begin case(state) t_idle:if(t_mit) state else state t_start:state // else state t_wait:if(tcnt>=14) if(t_bitcnt==framelen) state else state else state t_shift:state t_stop:if(tcnt>=14) begin if(!t_mit) state else state end else state default:state endcase end end always @(posedge bclk or negedge rstr) begin if(~rstr) begin tbufs tcnt txds t_bitcnt end else case(state) t_idle: begin tcnt t_bitcnt if(t_mit) begin tbufs end else tbufs end t_start: begin txds end t_wait:if(tcnt==14) begin tcnt if(t_bitcnt==framelen) t_bitcnt end else tcnt t_shift: begin txds tbufs t_bitcnt end t_stop: begin tcnt txds end endcase end assign txd=txds; endmodule