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

下載本文檔

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

文檔簡(jiǎn)介

1、本章目錄時(shí)序電路概述同步電路基本存儲(chǔ)單元的引用簡(jiǎn)單的設(shè)計(jì)例子時(shí)序分析一段式代碼風(fēng)格時(shí)序電路中變量的使用本章目錄時(shí)序電路概述組合電路和時(shí)序電路時(shí)序電路:輸出是輸入和當(dāng)前狀態(tài)的函數(shù)基本記憶單元D 鎖存器D 觸發(fā)器RAM時(shí)序電路概述組合電路和時(shí)序電路時(shí)序電路概述D鎖存器是電平敏感的記憶單元,而D觸發(fā)器是邊沿敏感的記憶單元對(duì)于D鎖存器,當(dāng)時(shí)鐘信號(hào)c為高電平時(shí),下一個(gè)狀態(tài)q*=d,當(dāng)時(shí)鐘信號(hào)c為低電平時(shí),q*=q(保持)dcq(a)D 鎖存器cq*0q1dD鎖存器D鎖存器是電平敏感的記憶單元,而D觸發(fā)器是邊沿敏感的記憶單元D鎖存器的時(shí)序圖(d在c的下降沿處被采樣和保存)D鎖存器D鎖存器的時(shí)序圖(d在c的

2、下降沿處被采樣和保存)D鎖存器D觸發(fā)器只有在clk信號(hào)的跳變沿處有效(01或10)dclkq(b)上升沿D 觸發(fā)器dclkq(c)下降沿D 觸發(fā)器clkq*0q1qdclkq*0q1qd“有效”的含義是指:d的值只有在clk的邊沿處被采樣和保存,并更新輸出qD觸發(fā)器D觸發(fā)器只有在clk信號(hào)的跳變沿處有效(01或10)dcD觸發(fā)器的優(yōu)點(diǎn)d端口小小的毛刺不會(huì)影響到存儲(chǔ)的狀態(tài)消除了競(jìng)爭(zhēng)的條件,交換數(shù)據(jù)的電路可以工作D觸發(fā)器的缺點(diǎn)是D鎖存器的兩倍大小D觸發(fā)器D觸發(fā)器的優(yōu)點(diǎn)D觸發(fā)器時(shí)序圖如下: Clock-to-q 延時(shí)(Tcq): 信號(hào)d被采樣到更新q的延時(shí)建立時(shí)間(Tsetup): 在時(shí)鐘的上升沿來(lái)

3、臨之前,d必須保持穩(wěn)定的時(shí)間保持時(shí)間(Thold): 在時(shí)鐘上升沿到來(lái)之后,d必須保持穩(wěn)定的時(shí)間D觸發(fā)器時(shí)序圖如下: Clock-to-q 延時(shí)(Tcq): 信號(hào)d時(shí)序圖如下:(續(xù))Tcq代表組合電路的傳播延時(shí)Tsetup 和Thold 是時(shí)序約束,d必須在clk的時(shí)間間隔內(nèi)保持穩(wěn)定。如果d在這個(gè)時(shí)隙內(nèi)改變,這樣就會(huì)違反建立時(shí)間和保持時(shí)間的規(guī)則,導(dǎo)致觸發(fā)器進(jìn)入亞穩(wěn)態(tài)(q不是0也不是1)D觸發(fā)器時(shí)序圖如下:(續(xù))Tcq代表組合電路的傳播延時(shí)D觸發(fā)器在時(shí)序電路中,時(shí)鐘信號(hào)扮演著一個(gè)很重要的角色系統(tǒng)可以根據(jù)時(shí)鐘的布局來(lái)分類(lèi)全局同步電路所有的存儲(chǔ)單元都在同一個(gè)全局時(shí)鐘的控制下工作全局異步-局部同步電路

