VHDL數(shù)字電路設(shè)計(jì)教程(巴西)佩德羅尼第五講 并發(fā)代碼_第1頁
VHDL數(shù)字電路設(shè)計(jì)教程(巴西)佩德羅尼第五講 并發(fā)代碼_第2頁
VHDL數(shù)字電路設(shè)計(jì)教程(巴西)佩德羅尼第五講 并發(fā)代碼_第3頁
VHDL數(shù)字電路設(shè)計(jì)教程(巴西)佩德羅尼第五講 并發(fā)代碼_第4頁
VHDL數(shù)字電路設(shè)計(jì)教程(巴西)佩德羅尼第五講 并發(fā)代碼_第5頁
已閱讀5頁,還剩33頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、現(xiàn)有的軟件編程語言,如機(jī)器語言、匯編語言、結(jié)構(gòu)化語言如C語言、面向?qū)ο笳Z言乃至形式化語言本質(zhì)上都是依據(jù)馮。諾依曼模型,由CPU以指令方式串行執(zhí)行語句都是逐行順序執(zhí)行的,稱之為程序。VHDL代碼-模擬硬件電路的實(shí)際執(zhí)行方式,所有的邏輯門在任何時(shí)刻都處于執(zhí)行狀態(tài),稱之為代碼-按執(zhí)行順序可分為兩大類:并發(fā)(Concurrent)代碼(硬件電路本質(zhì))順序(Sequential)代碼 第5章 并發(fā)代碼(Concurrent)15.1 并發(fā)執(zhí)行和順序執(zhí)行組合邏輯 VS 并發(fā)執(zhí)行代碼時(shí)序邏輯 VS 順序執(zhí)行代碼2VHDL代碼本質(zhì)上是并發(fā)執(zhí)行的。但在另一方面,為了實(shí)現(xiàn)某些本質(zhì)上具有串行執(zhí)行特點(diǎn)的功能,如時(shí)序相

2、關(guān)的功能,VHDL代碼也提供了能夠順序執(zhí)行的語句,如: process/function/procedure語句或結(jié)構(gòu)。process/function/procedure內(nèi)部的代碼才是順序執(zhí)行的(往往在設(shè)計(jì)時(shí)序電路時(shí)),但這些語句或結(jié)構(gòu)之間仍然是并發(fā)執(zhí)行的。并發(fā)代碼又稱“數(shù)據(jù)流代碼”。3例:一段包含3個(gè)并發(fā)描述語句的代碼并發(fā)代碼要點(diǎn): 1、除衛(wèi)氏塊(guarded block)外,僅使用并發(fā)描述語句無法實(shí)現(xiàn)同步時(shí)序電路(異步時(shí)序電路是可以的);2、通常只使用并發(fā)描述語句實(shí)現(xiàn)組合邏輯電路;順序代碼要點(diǎn):1、要實(shí)現(xiàn)時(shí)序邏輯電路,必須使用順序描述語句;2、順序代碼可同時(shí)實(shí)現(xiàn)組合邏輯電路與時(shí)序邏輯電

3、路。4 常用的并發(fā)描述語句,通常位于process、function和procedure之外,包括: 運(yùn)算操作符:邏輯運(yùn)算、算術(shù)運(yùn)算等 WHEN語句(when/else或with/select/when) 塊(block)語句、 生成(GENERATE)語句。 55.2 使用運(yùn)算操作符建立并發(fā)代碼的最基本的方法運(yùn)算操作符:見表運(yùn)算操作符可以實(shí)現(xiàn)任何組合邏輯電路例:多路復(fù)用器多路復(fù)用器abcdys1s0功能描述:根據(jù)選擇位s1和s0的值,從四路輸入中選擇其中一路輸出。真值表或表達(dá)式分析6實(shí)現(xiàn)代碼:1-2 library ieee;3 use ieee.std_logic_1164.all;4-5

4、 entity mux is6 port( a,b,c,d,s1,s0: IN std_logic;7 y: OUT std_logic );8 end mux;9-10 architecture pure_logic of mux is11 begin12 y=(a AND NOT s1 AND NOT s0) OR13 (b AND NOT s1 AND s0) OR14 (c AND s1 AND NOT s0) OR15 (d AND s1 AND s0);16 end pure_logic;17 -真值表7波形圖85.3 WHEN語句一種基本的并發(fā)代碼描述語句兩種形式:WHEN/EL

