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

下載本文檔

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

文檔簡介

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

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

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

4、標志產(chǎn)生邏輯,P5描述空標志產(chǎn)生邏輯。堆棧的操作在時鐘脈沖CLK的控制下同步進行。 7 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 STD_LOGIC; din:IN STD_LOGIC_VECTOR (k-1 DOWNTO

5、0); dout:OUT STD_LOGIC_VECTOR (k-1 DOWNTO 0); full, empty:OUT STD_LOGIC); END fifo; 8ARCHITECTURE behav OF fifo ISTYPE 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, in_empty:STD_LOGIC; BEGIN full = in_full; emp

6、ty = in_empty; dout = ram (rp);9 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ù)寫堆棧10 P2:PROCESS (clk, reset) BEGIN IF (reset = 1) THEN rp = w-1; ELSIF (clk EVENT AND clk = 1 ) THEN IF (rd = 0 AND in_empty =

7、 0 ) THEN IF (rp = w-1) THEN rp= 0; ELSE rp= rp +1; ENDIF; ENDIF; END IF; END PROCESS P2; RP指針修改11P3: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; ELSE wp= wp +1; END IF; ENDIF; ENDIF; END PROCESS P

8、3; WP指針修改12 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 標 志 產(chǎn) 生13 P5:PROCESS (clk, reset) BEGIN IF (reset = 1) THEN

9、 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 behav; EMPTY標志產(chǎn)生14 5.1.2 布思一位補碼乘法器的算法模型 利用移位和加法,可以實現(xiàn)二進制無符號

10、數(shù)的乘法,在無符號數(shù)乘法的基礎上,加上適當?shù)姆柼幚恚苋菀椎玫綆Х枖?shù)的原碼乘法器。但是,在計算機中,帶符號數(shù)都以補碼表示,若采用原碼乘法器進行帶符號數(shù)的乘法運算,則首先要將乘數(shù)和被乘數(shù)轉換成原碼,相乘后再將負的乘積轉換成補碼,致使運算過程比較復雜。目前,不少處理器直接采用補碼相乘的方法,以避免運算過程中的碼制轉換,提高處理器的工作效率。然而,二進制無符號的乘法并不能直接推廣到補碼的乘法運算,現(xiàn)在比較普遍采用的是布思(Booth)補碼相乘算法。 15布思補碼乘法算法的原理 假設計算機字長為n位,a為被乘數(shù),b為乘數(shù),對于帶符號數(shù),最高位an-1和bn-1是a、b的符號位。b補碼 與真值的關系

11、為: ,即 于是,可以把一個二進制補碼的值統(tǒng)一表示為: 16從而 記 則可得 上式表示的乘法即布思一位補碼乘法,在此乘法算法中,將二個n比特帶符號數(shù)的乘法運算轉換成部分積加上或減去移位后的被乘數(shù)。 17A0, Q-10,Q乘數(shù)M被乘數(shù),計數(shù)器counter0AA-MAA+MCountern結束開始Q0,Q-1A,Q,Q-1算術右移counter counter+11832位布思一位補碼乘法器的算法模型 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED

