數(shù)字系統(tǒng)設(shè)計(jì)教學(xué)資料-第四章 時(shí)序邏輯電路1ppt課件_第1頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)教學(xué)資料-第四章 時(shí)序邏輯電路1ppt課件_第2頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)教學(xué)資料-第四章 時(shí)序邏輯電路1ppt課件_第3頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)教學(xué)資料-第四章 時(shí)序邏輯電路1ppt課件_第4頁(yè)
數(shù)字系統(tǒng)設(shè)計(jì)教學(xué)資料-第四章 時(shí)序邏輯電路1ppt課件_第5頁(yè)
已閱讀5頁(yè),還剩57頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、本章目錄本章目錄 時(shí)序電路概述時(shí)序電路概述 同步電路同步電路 根本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用 簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子 時(shí)序分析時(shí)序分析 一段式代碼風(fēng)格一段式代碼風(fēng)格 時(shí)序電路中變量的運(yùn)用時(shí)序電路中變量的運(yùn)用n組合電路和時(shí)序電路組合電路和時(shí)序電路n時(shí)序電路:輸出是輸入和當(dāng)前形狀的函數(shù)時(shí)序電路:輸出是輸入和當(dāng)前形狀的函數(shù)n根本記憶單元根本記憶單元nD 鎖存器鎖存器nD 觸發(fā)器觸發(fā)器nRAM時(shí)序電路概述時(shí)序電路概述nD鎖存器是電平敏感的記憶單元,而鎖存器是電平敏感的記憶單元,而D觸發(fā)器是邊沿敏觸發(fā)器是邊沿敏感的記憶單元感的記憶單元n對(duì)于對(duì)于D鎖存器,當(dāng)時(shí)鐘信號(hào)鎖存器,當(dāng)時(shí)鐘信號(hào)c為高電平

2、常,下一個(gè)形狀為高電平常,下一個(gè)形狀q*=d,當(dāng)時(shí)鐘信號(hào),當(dāng)時(shí)鐘信號(hào)c為低電平常,為低電平常,q*=q堅(jiān)持堅(jiān)持dcq(a)D 鎖存器cq*0q1dD D鎖存器鎖存器nD鎖存器的時(shí)序圖鎖存器的時(shí)序圖d在在c的下降沿處被采樣和保管的下降沿處被采樣和保管D D鎖存器鎖存器nD觸發(fā)器只需在觸發(fā)器只需在clk信號(hào)的跳變沿處有效信號(hào)的跳變沿處有效01或或10dclkq(b)上升沿D 觸發(fā)器dclkq(c)下降沿D 觸發(fā)器clkq*0q1qdclkq*0q1qd“有效的有效的含義是指含義是指:d的值的值只需在只需在clk的邊沿處的邊沿處被采樣和被采樣和保管,并保管,并更新輸出更新輸出qD D觸發(fā)器觸發(fā)器nD

3、觸發(fā)器的優(yōu)點(diǎn)觸發(fā)器的優(yōu)點(diǎn)nd端口小小的毛刺不會(huì)影響到存儲(chǔ)的形狀端口小小的毛刺不會(huì)影響到存儲(chǔ)的形狀n消除了競(jìng)爭(zhēng)的條件,交換數(shù)據(jù)的電路可以任務(wù)消除了競(jìng)爭(zhēng)的條件,交換數(shù)據(jù)的電路可以任務(wù)nD觸發(fā)器的缺陷觸發(fā)器的缺陷n是是D鎖存器的兩倍大小鎖存器的兩倍大小D D觸發(fā)器觸發(fā)器n時(shí)序圖如下時(shí)序圖如下:n Clock-to-q 延時(shí)延時(shí)(Tcq): 信號(hào)信號(hào)d被采樣到更新被采樣到更新q的延時(shí)的延時(shí)n建立時(shí)間建立時(shí)間(Tsetup): 在時(shí)鐘的上升沿降臨之前,在時(shí)鐘的上升沿降臨之前,d必需堅(jiān)持穩(wěn)定的時(shí)間必需堅(jiān)持穩(wěn)定的時(shí)間n堅(jiān)持時(shí)間堅(jiān)持時(shí)間(Thold): 在時(shí)鐘上升沿到來(lái)之后,在時(shí)鐘上升沿到來(lái)之后,d必需堅(jiān)持穩(wěn)

4、定的時(shí)間必需堅(jiān)持穩(wěn)定的時(shí)間D D觸發(fā)器觸發(fā)器n時(shí)序圖如下時(shí)序圖如下:續(xù)續(xù)nTcq代表組合電路的傳播延時(shí)代表組合電路的傳播延時(shí)nTsetup 和和Thold 是時(shí)序約束,是時(shí)序約束,d必需在必需在clk的時(shí)間間隔內(nèi)堅(jiān)持穩(wěn)定。假設(shè)的時(shí)間間隔內(nèi)堅(jiān)持穩(wěn)定。假設(shè)d在這個(gè)時(shí)隙內(nèi)改動(dòng),這樣就會(huì)違反建立時(shí)間和堅(jiān)持時(shí)間的規(guī)那么,導(dǎo)致在這個(gè)時(shí)隙內(nèi)改動(dòng),這樣就會(huì)違反建立時(shí)間和堅(jiān)持時(shí)間的規(guī)那么,導(dǎo)致觸發(fā)器進(jìn)入亞穩(wěn)態(tài)觸發(fā)器進(jìn)入亞穩(wěn)態(tài)q不是不是0也不是也不是1D D觸發(fā)器觸發(fā)器n在時(shí)序電路中,時(shí)鐘信號(hào)扮演著一個(gè)很重要的角色在時(shí)序電路中,時(shí)鐘信號(hào)扮演著一個(gè)很重要的角色n系統(tǒng)可以根據(jù)時(shí)鐘的規(guī)劃來(lái)分類系統(tǒng)可以根據(jù)時(shí)鐘的規(guī)劃來(lái)分

