单总线传输协议b2s

上传人:d**** 文档编号:170274738 上传时间:2022-11-19 格式:DOCX 页数:10 大小:24.72KB
收藏 版权申诉 举报 下载
单总线传输协议b2s_第1页
第1页 / 共10页
单总线传输协议b2s_第2页
第2页 / 共10页
单总线传输协议b2s_第3页
第3页 / 共10页
资源描述:

《单总线传输协议b2s》由会员分享,可在线阅读,更多相关《单总线传输协议b2s(10页珍藏版)》请在装配图网上搜索。

1、1.讲废话小弟最近做了一个项目(用Lattice的CPLD),话说前面还算顺利,就在即将完工的时 候,发现(TMD) I/O不够用,有一功能需要CPLD传输8bit数据到另一个控制器做进一步 处理,but现在仅剩下一个I/O,好吧,我被卡死在这里了。终于,在一个月黑风高的夜晚(本人喜欢把气氛营造的悲壮一点,嘎嘎。),突然想到DS18B20的 单总线传输协议,以前也了解过其他的协议,心想,为嘛自己不整一个类似的东东出来yy 一下呢,所以有了此贴。解释一下,本次原创单总线传输协议命名为b2s(不才,取了个类似I2C的名,由于本 人有一个贱贱的英文名Bob,所以用了 b,各位轻喷啊;s代表singl

2、e,意为单线传输), 本协议含传送端(transmitter)和接收端(receiver)两部分,基于verilog语言,仅使用单 个I/O 口进行多位数据的传输,传输方向为单向,用于I/O不够用的情况,亲测绝对可用, 如果大家以后有用得到的时候,可以直接拿来使用。本人拥抱开源,所有源码能贴出来尽量贴出来,为大家节省积分,攒RP。废话完毕,下面为各位客官准备干货。2.晒干货ps.带号处可根据需要进行修改.发送端源码:Author:E-mail:File Name:Bob Liub2s_tra nsmitter.vFun etio n:Versio n:b2s发送端,默认发送32bit数据,数据

3、宽度可更改2013-5-13 v1.0moduleb2s_tra nsmitter(elk,时钟基准,不限频率大小,但必须与接收端一致din,待发送数据b2s_dout/b2s数据输出端口);parameter WIDTH=32;设定b2s发送数据的位宽,可根据需要进行更改in putin putelk;WIDTH-1:0din;/=b2s数据发送时序/=regb2s_dout_r;reg3:0state;reg9:0cn t;reg4:0cou nt;与发送数据位宽保持一致(如发送32bit数据时,count宽度为5;发送8bit时,count宽度为4) always (posedge el

4、k)begincase(state)初始化0:begincoun t=0;b2s_dout_rv=1;if(c nt=19)b2s_dout_r高电平持续20个时钟beginstatev = 1;cn tv=0;endelsebegincn tv=c nt+1;endend开始信号时序1:beginb2s_dout_rv=0;if(cnt=19)b2s_dout_r低电平持续20个时钟beginstatev=2;cn tv=0;endelsebegincn tv=c nt+1;endend2:beginb2s_dout_rv=1;if(c nt=19)b2s_dout_r高电平持续20个时钟b

5、egincn tv=0; statev=3;endelse begincn tv=c nt+1;endend待发送数据的逻辑电平判断3:beginif(di ncou nt=1)statev=4;elsestatev=8;end逻辑1的发送时序4:beginb2s_dout_rv=0;if(cn t=9)b2s_dout_r低电平持续10个时钟begincn tv=0; statev=5;endelse begincn tv=c nt+1;endend5:beginb2s_dout_rv=1;if(c nt=29)b2s_dout_r高电平持续30个时钟begincn tv=0; statev

6、=6;endelse begincn tv=c nt+1;endend逻辑0的发送时序8:beginb2s_dout_rv=0;if(c nt=29)b2s_dout_r低电平持续30个时钟begincn tv=0;statev=9;endelsebegincn tv=c nt+1;endend9:beginb2s_dout_rv=1;if(cn t=9)b2s_dout_r高电平持续10个时钟begincn tv=0;statev=6;endelsebegincn tv=c nt+1;endend统计已发送数据位数6:7:begincou ntv=co un t+1b1;statev=7;e

