基于FPGA的类曼彻斯特编码发送模块设计.docVIP

基于FPGA的类曼彻斯特编码发送模块设计.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于FPGA的类曼彻斯特编码发送模块设计.doc

基于FPGA的类曼彻斯特编码发送模块设计   摘 要 本文基于类曼彻斯特码,采用VHDL编程,设计和仿真了串行数据传输过程中编码发送模块的功能。类曼彻斯特码采用数据中嵌入时钟信号的设计思想,是一种利用自同步法保持位同步的线路码型,在高速串行通信过程中采用这种编码方式可以降低系统功耗,同时具有很强的抗干扰能力。   中图分类号TN7 文献标识码A 文章编号 1674-6708(2014)109-0209-02   0 引言   类曼彻斯特码是一种利用自同步法保持位同步的线路码型,它用上升沿来表示一个码元的开始,然后连续两个时钟信号的高电平表示“1”,对应编码数据“0100”,反之连续两个时钟的低电平表示“0”,对应编码数据“0111”。经类曼彻斯特编码后,无论是数据“1”还是数据“0”,在开始的时候都有一个上升沿,包含了时钟信息,正是具有这一特点,类曼彻斯特编码发送功能的设计实现解决了串行数据传输的同步时钟问题。   1硬件设计   在硬件设计时采用LVDS差分电路,LVDS是一种低摆幅的差分信号技术,它使得信号能够在差分平衡电缆上以几百Mbps的速率传输,其低压幅和低电流的驱动输出完全达到了低噪声和低功耗的要求。本设计中,FPGA传出的串行数据通过差分电路的转换,形成差分形式的数据,向外传输,设计电路如图1所示。   图1 发送模块   该电路临近输出端串接了10Ω的电阻,可以防止差分线对短路,缺点在于420mV的驱动电压已接近数据手册中给出的Vod最大值454mV。同时设计中还需要考虑信号反射问题,这种现象的产生会导致噪声类型的转变,使其从原来的共模信号转变为差模信号,从而降低数据传输的准确性。为了避免这一问题,我们在设计中应做到在信号值不同时输出阻抗保持不变,同时,输出阻抗的下限只能稍小于传输线特性阻抗,而它的上限必须略大于传输线的特性阻抗。   2 软件设计   类曼彻斯特编码可以分为三步进行。第一步,检测编码周期是否开始并发送开始信号;第二步,对十五位数据进行类曼彻斯特编码;第三步,采用偶校验方式生成校验位,完成编码周期。具体编程时可以分为数据定义、数据转换及校验和数据编码及发送三大模块。   2.1 编码过程   当时钟的上升沿到来时,若复位信号有效则将数据位、校验位都清零,否则count_state1加1。若count_state1为011则表示一个数据位传输的开始,传1位数据,传送完该数据共经历四个时钟周期,在这四个时钟周期内count_state1共经历四个时钟周期的转换,其状态转换流程如图2所示。   图2 count_state1的状态转换图   2.2 数据定义模块   数据定义模块完成对输入输出信号的定义,具体程序为:   module Manchester_Encoder(clk1M,rst,data,out);   input clk1M;   input rst;   input [15:0] data;   output out;   2.3数据转换及校验模块   该模块采用状态机完成16位并行数据到串行数据的转换,通过逐位异或运算来生成奇偶校验位,具体程序为:   reg [2:0] count_state1;   reg [4:0] count_state2;   reg [15:0] send_data;   reg send_bit,parity_bit;   always @(posedge clk1M)   begin   if(!rst)   begin   count_state1=3b000;   count_state2=5b0_0000;   send_data=16h0000;   parity_bit=1b0;   end   else   begin   count_state1=count_state1+1; //控制数据状态   if(count_state1==3b011) //对数据进行编码   begin   count_state2=count_state2+1;   case(count_state2) //对数据进行位处理   5b0_0000:send_data=data;   5b0_0001:{…}   5b1_0001:{…} //发送校验位   5b1_0010:{…}   end case   count_state1=3b000; //初始化   end   end   end   2.4数据编码及发送模块   该模块对每一位数据进行编码并发送,具体程序为:   wire out1=(count_state2=5d2)  

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档