5、類n全局同步電路全局同步電路n一切的存儲(chǔ)單元都在同一個(gè)全局時(shí)鐘的控制下任務(wù)一切的存儲(chǔ)單元都在同一個(gè)全局時(shí)鐘的控制下任務(wù)n全局異步全局異步-部分同步電路部分同步電路(GALS)n設(shè)計(jì)的器件傳輸分開(kāi)得太遠(yuǎn),無(wú)法運(yùn)用單個(gè)同步時(shí)鐘的情況設(shè)計(jì)的器件傳輸分開(kāi)得太遠(yuǎn),無(wú)法運(yùn)用單個(gè)同步時(shí)鐘的情況下,只能運(yùn)用一個(gè)全局的異步時(shí)鐘下,只能運(yùn)用一個(gè)全局的異步時(shí)鐘n然而,較小的子系統(tǒng)內(nèi)部運(yùn)用一個(gè)同步的時(shí)鐘然而,較小的子系統(tǒng)內(nèi)部運(yùn)用一個(gè)同步的時(shí)鐘n在子系統(tǒng)之間需求特殊的電路接口來(lái)保證正常的任務(wù)在子系統(tǒng)之間需求特殊的電路接口來(lái)保證正常的任務(wù)時(shí)鐘信號(hào)時(shí)鐘信號(hào)n全局異步電路全局異步電路n沒(méi)有時(shí)鐘來(lái)協(xié)調(diào)存儲(chǔ)單元的任務(wù),大致分為兩

6、類。沒(méi)有時(shí)鐘來(lái)協(xié)調(diào)存儲(chǔ)單元的任務(wù),大致分為兩類。n時(shí)鐘時(shí)鐘 的運(yùn)用是沒(méi)有規(guī)律的,例如行波計(jì)數(shù)器:觸發(fā)器的時(shí)的運(yùn)用是沒(méi)有規(guī)律的,例如行波計(jì)數(shù)器:觸發(fā)器的時(shí)鐘端口銜接上一個(gè)觸發(fā)器的輸出鐘端口銜接上一個(gè)觸發(fā)器的輸出q端口。這種設(shè)計(jì)并不完端口。這種設(shè)計(jì)并不完美,不引薦美,不引薦n系統(tǒng)帶有不需求時(shí)鐘的存儲(chǔ)單元如系統(tǒng)帶有不需求時(shí)鐘的存儲(chǔ)單元如D鎖存器或者帶有反鎖存器或者帶有反響回路的組合電路異步電路。響回路的組合電路異步電路。時(shí)鐘信號(hào)時(shí)鐘信號(hào)n合理的異步電路設(shè)計(jì)和同步電路完全不同,而且合理的異步電路設(shè)計(jì)和同步電路完全不同,而且HDL的綜合的綜合工具不太引薦工具不太引薦形狀存放器形狀存放器(state_re

7、g) :代表存儲(chǔ)單元的形狀:代表存儲(chǔ)單元的形狀下一個(gè)形狀邏輯下一個(gè)形狀邏輯(Next state logic ):代表決議:代表決議state_next的組的組合電路合電路同步電路同步電路n操作如下:操作如下:n在時(shí)鐘信號(hào)的上升沿,在時(shí)鐘信號(hào)的上升沿, state_next 被采樣和保管在存放器中被采樣和保管在存放器中,成為新的,成為新的state_reg的值。的值。n外部輸入和外部輸入和state_reg 信號(hào)傳輸?shù)叫盘?hào)傳輸?shù)絥ext-state 和輸出來(lái)決議新和輸出來(lái)決議新的的next-state 和新的輸出信號(hào)和新的輸出信號(hào)n在時(shí)鐘信號(hào)的上升沿,在時(shí)鐘信號(hào)的上升沿, 新的新的state_

8、next重新被采樣和保管,重新被采樣和保管,然后反復(fù)進(jìn)程然后反復(fù)進(jìn)程n需求留意的是時(shí)鐘周期需求足夠大來(lái)順應(yīng)觸發(fā)器的需求留意的是時(shí)鐘周期需求足夠大來(lái)順應(yīng)觸發(fā)器的next-state 邏輯傳播延時(shí)、邏輯傳播延時(shí)、clock-to-q 延時(shí)、建立時(shí)間延時(shí)延時(shí)、建立時(shí)間延時(shí)同步電路同步電路n同步設(shè)計(jì)的優(yōu)勢(shì)同步設(shè)計(jì)的優(yōu)勢(shì)n單個(gè)的全局時(shí)鐘讓成千上萬(wàn)個(gè)觸發(fā)器構(gòu)建的電路可以一致控單個(gè)的全局時(shí)鐘讓成千上萬(wàn)個(gè)觸發(fā)器構(gòu)建的電路可以一致控制和滿足時(shí)序約束。制和滿足時(shí)序約束。n一個(gè)同步的模塊把組合邏輯器件從存儲(chǔ)單元中分別出來(lái),實(shí)一個(gè)同步的模塊把組合邏輯器件從存儲(chǔ)單元中分別出來(lái),實(shí)現(xiàn)組合邏輯部分的單獨(dú)優(yōu)化?,F(xiàn)組合邏輯部分

