- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计报告--011---HDB3编译码器的FPGA设计与实现
HDB3编译码器的FPGA设计与实现
一.方案论证及实现(1)
1.HDB3编码器的VHDL建模思想
从编码规则来分析,这个设计的难点之一是如何判决是否应该插“B”,因为这涉及到由现在事件的状态决定过去事件状态的问题。按照实时信号处理的理论,这是没办法实现的。但是在实际电路中,可以考虑用寄存器的方法,首先把信码寄存在寄存器里,同时设置一个计数器计数两个“V”之间“1”的个数,经过4个码元时间后,由一个判偶电路来给寄存器发送是否插“B”的判决信号,从而实现插“B”功能。
不过,信号处理的顺序不能像编码规则那样:首先把代码串变换成为AMI码,完成插“V”、插“B”工作之后,其后的“+1”和“-1”的极性还要依据编码规则的规定变换。这样做需要大量的寄存器,同时电路结构也变得复杂。若把信号处理的顺序变换一下:首先完成插“V”工作,接着执行插“B”功能,最后实现单极性变双极性输出(最后这个任务由另外一人完成)。这样做的好处是:输入进来的信号和插“V”、插“B”功能电路中处理的信号都是单极性信号,且需要的寄存器的数目可以少很多。
另外,如何准确识别电路中的“1”、“V”和“B”。因为“V”和“B”符号是人为标识的符号,但在电路中最终的表现形式还是逻辑电平“1”。解决的方法是利用双相码,将其用二进制代码分别表示。双相码的编码规则:它是对每个二进制代码分别利用两个具有两个不同相位的二进制码去取代。
例如,
代码: 1 1 0 0 1 0
双相码: 10 10 01 01 10 01
这样就可以识别电路中的“1”、“V”、“B”。也可以人为的加入一个标识符(其最终目的也是选择输出“1”的极性),控制一个选择开关,使输出“1”的极性能按照编码规则进行变化。
2.基于VHDL硬件描述语言的建模及程序设计
本设计的思想并不像前面HDB3码编码原理介绍的那样首先把消息代码变换成为AMI码,然后进行V符号和B符号的变换,而是在消息代码的基础上,依据HDB3编码规则进行插入“V”符号和插入“B”符号的操作,最后完成单极性信号变成双极性信号的转换。HDB3码的编码器模型框图如图11-1所示。
图11-1 HDB3码编码器模型
整个HDB3编码器包含三个功能部分:插“V”、插“B”和单极性码转化成双极性码。各部分之间采用同步时钟作用,并且带有一个异步的复位(清零)端口。由于本人主要负责编码器的前面两部分,故下面将对插“V”、插“B”两部分的设计流程、编写的原程序做详细介绍。
(1)插“V”模块的实现
插“V”模块的建模
插“V”模块的功能实际上就是对消息代码里的四连0串的检测,即当出现四个连0串的时候,把第四个“0”变换成为符号“V”(“V”可以是逻辑“1”——高电平),而在其他情况下,则保持消息代码的原样输出。同时为了减少后面工作的麻烦,在进行插“V”时,用“11”标识它,“1”用“01”标识,“0”用“00”标识。如图11-2所示为插“V”符号的流程图。
插“V”符号的设计思想很简单:首先判断输入的代码是什么(用一个条件语句判断),如果输入的是“0”码,使连0计数器加1,然后接着判断这是第几个“0”码,如果是第四个“0”码,则把这一位码变换成为“V”码,用“11”标识,接着使连0计数器清0。在其他条件情况下,让原代码照常输出。按这样的流程下来,就能使四连0的最后的一个0变成“V”也就是“11”,在这里我们只用了一个移位寄存器就能代替前面说的按顺序编码所需的大量寄存器,之所以能如此方便,是因为我们先进行了插“V”,而不是单极性变换。有这样的思想,其实很大部分要归功于我的课题,若是我的课题是要用VHDL实现整个HDB3的编码器,那就会很容易落入惯性思维当中,先进行单极性的变换,再进行插“V”、插“B”,如果那样的话这个编码器实现起来,难度就很大了。如果那样的话,不可能凭这样一个移位寄存器就能解决问题了,所以可以看出一个正确的建模思想对课题的研究和设计具有极其重要的意义。
图11-2 插“V”符号的流程图
插“V”模块的程序设计
以下程序是依据上述流程图,完成HDB3编码的程序中实现插“V“功能的部分程序。
add_v:process(clk,clr) --插V
begin
if(rising_edge(clk)) then
if(clr=1)then
codeoutv=00;
count0=0;
else
case codein is
when1=codeout=01; --01代表1
count0=0;
when0=
if(count0=3)then --四连0插V
文档评论(0)