《曼徹斯特編解碼器》由會員分享,可在線閱讀,更多相關(guān)《曼徹斯特編解碼器(11頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、
工具軟件實訓(xùn)報告
項目名稱: 曼徹斯特編解碼器
指導(dǎo)老師:
系 科:
專 業(yè):
姓 名:
學(xué) 號:
目錄:
一:實訓(xùn)要求 3
二:實訓(xùn)原理 3
三:實訓(xùn)思路 4
四:實訓(xùn)步驟 4
五:原理圖、仿真結(jié)果圖以及結(jié)論分析 5
1.曼徹斯特編解碼器(實現(xiàn)16bit數(shù)據(jù)的編解碼) 5
2、
1.1曼徹斯特編解碼器電路原理圖: 5
1.2模塊詳解 6
1.3仿真圖以及分析 10
六:個人總結(jié).............................................................................11
一:實訓(xùn)要求
(1)通過學(xué)習(xí)原理圖輸入設(shè)計的方法掌握使用工具軟件Quartus Ⅱ設(shè)計小型數(shù)字電路;
(2)查閱文獻(xiàn),了解曼徹斯特編解碼器的基本原理, 并提出在Quartus Ⅱ軟件環(huán)境下用VHDL進(jìn)行仿真的方案。
(3)完成設(shè)計對編碼器的要求:能夠?qū)斎氲?6b
3、it數(shù)據(jù)進(jìn)行曼徹斯特編碼,輸入有時鐘、使能、16bit并行數(shù)據(jù)、寫信號等;輸出有編碼結(jié)束和曼徹斯特編碼信號(都為1位信號)等。
(4)完成設(shè)計對解碼器要求:能夠把輸入的串行曼徹斯特碼解碼成原先的并行數(shù)據(jù),輸入有時鐘、曼徹斯特碼輸入(1bit)、使能信號等,輸出有提取的同步時鐘信號、解碼完成(1bit),并行數(shù)據(jù)(16bit)等。
二:實訓(xùn)原理
曼徹斯特編碼,也叫做相位編碼(PE),是一個同步時鐘編碼技術(shù),在以太網(wǎng)媒介系統(tǒng)中,被物理層使用來編碼一個同步位流的時鐘和數(shù)據(jù)。它的每一個數(shù)據(jù)比特都是由至少一次電壓轉(zhuǎn)換的形式所表示的。在曼徹斯特編碼中,每一位的中間有一跳變,位中間的跳變既作為時鐘信號
4、,又作為數(shù)據(jù)信號。按照曼徹斯特碼在IEEE802.4(令牌總線)以及IEEE802.3(以太網(wǎng))中的規(guī)定,本次實訓(xùn)將從高電平到低電平的跳變表示“0”,從低電平到高電平的跳變表示“1”。
三:實訓(xùn)思路
以下為曼徹斯特編解碼器的實現(xiàn)框圖:
有上圖可知,此次的曼徹斯特編解碼電路包括三個部分:信號產(chǎn)生部分、編碼電路部分和解碼電路部分。其中,信號產(chǎn)生部分用來產(chǎn)生一個循環(huán)的16位二進(jìn)制數(shù)據(jù)編碼作為普通的信號輸入;編碼部分則將輸入的信號編碼為曼徹斯特碼,然后輸出顯示;解碼部分負(fù)責(zé)將獲得的曼徹斯特碼解碼成普通的二進(jìn)制數(shù)據(jù)編碼。三個相對獨立的模塊相互協(xié)同工作,共同完成曼徹斯特編解碼的工作。
四:實訓(xùn)
5、步驟
(1)建立工程;
(2)編寫VHDL文件,建立目標(biāo)器件;
(3)繪制電路原理圖并編譯;
(4)進(jìn)行仿真以及分析仿真后的波形文件;
(5)完成實訓(xùn)報告。
五:原理圖、仿真結(jié)果圖以及結(jié)論分析
1.曼徹斯特編解碼器(實現(xiàn)16bit數(shù)據(jù)的編解碼)
1.1曼徹斯特編解碼器電路原理圖:
1.2模塊詳解
1.2.1分頻器模塊
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.al
6、l;
entity clks is
port(clk:in std_logic; --基準(zhǔn)時鐘
clk0,clk1,clk2:buffer std_logic); --分頻出的三個時鐘,分別輸入循環(huán)編
--碼模塊、曼徹斯特編碼模塊、曼徹斯特解碼模塊
end clks;
architecture behav of clks is
signal a:integer:=0;
signal b:integer:=0;
begin
p
7、rocess(clk)
begin
clk0<=clk;
end process;
process(clk)
begin
if clkevent 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 clkev
8、ent 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循環(huán)編碼模塊
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
9、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 clk2event and clk2=1 then
if i=15 then
i<=0;
else
i<=i+1;
10、end if;
end if;
end process;
process(clk2)
begin
if clk2event 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;
w
11、hen 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;
when 12 => datain<=0;
when 13 => datain<=1;
when 14 => datain<=
12、0;
when 15 => datain<=0;
when others => datain<=null;
end case;
end if;
end process;
end behav;
1.2.3曼徹斯特編碼模塊
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mcode is
port(clk1: in std_
13、logic;
datain: in std_logic;
dataout: out std_logic);
end mcode;
architecture behav of mcode is
signal con:std_logic_vector(1 downto 0);
signal s:std_logic;
begin
process(clk1)
begin
if clk1event and clk1=1 then
if datain=1 then
co
14、n<="01"; --上升沿表示1
else
con<="10"; --下降沿表示0
end if;
end if;
end process;
process(clk1)
Begin
if clk1event and clk1=1 then
if s=1 then
dataout<=con(1);
s<=not s;
else
15、 dataout<=con(0);
s<=not s;
end if;
end if;
end process;
end behav;
說明:曼徹斯特碼是用“01”和“10”來表示普通二進(jìn)制數(shù)據(jù)中的“1”和“0”的,因此在實際電路設(shè)計中,我們很容易產(chǎn)生一個和數(shù)據(jù)信號具有相同頻率的檢測時鐘,用來對傳入的數(shù)據(jù)信號進(jìn)行檢測。當(dāng)檢測信號檢測到輸入信號是“1”時,選擇器就輸出“01”給寄存器,由寄存器完成并串轉(zhuǎn)化功能,然后再將串行數(shù)據(jù)輸出;當(dāng)輸入信號是“0”時,選擇器就輸出“10”給寄存器由寄存器完成并串轉(zhuǎn)化功能,然后再將
16、串行數(shù)據(jù)輸出,這樣,輸出的串行數(shù)據(jù)就是曼徹斯特碼。
1.2.4曼徹斯特解碼模塊
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity mdecode is
port(clk0:in std_logic;
dedatain: in std_logic;
dedataout:out std_logic;
count: buffer std_logic_vector(2 dow
17、nto 0));
end mdecode;
architecture behav of mdecode is
signal con:std_logic_vector(1 downto 0);
begin
process(clk0)
begin
if clk0event and clk0=1 then
if count=5 then
count<="000";
else
count<=count+1;
end if;
end if;
18、 end process;
process(clk0)
begin
if clk0event and clk0=1 then
con(1)<=con(0);
con(0)<=dedatain;
end if;
end process;
process(clk0)
begin
if clk0event and clk0=1 then
if count=4 then
if con="10" then
19、dedataout<=0;
elsif con="01" then
dedataout<=1;
end if;
end if;
end if;
end process;
end behav;
說明:曼徹斯特解碼電路設(shè)計的關(guān)鍵是如何準(zhǔn)確地從曼徹斯特碼的數(shù)據(jù)流中提取出“10”和“01”信號,并且把它們轉(zhuǎn)換成普通二進(jìn)制編碼中的“0”和“1”。例如對于曼徹斯特碼“01010101”,如果從第一位開始解碼,得到的二進(jìn)制編碼就是“1111”,而若從第二位開始解碼,得到的二進(jìn)制編碼就是“0
20、00”和頭尾兩個曼徹斯特碼。由此可見,如果曼徹斯特碼數(shù)據(jù)流中只有“1”或“0”是不能得到正確的譯碼結(jié)果的,如果曼徹斯特編碼數(shù)據(jù)流中出現(xiàn)“00”,則“00”前后的碼元必定是“1”;如果曼徹斯特編碼數(shù)據(jù)流中出現(xiàn)“11”,則“00”前后的碼元必定是“0”,因此,我們可以將“00”與“11”作為曼徹斯特碼譯碼的標(biāo)志位。
1.3仿真圖以及分析
1.3.1曼徹斯特編解碼器仿真圖
1.3.2仿真分析
“CLK”是輸入的基準(zhǔn)時鐘,“data_in”是輸入數(shù)據(jù)波形,從92us后提取一段輸入數(shù)據(jù)為“1110010100110100”?!癱ode_data”是
21、曼徹斯特編碼波形,理論上應(yīng)當(dāng)是“01010110100110011010010110011010”,從仿真圖中可以看出仿真結(jié)果符合理論值。而“decode_data”是曼徹斯特解碼波形,應(yīng)當(dāng)與“data_in”相一致,仿真圖也符合理論結(jié)果,這些說明了編碼程序和解碼程序是正確的。從圖中也可以看出當(dāng)輸入數(shù)據(jù)是“1”時,曼徹斯特編碼為“01”;當(dāng)輸入數(shù)據(jù)是“0”時,曼徹斯特編碼為“10”。
六:個人總結(jié)
徹斯特編碼器電路,是目前為止比較實用的設(shè)計項目之一,應(yīng)用廣泛。在此次實訓(xùn)中,遇到了很多技術(shù)上的問題,自己查閱了很多網(wǎng)絡(luò)上和各種EDA書籍,關(guān)于曼徹斯特編碼器電路的實訓(xùn)項目等相關(guān)知識。了解掌握了如何運用時序控制電路,EDA庫文件模塊的調(diào)用(參數(shù)設(shè)定),VHDL語言的程序編寫,通過已知頻率脈沖的控制讓該模塊輸出時序控制電路,驅(qū)動下一功能模塊電路。
接下來完成編碼的設(shè)計工作,16位并行數(shù)據(jù)的輸入,16位串行譯碼數(shù)據(jù)的輸出。
最后,頂層電路模塊的仿真聯(lián)調(diào)工作,把前面三個模塊按照一定電路原則連接起來,并進(jìn)行編譯和波形仿真,最終實現(xiàn)全部功能。