9、的單獨(dú)優(yōu)化。n傳播延時(shí)的反常情況很容易經(jīng)過(guò)分析最差的時(shí)序行為來(lái)處置傳播延時(shí)的反常情況很容易經(jīng)過(guò)分析最差的時(shí)序行為來(lái)處置n因此,同步模塊把一個(gè)復(fù)雜的時(shí)序電路變?yōu)閱蝹€(gè)的閉環(huán)反響因此,同步模塊把一個(gè)復(fù)雜的時(shí)序電路變?yōu)閱蝹€(gè)的閉環(huán)反響回路和簡(jiǎn)化設(shè)計(jì)的流程回路和簡(jiǎn)化設(shè)計(jì)的流程同步電路同步電路n同步電路的類型同步電路的類型n常規(guī)的時(shí)序電路常規(guī)的時(shí)序電路n形狀表示,轉(zhuǎn)變和下個(gè)形狀邏輯有一個(gè)簡(jiǎn)單,常規(guī)的方式,形狀表示,轉(zhuǎn)變和下個(gè)形狀邏輯有一個(gè)簡(jiǎn)單,常規(guī)的方式,例如一個(gè)自增的計(jì)數(shù)器或者一個(gè)移位存放器。例如一個(gè)自增的計(jì)數(shù)器或者一個(gè)移位存放器。n隨機(jī)的時(shí)序電路隨機(jī)的時(shí)序電路(FSM)n更復(fù)雜的形狀遷移且形狀和它們的二

10、進(jìn)制表示沒(méi)有特殊的聯(lián)更復(fù)雜的形狀遷移且形狀和它們的二進(jìn)制表示沒(méi)有特殊的聯(lián)絡(luò)。即,下一個(gè)形狀邏輯是隨機(jī)的。絡(luò)。即,下一個(gè)形狀邏輯是隨機(jī)的。n組合成的時(shí)序邏輯組合成的時(shí)序邏輯 (帶有數(shù)據(jù)通路的帶有數(shù)據(jù)通路的FSM, FSMD - RTL)n組合常規(guī)時(shí)序電路和有限形狀機(jī),用有限形狀機(jī)來(lái)控制時(shí)序組合常規(guī)時(shí)序電路和有限形狀機(jī),用有限形狀機(jī)來(lái)控制時(shí)序電路的行為電路的行為同步電路同步電路n當(dāng)他需求創(chuàng)建當(dāng)他需求創(chuàng)建D鎖存器和鎖存器和D觸發(fā)器的時(shí)候,可以運(yùn)用下面的觸發(fā)器的時(shí)候,可以運(yùn)用下面的語(yǔ)法款式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成適宜的器件。語(yǔ)法款式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成適宜的器件。nD鎖存器鎖存器n隱含

11、的隱含的else語(yǔ)句會(huì)產(chǎn)生語(yǔ)句會(huì)產(chǎn)生D鎖存器鎖存器library ieee;use ieee.std_logic_1164.all;entity dlatch isport( c: in std_logic; d: in std_logic; q: out std_logic );end dlatch;architecture arch of dlatch is begin - c and d in sens. list b/c process sens. to bothprocess(c, d)beginif (c=1) then q = d;end if;end process;end a

12、rch;dcq(a)D 鎖存器根本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用n當(dāng)他需求創(chuàng)建當(dāng)他需求創(chuàng)建D鎖存器和鎖存器和D觸發(fā)器的時(shí)候,可以運(yùn)用下面的觸發(fā)器的時(shí)候,可以運(yùn)用下面的語(yǔ)法款式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成適宜的器件。語(yǔ)法款式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成適宜的器件。n上升沿上升沿D觸發(fā)器觸發(fā)器n沒(méi)有沒(méi)有else語(yǔ)句且對(duì)時(shí)鐘跳變信號(hào)敏感語(yǔ)句且對(duì)時(shí)鐘跳變信號(hào)敏感l(wèi)ibrary ieee;use ieee.std_logic_1164.all;entity dff isport( clk: in std_logic; d: in std_logic; q: out std_logic );end

13、dff;architecture arch of dff is beginprocess(clk)begin - when d changes (unlike latch)if (clkevent and clk=1) then - can also use q = d; - rising_edge(clk)end if; end process;end arch;dclkq(b)上升沿D 觸發(fā)器根本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用n下降沿下降沿D觸發(fā)器觸發(fā)器n只需求上升沿的程序稍作修正即可紅色為修正的部分只需求上升沿的程序稍作修正即可紅色為修正的部分library ieee;use ieee

14、.std_logic_1164.all;entity dff isport( clk: in std_logic; d: in std_logic; q: out std_logic );end dff;architecture arch of dff is beginprocess(clk)begin - when d changes (unlike latch)if (clkevent and clk=0) then - can also use q = d; - falling_edge(clk)end if; end process;end arch;dclkq(c)下降沿D 觸發(fā)器根

