《數(shù)字邏輯實驗 8_序列檢測器》由會員分享,可在線閱讀,更多相關(guān)《數(shù)字邏輯實驗 8_序列檢測器(7頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、實驗八 序列檢測器的設(shè)計與仿真
一、 實驗要求
1. 用VHDL語言設(shè)計一個Mealy機以檢測“1101001”序列;
2. 用VHDL語言設(shè)計一個Moore機以檢測“1101001”序列;
3. 在文本編輯區(qū)使用VHDL硬件描述語言設(shè)計邏輯電路,再利用波形編輯區(qū)進行邏輯功能仿真,以此驗證電路的邏輯功能是否正確。
二、 實驗內(nèi)容
用VHDL語言設(shè)計各一個mealy和moore狀態(tài)機測試“1101001”位串的序列檢測器,并通過仿真波形驗證設(shè)計的功能是否正確。
三、 實驗過程
由于在報告1中已經(jīng)詳盡描述了如何使用Quartus 2建立邏輯原理圖和使用VHDL語言實現(xiàn)元件功能,所以
2、本次的實驗報告中便不再贅述上述內(nèi)容,報告將主要就VHDL語言描述實現(xiàn)元件的功能的過程進行闡述。
1. Mealy機
選擇File→New,彈出新建文本對話框,在該對話框中 選擇VHDL File并單擊OK按鈕,進入文本編輯窗口,輸入VHDL代碼。
library ieee;
use ieee.std_logic_1164.all;
entity melay is
port(clk,rst,d: in std_logic;
z: out std_logic);
end melay;
architecture arc of melay is
type
3、state_type is(s0,s1,s2,s3,s4,s5,s6);
signal state: state_type;
begin
process(clk,rst)
begin
if rst= '1' then
state<=s0;
elsif (clk'event and clk ='1') then
case state is --1101001
when s0 =>
if d='1' the
4、n
state<=s1;
else
state<=s0;
end if;
when s1=>
if d='1' then
state<=s2;
else
state<=s0;
end if;
5、 when s2=>
if d='0' then
state<=s3;
else
state<=s2;
end if;
when s3=>
if d='1' then
state<=s4;
else
state<=s0;
end if;
when s4=>
if d='0' then
6、 state<=s5;
else
state<=s1;
end if;
when s5=> --1101001
if d='0' then
state<=s6;
else
state<=s1;
end if;
when s6=>
if d='1' then
state<=s0;
e
7、lse
state<=s0;
end if;
end case;
end if;
end process;
process(state,d)
begin
case state is
when s6=>
if d='1' then
z<='1';
else
z<='0';
end if;
when others=>
z<='0';
end cas
8、e;
end process;
end arc;
保存文件并編譯,選擇菜單File→New,選擇Vector Waveform File新建波形圖,添加節(jié)點,參數(shù)設(shè)置為:End Time=2us, Grip size=50ns。所完成的波形圖如下圖:
波形解釋:rst為復(fù)位端,高電平有效,返回最初狀態(tài);clk為時鐘信號輸入端口;,state。s0~s6表示mealy機中各步狀態(tài);z表示檢測序列為“1101001”時,表示輸出高電平。
保存波形文件,并在settings中選擇functional功能仿真,繪制網(wǎng)格,仿真可得出如圖波形:
根據(jù)mealy狀態(tài)表和序列檢測器相應(yīng)功能
9、驗證,當(dāng)rst=‘1’時,不管當(dāng)前狀態(tài)為何,都將被初始為最初態(tài)s0;當(dāng)輸入d端依次輸入“1101001”時,當(dāng)檢測到最后一位輸入正確的同時,z端馬上跳為高電平,表示所檢測序列正確。其他可看出,當(dāng)處于時鐘上升沿時,state中各狀態(tài)依照輸入數(shù)據(jù)依次跳變。最后mealy機成功檢測出相應(yīng)序列,設(shè)計成功。
已知序列檢測器的Mealy機狀態(tài)表為:
現(xiàn) 態(tài)
(present_state)
次態(tài) / 輸出(next_state / cout)
cin=0
cin=1
S0
S0 / 0
S1 / 0
S1
10、 S0 / 0
S2 / 0
S2
S0 / 0
S3 / 0
S3
S4 / 0
S3 / 0
S4
S5 / 0
S1 / 0
S5
S0 / 0
S6 / 0
S6
S0 / 1
S2 / 0
同樣可依次對照上述仿真圖形,顯然上述序列檢測器mealy機功能設(shè)計正確。
2. 序列檢
11、測器moore機
選擇File→New,彈出新建文本對話框,在該對話框中 選擇VHDL File并單擊OK按鈕,進入文本編輯窗口,輸入VHDL代碼。
library ieee;
use ieee.std_logic_1164.all;
entity moore is
port(clk,rst,d: in std_logic;
z: out std_logic);
end moore;
architecture arc of moore is --moore: 輸出只和當(dāng)前狀態(tài)有關(guān);
type state_type is(s0,s
12、1,s2,s3,s4,s5,s6,s7);
signal state:state_type;
begin
process(clk,rst)
begin
if rst= '1' then --1101001
state<=s0;
elsif(clk'event and clk='1') then
case state is --1101001
when s0 =>
13、 if d='1' then
state<=s1;
else
state<=s0;
end if;
when s1=>
if d='1' then
state<=s2;
else
state<=s0;
e
14、nd if;
when s2=>
if d='0' then
state<=s3;
else
state<=s2;
end if;
when s3=>
if d='1' then
state<=s4;
else
state<=s0;
end if;
when s4=>
if d='0'
15、then
state<=s5;
else
state<=s1;
end if;
when s5=> --1101001
if d='0' then
state<=s6;
else
state<=s1;
end if;
when s6=>
if d='1' then
state<=
16、s7;
else
state<=s0;
end if;
when s7=>
if d='1' then
state<=s1;
else
state<=s0;
end if;
end case;
end if;
end process;
process(state,d)
begin
case state is
when s6=>
if d='
17、1' then
z<='1';
else
z<='0';
end if;
when others=>
z<='0';
end case;
end process;
end arc;
可看出,moore機的設(shè)計和mealy機上大體相同,只有在狀態(tài)的傳遞上有細微區(qū)別。
保存文件并編譯,選擇菜單File→New,選擇Vector Waveform File新建波形圖,添加節(jié)點,參數(shù)設(shè)置為:End Time=3us, Grip size=50ns。所完
18、成的波形圖如下圖:
圖中各端口設(shè)置功能同mealy機。
保存波形文件,并在settings中選擇functional功能仿真,繪制網(wǎng)格,仿真可得出如圖波形:
仿真波形分析:
由于設(shè)計的moore狀態(tài)機檢測序列功能相同,與mealy不同在于當(dāng)狀態(tài)跳變判斷s7時,z端才跳變?yōu)楦唠娖健8鶕?jù)剛剛對mealy機的仿真分析和下表的狀態(tài)值變化顯然可知,moore機實現(xiàn)了檢測序列“1101001”的功能,設(shè)計成功。
已知序列檢測器的Mealy機狀態(tài)表為:
現(xiàn) 態(tài)
(present_state)
次態(tài)
輸出
z
d=0
d=1
S0
S0
S1
0
S1
S0
19、S2
0
S2
S0
S3
0
S3
S4
S3
0
S4
S5
S1
0
S5
S0
S6
0
S6
S0
S7
0
S7
s0
s1
1
四、 總結(jié)
本節(jié)實驗中,通過對用VHDL語言對mealy狀態(tài)機和moore狀態(tài)機進行設(shè)計,更加熟練了使用VHDL語言對元件的設(shè)計。也通過用不同的狀態(tài)機設(shè)計序列檢測器,而對兩種狀態(tài)機的區(qū)別有了更深刻的了解。Moore狀態(tài)機輸出只和當(dāng)前狀態(tài)有關(guān),而mealy機輸出和當(dāng)前狀態(tài)和輸入信號有關(guān),由于moore機沒有組合邏輯,所以moore機的狀態(tài)會多一些。也對序列檢測器的實現(xiàn)使得我對序列檢測器的作用和功能了
20、之于心。一開始沒有弄清moore機和mealy機的區(qū)別,導(dǎo)致后來寫moore機的時候出現(xiàn)了停滯,不過在弄清他們的區(qū)別時候,寫出moore機就沒什么問題了。
不已然,已經(jīng)到了數(shù)字邏輯的最后一個實驗了,回想做實驗時,有苦有樂,從開始的對VHDL語言的一竅不通,到現(xiàn)在可以用它設(shè)計簡單的元件并實現(xiàn)功能,實驗中我收獲了許多,實驗對我成長的幫助必不可少。雖然馬上就要結(jié)束實驗,不過還有許多VHDL語言的奧妙在可以發(fā)揮它的地方等待著我們?nèi)ヌ剿?,我也會繼續(xù)探索VHDL語言,用它來實現(xiàn)更多好玩好用的東西。
2013/12/23