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