15、本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用n帶異步復(fù)位的帶異步復(fù)位的D觸發(fā)器觸發(fā)器library ieee;use ieee.std_logic_1164.all;entity dffr isport( clk: in std_logic; reset: in std_logic; d: in std_logic; q: out std_logic );end dffr;architecture arch of dffr is beginprocess(clk,reset)beginif (reset=1) then q =0;elsif rising_edge(clk) then q = d;end

16、 if;end process;end arch;dclkq(d)帶異步復(fù)位的D 觸發(fā)器reset根本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用n存放器存放器n由多個(gè)共用同樣時(shí)鐘信號(hào)和復(fù)位信號(hào)的由多個(gè)共用同樣時(shí)鐘信號(hào)和復(fù)位信號(hào)的D觸發(fā)器并聯(lián)而成觸發(fā)器并聯(lián)而成library ieee;use ieee.std_logic_1164.all;entity reg8 isport( clk, reset: in std_logic; d: in std_logic_vector(7 downto 0); q: out std_logic_vector(7 downto 0) );end reg8;archit

17、ecture arch of reg8 is beginprocess(clk, reset)beginif (reset=1) then q 0);elsif (clkevent and clk=1) then q = d;end if;end process; end arch;根本存儲(chǔ)單元的援用根本存儲(chǔ)單元的援用n最簡(jiǎn)單的設(shè)計(jì)時(shí)序電路的方法是根據(jù)框圖來(lái)搭建最簡(jiǎn)單的設(shè)計(jì)時(shí)序電路的方法是根據(jù)框圖來(lái)搭建n構(gòu)建存放器構(gòu)建存放器n編寫下一個(gè)形狀和輸出邏輯組合電路的代碼編寫下一個(gè)形狀和輸出邏輯組合電路的代碼簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n帶有同步使能端的帶有同步使能端的D觸發(fā)器觸發(fā)器n留意:留意:en

18、的值在的值在clk的上升沿被采樣的上升沿被采樣n當(dāng)當(dāng)en=0,或者由,或者由0變?yōu)樽優(yōu)?,觸發(fā)器堅(jiān)持輸出,觸發(fā)器堅(jiān)持輸出q不變不變n當(dāng)當(dāng)en=1,或者由,或者由1變?yōu)樽優(yōu)?,觸發(fā)器保管,觸發(fā)器保管q_next的值的值簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n帶有同步使能端的帶有同步使能端的D觸發(fā)器代碼觸發(fā)器代碼library ieee;use ieee.std_logic_1164.all;entity dff_en isport( clk: in std_logic; reset: in std_logic; en: in std_logic; d: in std_logic; q: out std_l

19、ogic );end dff_en;architecture two_seg_arch of dff_en issignal q_reg: std_logic;signal q_next: std_logic; begin - D FFprocess(clk, reset)beginif (reset=1) then q_reg = 0;elsif (clkevent and clk=1) then q_reg = q_next;end if;end process; - next-state logic q_next = d when en =1 else q_reg; - output l

20、ogic q = q_reg;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子nT觸發(fā)器觸發(fā)器n留意:留意:t的值在的值在clk的上升沿被采樣的上升沿被采樣簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子nT觸發(fā)器代碼觸發(fā)器代碼library ieee;use ieee.std_logic_1164.all;entity tff isport( clk: in std_logic; reset: in std_logic; t: in std_logic; q: out std_logic );end tff;architecture two_seg_arch of tff issignal q_r

21、eg: std_logic;signal q_next: std_logic;begin - D FFprocess(clk, reset)beginif (reset=1) then q_reg = 0;elsif (clkevent and clk=1) then q_reg = q_next;end if;end process; - next-state logic q_next = q_reg when t=0 elsenot(q_reg); - output logic q = q_reg;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n移位存放器無(wú)控制信號(hào)移位存放

22、器無(wú)控制信號(hào)我們可以重新調(diào)整觸發(fā)器使其成為一列然后把它看成一我們可以重新調(diào)整觸發(fā)器使其成為一列然后把它看成一個(gè)存儲(chǔ)器塊,如以下圖所示。個(gè)存儲(chǔ)器塊,如以下圖所示。簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n移位存放器無(wú)控制信號(hào)移位存放器無(wú)控制信號(hào)簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n移位存放器無(wú)控制信號(hào)代碼移位存放器無(wú)控制信號(hào)代碼library ieee;use ieee.std_logic_1164.all;entity shift_right_register isport( clk, reset: in std_logic; d: in std_logic; q: out std_logic );end shi

23、ft_right_register;architecture two_seg_arch of shift_right_register issignal r_reg: std_logic_vector(3 downto 0);signal r_next: std_logic_vector(3 downto 0);begin - registerprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-st

