曼彻斯特编解码器Word格式.docx
《曼彻斯特编解码器Word格式.docx》由会员分享,可在线阅读,更多相关《曼彻斯特编解码器Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
![曼彻斯特编解码器Word格式.docx](https://file1.bdocx.com/fileroot1/2023-2/2/1fa17a26-676d-4e89-8234-0e7623ad90f5/1fa17a26-676d-4e89-8234-0e7623ad90f51.gif)
能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取的同步时钟信号、解码完成(1bit),并行数据(16bit)等。
二:
实训原理
曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。
它的每一个数据比特都是由至少一次电压转换的形式所表示的。
在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。
按照曼彻斯特码在IEEE
802.4(令牌总线)以及IEEE
802.3
(以太网)中的规定,本次实训将从高电平到低电平的跳变表示“0”,从低电平到高电平的跳变表示“1”。
三:
实训思路
以下为曼彻斯特编解码器的实现框图:
有上图可知,此次的曼彻斯特编解码电路包括三个部分:
信号产生部分、编码电路部分和解码电路部分。
其中,信号产生部分用来产生一个循环的16位二进制数据编码作为普通的信号输入;
编码部分则将输入的信号编码为曼彻斯特码,然后输出显示;
解码部分负责将获得的曼彻斯特码解码成普通的二进制数据编码。
三个相对独立的模块相互协同工作,共同完成曼彻斯特编解码的工作。
四:
实训步骤
(1)建立工程;
(2)编写VHDL文件,建立目标器件;
(3)绘制电路原理图并编译;
(4)进行仿真以及分析仿真后的波形文件;
(5)完成实训报告。
五:
原理图、仿真结果图以及结论分析
1.曼彻斯特编解码器(实现16bit数据的编解码)
1.1曼彻斯特编解码器电路原理图:
1.2模块详解
1.2.1分频器模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entityclksis
port(clk:
instd_logic;
--基准时钟
clk0,clk1,clk2:
bufferstd_logic);
--分频出的三个时钟,分别输入循环编
--码模块、曼彻斯特编码模块、曼彻斯特解码模块
endclks;
architecturebehavofclksis
signala:
integer:
=0;
signalb:
begin
process(clk)
clk0<
=clk;
endprocess;
process(clk)
ifclk'
eventandclk='
1'
then
ifa=2then
a<
clk1<
='
;
else
=a+1;
0'
endif;
endprocess;
process(clk)
begin
ifb=5then
b<
clk2<
=b+1;
endbehav;
1.2.2循环编码模块
entityrecycleis
port(clk2:
datain:
outstd_logic);
endrecycle;
architecturebehavofrecycleis
signali:
process(clk2)
ifclk2'
eventandclk2='
ifi=15then
i<
=i+1;
endif;
process(clk2)
begin
ifclk2'
then
caseiis
when0=>
datain<
when1=>
when2=>
when3=>
when4=>
when5=>
when6=>
when7=>
when8=>
when9=>
when10=>
when11=>
when12=>
when13=>
when14=>
when15=>
whenothers=>
=null;
endcase;
endbehav;
1.2.3曼彻斯特编码模块
entitymcodeis
port(clk1:
instd_logic;
datain:
dataout:
outstd_logic);
endmcode;
architecturebehavofmcodeis
signalcon:
std_logic_vector(1downto0);
signals:
std_logic;
process(clk1)
ifclk1'
eventandclk1='
ifdatain='
con<
="
01"
--上升沿表示'
else
con<
10"
--下降沿表示'
endprocess;
Begin
ifclk1'
ifs='
dataout<
=con
(1);
s<
=nots;
else
dataout<
=con(0);
说明:
曼彻斯特码是用“01”和“10”来表示普通二进制数据中的“1”和“0”的,因此在实际电路设计中,我们很容易产生一个和数据信号具有相同频率的检测时钟,用来对传入的数据信号进行检测。
当检测信号检测到输入信号是“1”时,选择器就输出“01”给寄存器,由寄存器完成并串转化功能,然后再将串行数据输出;
当输入信号是“0”时,选择器就输出“10”给寄存器由寄存器完成并串转化功能,然后再将串行数据输出,这样,输出的串行数据就是曼彻斯特码。
1.2.4曼彻斯特解码模块
entitymdecodeis
port(clk0:
dedatain:
dedataout:
outstd_logic;
count:
bufferstd_logic_vector(2downto0));
endmdecode;
architecturebehavofmdecodeis
signalcon:
begin
process(clk0)
ifclk0'
eventandclk0='
ifcount=5then
count<
000"
=count+1;
process(clk0)
con
(1)<
con(0)<
=dedatain;
ifcount=4then
ifcon="
dedataout<
elsifcon="
曼彻斯特解码电路设计的关键是如何准确地从曼彻斯特码的数据流中提取出“10”和“01”信号,并且把它们转换成普通二进制编码中的“0”和“1”。
例如对于曼彻斯特码“01010101”,如果从第一位开始解码,得到的二进制编码就是“1111”,而若从第二位开始解码,得到的二进制编码就是“000”和头尾两个曼彻斯特码。
由此可见,如果曼彻斯特码数据流中只有“1”或“0”是不能得到正确的译码结果的,如果曼彻斯特编码数据流中出现“00”,则“00”前后的码元必定是“1”;
如果曼彻斯特编码数据流中出现“11”,则“00”前后的码元必定是“0”,因此,我们可以将“00”与“11”作为曼彻斯特码译码的标志位。
1.3仿真图以及分析
1.3.1曼彻斯特编解码器仿真图
1.3.2仿真分析
“CLK”是输入的基准时钟,“data_in”是输入数据波形,从92us后提取一段输入数据为“10100”。
“code_data”是曼彻斯特编码波形,理论上应当是“1010”,从仿真图中可以看出仿真结果符合理论值。
而“decode_data”是曼彻斯特解码波形,应当与“data_in”相一致,仿真图也符合理论结果,这些说明了编码程序和解码程序是正确的。
从图中也可以看出当输入数据是“1”时,曼彻斯特编码为“01”;
当输入数据是“0”时,曼彻斯特编码为“10”。
个人总结
彻斯特编码器电路,是目前为止比较实用的设计项目之一,应用广泛。
在此次实训中,遇到了很多技术上的问题,自己查阅了很多网络上和各种EDA书籍,关于曼彻斯特编码器电路的实训项目等相关知识。
了解掌握了如何运用时序控制电路,EDA库文件模块的调用(参数设定),VHDL语言的程序编写,通过已知频率脉冲的控制让该模块输出时序控制电路,驱动下一功能模块电路。
接下来完成编码的设计工作,16位并行数据的输入,16位串行译码数据的输出。
最后,顶层电路模块的仿真联调工作,把前面三个模块按照一定电路原则连接起来,并进行编译和波形仿真,最终实现全部功能。