曼彻斯特编解码器.docx

上传人:b****2 文档编号:1997158 上传时间:2023-05-02 格式:DOCX 页数:11 大小:46.42KB
下载 相关 举报
曼彻斯特编解码器.docx_第1页
第1页 / 共11页
曼彻斯特编解码器.docx_第2页
第2页 / 共11页
曼彻斯特编解码器.docx_第3页
第3页 / 共11页
曼彻斯特编解码器.docx_第4页
第4页 / 共11页
曼彻斯特编解码器.docx_第5页
第5页 / 共11页
曼彻斯特编解码器.docx_第6页
第6页 / 共11页
曼彻斯特编解码器.docx_第7页
第7页 / 共11页
曼彻斯特编解码器.docx_第8页
第8页 / 共11页
曼彻斯特编解码器.docx_第9页
第9页 / 共11页
曼彻斯特编解码器.docx_第10页
第10页 / 共11页
曼彻斯特编解码器.docx_第11页
第11页 / 共11页
亲,该文档总共11页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

曼彻斯特编解码器.docx

《曼彻斯特编解码器.docx》由会员分享,可在线阅读,更多相关《曼彻斯特编解码器.docx(11页珍藏版)》请在冰点文库上搜索。

曼彻斯特编解码器.docx

曼彻斯特编解码器

工具软件实训报告

 

项目名称:

曼彻斯特编解码器

指导老师:

系科:

专业:

姓名:

学号:

 

目录:

六:

个人总结.............................................................................11

 

一:

实训要求

(1)通过学习原理图输入设计的方法掌握使用工具软件QuartusⅡ设计小型数字电路;

(2)查阅文献,了解曼彻斯特编解码器的基本原理,并提出在QuartusⅡ软件环境下用VHDL进行仿真的方案。

(3)完成设计对编码器的要求:

能够对输入的16bit数据进行曼彻斯特编码,输入有时钟、使能、16bit并行数据、写信号等;输出有编码结束和曼彻斯特编码信号(都为1位信号)等。

(4)完成设计对解码器要求:

能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(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:

integer:

=0;

begin

process(clk)

begin

clk0<=clk;

endprocess;

process(clk)

begin

ifclk'eventandclk='1'then

ifa=2then

a<=0;clk1<='1';

else

a<=a+1;clk1<='0';

endif;

endif;

endprocess;

process(clk)

begin

ifclk'eventandclk='1'then

ifb=5then

b<=0;clk2<='1';

else

b<=b+1;clk2<='0';

endif;

endif;

endprocess;

endbehav;

1.2.2循环编码模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityrecycleis

port(clk2:

instd_logic;

datain:

outstd_logic);

endrecycle;

architecturebehavofrecycleis

signali:

integer:

=0;

begin

process(clk2)

begin

ifclk2'eventandclk2='1'then

ifi=15then

i<=0;

else

i<=i+1;

endif;

endif;

endprocess;

process(clk2)

begin

ifclk2'eventandclk2='1'then

caseiis

when0=>datain<='1';

when1=>datain<='0';

when2=>datain<='1';

when3=>datain<='1';

when4=>datain<='0';

when5=>datain<='1';

when6=>datain<='0';

when7=>datain<='0';

when8=>datain<='0';

when9=>datain<='0';

when10=>datain<='1';

when11=>datain<='1';

when12=>datain<='0';

when13=>datain<='1';

when14=>datain<='0';

when15=>datain<='0';

whenothers=>datain<=null;

endcase;

endif;

endprocess;

endbehav;

1.2.3曼彻斯特编码模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitymcodeis

port(clk1:

instd_logic;

datain:

instd_logic;

dataout:

outstd_logic);

endmcode;

architecturebehavofmcodeis

signalcon:

std_logic_vector(1downto0);

signals:

std_logic;

begin

process(clk1)

begin

ifclk1'eventandclk1='1'then

ifdatain='1'then

con<="01";--上升沿表示'1'

else

con<="10";--下降沿表示'0'

endif;

endif;

endprocess;

process(clk1)

Begin

ifclk1'eventandclk1='1'then

ifs='1'then

dataout<=con

(1);

s<=nots;

else

dataout<=con(0);

s<=nots;

endif;

endif;

endprocess;

endbehav;

说明:

曼彻斯特码是用“01”和“10”来表示普通二进制数据中的“1”和“0”的,因此在实际电路设计中,我们很容易产生一个和数据信号具有相同频率的检测时钟,用来对传入的数据信号进行检测。

当检测信号检测到输入信号是“1”时,选择器就输出“01”给寄存器,由寄存器完成并串转化功能,然后再将串行数据输出;当输入信号是“0”时,选择器就输出“10”给寄存器由寄存器完成并串转化功能,然后再将串行数据输出,这样,输出的串行数据就是曼彻斯特码。

1.2.4曼彻斯特解码模块

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitymdecodeis

port(clk0:

instd_logic;

dedatain:

instd_logic;

dedataout:

outstd_logic;

count:

bufferstd_logic_vector(2downto0));

endmdecode;

architecturebehavofmdecodeis

signalcon:

std_logic_vector(1downto0);

begin

process(clk0)

begin

ifclk0'eventandclk0='1'then

ifcount=5then

count<="000";

else

count<=count+1;

endif;

endif;

endprocess;

process(clk0)

begin

ifclk0'eventandclk0='1'then

con

(1)<=con(0);

con(0)<=dedatain;

endif;

endprocess;

process(clk0)

begin

ifclk0'eventandclk0='1'then

ifcount=4then

ifcon="10"then

dedataout<='0';

elsifcon="01"then

dedataout<='1';

endif;

endif;

endif;

endprocess;

endbehav;

说明:

曼彻斯特解码电路设计的关键是如何准确地从曼彻斯特码的数据流中提取出“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后提取一段输入数据为“1110010100110100”。

“code_data”是曼彻斯特编码波形,理论上应当是“010*********”,从仿真图中可以看出仿真结果符合理论值。

而“decode_data”是曼彻斯特解码波形,应当与“data_in”相一致,仿真图也符合理论结果,这些说明了编码程序和解码程序是正确的。

从图中也可以看出当输入数据是“1”时,曼彻斯特编码为“01”;当输入数据是“0”时,曼彻斯特编码为“10”。

六:

个人总结

彻斯特编码器电路,是目前为止比较实用的设计项目之一,应用广泛。

在此次实训中,遇到了很多技术上的问题,自己查阅了很多网络上和各种EDA书籍,关于曼彻斯特编码器电路的实训项目等相关知识。

了解掌握了如何运用时序控制电路,EDA库文件模块的调用(参数设定),VHDL语言的程序编写,通过已知频率脉冲的控制让该模块输出时序控制电路,驱动下一功能模块电路。

接下来完成编码的设计工作,16位并行数据的输入,16位串行译码数据的输出。

最后,顶层电路模块的仿真联调工作,把前面三个模块按照一定电路原则连接起来,并进行编译和波形仿真,最终实现全部功能。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2