




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、現(xiàn)有的軟件編程語言,如機器語言、匯編語言、結構化語言如C語言、面向對象語言乃至形式化語言本質上都是依據(jù)馮。諾依曼模型,由CPU以指令方式串行執(zhí)行語句都是逐行順序執(zhí)行的,稱之為程序。VHDL代碼-模擬硬件電路的實際執(zhí)行方式,所有的邏輯門在任何時刻都處于執(zhí)行狀態(tài),稱之為代碼-按執(zhí)行順序可分為兩大類:并發(fā)(Concurrent)代碼(硬件電路本質)順序(Sequential)代碼 第5章 并發(fā)代碼(Concurrent)15.1 并發(fā)執(zhí)行和順序執(zhí)行組合邏輯 VS 并發(fā)執(zhí)行代碼時序邏輯 VS 順序執(zhí)行代碼2VHDL代碼本質上是并發(fā)執(zhí)行的。但在另一方面,為了實現(xiàn)某些本質上具有串行執(zhí)行特點的功能,如時序相
2、關的功能,VHDL代碼也提供了能夠順序執(zhí)行的語句,如: process/function/procedure語句或結構。process/function/procedure內部的代碼才是順序執(zhí)行的(往往在設計時序電路時),但這些語句或結構之間仍然是并發(fā)執(zhí)行的。并發(fā)代碼又稱“數(shù)據(jù)流代碼”。3例:一段包含3個并發(fā)描述語句的代碼并發(fā)代碼要點: 1、除衛(wèi)氏塊(guarded block)外,僅使用并發(fā)描述語句無法實現(xiàn)同步時序電路(異步時序電路是可以的);2、通常只使用并發(fā)描述語句實現(xiàn)組合邏輯電路;順序代碼要點:1、要實現(xiàn)時序邏輯電路,必須使用順序描述語句;2、順序代碼可同時實現(xiàn)組合邏輯電路與時序邏輯電
3、路。4 常用的并發(fā)描述語句,通常位于process、function和procedure之外,包括: 運算操作符:邏輯運算、算術運算等 WHEN語句(when/else或with/select/when) 塊(block)語句、 生成(GENERATE)語句。 55.2 使用運算操作符建立并發(fā)代碼的最基本的方法運算操作符:見表運算操作符可以實現(xiàn)任何組合邏輯電路例:多路復用器多路復用器abcdys1s0功能描述:根據(jù)選擇位s1和s0的值,從四路輸入中選擇其中一路輸出。真值表或表達式分析6實現(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語句的語法結構: assign WHEN condition ELSE assign WHEN condition ELSE .; 9WITH/SELECT/WHEN語句的語法結構: WITH identifier SELECT assignment WHEN value, assignment WHEN value, .;注意:必須考慮所有可能出現(xiàn)的條件(condition),需經常使用關鍵字OTHERS。 若某些條件下不需要進行任何操作,需使用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 -對單個值進行判斷 when value1 to value2 -對取值范圍進行判斷, -多用于枚舉類型; when value1 | value2 | . -對多個值進
7、行判斷表達式control值標點control取其他值時output值保持不變11多路復用器的另外兩種實現(xiàn)方式多路復用器abcdys1s0功能描述:根據(jù)選擇位sel(1:0)的值,從四路輸入中選擇其中一路輸出。真值表(略)兩種實現(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類型時,實現(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為低電平時,輸出等于輸入,否則輸出為“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定義:給一個信號賦值,即為該信號創(chuàng)建一個驅動 器(驅動信號)。多個進程或并發(fā)語句給同 一個信號賦值,則該信號為多信號源驅動。例: 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為并 行語句。標號:if 條件表達式 generate 并行語句 end generate 標號;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語句使用過程中的多值驅動問題。正確的用法: OK: FOR i IN 0 TO 7 GENERATE output(i) =1 when (a(i) AND b(i)=1 ELSE 0; END GENERATE;錯誤的用法: NotOK: FOR i IN 0 TO 7 GENERATE accum= “1111” when (a(i)=1) else “0000”; END GENERATE;在順序描述語句LOOP中則不存在多值驅動問題。25功能描述:輸出矢量位寬是輸入矢量的兩倍;輸出矢量是輸入矢量進行移位的結果,移位的次數(shù)由一個輸入信號指
16、定。輸入值為“1111”,輸出值為下列值之一: row(0):00001111 -與輸入相比,沒有移位; row(1):00011110 row(2):00111100 row(3):01111000 row(4):11110000例:矢量移位器使用GENERATE語句26實現(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)語句 塊語句將一系列并行描述語句進行組合,目的是改善并行語句及其結構的可讀性??墒菇Y構體層次鮮明,結構明確。 兩種類型的塊:簡單塊(simple block)和衛(wèi)氏塊(guarded block)。28簡單塊: 僅僅是一種對原有代碼進行區(qū)域分割的方式。將一系列的并發(fā)描述語句放在一個簡單塊中的目的是增強代碼的可讀性和可維護性。 語法結構: 標記:block 塊說明項 begin 并行語句 end block 標記 ;29使用簡單塊對一段構造體代碼進行規(guī)整 architecture example . begin . block1: bloc
19、k begin . end block block1; . block2: block begin . end block block2; . end example;30注意:塊語句的使用不影響邏輯功能 以下兩種描述結果相同: 描述一: 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相比,多了一個衛(wèi)氏表達式。只有當衛(wèi)氏表達式的值為真時,含有關鍵字guarded的語句才能執(zhí)行(相當于條件執(zhí)行語句,容易生成latch,小心?。?。語法結構:標記:block (衛(wèi)氏表達式) 聲明部分 begin guarded語句和其它并發(fā)描述語句 end block 標記 ;32例子1: 用guarded block實現(xiàn)鎖存器 功能描述: 只有當clk=1時,才執(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)氏表達式衛(wèi)氏語句33例子2: 用guarded block實現(xiàn)D觸發(fā)器 功能描述: 只有當clk為上升沿時,才執(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)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 搶險物資規(guī)章管理制度
- 家裝公司股份制管理制度
- 科學實驗室安全管理制度
- 紙品廠品質管理制度
- 應急物資庫房管理制度
- 物業(yè)電梯安全管理制度
- 投融資決策管理制度
- 鋰電材料測試題及答案大全
- 網(wǎng)絡工程試題及答案
- 木材產銷分離管理制度
- 醫(yī)用耗材配送服務方案
- 2024年國家能源集團寧夏煤業(yè)公司招聘筆試參考題庫含答案解析
- 公立醫(yī)院績效考核微創(chuàng)手術目錄(第2版)
- 《小學生C++創(chuàng)意編程》第8單元課件 函數(shù)
- 物理化學(下)(華東理工大學)智慧樹知到課后章節(jié)答案2023年下華東理工大學
- (180)-專題五 為什么歷史和人民選擇了馬克思主義
- 區(qū)域地理中國的地形-PPT
- 醫(yī)院內靜脈血栓栓塞癥防治質量評價與管理指南課件
- 危險化學品經營管理制度
- 村委公益性崗位會議記錄
- 《大隨求陀羅尼》羅馬拼音與漢字對照版
評論
0/150
提交評論