5、SE(又稱simple WHEN)WITH/SELECT/WHEN(又稱selected WHEN)WHEN/ELSE語句的語法結(jié)構(gòu): assign WHEN condition ELSE assign WHEN condition ELSE .; 9WITH/SELECT/WHEN語句的語法結(jié)構(gòu): WITH identifier SELECT assignment WHEN value, assignment WHEN value, .;注意:必須考慮所有可能出現(xiàn)的條件(condition),需經(jīng)常使用關(guān)鍵字OTHERS。 若某些條件下不需要進(jìn)行任何操作,需使用UNAFFECTED。10WH

6、EN/ELSE用法例子: outp=“000” when (inp=0 OR reset=1) else “001” when ct1=1 else “010”;WITH/SELECT/WHEN用法例子: with control SELECT outp=“000” when reset, “111” when set, unaffected when others;WHEN value的三種描述方式: when value -對單個(gè)值進(jìn)行判斷 when value1 to value2 -對取值范圍進(jìn)行判斷, -多用于枚舉類型; when value1 | value2 | . -對多個(gè)值進(jìn)

7、行判斷表達(dá)式control值標(biāo)點(diǎn)control取其他值時(shí)output值保持不變11多路復(fù)用器的另外兩種實(shí)現(xiàn)方式多路復(fù)用器abcdys1s0功能描述:根據(jù)選擇位sel(1:0)的值,從四路輸入中選擇其中一路輸出。真值表(略)兩種實(shí)現(xiàn)方案: when/else語句(simple WHEN) with/select/when語句(selected WHEN) 12方案1: when/else方式:- library ieee; use ieee.std_logic_1164.all;- entity mux is port( a,b,c,d: IN std_logic; sel: IN std_lo

8、gic_vector(1 downto 0); y: OUT std_logic ); end mux;-architecture mux1 of mux is begin y= a when sel=“00” else b when sel=“01” else c when sel=“10” else d ; end mux1; -方案2: with/select/when方式:- library ieee; use ieee.std_logic_1164.all;- entity mux is port( a,b,c,d: IN std_logic; sel: IN std_logic_v

9、ector(1 downto 0); y: OUT std_logic ); end mux;-architecture mux2 of mux is begin with sel select y=a when “00”, b when “01”, c when “10”, d when OTHERS; end mux2; -不能是d when “11”;注意:std_logic的取值還可能是“zz”等,因此必須others 或 else!13-方案1: when/else方式:-architecture mux1 of mux is begin y= a when sel=0 else b

10、 when sel=1 else c when sel=2 else d ; end mux1; -方案2: with/select/when方式:architecture mux2 of mux is begin with sel select y=a when 0, b when 1, c when 2, d when 3; -3與OTHERS等效; end mux2; -將sel信號聲明為INTEGER類型時(shí),實(shí)現(xiàn)方式如下:- library ieee; use ieee.std_logic_1164.all;-entity mux is port( a,b,c,d: IN std_lo

11、gic; sel: IN INTEGER range 0 to 3; y: OUT std_logic ); end mux;14例:三態(tài)緩沖器功能描述:ena為低電平時(shí),輸出等于輸入,否則輸出為“ZZZZ_ZZZZ”(高阻態(tài))。 library ieee; use ieee.std_logic_1164.all;- entity tri_state is port( ena: IN std_logic; input: IN std_logic_vector(7 downto 0); output: OUT std_logic_vector(7 downto 0) ); end tri_sta

12、te;-architecture tri_state of tri_state is begin outputZ) ; end tri_state;15定義:給一個(gè)信號賦值,即為該信號創(chuàng)建一個(gè)驅(qū)動(dòng) 器(驅(qū)動(dòng)信號)。多個(gè)進(jìn)程或并發(fā)語句給同 一個(gè)信號賦值,則該信號為多信號源驅(qū)動(dòng)。例: a_out = a when enable_a else Z ; b_out = b when enable_b else Z ; process ( a_out) begin sig = a_out ; end process ; process ( b_out ) begin sig a( I ), y = b(

13、 I ) ; end generate gen ; 19例:4位移位寄存器 204位移位寄存器的等效描述:212、If generate 語句語法: if 語句與 If generate 的區(qū)別: 1、If generate 沒有類似于 if 語句的 else 或 elsif 分支語句。 2、if 語句是順序語句,If generate為并 行語句。標(biāo)號:if 條件表達(dá)式 generate 并行語句 end generate 標(biāo)號;22例: signal x: bit_vector(7 downto 0); signal y: bit_vector(15 downto 0); signal z

14、: bit_vector(7 downto 0);. G1: for i in xrange GENERATE z(i)=x(i) AND y(i+8); END GENERATE;等效于:z(7)=x(7) AND y(15); z(6)=x(6) AND y(14); . z(0)=x(0) AND y(8); 并發(fā)執(zhí)行!23注意1:GENERATE中循環(huán)操作的上界和下界必須是靜態(tài)的。如為非靜態(tài)參數(shù),則往往不可綜合。例: signal choice: integer range 0 to 3; NotOK: FOR i IN 0 TO choice GENERATE (并發(fā)描述語句) EN

