MODULSEM VERILOG 串口发送模块

//串口发送模块
`timescale 1ns/10ps
module uart_tx(
	clk,
	res,
	data_in,
	en_data_in,
	TX,
	rdy
	);
	input  clk;
	input  res;
	input[7:0]  data_in;//zhun befasongde shuju
	input  en_data_in;//fasongshinneg
	output TX;
	output rdy;//kogxianbiaozhi 0bioashikongxian

reg[3:0] state;//zhuzhuangtaijijicunqi
reg[9:0] send_buf;//fasong jicunqi
reg[12:0] con;//jisuan botelvzhouqi
reg[9:0] send_flag;//panduanyouyijieshu
reg rdy;
assign TX=send_buf[0];
always@(posedge clk or negedge res)
if(~res) begin
state<=0;send_buf<=1;con<=0;
send_flag<=10'b10_0000_0000;
rdy<=0;
end
else begin
case(state)
//dengdaishinnegxinhao
0:begin if(en_data_in)begin 
send_buf<={1'b1,data_in,1'b0};
send_flag<=10'b10_0000_0000;
rdy<=1;
state<=1;
end
end
//chuankoufasong  jicunqiyouyi
1:begin 
if(con==5000-1)begin 
 con<=0;

 end
 else begin
  con<=con+1;
 end
if(con==5000-1)begin
send_buf[8:0]<=send_buf[9:1];
send_flag[8:0]<=send_flag[9:1];
end

if(send_flag[0]==1)begin
rdy<=0;
state<=0;

end
end

endcase
	end
	endmodule
module uart_tx_tb;
reg clk,res,en_data_in;
reg[7:0]data_in;
wire TX,rdy;
uart_tx uart_tx(  //tongminglihua
	clk,
	res,
	data_in,
	en_data_in,
	TX,
	rdy
	);
initial begin
      clk<=0;res<=0;data_in<=8'h0a;en_data_in<=0;
    #17 res<=1;
    #30  en_data_in<=1;
    #10  en_data_in<=0;
    #1000 $stop;
end
always #5 clk=~clk;



endmodule

结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值