12、.ALL;ENTITY bsmp32 IS Port ( ai,bi : IN STD_LOGIC_VECTOR (31 downto 0); op : OUT STD_LOGIC_VECTOR (63 downto 0); END bsm32; aibiopbsmp3219ARCHITECTURE Behavioral of bsmp32 ISBEGINPROCESS(ai,bi) VARIABLE a,b,m :STD_LOGIC_VECTOR ( 31 downto 0); VARIABLE cp: STD_LOGIC_VECTOR ( 1 downto 0); VARIABLE t:

13、STD_LOGIC; VARIABLE counter: INTEGER; BEGIN counter :=0; t :=0; a :=ai; b :=bi;20m :=0000000000; cp :=b(0)&0; WHILE counter m:=m-a; WHEN 01= m:=m+a; WHEN OTHERS=m:=m; END CASE; t:=b(0); b:=m(0)&b(31 downto 1); m:=m(31)&m(31 downto 1); cp:=b(0)&t; counter:=counter+1; END LOOP;21 op= m&b; END PROCESS;

14、END Behavioral;225.2 芯片的劃分 芯片系統(tǒng)的劃分是大型數(shù)字系統(tǒng)設計的重要步驟,,其目的是將一個復雜的大系統(tǒng)劃分成若干個規(guī)模較小的、相對簡單的子系統(tǒng)以降低設計難度,同時也可將系統(tǒng)設計任務分配給多名設計人員,有利于組織并行的設計工作,縮短設計周期。分解后的各個功能模塊可以分別進行仿真、測試和功能校驗;還可以根據(jù)所要采用的實現(xiàn)技術重新組織系統(tǒng)結構,以適應不同工藝的要求。 劃分算法選擇功能設計23劃分的基本準則是使各分系統(tǒng)之間的連線最少。一般情況下通過對系統(tǒng)的分析獲得有關的信息。包括功能相關性、數(shù)據(jù)相關性和操作相關性等信息。功能相關性是指在系統(tǒng)架構上兩個不同部分之間的聯(lián)系,例如需要

15、經(jīng)過某種相同的運算或處理等。具有功能相關性的或者功能相關性大的部分應劃分在同一個子系統(tǒng)內(nèi)。數(shù)據(jù)相關性是指兩個操作所用到的操作數(shù)的相關性,例如兩個操作共用一個操作數(shù)或它們的運算結果寫入同一個變量單元等。數(shù)據(jù)相關性大的操作應劃分在同一個子系統(tǒng)內(nèi)。 操作相關性是高層次綜合中特有的。操作相關性是指兩個操作是否可以共享用一個資源,或者兩個操作共享同一資源對系統(tǒng)優(yōu)化的作用。操作相關性大的也應被劃分在同一個子系統(tǒng)內(nèi)。 245.2.1 并行接口8255 1. 8255的特性及外部信號定義 PA3 PA4PA2 PA5PA1 PA6PA0 PA7RD WRCS RESETGND D0A1 D1A0 D2PC7

16、D3PC6 D4PC5 D5PC4 D6PC0 D7PC1 VCCPC2 PB7PC3 PB6PB0 PB5PB1 PB4PB2 PB312120408255是一種可編程I/O接口電路,片上有三個功能由編程決定的I/O口,A口、B口和C口,C口又可分成2個4bit 的口。每個口都可定義為具有鎖存能力的輸入輸出端口。 2. 8255的工作方式及控制字 8555有3種工作方式,方式0、方式1和方式2。 8255各個口的工作方式由工作方式控制字定義。 253芯片劃分PC4-PC7PC0-PC3PA0-PA7PB0-PB7A組控制B組控制A口C口A組高四位B口C口B組低四位數(shù)據(jù)總線緩沖器讀寫控制邏輯V

17、ccGNDD0-D7/RD/WRA1A0RESET/CS通過對8255并行I/O接口電路的功能分析可得,8255芯片由鎖存器、三態(tài)緩沖器和組合邏輯電路三部分構成。268255的結構中應定義的鎖存器有7個,它們是:pa_latch -A口輸出鎖存器,8bit;pb_latch -B口輸出鎖存器,8bit;pcl_latch -C口低4位輸出鎖存器;pch_latch -C口高4位輸出鎖存器;ctrreg -方式控制字寄存器;betrreg -C口位控控制字寄存器,4位; ctrregF -選擇標志寄存器,1位。數(shù)據(jù)總線D0D7,是三態(tài)雙向總線,這些引腳都應為三態(tài)雙向引腳。所有端口的讀操作需要在R

18、D和CS有效時操作,因此,所有的端口讀操作是相關性操作,被劃分在進程P1中。 所有端口鎖存器的寫操作均在WR有效和CS有效進行,各端口的寫操作也是相關性操作,被劃分在進程P2中。27可編程IO接口電路8255的設計。 LIBRARY IEEE;USE IEEE.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_LOGI

19、C_VECTOR (7 DOWN TO 0); Pcl, Pch:INOUT STD_LOGIC_VECTOR (3 DOWN TO 0);END PIO8255;ARCHITECTURE structure OF PIO8255 IS SIGNAL 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 & a0; 28P1: PROC

20、ESS (rd, cs) -讀8255口操作 IF (cs = 0 AND rd = 0) THEN IF (ad = 00 AND ctrreg(4) = 1 ) THEN Internal_bus_in = pa; ELSIF (ad = 01 AND ctrreg(1) = 1 ) THEN interanl_bus_in = pb; 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 (

21、7 DOWN TO 4) = 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); 29 ELSIF (ad = 10 AND ctrreg(3) = 1 AND ctrreg(0) = 1) THEN internal_bus_in (3 DOWN TO 0) = pcl (

22、3 DOWN TO 0); internal_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; 30 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) TH

