RS232-接口数据转发协议设计PPT文件格式下载.pptx
《RS232-接口数据转发协议设计PPT文件格式下载.pptx》由会员分享,可在线阅读,更多相关《RS232-接口数据转发协议设计PPT文件格式下载.pptx(24页珍藏版)》请在冰豆网上搜索。
![RS232-接口数据转发协议设计PPT文件格式下载.pptx](https://file1.bdocx.com/fileroot1/2022-10/4/207af79a-6831-40db-a8dc-d24375ca1110/207af79a-6831-40db-a8dc-d24375ca11101.gif)
起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。
本次设计采用的数据帧格式为:
一位起始位,8位数据位,一位校验位和一位停止位(停止位可为一位、一位半或二位,本次设计选用一位停止位),停止位后面是不定长度的空闲位。
其中停止位和空闲为高电平逻辑1;
起始位为低电平,逻辑0。
系统框图及模块功能实现,1.模块端口说明设计RS232接口数据转发协议模块,并且将8位并行数据转发为RS232协议的串口数据发送出去。
模块具体要求如下:
模块名:
modulers232;
外部提供:
clk信号,16MHz时钟;
外部信号:
rdy数据准备好信号;
当rdy由低电平变为高电平并持续一个时钟长度,数据开始转换并且发送。
data7:
0,需要发送的8位并行数据;
外部控制:
bps1:
0,波特率设置信号;
00:
4800bps,01:
9600bps10:
19200bps,11:
38400bps串行输出信号:
d_out,串行数据输出口;
parity,奇偶校验控制信号;
0:
奇校验,1:
偶校验,2.系统框图,波特率产生模块,reg1:
0bps_mode;
reg7:
0count;
regclk_3,clk_2,clk_1,clk_0;
always(posedgeclkorposedgerdy)/产生clk_3=38461.538400Hzif(rdy=1)beginclk_3=0;
count=0;
bps_mode=bps;
endelseif(count=208)/16000000/38400=416.666,208.333*2=416.666begincount=0;
clk_3=clk_3;
endelsecount=count+1;
always(posedgeclk_3orposedgerdy)/clk_2=19200Hzif(rdy=1)clk_2=0;
elseclk_2=clk_2;
always(posedgeclk_2orposedgerdy)/clk_1=9600Hzif(rdy=1)clk_1=0;
elseclk_1=clk_1;
always(posedgeclk_1orposedgerdy)/clk_0=4800Hzif(rdy=1)clk_0=0;
elseclk_0=clk_0;
波特率产生模块,regbps_clk;
always(bps_modeorclk_3orclk_2orclk_1orclk_0)/setupbpscase(bps_mode)2b00:
bps_clk=clk_0;
2b01:
bps_clk=clk_1;
2b10:
bps_clk=clk_2;
2b11:
bps_clk=clk_3;
default:
bps_clk=1bx;
endcase,波特率选择模块,regparity_mode;
always(posedgerdy)parity_mode=parity;
wireeven_bit,odd_bit;
assigneven_bit=(data7:
0);
assignodd_bit=even_bit;
regp_bit;
always(parity_modeoreven_bitorodd_bit)case(parity_mode)1b0:
p_bit=odd_bit;
1b1:
p_bit=even_bit;
p_bit=1bx;
endcase,校验位产生模块,reg3:
0cnt;
reg10:
0send_data;
regdata_out_enble,data_out;
always(negedgerdy)if(rdy=0)beginsend_data10:
0=1b1,p_bit,data7:
0,1b0;
data_out_enble=1;
endalways(posedgerdyorposedgebps_clk)if(rdy=1)cnt=0;
elseif(cnt=11)data_out_enble=0;
elsebegindata_out=send_datacnt;
cnt=cnt+1;
endassignd_out=data_out_enble?
data_out:
1bz;
数据帧的发送控制模块,系统框图,实现程序,modulers232(d_out,rdy,data,bps,parity,clk);
outputd_out;
inputrdy,parity,clk;
input7:
0data;
input1:
0bps;
reg1:
always(posedgeclkorposedgerdy)/posedgerdylatchedthebpsandgenerateclk_3=38461.5?
38400Hzif(rdy=1)beginclk_3=0;
endelseif(count=208)/208.333*2=416.666begincount=0;
regbps_clk;
endcaseregparity_mode;
regp_bit;
endcasereg3:
end,always(posedgerdyorposedgebps_clk)if(rdy=1)cnt=0;
endmodule,测试激励的设计,使用ModelSim-Altera6.5e(QuartusII10.0)StarterEdition软件进行仿真,为了精确模拟时钟信号,采用1ns单位时间,100ps精度进行仿真。
利用实例引用生成模块。
仿真激励分为三次,测试发送数据为8b0101_1010,前两次测试均采用4800bps的波特率,分别测试奇偶校验功能和发送功能,第三次测试波特率控制功能和数据发送功能,控制9600bps波特率进行发送。
测试文件,timescale1ns/100ps/62.5ns=16MHzdefineclk_cycle31moduletestbench;
regrdy,parity,clk;
wired_out;
always#clk_cycleclk=clk;
/产生激励脉冲clkinitialbeginclk=0;
0=2b00;
/选择波特率4800Hzdata7:
0=8b0101_1010;
parity=1;
/采用奇校验rdy=0;
#20rdy=1;
#25rdy=0;
#2500000/oddcheck4800Hzparity=0;
#2500000/oddcheck9600Hzbps1:
0=2b01;
0=8b1010_1010;
endrs232u0(.d_out(d_out),.rdy(rdy),.data(data),.bps(bps),.parity(parity),.clk(clk);
endmodule,仿真结果,使用ModelSim-Altera6.5e(QuartusII10.0)StarterEdition软件进行仿真,仿真顶层文件在work中选择测试激励文件testbench.v,然后使用add选项将变量加入到wave示波器中进行查看,如下图所示:
综合工具结果,采用QuartusII10.0WebEdition软件中的synthesis工具对代码进行综合,得到下图:
结果显示代码通过综合,证明此设计代码均为可综合的结构。
谢谢,Thanksforyourtime,