4、(GALS)設(shè)計(jì)的器件傳輸分開(kāi)得太遠(yuǎn),無(wú)法使用單個(gè)同步時(shí)鐘的情況下,只能使用一個(gè)全局的異步時(shí)鐘然而,較小的子系統(tǒng)內(nèi)部使用一個(gè)同步的時(shí)鐘在子系統(tǒng)之間需要特殊的電路接口來(lái)保證正常的工作時(shí)鐘信號(hào)在時(shí)序電路中,時(shí)鐘信號(hào)扮演著一個(gè)很重要的角色全局同步電路全局全局異步電路沒(méi)有時(shí)鐘來(lái)協(xié)調(diào)存儲(chǔ)單元的工作,大致分為兩類(lèi)。時(shí)鐘 的使用是沒(méi)有規(guī)律的,例如行波計(jì)數(shù)器:觸發(fā)器的時(shí)鐘端口連接上一個(gè)觸發(fā)器的輸出q端口。(這種設(shè)計(jì)并不完美,不推薦)系統(tǒng)帶有不需要時(shí)鐘的存儲(chǔ)單元(如D鎖存器)或者帶有反饋回路的組合電路(異步電路)。時(shí)鐘信號(hào)合理的異步電路設(shè)計(jì)和同步電路完全不同,而且HDL的綜合工具不太推薦全局異步電路時(shí)鐘信號(hào)合理

5、的異步電路設(shè)計(jì)和同步電路完全不同,而狀態(tài)寄存器(state_reg) :代表存儲(chǔ)單元的狀態(tài)下一個(gè)狀態(tài)邏輯(Next state logic ):代表決定state_next的組合電路同步電路狀態(tài)寄存器(state_reg) :代表存儲(chǔ)單元的狀態(tài)同步電操作如下:在時(shí)鐘信號(hào)的上升沿, state_next 被采樣和保存在寄存器中,成為新的state_reg的值。外部輸入和state_reg 信號(hào)傳輸?shù)絥ext-state 和輸出來(lái)決定新的next-state 和新的輸出信號(hào)在時(shí)鐘信號(hào)的上升沿, 新的state_next重新被采樣和保存,然后重復(fù)進(jìn)程需要注意的是時(shí)鐘周期需要足夠大來(lái)適應(yīng)觸發(fā)器的nex

6、t-state 邏輯傳播延時(shí)、clock-to-q 延時(shí)、建立時(shí)間延時(shí)同步電路操作如下:需要注意的是時(shí)鐘周期需要足夠大來(lái)適應(yīng)觸發(fā)器的nex同步設(shè)計(jì)的優(yōu)勢(shì)單個(gè)的全局時(shí)鐘讓成千上萬(wàn)個(gè)觸發(fā)器構(gòu)建的電路能夠統(tǒng)一控制和滿(mǎn)足時(shí)序約束。一個(gè)同步的模塊把組合邏輯器件從存儲(chǔ)單元中分離出來(lái),實(shí)現(xiàn)組合邏輯部分的單獨(dú)優(yōu)化。傳播延時(shí)的反常情況很容易通過(guò)分析最差的時(shí)序行為來(lái)處理因此,同步模塊把一個(gè)復(fù)雜的時(shí)序電路變?yōu)閱蝹€(gè)的閉環(huán)反饋回路和簡(jiǎn)化設(shè)計(jì)的流程同步電路同步設(shè)計(jì)的優(yōu)勢(shì)因此,同步模塊把一個(gè)復(fù)雜的時(shí)序電路變?yōu)閱蝹€(gè)的閉同步電路的類(lèi)型常規(guī)的時(shí)序電路狀態(tài)表示,轉(zhuǎn)變和下個(gè)狀態(tài)邏輯有一個(gè)簡(jiǎn)單,常規(guī)的模式,例如一個(gè)自增的計(jì)數(shù)器或者一個(gè)

