層次結構設計.ppt_第1頁
層次結構設計.ppt_第2頁
層次結構設計.ppt_第3頁
層次結構設計.ppt_第4頁
層次結構設計.ppt_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第五章 數(shù)字系統(tǒng)的 層次結構設計,層次結構設計是大型數(shù)字系統(tǒng)設計的主要方法。在系統(tǒng)設計中,需要解決的主要問題包括系統(tǒng)算法的研究、系統(tǒng)的設計劃分、硬件系統(tǒng)的互連和系統(tǒng)的仿真測試。,5.1 硬件的算法模型,系統(tǒng)級設計是硬件設計過程的第一步,其任 務是把硬件系統(tǒng)功能的自然語言描述轉換為 真值表、狀態(tài)圖或硬件描述語言算法模型。 將自然語言轉換為真值表或狀態(tài)圖,要求設 計者對硬件的系統(tǒng)功能有較深入的了解,一 旦真值表或狀態(tài)圖確定后,系統(tǒng)的硬件結構 也隨之確定。將硬件系統(tǒng)功能的自然語言描 述轉換為硬件描述語言的算法模型,無需對電 路的結構和形式預作任何限制,與真值表或 狀態(tài)圖相比,硬件描述語言構造的算法模

2、型 更加靈活,設計方便,有利于設計的優(yōu)化。,用VHDL語言構造的硬件算法模型,由一系列相互關聯(lián)的進程組成。構造硬件的算法模型,實際上就是把描述系統(tǒng)功能的自然語言翻譯為一組進程,每個進程完成不同的功能。 完成這一轉換,需要經過下述步驟: (1) 把描述系統(tǒng)功能的自然語言分組,每組映射為一個進程或塊。這實際上隱含了設計的劃分。 (2) 對每個進程確定激活的條件和進程激活后的動作。 (3) 寫出VHDL源代碼,實現(xiàn)進程激活后的動作。,5.1.1 先進先出堆棧(FIFO)的算法模型,Din0:n /RD /WR CLK,Dout 0:n FULL EMPTY,FIFO是一個環(huán)行結構的 數(shù)據(jù)存儲器,其接

3、口信號 包括數(shù)據(jù)輸入Din,數(shù)據(jù) 輸出Dout,一根讀控制線 RD和一根寫控制線WR, CLK是時鐘信號,此外還 有兩根狀態(tài)信號,存儲器 滿FULL和存儲器空 EMPTY。RD和WR低電 平有效。,FIFO的算法描述,RP,WP,當WP=RP時,再有 效寫入一次,存儲器 寫滿。,WP,RP,存儲器寫 滿的條件,存儲器讀 空的條件,當RP=WP-2時,再有 一次有效的讀出,存 儲器讀空。,根據(jù)上述FIFO的功能描述,先進先出堆棧FIFO需5個功能塊組成,即 存儲器體、 寫指針(WP)、 讀指針(RP)、 滿信號FULL產生邏輯、 空信號EMPTY邏輯, 這五個功能塊用五個進程描述,其中進程P1描

4、述存儲器操作,P2描述出棧指針RP的計數(shù)操作,P3描述進棧指針WP的計數(shù)操作,P4描述滿標志產生邏輯,P5描述空標志產生邏輯。堆棧的操作在時鐘脈沖CLK的控制下同步進行。,256字節(jié)FIFO的VHDL算法模型。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY fifo IS GENERIC (w:INTEGER: = 256; K:INTEGER: = 8); PORT (clk, reset, wr, rd:IN S

5、TD_LOGIC; din:IN STD_LOGIC_VECTOR (k-1 DOWNTO 0); dout:OUT STD_LOGIC_VECTOR (k-1 DOWNTO 0); full, empty:OUT STD_LOGIC); END fifo;,ARCHITECTURE behav OF fifo IS TYPE memory IS ARRAY (0 TO w-1) OF STD_LOGIC_VECTOR (k-1 DOWNTO 0) ; SIGNAL ram:MEMORY; SIRNAL up, rp:INTEGER RANGE 0 TO w-1; SIGNAL in_full

