预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共24页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

基于VerilogHDL语言的串口设计 串口VerilogHDL代码: //串口 moduletrans(clk,rst,en,TxD_data,Wsec,RxD,TxD,TxD_busy,rcven,RxD_data);//时钟50MHz inputclk,rst,en; //en时发送数据使能 input[7:0]TxD_data; //发送数据输入 input[2:0]Wsec; //波特率调节0-2400;1—4800;2-9600;3—14400;4—19200;5—38400;6—115200;7-128000 inputRxD; //接收数据输入端 outputTxD,TxD_busy,rcven;//发送,发送忙,接收结束标志输出 output[7:0]RxD_data;//接收数据输出 wireBaud1,Baud8; reg[7:0]addwire;//RAM地址连线 reg[7:0]data; wire[7:0]AD_t;//读取RAM数据的地址用于发送 wire[7:0]AD_r;//接收的数据存储在RAM中的地址 wire[7:0]datawire;//数据连线 //发送例化 trans_ttt1(。clk_t(clk),。rst_t(rst),.en_t(en),。BTI_t(Baud1),。recen(recen), 。TxD_data_t(datawire),.TxD_t(TxD),。addro_t(AD_t),.TxD_busy_t(TxD_busy)); //波特生成例化 BaudGtt2(.clk_b(clk),。rst_b(rst),。BTO_b(Baud1),。BTO_R(Baud8),.Wsec_b(Wsec)); //接收例化 trans_rtt3(.clk_r(clk),。rst_r(rst),。BTI_r(Baud8),。RxD_r(RxD), 。RxD_data_r(RxD_data),.wren_r(wren_r),。addro_r(AD_r),。RxD_end(RxD_end)); //LPM_RAM例化 RAM0tt4(。address(addwire),。clock(~clk),.data(data),。wren(wren_r),。q(datawire)); always@(posedgeclkornegedgerst) if(~rst) addwire〈=8'b00000000; elseif(RxD_end) begin addwire〈=AD_r;data<=RxD_data; end elseaddwire<=AD_t; endmodule //发送模块 moduletrans_t(clk_t,rst_t,en_t,BTI_t,TxD_data_t,TxD_t,recen,TxD_busy_t,addro_t,recen); inputclk_t,rst_t,en_t,BTI_t; input[7:0]TxD_data_t; outputTxD_t; outputTxD_busy_t; outputrecen; output[7:0]addro_t; regTxD_t; reg[7:0]TxD_dataReg;//寄存器 reg[7:0]addro_t;// reg[3:0]state; regrecen; wireTxD_busy_t; assignBaudTick=BTI_t;//波特输出 //发送启动 wireTxD_ready=(state==0);//TxD_ready=1 assignTxD_busy_t=~TxD_ready; //加载发送数据 always@(posedgeclk_tornegedgerst_t) if(~rst_t) TxD_dataReg<=8’b00000000; elseif(TxD_ready&&en_t) TxD_dataReg〈=TxD_data_t; //状态机发送 always@(posedgeclk_tornegedgerst_t) if(~rst_t) begin state<=4’b0000;//复位时发送1 TxD_t<=1’b1; end else case(state) 4’b0000:if(en_t)begin state〈=4’b0100;//检测发送开始 end 4’b0100:if(BaudTick&&en_t)begin state〈=4’b1000;//发送起始位0 TxD_t〈=1’b0; end 4’b1000:if(BaudTick&&en_t)begin