7、移位寄存器。隨機(jī)的時(shí)序電路(FSM)更復(fù)雜的狀態(tài)遷移且狀態(tài)和它們的二進(jìn)制表示沒(méi)有特殊的聯(lián)系。即,下一個(gè)狀態(tài)邏輯是隨機(jī)的。組合成的時(shí)序邏輯 (帶有數(shù)據(jù)通路的FSM, FSMD - RTL)組合常規(guī)時(shí)序電路和有限狀態(tài)機(jī),用有限狀態(tài)機(jī)來(lái)控制時(shí)序電路的行為同步電路同步電路的類(lèi)型同步電路當(dāng)你需要?jiǎng)?chuàng)建D鎖存器和D觸發(fā)器的時(shí)候,可以使用下面的語(yǔ)法樣式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成合適的器件。D鎖存器隱含的else語(yǔ)句會(huì)產(chǎn)生D鎖存器library ieee;use ieee.std_logic_1164.all;entity dlatch isport( c: in std_logic; d: in std_

8、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 arch;dcq(a)D 鎖存器基本存儲(chǔ)單元的引用當(dāng)你需要?jiǎng)?chuàng)建D鎖存器和D觸發(fā)器的時(shí)候,可以使用下面的語(yǔ)法樣式當(dāng)你需要?jiǎng)?chuàng)建D鎖存器和D觸發(fā)器的時(shí)候,可以使用下面的語(yǔ)法樣式,綜合工具會(huì)自動(dòng)推斷出來(lái),生成合適的器件。上升沿D觸發(fā)器沒(méi)有e

9、lse語(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 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

10、 process;end arch;dclkq(b)上升沿D 觸發(fā)器基本存儲(chǔ)單元的引用當(dāng)你需要?jiǎng)?chuàng)建D鎖存器和D觸發(fā)器的時(shí)候,可以使用下面的語(yǔ)法樣式下降沿D觸發(fā)器只需要上升沿的程序稍作修改即可(紅色為修改的部分)library ieee;use ieee.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 (unl

11、ike 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ā)器基本存儲(chǔ)單元的引用下降沿D觸發(fā)器library ieee;dclkq(c)下降帶異步復(fù)位的D觸發(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 s

12、td_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 if;end process;end arch;dclkq(d)帶異步復(fù)位的D 觸發(fā)器reset基本存儲(chǔ)單元的引用帶異步復(fù)位的D觸發(fā)器library ieee;dclkq(d寄存器由多個(gè)共用同樣時(shí)鐘信號(hào)和復(fù)位信號(hào)的D觸發(fā)器并聯(lián)而成library ieee;use ieee.std_logic_1164.all;entity

13、 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;architecture 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ǔ)單元的引用寄存器library ieee;基本存儲(chǔ)

14、單元的引用最簡(jiǎn)單的設(shè)計(jì)時(shí)序電路的方法是根據(jù)框圖來(lái)搭建構(gòu)建寄存器編寫(xiě)下一個(gè)狀態(tài)和輸出邏輯(組合電路)的代碼簡(jiǎn)單的設(shè)計(jì)例子最簡(jiǎn)單的設(shè)計(jì)時(shí)序電路的方法是根據(jù)框圖來(lái)搭建構(gòu)建寄存器簡(jiǎn)單的設(shè)帶有同步使能端的D觸發(fā)器注意:en的值在clk的上升沿被采樣當(dāng)en=0,或者由0變?yōu)?,觸發(fā)器保持輸出q不變當(dāng)en=1,或者由1變?yōu)?,觸發(fā)器保存q_next的值簡(jiǎn)單的設(shè)計(jì)例子帶有同步使能端的D觸發(fā)器當(dāng)en=0,或者由0變?yōu)?,觸發(fā)器保帶有同步使能端的D觸發(fā)器(代碼)library ieee;use ieee.std_logic_1164.all;entity dff_en isport( clk: in std_lo

15、gic; reset: in std_logic; en: in std_logic; d: in std_logic; q: out std_logic );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