23、EN ad = a1 & a0; ctrregF := DB (7); internal_bus_out = DB; END IF; IF (reset = 1) THEN pa_latch = 00000000; pb_latch = 00000000; pc_latch = 00000000; bctrreg_v = 0000; ctrregF: = 0; ELSIF (wr EVENT AND wr = 1 AND cs = 0) THEN 31 IF (ctrregF = 1 AND ad = 11) THEN ctrreg = internal_bus_out; ELSIF (ad

24、= 00 AND ctrreg(4) = 0) THEN Pa_latch = internal_bus_out; ELSIF (ad = 01 AND ctrreg(1) = 0) THEN Pb_latch = internal_bus_out; ELSIF (ad = 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) pc_latch(0) pc_lat

25、ch(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) flag = 11; END CASE; END IF; END IF; END PROCESS P2; P3: PROCESS (pa_latch) BEGIN IF (ctrreg ( 4 ) = 0) THEN Pa = pa_latch ; -

26、Pa是輸出口 ELSE Pa = ZZZZZZZZ; END IF ; END PROCESS P3 ; 34 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 TO O); ELSE pcl = ZZZZ; END IF; IF (

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

28、乘數(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ù)量,并且?guī)缀鯗p小一半的延時,其代價是控制邏輯較為復雜。

29、表5-3 布思二位補碼乘法運算規(guī)則38 布思二位補碼乘法運算規(guī)則判斷位bi-1b ibi+1 操作內(nèi)容 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-2Pi392. 布思二位補碼乘法器的劃分 abbk1abbk240 mp實體內(nèi)部結構模型(續(xù)) abbk13abbk14abbk15abbk16積頂層模塊實體mp.vhd 由16個34位加/減法器組成, 這是16個內(nèi)

30、部邏輯結構相同的模塊,定義這些模塊的實體名為abbk。 41實體abbk bin31:0 m33:0 mo33:0ctrl2:0 op1:0abbkAbbk模塊的內(nèi)部結構ctactaddsub34位加法器last42 布思二位補碼乘法器的結構化設計 頂層模塊mpLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;UES IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mp IS PORT ( in1 : IN STD_LOGIC_VECTOR (31 DOWN TO 0); in2 :

31、 IN STD_LOGIC_VECTOR (31 DOWN TO 0); op : OUT STD_LOGIC_VECTOR (63 DOWN TO 0); END mp; ARCHITECTURE struct of mp ISCOMPONENT 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); 43 mo: OUT STD_LOGIC_VECTOR (33 DOWN TO 0);