24、ate logic (shift right 1 bit) r_next = d & r_reg(3 downto 1); - output q = r_reg(0);end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n通用移位存放器通用移位存放器n設(shè)計(jì)為設(shè)計(jì)為4個(gè)操作方式:并行、左移、右移、暫停個(gè)操作方式:并行、左移、右移、暫停簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n通用移位存放器代碼通用移位存放器代碼library ieee;use ieee.std_logic_1164.all;entity shift_register isport( clk, reset: in std_logic

25、; ctrl: in std_logic_vector(1 downto 0); d: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end shift_register;architecture two_seg_arch of shift_register issignal r_reg: std_logic_vector(3 downto 0);signal r_next: std_logic_vector(3 downto 0);begin - registerprocess(clk, rese

26、t)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logicwith ctrl select r_next =r_reg when 00, - no op r_reg(2 downto 0) & d(0) when 01, - sft left d(3) & r_reg(3 downto 1) when 10, - sft rght d when others; - output q = r_reg;end two_s

27、eg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n恣意序列計(jì)數(shù)器恣意序列計(jì)數(shù)器Input patternOutput pattern000011011110110101101111111000library ieee;use ieee.std_logic_1164.all;entity arbi_seq_counter4 isport( clk, reset: in std_logic; q: out std_logic_vector(2 downto 0) );end arbi_seq_counter4;architecture two_seg_arch of arbi_seq_counter4

28、 issignal r_reg: std_logic_vector(2 downto 0);signal r_next: std_logic_vector(2 downto 0); begin - registerprocess(clk, reset)beginif (reset=1) then簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n恣意序列計(jì)數(shù)器續(xù)恣意序列計(jì)數(shù)器續(xù) r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next = 011 when r_reg=0

29、00 else 110 when r_reg=011 else 101 when r_reg=110 else 111 when r_reg=101 else 000; - r_reg=111 - output logic q = r_reg;end two_seg_arch;Input patternOutput pattern000011011110110101101111111000簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器n當(dāng)計(jì)數(shù)器的值全部為當(dāng)計(jì)數(shù)器的值全部為1時(shí),輸出最大脈沖,并自動(dòng)輪回時(shí),輸出最大脈沖,并自動(dòng)輪回library ieee;use ie

30、ee.std_logic_1164.all;use ieee.numeric_std.all;entity binary_counter4_pulse isport( clk, reset: in std_logic; max_pulse: out std_logic; q: out std_logic_vector(3 downto 0) );end binary_counter4_pulse;architecture two_seg_arch of binary_counter4_pulse issignal r_reg: unsigned(3 downto 0);signal r_nex

31、t: unsigned(3 downto 0); begin - registerprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next = r_reg + 1; - output logic q = std_logic_vector(r_reg); max_pulse = 1 when (r_reg=1111) else 0;end two_seg_arch;簡(jiǎn)單

32、的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器nRTL原理圖原理圖簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n二進(jìn)制計(jì)數(shù)器二進(jìn)制計(jì)數(shù)器Syn_clrloadenq*操作操作1-00.00同步清零01-d并行載入001q+1計(jì)數(shù)000q暫停簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n二進(jìn)制計(jì)數(shù)器二進(jìn)制計(jì)數(shù)器library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity binary_counter4_feature isport( clk, reset: in std_logic; syn_clr, en, load:

33、 in std_logic; d: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end binary_counter4_feature;architecture two_seg_arch of binary_counter4_feature issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0); begin - registerprocess(clk, reset)beginif (reset=1) the

34、n r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next 0) when syn_clr=1 else unsigned(d) when load=1 else r_reg + 1 when en =1 else r_reg; - output logic q = std_logic_vector(r_reg);end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n十進(jìn)制計(jì)數(shù)器十進(jìn)制計(jì)數(shù)器library ieee;use ieee.st

35、d_logic_1164.all;use ieee.numeric_std.all;entity mod10_counter isport( clk, reset: in std_logic; q: out std_logic_vector(3 downto 0) );end mod10_counter;architecture two_seg_arch of mod10_counter isconstant TEN: integer := 10;signal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0); be

36、gin - registerprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next 0) when r_reg=(TEN-1) else r_reg + 1; - output logic q = std_logic_vector(r_reg);end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n可編程的可編程的m進(jìn)制計(jì)數(shù)器進(jìn)制計(jì)數(shù)器n可以經(jīng)過(guò)改動(dòng)一個(gè)常

37、數(shù)可以經(jīng)過(guò)改動(dòng)一個(gè)常數(shù)m來(lái)改動(dòng)計(jì)數(shù)器的進(jìn)制,范圍為來(lái)改動(dòng)計(jì)數(shù)器的進(jìn)制,范圍為“0010“1111library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std.all;entity prog_counter isport( clk, reset: in std_logic; m: in std_logic_vector(3 downto 0); q: out std_logic_vector(3 downto 0) );end prog_counter;architecture two_seg_clear_arch of prog_c

38、ounter issignal r_reg: unsigned(3 downto 0);signal r_next: unsigned(3 downto 0);begin - registerprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next 0) when r_reg=(unsigned(m)-1) else簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n可編程的可編程的m進(jìn)制