16、 process; - next-state logic q_next = d when en =1 else q_reg; - output logic q = q_reg;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子帶有同步使能端的D觸發(fā)器(代碼)library ieee;簡(jiǎn)T觸發(fā)器注意:t的值在clk的上升沿被采樣簡(jiǎn)單的設(shè)計(jì)例子T觸發(fā)器簡(jiǎn)單的設(shè)計(jì)例子T觸發(fā)器(代碼)library ieee;use ieee.std_logic_1164.all;entity tff isport( clk: in std_logic; reset: in std_logic; t: in std_l

17、ogic; q: out std_logic );end tff;architecture two_seg_arch of tff 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 = q_reg when t=0 elsenot(q

18、_reg); - output logic q = q_reg;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子T觸發(fā)器(代碼)library ieee;簡(jiǎn)單的設(shè)計(jì)例子移位寄存器(無(wú)控制信號(hào))我們可以重新調(diào)整觸發(fā)器使其成為一列然后把它看成一個(gè)存儲(chǔ)器塊,如下圖所示。簡(jiǎn)單的設(shè)計(jì)例子移位寄存器(無(wú)控制信號(hào))我們可以重新調(diào)整觸發(fā)器使其成為一列然移位寄存器(無(wú)控制信號(hào))簡(jiǎn)單的設(shè)計(jì)例子移位寄存器(無(wú)控制信號(hào))簡(jiǎn)單的設(shè)計(jì)例子移位寄存器(無(wú)控制信號(hào))代碼library ieee;use ieee.std_logic_1164.all;entity shift_right_register isport( cl

19、k, reset: in std_logic; d: in std_logic; q: out std_logic );end shift_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 (cl

20、kevent and clk=1) then r_reg = r_next;end if;end process; - next-state 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ì)例子移位寄存器(無(wú)控制信號(hào))代碼library ieee;簡(jiǎn)單的通用移位寄存器設(shè)計(jì)為4個(gè)操作方式:并行、左移、右移、暫停簡(jiǎn)單的設(shè)計(jì)例子通用移位寄存器簡(jiǎn)單的設(shè)計(jì)例子通用移位寄存器(代碼)library ieee;use ieee.std_logic_116

21、4.all;entity shift_register isport( clk, reset: in std_logic; 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: st

22、d_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-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) whe

23、n 10, - sft rght d when others; - output q = r_reg;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子通用移位寄存器(代碼)library ieee;簡(jiǎn)單的設(shè)計(jì)例任意序列計(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 downt

24、o 0) );end arbi_seq_counter4;architecture two_seg_arch of arbi_seq_counter4 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ì)例子任意序列計(jì)數(shù)器Input patternOutput pat任意序列計(jì)數(shù)器(續(xù)) r_reg 0);elsif (clkevent and

25、clk=1) then r_reg = r_next;end if;end process; - next-state logic r_next = 011 when r_reg=000 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ì)例子任意序列計(jì)數(shù)

26、器(續(xù)) r_reg 自由運(yùn)行的二進(jìn)制計(jì)數(shù)器當(dāng)計(jì)數(shù)器的值全部為1時(shí),輸出最大脈沖,并自動(dòng)輪回library ieee;use ieee.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

27、_counter4_pulse 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 = r_reg + 1; - output logic q = std_logic_vector(r

28、_reg); max_pulse = 1 when (r_reg=1111) else 0;end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子自由運(yùn)行的二進(jìn)制計(jì)數(shù)器library ieee;簡(jiǎn)單的設(shè)計(jì)例自由運(yùn)行的二進(jìn)制計(jì)數(shù)器RTL原理圖簡(jiǎn)單的設(shè)計(jì)例子自由運(yùn)行的二進(jìn)制計(jì)數(shù)器簡(jiǎn)單的設(shè)計(jì)例子二進(jìn)制計(jì)數(shù)器Syn_clrloadenq*操作1-00.00同步清零01-d并行載入001q+1計(jì)數(shù)000q暫停簡(jiǎn)單的設(shè)計(jì)例子二進(jìn)制計(jì)數(shù)器Syn_clrloadenq*操作1-00.二進(jìn)制計(jì)數(shù)器library ieee;use ieee.std_logic_1164.all;use ieee.numeric_std

29、.all;entity binary_counter4_feature isport( clk, reset: in std_logic; syn_clr, en, load: 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);signa