32、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);BEGINtmp(0)=0;tmp2=in1&0;GEN1: FOR i IN 0 TO 15 GENERATE amp: abbk PORT MAP (in2, tmp2(2*i+2 DOWN TO 2*

33、i),tmp(i),tmp(i+1), op (2*i+1 DOWN TO 2*i); END GENERATE; op(63 DOWN TO 32)bin(3 1DOWNTO 0), clr=xlxn_6, ot=xlxn_7, bout(33 DOWN TO 0)=xlxn_1(33 DOWN TO 0); 47 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=xlx

34、n_2, op (1 DOWN TO 0)=op (1 DOWN TO 0), s (31 DOWN 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 ;48act模塊 act

35、模塊對輸入bin進行處理,輸出bout送到加法減法器, act模塊根據(jù)ot信號來判斷是右移一位或是兩位,或是清零,或不作處理。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 DOW

36、N TO 0);END act;ARCHITECTURE rtl_act OF act ISBEGIN49IF clr=1 THEN bout=0;ELSIF ot=0THEN bout=bin(31)&bin(31)&bin;ELSIF ot=1THEN bout=bin(31)&bin&0;END IF;END PROCESS; END rtl_act; 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_L

37、OGIC_VECTOR (31 DOWN TO 0); op: OUT STD_LOGIC_VECTOR (1 DOWN TO 0); END addsub;50addsub模塊addsub模塊為一個34位的加減器,當en為1時,對輸入做相加處理,當en為0時,對輸入做相減處理,既a-b。Addsub模塊沒有進位輸入與輸出,其原因是因為已經(jīng)采用了34位輸入(最高兩位為擴展的符號位),不存在進位丟失的問題。由于有右移兩次的操作,為防止溢出,用兩位符號擴展位。輸出的最低兩位為乘法器的部分結果,直接輸出。 51addsub.vhd LIBRARY IEEE;USE IEEE.STD_LOGIC_11

38、64.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;52ARCHITECTURE rt

39、l_addsub OF addsub ISBEGIN PROCESS (en,a,b)VARIABLE tmp: STD_LOGIC_VECTOR (33 DOWN TO 0);BEGINIFen=1 THEN tmp:=a+b;ELSIF en=0 THEN tmp:=a-b;END IFs=tmp(33 DOWN TO 2);op=tmp(1 DOWN TO 0);END PROCESS;END rtl_addsub;53ct模塊 ct模塊輸出信號真值表 判斷位bi-1bibi+1 as,ot,clr 000 “1x1” 001 100 010 100 011 110 100 010 10

40、1 000 110 010 111 1x1ct是控制電路模塊,其輸入是ctrl,ct模塊對輸入信號ctrl進行解釋譯碼,產(chǎn)生輸出clr(清零)、ot(移位)和as(加或減)。根據(jù)布思二位補碼乘法運算規(guī)則,不難得到ct控制邏輯的真值表, 54LIBRARY 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(2 DOWN TO 0); as : OUT STD_LOGIC

41、; clr : OUT STD_LOGIC ; ot : OUT STD_LOGIC );END ct;ARCHITECTURE rtl_ct OF ct ISBEGIN 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(0) ) or (cin(2) and cin(1) and cin(0

42、);END rtl_ct; 55last模塊的功能是把加減法器的前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_VECTOR (33 DOWN TO 0);END last;ARCHITECTURE

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

44、m IS PORT ( l:IN STD_LOGIC;m:OUT STD_LOGIC); END system; 58如果用進程描述系統(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;59實體system的結構體也可用于元件例化的方式描述。 ENTITY A IS PORT(P: IN STD_LOGIC; Q: OUT STD_LOGIC

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

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

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

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

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

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

51、CKAGE 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;68 USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY count IS PORT (clk, rest:IN STD_LOGIC; cunt:INOUT STD_L

52、OGIC_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;69測試平臺(仿真程序)testcunt設計。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.cutpkg.ALL

53、; -若不用集合包cutpkg,則應加一句 ENTITY testcunt IS -COMPONENT語句,說明調(diào)用的元件 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 RECORD; TYPE test_vector_array IS ARRAY (NATURAL RANGE) OF test_vector; 70 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, res

溫馨提示

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

評論

0/150

提交評論