可編程ASIC設計及應用 模塊化硬件與進程模型ppt課件_第1頁
可編程ASIC設計及應用 模塊化硬件與進程模型ppt課件_第2頁
可編程ASIC設計及應用 模塊化硬件與進程模型ppt課件_第3頁
可編程ASIC設計及應用 模塊化硬件與進程模型ppt課件_第4頁
可編程ASIC設計及應用 模塊化硬件與進程模型ppt課件_第5頁
已閱讀5頁,還剩47頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、可編程ASIC模塊化硬件與進程模型 目的目的 第三部分第三部分(模塊化硬件與進程模型模塊化硬件與進程模型)與第四部分與第四部分(信號傳輸模型信號傳輸模型)均是講述均是講述vhdl硬件描畫言語的硬件描畫言語的原理原理 這兩部分的學習目的是為了讓大家了解硬件描這兩部分的學習目的是為了讓大家了解硬件描畫言語的運轉機制,了解硬件仿真的原理,有畫言語的運轉機制,了解硬件仿真的原理,有利于在以后的設計中運用多言語進展各種級別利于在以后的設計中運用多言語進展各種級別的建模;的建模; 對于方案從事對于方案從事EDA工具軟件設計的學員也有一工具軟件設計的學員也有一定的參考價值。定的參考價值。數字電路的信號跳變特

2、點數字電路din0din1dout輸出(dout)的值只需在輸入(din0,din1)發(fā)生變化的時候才會變化(可以有所延遲)理想情況下是瞬間變化,沒有過渡時間。din0din1dout數字電路的信號跳變特點數字電路din0din1dout輸出(dout)的值只需在輸入(din0,din1)發(fā)生變化的時候才會變化(可以有所延遲)理想情況下是瞬間變化,沒有過渡時間。din0din1dout本節(jié)假設 為了問題分析的方便,本節(jié)暫時假設,輸出的跳變與輸入的跳變之間無延遲,跳變無過渡。用軟件方法來仿真硬件行為數字電路元件din0din1doutdin0din1dout問題:如何用軟件的方法來仿真這個硬件元

3、件的行為?用軟件方法來仿真硬件行為數字電路元件din0din1doutdin0din1doutFunct() if(din0 和 din1滿足某種條件) dout = 0; Else dout = 1; / 在這里假設din0,din1和dout為全局量用軟件方法來仿真硬件行為數字電路元件din0din1doutdin0din1dout問題:何時調用Funct?Funct() if(din0 和 din1滿足某種條件) dout = 0; Else dout = 1; / 在這里假設din0,din1和dout為全局量時間方案(調用方案)1數字電路元件din0din1doutdin0din1d

4、outt按照特定的分辨率對時間軸作細劃分,調用funct。承襲了傳統電子系統(模擬,平滑系統)的仿真思想。缺陷:調用頻繁,仿真時cpu負擔過重。時間方案(調用方案)2數字電路元件din0din1doutdin0din1doutt(理想數字系統仿真)只需求對輸入跳變點調用Funct。缺陷:只適宜于理想數字波形。ASIC仿真時間方案 根本上是采用第二種方案。 以下的仿真討論均運用第二種方案。波形記錄舉例數字電路din0din1doutdin0din1doutttDin0 din1001t011t110t201t0t1t2仿真算法流程讀取波形文件中時間st時的輸入值(din0, din1)調用Fun

5、ct往波形文件記錄St時的輸出值(dout, )st為仿真時間指針時間t終了?St指向波形文件中的下一個時間點退出St指向波形文件中的起始時間點YN思索復雜的情況:多元件(多模塊)u1u3u2abcefgVHDL處置方案:一個硬件模塊對應一個軟件進程。U1: process(a, b)U2: process(c)U3: process(e, f)進程調度(方案1)u1u3u2abcefg方案1: 偷懶方法。 當任何一個輸入(a,b,c)發(fā)生變化時,均將一切的進程調度一次。問題:用什么來決議調度的順序?方案1修補:根據信號流向來確定調度順序。問題:當存在信號反響的時候又如何處置?進程調度(方案2

6、)u1u3u2abcefg方案2: 對每一個模塊,只需當該模塊的輸入發(fā)生變化時,該模塊才被調用。問題:當模塊的輸入發(fā)生變化,但是又沒有引起模塊的硬件動作時,這種方法會有什么缺陷?例子:存放器的時鐘發(fā)生變化時,存放器才會產生硬件動作,而數據輸入發(fā)生變化時,存放器并不產生任何動作。VHDL中process的定義 ModuleName:Process( 敏感信號列表 ) Begin - 進程描畫語句。 End process;當敏感信號列表中的任何一個信號發(fā)生變化,該進程都會被調度Process例子 假設假設U2為非門,那么例子程序如下:為非門,那么例子程序如下: U2: process( c )