30、l 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 syn_clr=1 else unsigned(d) when load=1 else r_reg + 1 when en =1 else r_reg; - output logic q = std_

31、logic_vector(r_reg);end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子二進(jìn)制計(jì)數(shù)器library ieee;簡(jiǎn)單的設(shè)計(jì)例子十進(jìn)制計(jì)數(shù)器library ieee;use ieee.std_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 isco

32、nstant TEN: integer := 10;signal 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=(TEN-1) else r_reg + 1; - ou

33、tput logic q = std_logic_vector(r_reg);end two_seg_arch;簡(jiǎn)單的設(shè)計(jì)例子十進(jìn)制計(jì)數(shù)器library ieee;簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器可以通過(guò)改變一個(gè)常數(shù)m來(lái)改變計(jì)數(shù)器的進(jìn)制,范圍為“0010”“1111”library 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 st

34、d_logic_vector(3 downto 0) );end prog_counter;architecture two_seg_clear_arch of prog_counter 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;

35、 - next-state logic r_next 0) when r_reg=(unsigned(m)-1) else簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器library ieee;簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器(續(xù))可以通過(guò)改變一個(gè)常數(shù)m來(lái)改變計(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 d

36、ownto 0);signal r_next, r_inc: 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_inc = r_reg + 1; r_next 0) when r_inc=unsigned(m) else r_inc; - output logic q = std_logic_v

37、ector(r_reg);end two_seg_effi_arch;簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器(續(xù)) r_reg + 1;簡(jiǎn)單的設(shè)計(jì)例簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器(續(xù))RTL原理圖簡(jiǎn)單的設(shè)計(jì)例子可編程的m進(jìn)制計(jì)數(shù)器(續(xù))組合電路用傳播延時(shí)來(lái)描述時(shí)序電路必須要滿(mǎn)足建立和保持時(shí)間,用最大時(shí)鐘頻率來(lái)描述(例如:200MHz的計(jì)數(shù)器,2.4GHz的奔騰II)建立時(shí)間、寄存器的clock-to-q延時(shí)和下一個(gè)狀態(tài)的傳播延時(shí),都嵌套在時(shí)鐘頻率中。時(shí)序分析State_next信號(hào)必須滿(mǎn)足觸發(fā)器的時(shí)序約束組合電路時(shí)序分析State_next信號(hào)必須滿(mǎn)足觸發(fā)器的時(shí)序state_next的延遲受三

38、個(gè)源影響state_reg的輸出(部分相同反饋回路和同步時(shí)鐘)和外部使用相同時(shí)鐘的子系統(tǒng)輸入同步和外部輸入異步對(duì)于前兩個(gè)項(xiàng)目,我們可以調(diào)節(jié)時(shí)鐘的頻率來(lái)阻止時(shí)序違反請(qǐng)看下面的時(shí)序圖(展示了閉環(huán)反饋系統(tǒng)的時(shí)序行為),在t0時(shí)刻,時(shí)鐘由0變?yōu)?。我們假設(shè)state_next在建立和保持的周期內(nèi)不會(huì)改變?cè)赾lock-to-q (Tcq)延遲之后,寄存器的輸出state_reg在時(shí)刻t1(t0+Tcq)保持穩(wěn)定時(shí)序分析state_next的延遲受三個(gè)源影響時(shí)序分析因?yàn)閟tate_reg是state_next邏輯的輸入, state_next邏輯的輸出在時(shí)間Tnext(min)和Tnext(max)改變,