15、D GENERATE;24注意2:GENERATE語句使用過程中的多值驅(qū)動(dòng)問題。正確的用法: OK: FOR i IN 0 TO 7 GENERATE output(i) =1 when (a(i) AND b(i)=1 ELSE 0; END GENERATE;錯(cuò)誤的用法: NotOK: FOR i IN 0 TO 7 GENERATE accum= “1111” when (a(i)=1) else “0000”; END GENERATE;在順序描述語句LOOP中則不存在多值驅(qū)動(dòng)問題。25功能描述:輸出矢量位寬是輸入矢量的兩倍;輸出矢量是輸入矢量進(jìn)行移位的結(jié)果,移位的次數(shù)由一個(gè)輸入信號指

16、定。輸入值為“1111”,輸出值為下列值之一: row(0):00001111 -與輸入相比,沒有移位; row(1):00011110 row(2):00111100 row(3):01111000 row(4):11110000例:矢量移位器使用GENERATE語句26實(shí)現(xiàn)代碼: LIBRARY ieee; USE ieee.std_logic_1164.all; entity shifter is port ( inp: IN std_logic_vector(3 downto 0); sel: IN integer range 0 to 4; outp: OUT std_logic_v

17、ector(7 downto 0); end shifter; architecture shifter of shifter is subtype vector is std_logic_vector(7 downto 0); type matrix is array(4 downto 0) of vector; signal row: matrix; begin row(0)= “0000” & inp; G1: FOR i IN 1 TO 4 GENERATE row(i)=row(i-1)(6 downto 0) & 0; end GENERATE; outp=row(sel); en

18、d end shifter;275.5 塊(block)語句 塊語句將一系列并行描述語句進(jìn)行組合,目的是改善并行語句及其結(jié)構(gòu)的可讀性。可使結(jié)構(gòu)體層次鮮明,結(jié)構(gòu)明確。 兩種類型的塊:簡單塊(simple block)和衛(wèi)氏塊(guarded block)。28簡單塊: 僅僅是一種對原有代碼進(jìn)行區(qū)域分割的方式。將一系列的并發(fā)描述語句放在一個(gè)簡單塊中的目的是增強(qiáng)代碼的可讀性和可維護(hù)性。 語法結(jié)構(gòu): 標(biāo)記:block 塊說明項(xiàng) begin 并行語句 end block 標(biāo)記 ;29使用簡單塊對一段構(gòu)造體代碼進(jìn)行規(guī)整 architecture example . begin . block1: bloc

19、k begin . end block block1; . block2: block begin . end block block2; . end example;30注意:塊語句的使用不影響邏輯功能 以下兩種描述結(jié)果相同: 描述一: a1: out1=1 after 2 ns; a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; 描述二: a1: out1=1 after 2 ns; blk1: block begin a2: out2=1 after 2 ns; a3: out3=1 after 2 ns; end block blk1; 31衛(wèi)

20、式(Guarded)塊 與simple block相比,多了一個(gè)衛(wèi)氏表達(dá)式。只有當(dāng)衛(wèi)氏表達(dá)式的值為真時(shí),含有關(guān)鍵字guarded的語句才能執(zhí)行(相當(dāng)于條件執(zhí)行語句,容易生成latch,小心!)。語法結(jié)構(gòu):標(biāo)記:block (衛(wèi)氏表達(dá)式) 聲明部分 begin guarded語句和其它并發(fā)描述語句 end block 標(biāo)記 ;32例子1: 用guarded block實(shí)現(xiàn)鎖存器 功能描述: 只有當(dāng)clk=1時(shí),才執(zhí)行語句q=d; LIBRARY ieee; USE ieee.std_logic_1164.all; entity latch is port(d,clk:IN std_logic;

21、q:OUT std_logic); end latch; architecture latch of latch is begin b1:block (clk=1) begin q=guarded d; end block b1; end latch;衛(wèi)氏表達(dá)式衛(wèi)氏語句33例子2: 用guarded block實(shí)現(xiàn)D觸發(fā)器 功能描述: 只有當(dāng)clk為上升沿時(shí),才執(zhí)行衛(wèi)氏語句; LIBRARY ieee; USE ieee.std_logic_1164.all; entity dff is port(d,clk,rst:IN std_logic; q:OUT std_logic); end dff; architecture dff o

溫馨提示

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

評論

0/150

提交評論