6、, in_empty:STD_LOGIC; BEGIN full = in_full; empty = in_empty; dout = ram (rp);,P1: PROCESS (clk) BEGIN IF (clk EVENT AND clk = 1) THEN IF (wr = 0 AND in_full = 0 )THEN ram (wp ) = din; END IF; END IF; END PROCESS P1;,數(shù) 據(jù) 寫 堆 棧,P2:PROCESS (clk, reset) BEGIN IF (reset = 1) THEN rp = w-1; ELSIF (clk EV

7、ENT AND clk = 1 ) THEN IF (rd = 0 AND in_empty = 0 ) THEN IF (rp = w-1) THEN rp= 0; ELSE rp= rp +1; ENDIF; ENDIF; END IF; END PROCESS P2;,R P 指 針 修 改,P3:PROCESS (clk, reset) BEGIN IF (reset = 1) THEN wp= 0; ELSIF (clk EVENT AND clk = 0 ) THEN IF (wr = 0 AND in_full = 0)THEN IF (wp = w-1) THEN wp= 0;

8、 ELSE wp= wp +1; END IF; ENDIF; ENDIF; END PROCESS P3;,W P 指 針 修 改,P5:PROCESS (clk reset) BEGIN IF (reset = 1) THE in_full = 0; ELSIF (clk EVENT AND clk = 1) THEN IF (rp = wp AND wr = 0 AND rd = 1) THEN in_full = 1; ELSIF ( in_full = 1 AND rd= 0) THEN in_full = 0; ENDIF; ENDIF; END PROCESS;,FULL 標 志

9、 產 生,P5:PROCESS (clk, reset) BEGIN IF (reset = 1) THEN in_empty = 1; ELSIF (clk EVENT AND clk = 1) THEN IF (rp = wp-2 ) OR (rp = w-1 AND wp = 1) OR (rp = w-2 AND wp=0) AND (rd = 0 AND wr = 1) THEN in_empty = 1; ELSIF (in_empty = 1 AND wr = 0) THEN in_empty = 0; ENDIF; ENDIF; END PROCESS P4; END beha

10、v;,E M P T Y 標 志 產 生,5.1.2 布思一位補碼乘法器的算法模型,利用移位和加法,可以實現(xiàn)二進制無符號數(shù)的乘法,在無符號數(shù)乘法的基礎上,加上適當?shù)姆柼幚?,很容易得到帶符號?shù)的原碼乘法器。但是,在計算機中,帶符號數(shù)都以補碼表示,若采用原碼乘法器進行帶符號數(shù)的乘法運算,則首先要將乘數(shù)和被乘數(shù)轉換成原碼,相乘后再將負的乘積轉換成補碼,致使運算過程比較復雜。目前,不少處理器直接采用補碼相乘的方法,以避免運算過程中的碼制轉換,提高處理器的工作效率。然而,二進制無符號的乘法并不能直接推廣到補碼的乘法運算,現(xiàn)在比較普遍采用的是布思(Booth)補碼相乘算法。,布思補碼乘法算法的原理,假設

11、計算機字長為n位,a為被乘數(shù),b為乘數(shù),對于帶符號數(shù),最高位an-1和bn-1是a、b的符號位。b補碼 與真值的關系為: ,即,于是,可以把一個二進制補碼的值統(tǒng)一表示為:,從而,記,則可得,上式表示的乘法即布思一位補碼乘法,在此乘法算法中, 將二個n比特帶符號數(shù)的乘法運算轉換成部分積加上或減 去移位后的被乘數(shù)。,32位布思一位補碼乘法器的算法模型,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY bsmp32 IS Po