39、分別表示最快和最慢的路徑。因此, state_next在t2(t1+ Tnext(min) )時(shí)刻改變,在t3(t1+ Tnext(max) )時(shí)刻穩(wěn)定。時(shí)序分析因?yàn)閟tate_reg是state_next邏輯的輸入, s在t5時(shí)刻,一個(gè)新的上升沿時(shí)鐘到達(dá)且當(dāng)前的時(shí)鐘周期結(jié)束。 state_next在t5時(shí)刻被采樣。時(shí)序分析在t5時(shí)刻,一個(gè)新的上升沿時(shí)鐘到達(dá)且當(dāng)前的時(shí)鐘周期結(jié)束。 s下面來(lái)考慮一下建立時(shí)間的約束,state_next信號(hào)在下一個(gè)采樣邊沿t5到來(lái)之前的Tsetup時(shí)間內(nèi)必須保持穩(wěn)定。(t5由時(shí)序圖中的t4給定)t3t4從時(shí)序圖可以看出:t3=t0+Tcq+Tnext(max) t

40、4=t5-Tsetup=t0+Tc-Tsetup上面的不等式可以改寫(xiě)為t0+Tcq+Tnext(max) t0+Tc-Tsetup可以化簡(jiǎn)為T(mén)cq+Tnext(max) +Tsetup Tc因此,最小的時(shí)鐘周期是Tc(min) = Tcq + Tnext(max) + Tsetup時(shí)序分析下面來(lái)考慮一下建立時(shí)間的約束,state_next信號(hào)在下一時(shí)序分析對(duì)于特定的技術(shù),D觸發(fā)器的Tcq和Tsetup可以從數(shù)據(jù)手冊(cè)獲得。讓Tcq=1ns,Tsetup=0.5ns,因?yàn)?位的移位邏輯僅僅包含線網(wǎng),所以假設(shè)它線網(wǎng)的連接延時(shí) 是0,因此其最高的頻率為1/1.5 ns = 666.7 MHz下文講述一

41、下和其它組合塊聯(lián)合的例子,其延時(shí)大于0.時(shí)序分析對(duì)于特定的技術(shù),D觸發(fā)器的Tcq和Tsetup可以從時(shí)序分析保持時(shí)間違反輸入的信號(hào)在采樣沿之后必須要保持一段時(shí)間start_next 在t0 和 th (t0 + Thold)內(nèi)必須保持穩(wěn)定。時(shí)序分析保持時(shí)間違反輸入的信號(hào)在采樣沿之后必須要保持一段時(shí)間時(shí)序分析保持時(shí)間違反state_next 最早改變的時(shí)刻是t2th t2 且 t2 = t0 + Tcq + Tnext(min)th = t0 + Thold所以 t0 + Thold t0 + Tcq + Tnext(min)化簡(jiǎn)得 Thold Tcq + Tnext(min)因?yàn)橛|發(fā)器的輸出驅(qū)

42、動(dòng)下一級(jí)的輸入, Tnext(min)約等于0且Thold Tcq器件廠商通常會(huì)保證觸發(fā)器這些內(nèi)在參數(shù)的滿(mǎn)足關(guān)系,但時(shí)鐘偏斜問(wèn)題是值得我們考慮的。時(shí)序分析保持時(shí)間違反state_next 最早改變的時(shí)刻是t時(shí)序分析我們也需要考慮外部輸入輸出的時(shí)鐘特征(除了剛才提到的閉環(huán)反饋回路)電路的輸出可以分為:摩爾( Moore )輸出和米利( Mealy )輸出對(duì)于摩爾輸出,輸出的信號(hào)取決于當(dāng)前系統(tǒng)的狀態(tài),而米利輸出取決于當(dāng)前系統(tǒng)的狀態(tài)和外部輸入。這兩種輸出可以同時(shí)存在于同一個(gè)電路中。這兩種輸出主要時(shí)間參數(shù)是Tco(在時(shí)鐘的上升沿后獲得一個(gè)有效輸出所需要的時(shí)間)時(shí)序分析我們也需要考慮外部輸入輸出的時(shí)鐘特