39、計(jì)數(shù)器進(jìn)制計(jì)數(shù)器(續(xù)續(xù))n可以經(jīng)過(guò)改動(dòng)一個(gè)常數(shù)可以經(jīng)過(guò)改動(dòng)一個(gè)常數(shù)m來(lái)改動(dòng)計(jì)數(shù)器的進(jìn)制,范圍為來(lái)改動(dòng)計(jì)數(shù)器的進(jìn)制,范圍為“0010“1111 r_reg + 1; - output logic q = std_logic_vector(r_reg);end two_seg_clear_arch;architecture two_seg_effi_arch of prog_counter issignal r_reg: unsigned(3 downto 0);signal r_next, r_inc: unsigned(3 downto 0); begin - registerprocess(

40、clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_next;end if;end process; - next-state logic r_inc = r_reg + 1; r_next 0) when r_inc=unsigned(m) else r_inc; - output logic q = std_logic_vector(r_reg);end two_seg_effi_arch;簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子簡(jiǎn)單的設(shè)計(jì)例子n可編程的可編程的m進(jìn)制計(jì)數(shù)器進(jìn)制計(jì)數(shù)器(

41、續(xù)續(xù))nRTL原理圖原理圖n組合電路組合電路n用傳播延時(shí)來(lái)描畫用傳播延時(shí)來(lái)描畫n時(shí)序電路時(shí)序電路n必需求滿足建立和堅(jiān)持時(shí)間,用最大時(shí)鐘頻率來(lái)描畫必需求滿足建立和堅(jiān)持時(shí)間,用最大時(shí)鐘頻率來(lái)描畫例如:例如:200MHz的計(jì)數(shù)器,的計(jì)數(shù)器,2.4GHz的奔騰的奔騰IIn建立時(shí)間、存放器的建立時(shí)間、存放器的clock-to-q延時(shí)和下一個(gè)形狀的傳播延時(shí)和下一個(gè)形狀的傳播延時(shí),都嵌套在時(shí)鐘頻率中。延時(shí),都嵌套在時(shí)鐘頻率中。時(shí)序分析時(shí)序分析State_next信號(hào)必需滿足觸發(fā)器的時(shí)序約束nstate_next的延遲受三個(gè)源影響的延遲受三個(gè)源影響nstate_reg的輸出部分一樣反響回路和同步時(shí)鐘的輸出部分

42、一樣反響回路和同步時(shí)鐘n和外部運(yùn)用一樣時(shí)鐘的子系統(tǒng)輸入同步和外部運(yùn)用一樣時(shí)鐘的子系統(tǒng)輸入同步n和外部輸入異步和外部輸入異步n對(duì)于前兩個(gè)工程,我們可以調(diào)理時(shí)鐘的頻率來(lái)阻止時(shí)序?qū)τ谇皟蓚€(gè)工程,我們可以調(diào)理時(shí)鐘的頻率來(lái)阻止時(shí)序違反違反n請(qǐng)看下面的時(shí)序圖展現(xiàn)了閉環(huán)反響系統(tǒng)的時(shí)序行為請(qǐng)看下面的時(shí)序圖展現(xiàn)了閉環(huán)反響系統(tǒng)的時(shí)序行為,在,在t0時(shí)辰,時(shí)鐘由時(shí)辰,時(shí)鐘由0變?yōu)樽優(yōu)?。我們假設(shè)。我們假設(shè)state_next在建立在建立和堅(jiān)持的周期內(nèi)不會(huì)改動(dòng)和堅(jiān)持的周期內(nèi)不會(huì)改動(dòng)n在在clock-to-q (Tcq)延遲之后,存放器的輸出延遲之后,存放器的輸出state_reg在時(shí)在時(shí)辰辰t1t0+Tcq堅(jiān)持穩(wěn)定堅(jiān)

43、持穩(wěn)定時(shí)序分析時(shí)序分析n由于由于state_reg是是state_next邏輯的輸入,邏輯的輸入, state_next邏輯的輸出在時(shí)間邏輯的輸出在時(shí)間Tnext(min)和和Tnext(max)改動(dòng),分別表示最快和最慢的途徑。改動(dòng),分別表示最快和最慢的途徑。n因此,因此, state_next在在t2t1+ Tnext(min) 時(shí)辰改動(dòng),在時(shí)辰改動(dòng),在t3t1+ Tnext(max) 時(shí)辰穩(wěn)定。時(shí)辰穩(wěn)定。時(shí)序分析時(shí)序分析n在在t5時(shí)辰,一個(gè)新的上升沿時(shí)鐘到達(dá)且當(dāng)前的時(shí)鐘周期終了。時(shí)辰,一個(gè)新的上升沿時(shí)鐘到達(dá)且當(dāng)前的時(shí)鐘周期終了。 state_next在在t5時(shí)辰被采樣。時(shí)辰被采樣。時(shí)序分析

44、時(shí)序分析n下面來(lái)思索一下建立時(shí)間的約束,下面來(lái)思索一下建立時(shí)間的約束,state_next信號(hào)在下一個(gè)采樣邊沿信號(hào)在下一個(gè)采樣邊沿t5到來(lái)到來(lái)之前的之前的Tsetup時(shí)間內(nèi)必需堅(jiān)持穩(wěn)定。時(shí)間內(nèi)必需堅(jiān)持穩(wěn)定。(t5由時(shí)序圖中的由時(shí)序圖中的t4給定給定)nt3t4n從時(shí)序圖可以看出:從時(shí)序圖可以看出:nt3=t0+Tcq+Tnext(max) nt4=t5-Tsetup=t0+Tc-Tsetupn上面的不等式可以改寫為上面的不等式可以改寫為nt0+Tcq+Tnext(max) t0+Tc-Tsetupn可以化簡(jiǎn)為可以化簡(jiǎn)為nTcq+Tnext(max) +Tsetup Tcn因此,最小的時(shí)鐘周期是

