预览加载中,请您耐心等待几秒...
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);//时钟50MHzinputclk,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-128000inputRxD;//接收数据输入端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)beginaddwire〈=AD_r;data<=RxD_data;endelseaddwire<=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=1assignTxD_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)beginstate<=4’b0000;//复位时发送1TxD_t<=1’b1;endelsecase(state)4’b0000:if(en_t)beginstate〈=4’b0100;//检测发送开始end4’b0100:if(BaudTick&&en_t)beginstate〈=4’b1000;//发送起始位0TxD_t〈=1’b0;end4’b1000:if(BaudTick&&en_t)beginstate<=4’b1001;//bit0if(en_t)TxD_t<=TxD_dataReg[0];elseTxD_t<=1’b0;end4'b1001:if(BaudTick&&en_t)beginstate〈=4’b1010;//bit1if(en_t)TxD_t〈=TxD_da