43、征(除了剛才提到的時(shí)序分析Tco 是觸發(fā)器的clock-to-q延時(shí)和輸出的傳播延時(shí)之和Tco = Tcq + Toutput對(duì)于米利型輸出,輸入可以直接影響輸出。時(shí)序分析Tco 是觸發(fā)器的clock-to-q延時(shí)和輸出的傳一段式代碼風(fēng)格盡管可以把下一個(gè)狀態(tài)的存儲(chǔ)單元和輸出都寫(xiě)在同一段代碼中,但盡可能避免這樣的寫(xiě)法,因?yàn)楹苋菀壮鲥e(cuò)。思考一下這段帶使能信號(hào)的D觸發(fā)器代碼。architecture one_seg_arch of dff_en is beginprocess(clk, reset)beginif (reset=1) then q =0;elsif (clkevent and clk

44、=1) thenif (en=1) then q = d;end if;end if;end process;end one_seg_arch;在elsif里面多加了一行if (en=1),我們可以解釋為,當(dāng)在時(shí)鐘的上升沿到來(lái)的時(shí)候,如果en=1,則q=d。缺少的else語(yǔ)句隱含著當(dāng)en不等于1時(shí),q的值要保持。 一段式代碼風(fēng)格盡管可以把下一個(gè)狀態(tài)的存儲(chǔ)單元和輸出都寫(xiě)在同一一段式代碼風(fēng)格再思考一下T觸發(fā)器的代碼。architecture one_seg_arch of tff issignal q_reg: std_logic; beginprocess(clk, reset)beginif

45、(reset=1) then q_reg = 0;elsif (clkevent 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èi)部信號(hào)q_reg代表著觸發(fā)器的輸出?!皅_reg = not q_reg;”這句一眼看上去很奇怪,其實(shí)它可以解釋為:左邊的是新的值( 結(jié)果為not q_reg ),右邊的是當(dāng)前值( q_reg )。一段式代碼風(fēng)格再思考一下T觸發(fā)器的代碼。architectu一段式代碼風(fēng)格思考一下自由運(yùn)行的二進(jìn)制計(jì)數(shù)器,下面

46、是一段錯(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 = 0;end if;end if;end proc

47、ess; q = std_logic_vector(r_reg);end not_work_one_seg_glitch_arch;一段式代碼風(fēng)格思考一下自由運(yùn)行的二進(jìn)制計(jì)數(shù)器,下面是一段錯(cuò)誤一段式代碼風(fēng)格錯(cuò)誤的原因是if (r_reg = 1111) then max_pulse = 1;else max_pulse = 0;end if; 這段代碼在輸出端多增加了一個(gè)緩沖,輸出結(jié)果會(huì)有一個(gè)時(shí)鐘的延時(shí)。其綜合出來(lái)的結(jié)果如圖所示。這個(gè)不可以有一段式代碼風(fēng)格錯(cuò)誤的原因是if (r_reg = 1111一段式代碼風(fēng)格修改的方法是把輸出邏輯在進(jìn)程中移除出去。architecture work_one

48、_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 when r_reg = 1111 else 0;end work_one_seg_glitch_arc

49、h;一段式代碼風(fēng)格修改的方法是把輸出邏輯在進(jìn)程中移除出去。arc一段式代碼風(fēng)格再舉一個(gè)例子可編程的計(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 = unsigned(m) then r_reg0);end if;end if;end pr

50、ocess; q = std_logic_vector(r_reg);end not_work_one_arch;這個(gè)計(jì)數(shù)器并沒(méi)有按照預(yù)期的目的工作,因?yàn)槔锩嬗幸粋€(gè)信號(hào)直到進(jìn)程的結(jié)束才會(huì)更新。一段式代碼風(fēng)格再舉一個(gè)例子可編程的計(jì)數(shù)器architec一段式代碼風(fēng)格因?yàn)閞_reg在r_reg = r_reg + 1這句執(zhí)行后,還沒(méi)有來(lái)得及更新,我們就用它來(lái)進(jìn)行“r_reg = unsigned(m)”比較,這個(gè)是舊的值,這樣設(shè)計(jì)出來(lái)的計(jì)數(shù)器會(huì)比預(yù)設(shè)的多一個(gè)數(shù)。(例如本來(lái)想設(shè)計(jì)8進(jìn)制的,現(xiàn)在就變成9進(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 = s

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論