45、因此,最小的時(shí)鐘周期是nTc(min) = Tcq + Tnext(max) + Tsetup時(shí)序分析時(shí)序分析時(shí)序分析時(shí)序分析n對(duì)于特定的技術(shù),對(duì)于特定的技術(shù),D觸發(fā)器的觸發(fā)器的Tcq和和Tsetup可以從數(shù)據(jù)手可以從數(shù)據(jù)手冊(cè)獲得。冊(cè)獲得。n讓讓Tcq=1ns,Tsetup=0.5ns,由于,由于1位的移位邏輯僅僅位的移位邏輯僅僅包含線網(wǎng),所以假設(shè)它線網(wǎng)的銜接延時(shí)包含線網(wǎng),所以假設(shè)它線網(wǎng)的銜接延時(shí) 是是0,因此其,因此其最高的頻率為最高的頻率為1/1.5 ns = 666.7 MHzn下文講述一下和其它組合塊結(jié)合的例子,其延時(shí)大于下文講述一下和其它組合塊結(jié)合的例子,其延時(shí)大于0.時(shí)序分析時(shí)序分

46、析n堅(jiān)持時(shí)間違反堅(jiān)持時(shí)間違反輸入的信號(hào)在采樣沿之后必需求堅(jiān)持一段時(shí)間輸入的信號(hào)在采樣沿之后必需求堅(jiān)持一段時(shí)間start_next 在在t0 和和 th (t0 + Thold)內(nèi)必需堅(jiān)持穩(wěn)定。內(nèi)必需堅(jiān)持穩(wěn)定。時(shí)序分析時(shí)序分析n堅(jiān)持時(shí)間違反堅(jiān)持時(shí)間違反state_next 最早改動(dòng)的時(shí)辰是最早改動(dòng)的時(shí)辰是t2th t2 且且 t2 = t0 + Tcq + Tnext(min)th = t0 + Thold所以所以 t0 + Thold t0 + Tcq + Tnext(min)化簡(jiǎn)得化簡(jiǎn)得 Thold Tcq + Tnext(min)由于觸發(fā)器的輸出驅(qū)動(dòng)下一級(jí)的輸入,由于觸發(fā)器的輸出驅(qū)動(dòng)下一級(jí)

47、的輸入, Tnext(min)約等于約等于0且且Thold Tcq器件廠商通常會(huì)保證觸發(fā)器這些內(nèi)在參數(shù)的滿足關(guān)系,但時(shí)鐘偏斜問(wèn)器件廠商通常會(huì)保證觸發(fā)器這些內(nèi)在參數(shù)的滿足關(guān)系,但時(shí)鐘偏斜問(wèn)題是值得我們思索的。題是值得我們思索的。時(shí)序分析時(shí)序分析n我們也需求思索外部輸入輸出的時(shí)鐘特征除了剛剛提到的閉我們也需求思索外部輸入輸出的時(shí)鐘特征除了剛剛提到的閉環(huán)反響回路環(huán)反響回路n電路的輸出可以分為:摩爾電路的輸出可以分為:摩爾 Moore 輸出和米利輸出和米利 Mealy 輸出輸出n對(duì)于摩爾輸出,輸出的信號(hào)取決于當(dāng)前系統(tǒng)的形狀,而米利輸對(duì)于摩爾輸出,輸出的信號(hào)取決于當(dāng)前系統(tǒng)的形狀,而米利輸出取決于當(dāng)前系統(tǒng)

48、的形狀和外部輸入。出取決于當(dāng)前系統(tǒng)的形狀和外部輸入。n這兩種輸出可以同時(shí)存在于同一個(gè)電路中。這兩種輸出可以同時(shí)存在于同一個(gè)電路中。n這兩種輸出主要時(shí)間參數(shù)是這兩種輸出主要時(shí)間參數(shù)是Tco(在時(shí)鐘的上升沿后獲得一個(gè)有在時(shí)鐘的上升沿后獲得一個(gè)有效輸出所需求的時(shí)間效輸出所需求的時(shí)間)時(shí)序分析時(shí)序分析nTco 是觸發(fā)器的是觸發(fā)器的clock-to-q延時(shí)和輸出的傳播延時(shí)之和延時(shí)和輸出的傳播延時(shí)之和nTco = Tcq + Toutputn對(duì)于米利型輸出,輸入可以直接影響輸出。對(duì)于米利型輸出,輸入可以直接影響輸出。一段式代碼風(fēng)格一段式代碼風(fēng)格n雖然可以把下一個(gè)形狀的存儲(chǔ)單元和輸出都寫在同一段代碼中雖然可

49、以把下一個(gè)形狀的存儲(chǔ)單元和輸出都寫在同一段代碼中,但盡能夠防止這樣的寫法,由于很容易出錯(cuò)。,但盡能夠防止這樣的寫法,由于很容易出錯(cuò)。n思索一下這段帶使能信號(hào)的思索一下這段帶使能信號(hào)的D觸發(fā)器代碼。觸發(fā)器代碼。architecture one_seg_arch of dff_en is beginprocess(clk, reset)beginif (reset=1) then q =0;elsif (clkevent and clk=1) thenif (en=1) then q = d;end if;end if;end process;end one_seg_arch;n在在elsif里面