7、Begin if( c = 1 ) then f = 0; else f = 1; end if; End process;當c發(fā)生變化時,該進程被調度.表示信號賦值。VHDL的進程調度u1u3u2abcefgabcefVHDL的進程調度u1u3u2abcefgabcef進入一個新的進入一個新的仿真周期仿真周期U1_process被調度的進程:一個一個子仿真周期子仿真周期VHDL的進程調度u1u3u2abcefgabcef被調度的進程:進入一個新的進入一個新的仿真周期仿真周期U1_processU3_process子仿真周期1子仿真周期2VHDL的進程調度u1u3u2abcefgabcef進入

8、一個新進入一個新的仿真周期的仿真周期被調度的進程:U1_processU2_processU3_process子仿真周期1子仿真周期2聯想:SARS隔離檢測隔離子周期1隔離子周期2隔離子周期3VHDL進程調度算法 1.假設仿真事件假設仿真事件(有信號發(fā)生變化有信號發(fā)生變化)搜索完,搜索完,那么終了仿真;否那么,跳到下一個信那么終了仿真;否那么,跳到下一個信號事件點,此時進入一個新的仿真周期;號事件點,此時進入一個新的仿真周期; 2.找出一切對發(fā)生變化的信號敏感的進程,找出一切對發(fā)生變化的信號敏感的進程,進入一個新的子仿真周期,依次對這些進入一個新的子仿真周期,依次對這些進程調度一次;進程調度一

9、次; 3.假設進程調度后出現新的事件,那么回假設進程調度后出現新的事件,那么回到第到第2步;否那么回到第步;否那么回到第1步。步。VHDL仿真思想 子仿真周期的時間就是一個子仿真周期的時間就是一個Delta延時,而延時,而Delta延時為延時為0延時。延時。 顯然,一個仿真周期可以包含多個子仿真周期,顯然,一個仿真周期可以包含多個子仿真周期,也就是包含多個也就是包含多個Delta延時。延時。 Delta延時數目的添加,并不會推進仿真時鐘。延時數目的添加,并不會推進仿真時鐘。也即也即“微觀時間增量不改動宏觀時間;只需微觀時間增量不改動宏觀時間;只需仿真周期的添加才會推進仿真時鐘。仿真周期的添加才

10、會推進仿真時鐘。 硬件模塊的運轉之間是并行的關系;軟件進程硬件模塊的運轉之間是并行的關系;軟件進程的調度之間是并發(fā)的關系。硬件的并行是經過的調度之間是并發(fā)的關系。硬件的并行是經過軟件的并發(fā)來仿真。軟件的并發(fā)來仿真。補充:并發(fā)與并行 并發(fā):補充:并發(fā)與并行 并行就是真正的同時,在任何時辰(瞬間),多個進程都在同時地運轉。VHDL軟件體系硬件電路process();process();process();編譯器進程調度器(仿真器)仿真結果VHDL源代碼源代碼EDA工具工具綜合構成的源碼方式網表 進程構造體(即vhdl源代碼)里曾經描畫了整個硬件的外形,所以它可以被綜合器綜合成硬件; 并不是一切描畫

11、方式的vhdl代碼都可以被綜合成硬件。太籠統的描畫只適宜做系統建模和仿真。 顯然綜合器是不會去關懷敏感信號量的,由于它不存在進程調度的問題,而是直接根據進程體內的代碼來構成硬件電路。 但是要留意,即使編寫的是面向綜合的代碼,敏感信號量依然需求補全。由于敏感信號的缺漏對于仿真器來說是一個錯誤,會導致仿真時應該被調度的進程沒有得到調度。 而綜合器構成的綜合后仿真用的網表源文件,是保證不喪失敏感信號的。 假設設計者喪失了敏感信號,就會呵斥設計級別的代碼和綜合后的代碼之間仿真結果不相符。對于敏感信號 一個模塊,并非一切的輸入都必需作為一個模塊,并非一切的輸入都必需作為敏感信號,只需引起硬件動作的信號才

12、敏感信號,只需引起硬件動作的信號才必需作為敏感信號。必需作為敏感信號。對于敏感信號 將一切的輸入信號將一切的輸入信號放入進程的敏感信放入進程的敏感信號表中,在邏輯上號表中,在邏輯上并沒有什么錯誤,并沒有什么錯誤,但是會引起進程調但是會引起進程調度頻繁而導致仿真度頻繁而導致仿真效率降低效率降低(cpu負擔負擔太重太重)。事情終了了嗎?U1U2abc 假設u1和u2都是“直連邏輯(在數字邏輯設計中,叫做緩沖器元件),那么它們的進程描畫(用c言語)如為:/*敏感信號量為(a) */Void functU1() b = a;/* 敏感信號量為(b) */Void functU2() c = b;很顯然

