HDB3编码器设计_Verilog程序设计.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
HDB3编码器设计 一.HDB3编码器的工作原理与功能 (一)设计目的及编码规则 要求实现HDB3编码器。数字基带信号的传输是数字通信系统的重要组成部分。在数字通信中,有些场合可不经过载波调制和解调过程,而对基带信号进行直接传输。采用AMI码的信号交替反转,有可能出现四连零现象,这不利于接收端的定时信号提取。而HDB3码因其无直流成份、低频成份少和连0个数最多不超过三个等特点,而对定时信号的恢复十分有利用语言对数据传输系统中的HDB3编码器进行设计。”,”B”的极性与前一个非”0“符号相反,并使“V”后的非“0”符号从“V”开始再交替变化。 (二)设计难点 设计难点在于判决是否插入“B”,涉及到由现在的事件决定过去事件状态的问题。 在实际电路中,需要采用大量的寄存器将码存在寄存器中,然后用计数器计算两个“V”之间的“1”数,从而判断是否插入“B”。 该方法需要大量的寄存器,电路结构复杂,且会造成较大的延时。且由于AMI存在+1、0、-1三种状态,在数字电路中无法表示。 在实际电路设计时,先在纯粹的数字电路下完成插“V”的操作,再完成插“B”的操作;然后再将单极性变成双极性。这样可以在数字电路中实现,且降低寄存器需求。 因为“V”、“B”是认为标识的符号,所以在具体电路中,需做以下替换: 0-00,1-01,V-11, B-10。 (三)设计步骤 插“V”的实现: 设置连“0”计数器,复位为0; 对输入信号进行判断,如果为1则计数器复位,且输出“01”; 如果为“0”,则对“0”进行计数,如果计数值不为4,则输出“00”; 如果计数值为“4”,则计数器复位,同时输出为“11”。 插“B”的实现: 设置对“01”的计数器count1为0,设置对“11”的计数器countV为0; 对输入进行判断,如果为“01”,则count1加1,仍然输出“01”; 如果输入为“00”,输出为“00”,计数器不变; 如果输入为“11”,countV加1,此时如果countV为奇数,则输出仍为“11”; 如果countV为偶数,则判断count1,如果count1为奇数,则输出仍为“11”; 如果count1为偶数,则将count1复位,且将此处前第4个数变成“10”。 单双极性变换: 由HDB3编码规则,“V”的极性是正负交替,而“1”和“B”的极性看成一体,为正负交替的,同时“V”的极性与前面的非“0”码一致。 设置一个极性标志flag=0; 如果输入信号为“00”,输出仍为“00”; 输入为“01”,或“10”,如果flag=1,输出“01”;如果flag=0,输出为“10”,然后将flag翻转; 如果输入为“11”,判断flag,如果为1,则输出“10”,如果位0,输出“01”。 注意:输出后的“10”和“01”表示的不再是“1”、“V”、和“B”了,而是标识符号的正负极性。再将输出控制4选1的开关,就可以将“00”、“01”、“10”转化为0、+1和-1了。 二.电路设计程序v_hdb3模块模块功能:插v模块的功能是对消息代码里的四连0中的检测,即当出现四个连 串时把第四个0变换成为符号v,(v可以是逻辑1―――高电平),而在其他 情况下,则保持消息代码输出。用11表示v,01表示1,00表示0 ***说明:用11表示v,01表示1,00 module v_hdb3(reset_all,data1,clk_2m,data2,data3); input reset_all; input data1; input clk_2m; output data2; output data3; reg data_in_buff; always@(negedge reset_all or posedge clk_2m) begin if(!reset_all) begin data_in_buff=1b0; end else begin data_in_buff=data1; end end reg[2:0] count0; reg[5:0] data_coursea_buff; reg[5:0] data_courseb_buff; wire data2=data_coursea_buff[0]; wire data3=data_courseb_buff[0];//count the numbers of 0 always@(negedge reset_all or posedge clk_2m) begin if(!reset_all) begin count0=1b0; end else if(count0==3d4) begin if(data_in_buff) count0=1b0; else count0=1b1; end else begin

您可能关注的文档

文档评论(0)

綠洲 + 关注
内容提供者

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

1亿VIP精品文档

相关文档