50、多加了一行里面多加了一行if (en=1),我們可以解釋為,當(dāng)在時(shí)鐘,我們可以解釋為,當(dāng)在時(shí)鐘的上升沿到來(lái)的時(shí)候,假設(shè)的上升沿到來(lái)的時(shí)候,假設(shè)en=1,那么,那么q=d。短少的。短少的else語(yǔ)句語(yǔ)句隱含著當(dāng)隱含著當(dāng)en不等于不等于1時(shí),時(shí),q的值要堅(jiān)持。的值要堅(jiān)持。 一段式代碼風(fēng)格一段式代碼風(fēng)格n再思索一下再思索一下T觸發(fā)器的代碼。觸發(fā)器的代碼。architecture one_seg_arch of tff issignal q_reg: std_logic; beginprocess(clk, reset)beginif (reset=1) then q_reg = 0;elsif (c

51、lkevent and clk=1) thenif (t=1) then q_reg = not q_reg;end if;end if;end process; q = q_reg;end one_seg_arch;n這里的內(nèi)部信號(hào)這里的內(nèi)部信號(hào)q_reg代表著觸發(fā)器的輸出。代表著觸發(fā)器的輸出?!皅_reg = not q_reg;這句一眼看上去很奇異,其實(shí)它可以解釋為:左邊的這句一眼看上去很奇異,其實(shí)它可以解釋為:左邊的是新的值是新的值 結(jié)果為結(jié)果為not q_reg ,右邊的是當(dāng)前值,右邊的是當(dāng)前值 q_reg 。一段式代碼風(fēng)格一段式代碼風(fēng)格n思索一下自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器,下面是一段錯(cuò)

52、誤的一段式思索一下自在運(yùn)轉(zhuǎn)的二進(jìn)制計(jì)數(shù)器,下面是一段錯(cuò)誤的一段式代碼。代碼。architecture not_work_one_seg_glitch_archof binary_counter4_pulse issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;if (r_reg = 1111) then max_pulse = 1;else max_pulse

53、= 0;end if;end if;end process; q = std_logic_vector(r_reg);end not_work_one_seg_glitch_arch;一段式代碼風(fēng)格一段式代碼風(fēng)格n錯(cuò)誤的緣由是錯(cuò)誤的緣由是if (r_reg = 1111) then max_pulse = 1;else max_pulse = 0;end if; 這段代碼在輸出端多添加了一個(gè)緩沖,輸出結(jié)果會(huì)有這段代碼在輸出端多添加了一個(gè)緩沖,輸出結(jié)果會(huì)有一個(gè)時(shí)鐘的延時(shí)。其綜合出來(lái)的結(jié)果如下圖。一個(gè)時(shí)鐘的延時(shí)。其綜合出來(lái)的結(jié)果如下圖。這個(gè)不可以有一段式代碼風(fēng)格一段式代碼風(fēng)格n修正的方法是把輸出邏

54、輯在進(jìn)程中移除出去。修正的方法是把輸出邏輯在進(jìn)程中移除出去。architecture work_one_seg_glitch_archof binary_counter4_pulse issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;end if;end process; q = std_logic_vector(r_reg); max_pulse = 1 w

55、hen r_reg = 1111 else 0;end work_one_seg_glitch_arch;一段式代碼風(fēng)格一段式代碼風(fēng)格n再舉一個(gè)例子再舉一個(gè)例子可編程的計(jì)數(shù)器可編程的計(jì)數(shù)器architecture not_work_one_arch of prog_counter issignal r_reg: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) then r_reg = r_reg + 1;if (r_reg = uns

56、igned(m) then r_reg0);end if;end if;end process; q = std_logic_vector(r_reg);end not_work_one_arch;n這個(gè)計(jì)數(shù)器并沒(méi)有按照預(yù)期的目的任務(wù),由于里面有一個(gè)信號(hào)這個(gè)計(jì)數(shù)器并沒(méi)有按照預(yù)期的目的任務(wù),由于里面有一個(gè)信號(hào)直到進(jìn)程的終了才會(huì)更新。直到進(jìn)程的終了才會(huì)更新。一段式代碼風(fēng)格一段式代碼風(fēng)格n由于由于r_reg在在r_reg = r_reg + 1這句執(zhí)行后,還沒(méi)有來(lái)得及更這句執(zhí)行后,還沒(méi)有來(lái)得及更新,我們就用它來(lái)進(jìn)展新,我們就用它來(lái)進(jìn)展“r_reg = unsigned(m)比較,這個(gè)是比較,這個(gè)是舊

57、的值,這樣設(shè)計(jì)出來(lái)的計(jì)數(shù)器會(huì)比預(yù)設(shè)的多一個(gè)數(shù)。例如舊的值,這樣設(shè)計(jì)出來(lái)的計(jì)數(shù)器會(huì)比預(yù)設(shè)的多一個(gè)數(shù)。例如本來(lái)想設(shè)計(jì)本來(lái)想設(shè)計(jì)8進(jìn)制的,如今就變成進(jìn)制的,如今就變成9進(jìn)制了進(jìn)制了n為了修正,我們把自增的操作移到進(jìn)程外面。為了修正,我們把自增的操作移到進(jìn)程外面。architecture work_one_arch of prog_counter issignal r_reg: unsigned(3 downto 0);signal r_inc: unsigned(3 downto 0); beginprocess(clk, reset)beginif (reset=1) then r_reg 0);elsif (clkevent and clk=1) thenif (r_inc = unsigned(m) then r_reg 0);else r_reg = r_inc;end if;end if;end process; r_inc = r_reg + 1; q = std_logic_vector(r_reg);end work_one_arch;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論