13、,當a的值發(fā)生變化時,會激活兩個仿真子周期,functU1和functU2依次得到調度,從而a的值得可以可靠地傳播到c。用另外的方式建立敏感信號表,這里省略。事情終了了嗎?U1U2abc 假設u1和u2都是“直連邏輯(在數字邏輯設計中,叫做緩沖器元件),那么它們的進程描畫(用VHDL言語)如為:Process(a)Begin b = a;End process;Process(b)Begin c = b;End process;很顯然,當a的值發(fā)生變化時,會激活兩個仿真子周期,functU1和functU2依次得到調度,從而a的值得可以可靠地傳播到c。嘗試加上時鐘變成時序電路U1U2abccl

14、kVoid functU1() if(rising_edge(clk) b = a;C言語描畫的進程如下:Void functU2() if(rising_edge(clk) c = b;留意這兩個進程的敏感信號量都是clk。嘗試加上時鐘變成時序電路U1U2abcclkVoid functU1() if(rising_edge(clk) b = a;C言語描畫的進程如下:Void functU2() if(rising_edge(clk) c = b;當clk發(fā)生變化時,這兩個進程會被激活,并且依次在一個子仿真周期內被調度。嘗試加上時鐘變成時序電路U1U2abcclkVoid functU1(

15、) if(rising_edge(clk) b = a;C言語描畫的進程如下:Void functU2() if(rising_edge(clk) c = b;假設首先調度functU2,再調度functU1 ,那么仿真結果可以符合實際的硬件行為。嘗試加上時鐘變成時序電路U1U2abcclkVoid functU1() if(rising_edge(clk) b = a;C言語描畫的進程如下:Void functU2() if(rising_edge(clk) c = b;而假設首先調度functU1,再調度functU2,那么仿真結果與實際的硬件行為不符!問題 我們發(fā)現,調度順序的不同,會導

16、致截然不同的仿真結果; 以下是這個問題的另外一種方式的表述U3U1U2abc/* 敏感信號量為(a, b)*/functU3() b = a; c = b;顯然,兩種方式中,a的值都可以可靠地傳輸到c。將u1和u2合并成新的元件u3,并且只用一個進程函數描畫/* 敏感信號量為(a, b) */functU3() c = b; b = a;元件合并方式1:方式2:U3U1U2abc/* 敏感信號量為(a, b)*/functU3() b = a; c = b;顯然,兩種方式中,a的值都可以可靠地傳輸到c。將u1和u2合并成新的元件u3,并且只用一個進程函數描畫/* 敏感信號量為(a, b) */

17、functU3() c = b; b = a;值得留意的是,這種純組合電路的進程函數中,被讀的信號應該都參與敏感信號表中U3U1U2abc/* 敏感信號量為(a, b)*/Process(a,b)begin b = a; c = b;End process;顯然,兩種方式中,a的值都可以可靠地傳輸到c。將u1和u2合并成新的元件u3,并且只用一個進程函數描畫/* 敏感信號量為(a, b) */Process( a,b)begin c = b; b = a;End process;值得留意的是,這種純組合電路的進程函數中,被讀的信號應該都參與敏感信號表中U3U1U2abc/* 敏感信號量為(a,

18、 b)*/Process(a,b)begin b = a; c = b;End process;顯然,兩種方式中,a的值都可以可靠地傳輸到c。將u1和u2合并成新的元件u3,并且只用一個進程函數描畫/* 敏感信號量為(a, b) */Process( a,b)begin c = b; b = a;End process;這樣在a發(fā)生變化時,導致進程被調度兩次,從而保證了a的值順利地在一個仿真周期內“立刻地傳輸到c。U1U2abcclk/* 敏感信號為(clk) */FunctU3() if( rising_edge(clk) ) c = b; b = a; 此時仿真沒問題給這個系統加上時鐘,變

19、成時序電路U1U2abcclk/* 敏感信號為(clk) */FunctU3() if( rising_edge(clk) ) b = a; c = b; 此時仿真出錯,與實際不符!交換順序! 這是為什么?如何處置?作業(yè)(挑戰(zhàn)免考題的根底) 以下是一個數字硬件系統的模塊框圖。u1u2u3abcd要求 1. 為輸入輸出信號定義一種波形記錄文件格式,編寫函數,可以根據文件自動畫出信號波形; 2. 編寫rising_edge函數: bool rising_edge(std_logic clk ); 其中std_logic為自定義類型,其在數字邏輯上的值暫時為(0, 1)。要求 3. 假設曾經有工程師利用c言語編

溫馨提示

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

評論

0/150

提交評論