/****************************************************************************** * File: uart_tb.v * Version: V0.0 * Author: minjingguo * Date: 20070814 * Company: SHHIC Co., Ltd. ****************************************************************************** * Description: * * ****************************************************************************** * Version: V0.1 * Modifier: name * Date: * Description: ******************************************************************************/
// *************************
// MODULE DEFINTION
//**************************
module uart_tx
(
//INPUT
rst ,
clk16x ,
din ,
wr ,
parity_def,
//OUTPUT
tbre , //tbre=0 if tx is empty
sdo
);
// *************************
// INPUTS
// *************************
input rst ;
input clk16x ;
input [7:0] din ;
input wr ;
input parity_def ;
// *************************
// OUTPUTS
// *************************
output tbre ;
output sdo ;
// *************************
// INTERNAL SIGNALS
// *************************
reg [3:0] cnt_clk ;
reg [3:0] cnt_byte ;
reg tbre ;
reg [7:0] tbr ;
reg sdo ;
reg [7:0] tsr ;
reg parity ;
// *************************
// CODE
// *************************
always @(posedge clk16x or negedge rst)
begin
if (rst== 1'h0)
begin
cnt_clk cnt_byte end
else
begin
if (cnt_byte==4'hf)
begin
if (wr)
begin
cnt_clk cnt_byte end
end
else
begin
cnt_clk if (cnt_clk==4'hf)
begin
if (cnt_byte==4'hb)
cnt_byte else
cnt_byte end
end
end
end
always @(posedge clk16x or negedge rst)
begin
if (rst== 1'h0)
begin
tbre tbr end
else
begin
if (wr)
begin
tbre tbr end
else if (cnt_clk==4'hf && cnt_byte == 4'hb)
begin
tbre end
end
end
always @(posedge clk16x or negedge rst)
begin
if (rst== 1'h0)
begin
sdo parity tsr end
else if (cnt_clk==4'h7)
begin
if (cnt_byte == 4'h0)
begin
tsr sdo parity end
else if ((cnt_byte >= 4'h1) && (cnt_byte begin
tsr sdo parity end
else if (cnt_byte == 4'h9)
begin
sdo end
else if (cnt_byte == 4'ha)
begin
sdo end
else if (cnt_byte == 4'hb)
begin
sdo parity end
end
end
endmodule