12、rt ( ai,bi : IN STD_LOGIC_VECTOR (31 downto 0); op : OUT STD_LOGIC_VECTOR (63 downto 0); END bsm32;,ARCHITECTURE Behavioral of bsmp32 IS BEGIN PROCESS(ai,bi) VARIABLE a,b,m :STD_LOGIC_VECTOR ( 31 downto 0); VARIABLE cp: STD_LOGIC_VECTOR ( 1 downto 0); VARIABLE t: STD_LOGIC; VARIABLE counter: INTEGER

13、; BEGIN counter :=0; t :=0; a :=ai; b :=bi;,m :=00000000000000000000000000000000; cp :=b(0),op= m,5.2 芯片的劃分,芯片系統(tǒng)的劃分是大型數(shù)字系統(tǒng)設計的重要步驟,,其目的是將一個復雜的大系統(tǒng)劃分成若干個規(guī)模較小的、相對簡單的子系統(tǒng)以降低設計難度,同時也可將系統(tǒng)設計任務分配給多名設計人員,有利于組織并行的設計工作,縮短設計周期。分解后的各個功能模塊可以分別進行仿真、測試和功能校驗;還可以根據(jù)所要采用的實現(xiàn)技術重新組織系統(tǒng)結構,以適應不同工藝的要求。,劃分,算法選擇,功能設計,劃分的基本準則是使各分系

14、統(tǒng)之間的連線最少。一般情況下通過對系統(tǒng)的分析獲得有關的信息。包括功能相關性、數(shù)據(jù)相關性和操作相關性等信息。功能相關性是指在系統(tǒng)架構上兩個不同部分之間的聯(lián)系,例如需要經過某種相同的運算或處理等。具有功能相關性的或者功能相關性大的部分應劃分在同一個子系統(tǒng)內。 數(shù)據(jù)相關性是指兩個操作所用到的操作數(shù)的相關性,例如兩個操作共用一個操作數(shù)或它們的運算結果寫入同一個變量單元等。數(shù)據(jù)相關性大的操作應劃分在同一個子系統(tǒng)內。 操作相關性是高層次綜合中特有的。操作相關性是指兩個操作是否可以共享用一個資源,或者兩個操作共享同一資源對系統(tǒng)優(yōu)化的作用。操作相關性大的也應被劃分在同一個子系統(tǒng)內。,5.2.1 并行接口825

15、5,1. 8255的特性及外部信號定義,8255是一種可編程I/O接口電路,片 上有三個功能由編程決定的I/O口, A口、B口和C口,C口又可分成2個 4bit 的口。每個口都可定義為具有鎖 存能力的輸入輸出端口。,2. 8255的工作方式及控制字,8555有3種工作方式,方式0、 方式1和方式2。,8255各個口的工作方式由工 作方式控制字定義。,3芯片劃分,通過對8255 并行I/O接口 電路的功能 分析可得, 8255芯片由 鎖存器、三 態(tài)緩沖器和 組合邏輯電 路三部分構 成。,8255的結構中應定義的鎖存器有7個,它們是: pa_latch -A口輸出鎖存器,8bit; pb_latc

16、h -B口輸出鎖存器,8bit; pcl_latch -C口低4位輸出鎖存器; pch_latch -C口高4位輸出鎖存器; ctrreg -方式控制字寄存器; betrreg -C口位控控制字寄存器,4位; ctrregF -選擇標志寄存器,1位。 數(shù)據(jù)總線D0D7,是三態(tài)雙向總線,這些引腳都應為三態(tài)雙向引腳。 所有端口的讀操作需要在RD和CS有效時操作,因此,所有的端口讀操作是相關性操作,被劃分在進程P1中。 所有端口鎖存器的寫操作均在WR有效和CS有效進行,各端口的寫操作也是相關性操作,被劃分在進程P2中。,可編程IO接口電路8255的設計。 LIBRARY IEEE; USE IEEE

17、.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PIO8255 IS PORT (reset, rd, wr, cs, A0, A1:IN STD_LOGIC; DB, Pa, Pb:INOUT STD_LOGIC_VECTOR (7 DOWN TO 0); Pcl, Pch:INOUT STD_LOGIC_VECTOR (3 DOWN TO 0); END PIO8255; ARCHITECTURE structure OF PIO8255 IS SIGNAL

18、 internal_bus_in, internal_bus_out,ctrreg, pa_latch,pb_latch, pc_latch:STD_LOGIC_VECTOR (7 DOWN TO 0); SIGNAL ad:STD_LOGIC_VECTOR (1 DOWN TO 0); BEGIN ad = a1 ELSIF (ad = 10 AND ctrreg(3) = 0 AND ctrreg(0) = 1 ) THEN internal_bus_in (3 DOWN TO 0 ) = pcl (3 DOWN TO 0 ); internal_bus_in (7 DOWN TO 4)

19、= pch_latch (7 DOWN TO 4); ELSIF (ad = 10 AND ctrreg(3) = 1 AND ctrreg(0) = 0) THEN internal_bus_in (3 DOWN TO 0) = pc_latch(3 DOWN TO 0); internal_bus_in (7 DOWN TO 4) = pch (3 DOWN TO 0);,ELSIF (ad = 10 AND ctrreg(3) = 1 AND ctrreg(0) = 1) THEN internal_bus_in (3 DOWN TO 0) = pcl (3 DOWN TO 0); in

20、ternal_bus_in (7 DOWN TO 4) = pch (3 DOWN TO 0); ENDIF; ELSE Internal_bus_in = ZZZZZZZZ; ENDIF; DB = internal_bus_in; END PROCESS P1;,P2:PROCESS (cs, wr, reset) -寫8255口操作 VARIABLE ctrregF:STD_LOGIC; VARIABLE bctrreg_v:STD_LOGIC_VECTOR (3 DOWN TO 0); BEGIN IF (cs = 0 AND wr = 0) THEN ad = a1 ELSIF (a

21、d = 10 AND ctrreg(0) = 0) THEN Pc_latch (3 DOWN TO 0) = internal_bus_at (3 DOWNTO 0); ELSIF (ad = 10 AND ctrreg(3) = 0) THEN Pc_latch (3 DOWN TO 0) = internal_bus_out (7 DOWNTO 4); ENDIF; IF (ctrregF: = 0 AND ad = 11) THEN bctrreg_v: = internal_bus_out (3 DOWN TO 0);,CASE bctrreg_v IS -位控 WHEN 0000

22、= pc_latch(0) pc_latch(1) pc_latch(2) pc_latch(3) pc_latch(4) pc_latch(5) pc_latch(6) pc_latch(7) pc_latch(0) pc_latch(1) pc_latch(2) pc_latch(3) pc_latch(4) pc_latch(5) pc_latch(6) pc_latch(7) = 1;,WHEN OTHERS = flag = 11; END CASE; END IF; END IF; END PROCESS P2; P3: PROCESS (pa_latch) BEGIN IF (c

23、trreg ( 4 ) = 0) THEN Pa = pa_latch ; -Pa是輸出口 ELSE Pa = ZZZZZZZZ; END IF ; END PROCESS P3 ;,P4: PROCESS (pb-latch) BEGIN IF (ctrreg (1) = 0) THEN pb = pb_latch ; -Pb是輸出口 ELSE pb= ZZZZZZZZ; END IF ; END PROCESS P4 ; P5: PROCESS (pc_latch) -Pc口的操作 BEGIN IF (ctrreg (0) = 0) THEN pcl = pc_latch (3 DOWN

24、TO O); ELSE pcl = ZZZZ; END IF; IF (ctrreg (3) = 0) THEN pch = pc_latch (7 DOWN TO 4);,ELSE pch = ZZZZ; END IF; END PROCESS P5; END structure;,5.2.2 布思二位補碼乘法器的結構化設計,1. 布思二位補碼乘法算法 布思二位補碼乘法運算規(guī)則是根據(jù)一位補碼乘法的規(guī)則,把比較bibi+1的狀態(tài)應執(zhí)行的操作和比較bi-1bi 的狀態(tài)應執(zhí)行的操作合并成一步,便可得出布思二位補碼乘法的運算方法。,上式即布思二位補碼乘法運算的算法,根據(jù)上述算法,可得布思二位補碼乘法

25、運算的規(guī)則,如表5-3所示,表中,Pi表示部分積,a是被乘數(shù)。由表5-3可見,操作中出現(xiàn)加2a補和加2-a補,故除右移兩位的操作外,還有被乘數(shù)左移一位的操作;而加2a補和加2-a補,都可能因溢出而侵占雙符號位,故部分積和被乘數(shù)需要采用三位符號位。 與補碼一位乘相比,補碼兩位乘的部分積多取一位符號位(共3位),乘數(shù)也多取一位符號位(共2位),這是由于乘數(shù)每次右移2位,且用3位判斷,故采用雙符號位更便于硬件實現(xiàn)??梢?,當乘數(shù)數(shù)值位為偶數(shù)時,乘數(shù)取2位符號位,共需作n/2次移位,至多作n/2+1次加法。 相比于基本的布思一位補碼算法,采用補碼二位乘算法的好處是用硬件實現(xiàn)時能夠節(jié)省一半的加法器的使用數(shù)

26、量,并且?guī)缀鯗p小一半的延時,其代價是控制邏輯較為復雜。,表5-3 布思二位補碼乘法運算規(guī)則,布思二位補碼乘法運算規(guī)則 判斷位bi-1b ibi+1 操作內容 000 Pi+1=2-2Pi 001 Pi+1=2-2Pi+a補 010 Pi+1=2-2Pi+a補 011 Pi+1=2-2Pi+2a補 100 Pi+1=2-2Pi+2-a補 101 Pi+1=2-2Pi+ -a補 110 Pi+1=2-2Pi+-a補 111 Pi+1=2-2Pi,2. 布思二位補碼乘法器的劃分,abbk1,abbk2,mp實體內部結構模型(續(xù)),abbk13,abbk14,abbk15,abbk16,積,頂層模塊實

27、體mp.vhd 由16個34位加/減法器組成, 這是 16個內部邏輯結構相同的模塊,定義這些模塊的實體名 為abbk。,實體abbk,bin31:0 m33:0 mo33:0 ctrl2:0 op1:0,abbk,Abbk模塊的內部結構,ct,act,addsub,34位加法器,last,布思二位補碼乘法器的結構化設計,頂層模塊mp LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; UES IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mp IS PORT ( in1 :

28、IN STD_LOGIC_VECTOR (31 DOWN TO 0); in2 : IN STD_LOGIC_VECTOR (31 DOWN TO 0); op : OUT STD_LOGIC_VECTOR (63 DOWN TO 0); END mp; ARCHITECTURE struct of mp IS COMPONENT abbk PORT(bin: IN STD_LOGIC_VECTOR (31 DOWN TO 0); ctrl: IN STD_LOGIC_VECTOR (2 DOWN TO 0); m: IN STD_LOGIC_VECTOR (33 DOWN TO 0);,mo

29、: OUT STD_LOGIC_VECTOR (33 DOWN TO 0); op: OUT STD_LOGIC_VECTOR (1 DOWN TO 0); END COMPONENT; TYPE tp33 IS ARRAY(0 to 16) OF STD_LOGIC_VECTOR (33 DOWN TO 0); SIGNAL i: INTEGER; SIGNAL tmp: tp33; SIGNAL tmp2: STD_LOGIC_VECTOR (32 DOWN TO 0); BEGIN tmp(0)=0000000000000000000000000000000000; tmp2=in1,a

30、bbk模塊 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; ENTITY abbk IS PORT(bin: IN STD_LOGIC_VECTOR (31 DOWN TO 0); ctrl : IN STD_LOGIC_VECTOR (2 DOWN TO 0); m : IN STD_LOGIC_VECTOR (33 DOWN TO 0); mo : OUT STD_LOGIC_VECTOR (33 DOWN TO 0); op : OUT STD_LOGIC_VECTOR (1 DOWN TO 0);

31、 END abbk; ARCHITECTURE structe_abbk OF abbk IS SIGNAL xlxn_1 : STD_LOGIC_VECTOR (33 DOWN TO 0); SIGNAL xlxn _2 : STD_LOGIC; SIGNAL xlxn _6 : STD_LOGIC;,SIGNAL xlxn _7 : STD_LOGIC; SIGNAL xlxn _9 : STD_LOGIC_VECTOR (31 DOWN TO 0); COMPNENT act PORT ( clr : IN STD_LOGIC ; ot : IN STD_LOGIC ; bin : IN

32、 STD_LOGIC_VECTOR (31 DOWN TO 0); bout : OUT STD_LOGIC_VECTOR (33 DOWN TO 0); END COMPONENT ; COMPONENT addsub PORT ( en : IN STD_LOGIC; a : IN STD_LOGIC _VECTOR (33 DOWN TO 0); b : IN STD_LOGIC _VECTOR (33 DOWN TO 0); s : OUT STD_LOGIC _VECTOR (31 DOWN TO 0); op : OUT STD_LOGIC _VECTOR (1 DOWN TO 0

33、); END COMPONENT ;,COMPONENT ct PORT ( cin : IN STD_LOGIC _VECTOR (2 DOWN TO 0); as : OUT STD_LOGIC; clr : OUT STD_LOGIC; ot : OUT STD_LOGIC); END COMPONENT ; COMPONENT last PORT ( di : IN STD_LOGIC _VECTOR (31 DOWN TO 0); do : OUT STD_LOGIC _VECTOR (33 DOWN TO 0); END COMPONENT; BEGIN XLXI_1 : act

34、PORT MAP (bin(31 DOWN TO 0) =bin(3 1DOWNTO 0), clr=xlxn_6, ot=xlxn_7, bout(33 DOWN TO 0)=xlxn_1(33 DOWN TO 0);,XLXI_2 : addsub PORT MAP (a(33 DOWN TO 0)=m(33 DOWN TO 0), b(33 DOWN TO 0)=xlxn_1(33 DOWN TO 0), b(33 DOWN TO 0)=xlxn_1(33 DOWN TO 0), en=xlxn_2, op (1 DOWN TO 0)=op (1 DOWN TO 0), s (31 DO

35、WN TO 0)=xlxn_9(31 DOWN TO 0); XLXI_3 : ct PORT MAP (cin(2 DOWN TO 0)=ctrl(2 DOWN TO 0), as=xlxn_2, clr=xlxn_6, ot=xlxn_7); XLXI_4 : last PORT MAP (di(31 DOWN TO 0)=XLXN_9 (31 DOWN TO 0), do(33 DOWN TO 0)=mo(33 DOWN TO 0); END structe_abbk ;,act模塊 act模塊對輸入bin進行處理,輸出bout送到加法減法器, act模塊根據(jù)ot信號來判斷是右移一位或是

36、兩位,或是清零,或不作處理。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY act IS PORT ( bin : IN STD_LOGIC_VECTOR(31 DOWN TO 0); clr : IN STD_LOGIC; ot : IN STD_LOGIC; bout : OUT STD_LOGIC_VECTOR(33 DOWN TO 0); END act; ARCHITECTURE rtl_act OF ac

37、t IS BEGIN,IF clr=1 THEN bout=0000000000000000000000000000000000; ELSIF ot=0THEN bout=bin(31),addsub模塊,addsub模塊為一個34位的加減器,當en為1時,對輸入做相加處理,當en為0時,對輸入做相減處理,既a-b。Addsub模塊沒有進位輸入與輸出,其原因是因為已經采用了34位輸入(最高兩位為擴展的符號位),不存在進位丟失的問題。由于有右移兩次的操作,為防止溢出,用兩位符號擴展位。輸出的最低兩位為乘法器的部分結果,直接輸出。,addsub.vhd,LIBRARY IEEE; USE IEEE

38、.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY addsub IS PORT ( a : IN STD_LOGIC_VECTOR(33 DOWN TO 0); b : IN STD_LOGIC_VECTOR (33 DOWN TO 0); en : IN STD_LOGIC ; s : OUT STD_LOGIC_VECTOR (31 DOWN TO 0); op: OUT STD_LOGIC_VECTOR (1 DOWN TO 0); END addsub;,

39、ARCHITECTURE rtl_addsub OF addsub IS BEGIN PROCESS (en,a,b) VARIABLE tmp: STD_LOGIC_VECTOR (33 DOWN TO 0); BEGIN IFen=1 THEN tmp:=a+b; ELSIF en=0 THEN tmp:=a-b; END IF s=tmp(33 DOWN TO 2); op=tmp(1 DOWN TO 0); END PROCESS; END rtl_addsub;,ct模塊,ct模塊輸出信號真值表 判斷位bi-1bibi+1 as,ot,clr 000 “1x1” 001 100 01

40、0 100 011 110 100 010 101 000 110 010 111 1x1,ct是控制電路模塊,其輸入是 ctrl,ct模塊對輸入信號ctrl進 行解釋譯碼,產生輸出clr (清零)、ot(移位)和as (加或減)。根據(jù)布思二位 補碼乘法運算規(guī)則,不難得 到ct控制邏輯的真值表,,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY ct IS PORT ( cin : IN STD_LOGIC_VECTOR

41、(2 DOWN TO 0); as : OUT STD_LOGIC; clr : OUT STD_LOGIC ; ot : OUT STD_LOGIC ); END ct; ARCHITECTURE rtl_ct OF ct IS BEGIN ot= (not cin(2) and cin(1) and cin(0) or (cin(2) and (not cin(1) and (not cin(0); as = (not cin(2) or (cin(2) and cin(1) and cin(0); clr=(not cin(2) and (not cin(1) and (not cin(

42、0) ) or (cin(2) and cin(1) and cin(0); END rtl_ct;,last模塊的功能是把加減法器的前32位的輸出結果擴展為34位,其中最高位(符號位)擴展兩位,以便與后級模塊相接。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY last IS PORT ( di : IN STD_LOGIC_VECTOR (31 DOWN TO 0); do : OUT STD_LOGIC_VEC

43、TOR (33 DOWN TO 0); END last; ARCHITECTURE rtl_last OF last IS BEGIN do=di(31) END rtl_last;,5.3 系統(tǒng)間互連的表示,在數(shù)字系統(tǒng)的層次化設計方法中,經常需要描述各子系統(tǒng)之間或元件之間的互連關系。在VHDL語言中,有多種描述系統(tǒng)間互連的方法。 在VHDL中,系統(tǒng)的互連通過實體和結構體描述。實體通過端口語句,描述實體與外部系統(tǒng)的互連關系。結構體規(guī)定了實體的功能,結構體內,通常采用進程和元件例化描述同一系統(tǒng)內的子系統(tǒng)。,在進程中,體現(xiàn)各子系統(tǒng)之間的互連關系,可以由進程的信號敏感量和全局信量進行傳遞。,P Q

44、 A,R S B,system,l,s1,m,ENTITY system IS PORT ( l:IN STD_LOGIC;m:OUT STD_LOGIC); END system;,如果用進程描述系統(tǒng)system的構造,其描述程序如下: ARCHITECTURE structure OF system IS SIGNAL s1:STD_LOGIC A:PROCESS (l) s1 = END PROCESS; B:PROCESS (s1) m = END PROCESS; END structure;,實體system的結構體也可用于元件例化的方式描述。 ENTITY A IS PORT(P

45、: IN STD_LOGIC; Q: OUT STD_LOGIC); END A; ENTITY B IS PORT(R:IN STD_LOGIC;Q:OUT STD_LOGIC); END B; A、B的端口說明定義了A、B兩子系統(tǒng)(元件)與外部的接口關系。 采用元件例化語句的實體system的結構體如下:,ARCHITECTURE structure_2 OF system IS SIGNAL S1:STD_LOGIC; COMPONENT A PORT( P:INSTD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT; COMPONENT B PORT (

46、R:IN STD_LOGIC; S:OUT STD_LOGIC); END COMPONENT; BEGIN A1: A PORT MAP (l, s1); B1: B PORT MAP (s1, m); END structure;,5.4 系統(tǒng)的仿真和測試,5.4.1 概述 在VHDL的設計流程中,設計的驗證是一個重要而又費時的環(huán)節(jié)。由于仿真技術的發(fā)展,對于SOC采用軟硬件協(xié)同仿真的技術更為有效。軟硬件協(xié)同仿真需要先進的設計環(huán)境的支持,詳細內容將6.2節(jié)中討論。利用EDA工具進行電子系統(tǒng)的TOP-DOWN設計時,從行為級設計開始,到RTL級設計,再到門級設計,相應地利用EDA工具進行系統(tǒng)仿

47、真時,要進行行為仿真、RTL仿真和門級仿真。行為仿真和RTL級仿真屬于功能仿真,其作用是驗證設計模塊的邏輯功能。門級仿真是時序仿真,用于驗證設計模塊的時序關系。無論是功能仿真或是時序仿真,仿真方法有兩種:即交互式仿真方法和測試平臺法。,系統(tǒng)仿真分為三個階段,即行為仿真、RTL仿真和門級仿真。三種仿真的目的不同,測試平臺的設計要求也不同。 行為仿真的目的是驗證系統(tǒng)的數(shù)學模型和行為是否正確,對系統(tǒng)描述的抽象程度較高,凡是VHDL語言中的語句和數(shù)據(jù)類型都可以在仿真程序中使用。在仿真程序設計中應盡可能采用抽象程度高的描述方式,使程序更簡潔明了。在行為仿真中,除了系統(tǒng)規(guī)定的定時關系外,電路的慣性延時、傳

48、輸延時等,在行為仿真中都不予考慮。,5.4.2 仿真程序的設計方法,設計模塊的行為仿真通過后,就應將設計模塊的行為描述改成RTL描述。RTL級仿真是為了使被仿真模塊符合邏輯綜合工具的要求,使其能生成門級邏輯電路。在RTL級仿真程序中,不能使用VHDL中一些不可綜合和難以綜合的語句和數(shù)據(jù)類型,并且還應該少用整型數(shù)據(jù),最好使用STD_LOGIC和STD_LOGIC_VECTOR這二種數(shù)據(jù)類型。在RTL級仿真中盡管可以不考慮電路的慣性延時,但傳輸延時應該考慮,并用TRANSPORT語句和AFTER語句在程序體現(xiàn)出來。,經RTL級仿真驗證后設計模塊,就可經過邏輯綜合生成門級電路。由于門電路的慣性延時在

49、行為仿真和RTL級仿真時都未驗證,故必須在門級對被測模塊的時序進行驗證,以檢驗系統(tǒng)的工作速度。在門級仿真時,輸入輸出端口只限定使用STD_LOGIC和STD_LOGIC_VECTOR數(shù)據(jù)類型。,測試平臺程序 (仿真程序),被測實體的引入,被測實體仿真信號的輸入,被測實體工作狀態(tài)的激活,被測實體信號輸出,被測實體功能仿真的結果比較, 并給出判別信息,被測實體的仿真波形比較處理,仿真信號(即測試矢量)可以由程序直接產生,也可以用TEXTIO文件產生后讀入。 在測試平臺中,由于被測實體對端口已作了定義,因而在仿真程序的設計中可以簡化實體描述,省略有關端口的描述。仿真程序實體描述的簡化形式為 ENTI

50、TY 測試平臺名 IS END 測試平臺名;,為了比較和分析電子系統(tǒng)的功能,尋求實現(xiàn)設計指標的最佳結構,設計者往往要對被測實體的不同結構進行真。這時,可以利用一個測試平臺,應用配置語句為同一測實體選用多個結構體。這種配置方法的程序書寫方式如下: CONFIGURATION 測試平臺名 OF 被測實體名 IS FOR 被測實體的A結構體名 END FOR; END 測試平臺名; CONFIGURATION 測試平臺名 OF 被測實體名 IS FOR 被測實體的B結構體名 END FOR; END 測試平臺名;,計數(shù)器仿真程序的設計例子,三位計數(shù)器count LIBRARY IEEE; USE I

51、EEE.STD_LOGIC_1164.ALL; PACKAGE cutpkg IS COMPONENT count PORT (clk, rest:IN STD_LOGIC; cunt:INOUT STD_LOGIC_VECTOR (2 DOWN TO 0); END COMPONENT; END cutpkg; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL;,USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count IS PORT (clk, rest:IN S

52、TD_LOGIC; cunt:INOUT STD_LOGIC_VECTOR (2 DOWN TO 0); END count; ARCHITECTURE behav OF count IS BEGIN PROCESS (clk, rest) BEGIN IF rest = 1 THEN cunt 0); ELSIF (clk EVENT AND ckl = 1) THEN cunt = cunt + “001”; END IF; END PROCESS; END behav;,測試平臺(仿真程序)testcunt設計。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164

53、.ALL; USE WORK.cutpkg.ALL; -若不用集合包cutpkg,則應加一句 ENTITY testcunt IS -COMPONENT語句,說明調用的元件 END testcunt; ARCHITECTURE test1 OF testcunt IS SIGNAL clk, rest:STD_LOGIC; SIGNAL cunt:STD_LOGIC_VECTOR (2 DOWN TO 0); TYPE test_vector IS RECORD clk, rest:STD_LOGIC; cunt:STD_LOGIC_VECTOR (2 DOWN TO 0); END RECO

54、RD; TYPE test_vector_array IS ARRAY (NATURAL RANGE) OF test_vector;,COMPONENT count PORT(clk, reset : IN STD_LOGIC, cunt: INOUT STD_LOGIC_VECTOR (2 DOWN TO 0 ); END COMPONENT; CONSTANT test_vectors:test_vector_array: = ( (clk = 0, rest = 1, cunt = 000); (clk = 1, rest = 1, cunt = 000); -計數(shù)器復位 (clk = 0, rest = 0, cunt = 000); (clk = 1, rest = 0, cunt = 001); (clk = 0, rest = 0, cunt = 001); (clk = 1, rest = 0, cunt = 010); (clk = 0, rest = 0, cunt = 010); (clk = 1, rest = 0, cunt = 011); (clk = 0, rest = 0, cunt = 011); (clk = 1, rest = 0, cu

溫馨提示

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

評論

0/150

提交評論