1、起止式异步协议的特点是一个字符一个字符传输,并且传送一个字符总是以起始位开始,以停止位结束,字符之间没有固定的时间间隔要求。本次设计采用的数据帧格式为:一位起始位,8位数据位,一位校验位和一位停止位(停止位可为一位、一位半或二位,本次设计选用一位停止位),停止位后面是不定长度的空闲位。其中停止位和空闲为高电平逻辑1;起始位为低电平,逻辑0。,系统框图及模块功能实现,1.模块端口说明设计RS232接口数据转发协议模块,并且将8位并行数据转发为RS232协议的串口数据发送出去。模块具体要求如下:模块名:module rs232;外部提供:clk信号,16MHz时钟;外部信号:rdy数据准备好信号;
2、当rdy由低电平变为高电平并持续一个时钟长度,数据开始转换并且发送。data7:0,需要发送的8位并行数据;外部控制:bps1:0,波特率设置信号;00:4800bps,01:9600bps 10:19200bps,11:38400bps串行输出信号:d_out,串行数据输出口;parity,奇偶校验控制信号;0:奇校验,1:偶校验,2.系统框图,波特率产生模块,reg 1:0bps_mode;reg 7:0count;reg clk_3,clk_2,clk_1,clk_0;always(posedge clk or posedge rdy)/产生clk_3=38461.538400Hz if
3、(rdy=1)beginclk_3=0;count=0;bps_mode=bps;endelse if(count=208)/16000000/38400=416.666,208.333*2=416.666 begin count=0;clk_3=clk_3;endelse count=count+1;,always(posedge clk_3 or posedge rdy)/clk_2=19200Hzif(rdy=1)clk_2=0;else clk_2=clk_2;always(posedge clk_2 or posedge rdy)/clk_1=9600Hzif(rdy=1)clk_1
4、=0;else clk_1=clk_1;always(posedge clk_1 or posedge rdy)/clk_0=4800Hzif(rdy=1)clk_0=0;else clk_0=clk_0;,波特率产生模块,reg bps_clk;always(bps_mode or clk_3 or clk_2 or clk_1 or clk_0)/setup bpscase(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;endc
5、ase,波特率选择模块,reg parity_mode;always(posedge rdy)parity_mode=parity;wire even_bit,odd_bit;assign even_bit=(data7:0);assign odd_bit=even_bit;reg p_bit;always(parity_mode or even_bit or odd_bit)case(parity_mode)1b0:p_bit=odd_bit;1b1:p_bit=even_bit;p_bit=1bx;endcase,校验位产生模块,reg 3:0cnt;reg 10:0send_data;r
6、eg data_out_enble,data_out;always(negedge rdy)if(rdy=0)begin send_data10:0=1b1,p_bit,data7:0,1b0;data_out_enble=1;endalways(posedge rdy or posedge bps_clk)if(rdy=1)cnt=0;else if(cnt=11)data_out_enble=0;else begin data_out=send_datacnt;cnt=cnt+1;endassign d_out=data_out_enble?data_out:1bz;,数据帧的发送控制模块
7、,系统框图,实现程序,module rs232(d_out,rdy,data,bps,parity,clk);output d_out;input rdy,parity,clk;input 7:0data;input 1:0bps;reg 1:,always(posedge clk or posedge rdy)/posedge rdy latched the bps and generate clk_3=38461.5?38400Hz if(rdy=1)begin clk_3=0;endelse if(count=208)/208.333*2=416.666 begin count=0;,r
8、eg bps_clk;endcasereg parity_mode;,reg p_bit;endcasereg 3:end,always(posedge rdy or posedge bps_clk)if(rdy=1)cnt=0;endmodule,测试激励的设计,使用ModelSim-Altera 6.5e(Quartus II 10.0)Starter Edition软件进行仿真,为了精确模拟时钟信号,采用1ns单位时间,100ps精度进行仿真。利用实例引用生成模块。仿真激励分为三次,测试发送数据为8b0101_1010,前两次测试均采用4800bps的波特率,分别测试奇偶校验功能和发送功
9、能,第三次测试波特率控制功能和数据发送功能,控制9600bps波特率进行发送。,测试文件,timescale 1ns/100ps/62.5ns=16MHzdefine clk_cycle 31module testbench;reg rdy,parity,clk;wire d_out;always#clk_cycle clk=clk;/产生激励脉冲 clkinitial begin clk=0;0=2b00;/选择波特率4800Hz data7:0=8b0101_1010;parity=1;/采用奇校验 rdy=0;#20 rdy=1;#25 rdy=0;,#2500000/odd check
10、 4800Hz parity=0;#2500000/odd check 9600Hz bps1:0=2b01;0=8b1010_1010;end rs232 u0(.d_out(d_out),.rdy(rdy),.data(data),.bps(bps),.parity(parity),.clk(clk);endmodule,仿真结果,使用ModelSim-Altera 6.5e(Quartus II 10.0)Starter Edition软件进行仿真,仿真顶层文件在work中选择测试激励文件testbench.v,然后使用add选项将变量加入到wave示波器中进行查看,如下图所示:,综合工具结果,采用Quartus II 10.0 Web Edition软件中的synthesis工具对代码进行综合,得到下图:,结果显示代码通过综合,证明此设计代码均为可综合的结构。,谢谢,Thanks for your time,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1