7、ndbeginif(cou nt-WIDTH)当一组数据所有位发送完毕,返回并继续下一次发送beginb2s_dout_rv = 1;if(cn t=999)b2s_dout_r 高电平持续 1000 个时钟begincn tv=O; statev=O; endelsebegincn tv=c nt+1;endendelse当一组数据未发送完毕,则继续此组下一位数据的发送statev=3;end/default值设定default:beg instatev=0;cn tv=0;coun tv=0;endendcaseend en dmoduleassig nb2s_dout=b2s_dout_

8、r;接收端源码:Author:E-mail:File Name:Bob Liub2s_receiver.vFun ctio n:b2s接收端,默认接收32bit数据,接收数据宽度请与发送端发送数据宽度保持一致Versio n:2013-5-13 v1.0module b2s_receiver(clk,时钟基准,不限频率大小,但必须与发送端一致b2s_d in,b2s发送端发送过来的信号doutb2s接收端解码出的数据); parameterWIDTH=32;设定b2s接收数据位数,默认接收32bit数据,接收数据宽度请与发送端发送数据宽度保持一致elk; b2s_d in;in putin p

9、utoutput WIDTH-1:0 dout;/=b2s_din信号边沿检测/= reg 1:0 b2s_din_edge=2b01;always (posedge clk)beginb2s_d in _edge0 = b2s_d in;b2s_d in _edge1 15)&(time_c ntv25)判断起始信号statev = 1;elsestatev=state;end1:beginif(time_c nt5)&(time_c ntv15)判断接收到的位是否为 1begindout_rWIDTH-1v = 1; statev=2;endelse if(time_c nt25)&(ti

10、me_c ntv35) 判断接收到的位是否为 0 begindout_rWIDTH-1v=0;statev=2;endelsebeginstatev=state;endend2:begincou ntv=cou nt-1b1;每读取一个 bit,cou nt 计数减 1statev=3;读取beginstatev=O;endelsestatev=4;数据未读取完毕,则进行移位4:begindout_rv=(dout_r1); 数据右移 1 位 statev = 1;enddefault:beg instatev=O;cou ntv=WIDTH;endendcaseendassig ndout=

11、(cou nt=0)?dout_r:dout;每当一组数据读取完毕,则更新一次dout的值en dmodule也许有些盆友第一次看到上面的代码,不知如何调用,所以下面给出调用示例作为参考。调用发送端,通过单个I/O发送出一组32bit数据:Author:E-mail:Fun ctio n:Versio n:Bob Liub2s功能测试:通过b2s transmitter模块将预置的32bit数据发送出去2013-5-13 v1.0module b2s_tra nsmitter_test(in putelk,基准时钟outputb2s_dout b2s 数据输出端口);parameter WID

12、TH=32;设定b2s发送和接收数据位宽,此处可根据需要进行修改/=预置待发送数据/= wire WIDTH-1:0 din;assigndi n=bO1O1O1O1_OO1111OO_11O111OO_11OO1111;此处可根据需要进行修改,不限于固定数值/=调用 b2s_transmitter 模块/= b2s_tra nsmitter #(例化发送数据位宽时钟基准,不限频率大小,但必须与接收端一致 待发送数据/b2s数据输出端口.WIDTH(WIDTH)b2s_tra nsmitter_is ntO(.clk(clk),.di n( di n),.b2s_dout(b2s_dout)

13、);en dmodule调用接收端,解码发送端所发出的32bit数据:Author:Bob LiuE-mail:*Function:b2s功能测试:通过b2s receiver模块进行对b2s transmitter发送的数据进行接收解码Versio n:2013-5-13 v1.0module b2s_receiver_test (in putclk,基准时钟in put output31:0b2s_dout, /b2s发送端发送过来的信号dout解码出的32bit数据); parameter行修改WIDTH=32;设定b2s发送和接收数据位数,此处可根据需要进/=调用 b2s_receiv

14、er 模块/= b2s_receiver#(例化接收数据位宽时钟基准,不限频率大小,但必须与发送端一致/b2s发送端发送过来的信号/b2s接收端解码出的数据.WIDTH(WIDTH) b2s_receiver_i nstO(.clk(clk),.b2s_d in (b2s_dout),.dout(dout);en dmodule3.扯犊子本协议优缺点如下:优点:1.仅使用单个I/O 口进行多bit数据发送和接收(串行),可节省大量I/O 口留作它 用。2. 传输频率不限,只需保证发送端和接收端工作频率一致即可。3. 接收端所得到的信息始终是最新的,传输频率高时,近乎实时。4. 发送和接收数据宽度不限,可根据需要进行调整。缺点:1.由于单线,无其他控制信号,发送端和接收端会一直处于工作状态(发送端一直 发,接收端一直接),功耗稍高

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!