- 1、本文档共33页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
CPLD上五种密勒码基带码型变换方法
基带码型变换设计密勒码码型变换
1 技术指标
1) 设计密勒码的编译码电路。
2) 输入信号为24位的周期NRZ码。
3) 编译码延时小于3个码元宽度。
2 基本原理
我的课程设计选题是《基带码型变换设计 —— 密勒码 码型变换》,也就是设计电路实现密勒码的编码、解码过程。电路设计的重点在于按照密勒码的编码规则实现基带码,也就是信源码的逻辑变换。为了达到这个过程,我们需要先分析清楚密勒码的特点。故基本原理这一部分我分为两部分进行阐述,分别是2.1 密勒码原理分析;2.2 编、解码设想及思路。
2.1密勒码原理分析
查阅《通信原理》(樊昌信著 国防工业出版社第6版)可知密勒码相关信息如下:
“M ILLER码又称延迟调制码。其编码规则是二进制信息“1”码用码元间隔中心点出现跃变表示, 即用“10”或“01”表示; 二进制信息“0”码有两种情况: 单个“0”时, 在码元间隔内不出现电平跃变, 且与相邻码元的边界处也不跃变; 在连“0”时, 在两个“0”码的边界处出现电平跃变, 即“00”与“11”交替。M ILLER码最初用于气象卫星和磁记录, 现在也用于低速基带数传机。”
分析可知,其编码规则可以整理如下表1:
表1. 密勒码的编码规则
由编码规则,我们可以绘出密勒码的波形。在此参照教材上给的提示,我们也画出双相BPH码的波形,分析NRZ码,密勒码,BPH码之间的关系。此处的BPH用‘01’表示数字信号‘0’;用‘10’表示数字信号‘1’。绘制波形如图1,原始NRZ码为‘111001010000’。
图1. 对应NRZ码的密勒码波形图
分析波形我们可以发现,BPH码的下跳沿对应着密勒码的跳变沿。参考教材所给的提示,我们可以用BPH码下跳沿去触发双稳态电路,即可输出密勒码。
3设计方案功能分析及其比较
结合本次的设计内容为了方便阐述,在整理所有的设计方案后,我将码型转换的原理分为5种。下面分别阐述其原理及设计的想法来源。
3.1方案一
方案一核心思想史以VHDL的穷举编程实现密勒码的编解码,也是我最早得出的设计。顾名思义,就是在程序中利用各种顺序语句罗列出编码时可能碰到的所有的情形,并给出对应的编码解。所以,找到那几个条件因子是这种方法最核心的地方。分析密勒码的编码规则我们可以发现以下规则:
1) 密勒码用‘10’和‘01’表示信号‘1’,用‘00’和‘11’表示信号‘0’。
2) 两个信源码之间对应的密勒码没有跳变,也就是说当前码的编码到底是哪一个,需要考虑前一个码的情况。
综合以上两条,设计出以下判断逻辑:信号输入为DATA,简称D。信号输入时刻前一位为Sav1简写为S1,对应的密勒码输出为Sav2简写为S2。 输出为Do。程序流程图如图2。
图2. VHDL穷举法程序流程图
即当前输入信号D有0,1两种可能;前一密勒输出有00,11,01,10四种情况;综合起来就是8种情况,以D及S2为条件因子,作为顺序语句的条件。
对应此逻辑以“IF THEN ELSIF” 语句编写了如下程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity miller_encoder is
port(datain :in std_logic;
en :in std_logic;
clk :in std_logic;
encodeout:out std_logic_vector(1 downto 0)
);
end ;
architecture func of miller_encoder is
begin
process(en,clk,datain)
variable sav1 :std_logic:=1;
variable sav2 :std_logic_vector(1 downto 0):=01;
begin
if(en=0) then
encodeout=00;
else
if(clk event and clk=0)then
if(datain=1 and sav1=1 and sav2=01) then
encodeout=10;
sav2:=10;
sav1:=1;
elsif(datain=1 and sav1=1 and sav2=10) then
encodeout=01;
sav2:=01;
sav1:=1;
elsif(datain=0 and sav1=1 and sav2=01) then
encodeout=11;
sav2:=11;
sav1:=0;
elsif
文档评论(0)