曼彻斯特编解码器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

工具软件实训报告

项目名称:曼彻斯特编解码器指导老师:

系科:

专业:

姓名:

学号:

目录:

一:实训要求 (3)

二:实训原理 (3)

三:实训思路 (4)

四:实训步骤 (4)

五:原理图、仿真结果图以及结论分析 (5)

1.曼彻斯特编解码器(实现16bit数据的编解码) (5)

1.1曼彻斯特编解码器电路原理图: (5)

1.2模块详解 (6)

1.3仿真图以及分析 (10)

六:个人总结 (11)

一:实训要求

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

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

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

(4)完成设计对解码器要求:能够把输入的串行曼彻斯特码解码成原先的并行数据,输入有时钟、曼彻斯特码输入(1bit)、使能信号等,输出有提取的同步时钟信号、解码完成(1bit),并行数据(16bit)等。

二:实训原理

曼彻斯特编码,也叫做相位编码(PE),是一个同步时钟编码技术,在以太网媒介系统中,被物理层使用来编码一个同步位流的时钟和数据。它的每一个数据比特都是由至少一次电压转换的形式所表示的。在曼彻斯特编码中,每一位的中间有一跳变,位中间的跳变既作为时钟信号,又作为数据信号。按照曼彻斯特码在IEEE 802.4(令牌总线)以及IEEE 802.3 (以太网)中的规定,本次实训将从高电平到低电平的

跳变表示“0”,从低电平到高电平的跳变表示“1”。三:实训思路

以下为曼彻斯特编解码器的实现框图:

基准时钟分频器电路时钟1

时钟2

时钟3

曼彻斯特

编码器

曼彻斯特

解码器

曼彻斯特

码输出

源码输出

数据产生

有上图可知,此次的曼彻斯特编解码电路包括三个部分:信号产生部分、编码电路部分和解码电路部分。其中,信号产生部分用来产生一个循环的16位二进制数据编码作为普通的信号输入;编码部分则将输入的信号编码为曼彻斯特码,然后输出显示;解码部分负责将获得的曼彻斯特码解码成普通的二进制数据编码。三个相对独立的模块相互协同工作,共同完成曼彻斯特编解码的工作。

四:实训步骤

(1)建立工程;

(2)编写VHDL文件,建立目标器件;

(3)绘制电路原理图并编译;

(4)进行仿真以及分析仿真后的波形文件; (5)完成实训报告。

五:原理图、仿真结果图以及结论分析

1.曼彻斯特编解码器(实现16bit 数据的编解码) 1.1曼彻斯特编解码器电路原理图:

clk

clk0clk1clk2

clks inst clk1datain

dataout

mcode

inst1

clk0dedatain

dedataout count[2..0]

mdecode inst3

VCC

CLK

INPUT data_in OUTPUT

decode_data

OUTPUT

code_data

OUTPUT

clk2datain

recycle inst7

1.2模块详解

1.2.1分频器模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity clks is

port(clk:in std_logic; --基准时钟

clk0,clk1,clk2:buffer std_logic); --分频出的三个时钟,分别输入循环编

--码模块、曼彻斯特编码模块、曼彻斯特解码模块end clks;

architecture behav of clks is

signal a:integer:=0;

signal b:integer:=0;

begin

process(clk)

begin

clk0<=clk;

end process;

process(clk)

begin

if clk'event and clk='1' then

if a=2 then

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

else

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

end if;

end if;

end process;

process(clk)

begin

if clk'event and clk='1' then

if b=5 then

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

else

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

end if;

end if;

end process;

end behav;

1.2.2循环编码模块

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity recycle is

port(clk2:in std_logic;

datain:out std_logic);

end recycle;

architecture behav of recycle is

signal i:integer:=0;

begin

process(clk2)

begin

if clk2'event and clk2='1' then

if i=15 then

i<=0;

else

i<=i+1;

end if;

end if;

end process;

process(clk2)

begin

if clk2'event and clk2='1' then

case i is

when 0 => datain<='1';

when 1 => datain<='0';

when 2 => datain<='1';

when 3 => datain<='1';

when 4 => datain<='0';

when 5 => datain<='1';

when 6 => datain<='0';

when 7 => datain<='0';

when 8 => datain<='0';

when 9 => datain<='0';

when 10 => datain<='1';

when 11 => datain<='1';

相关文档
最新文档