FPGA設計與實戰(zhàn)演練課件:FPGA遠程云端硬件實驗平臺_第1頁
FPGA設計與實戰(zhàn)演練課件:FPGA遠程云端硬件實驗平臺_第2頁
FPGA設計與實戰(zhàn)演練課件:FPGA遠程云端硬件實驗平臺_第3頁
FPGA設計與實戰(zhàn)演練課件:FPGA遠程云端硬件實驗平臺_第4頁
FPGA設計與實戰(zhàn)演練課件:FPGA遠程云端硬件實驗平臺_第5頁
已閱讀5頁,還剩112頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

FPGA遠程云端硬件實驗平臺目錄一、EDA技術及發(fā)展二、硬件描述語言三、EDA工具四、可編程邏輯器件五、應用領域六、語言基礎EDA技術發(fā)展一EDA(electronicdesignofautomation,電子設計自動化)是電子設計與制造技術發(fā)展的核心。指利用計算機輔助設計(CAD)軟件,來完成超大規(guī)模集成電路(VLSI)芯片的功能設計、綜合、驗證、物理設計(包括布局、布線、版圖、設計規(guī)則檢查等)等流程的設計方式。硬件描述語言二硬件描述語言硬件描述語言(英文:HardwareDescriptionLanguage,簡稱:HDL)是電子系統(tǒng)硬件行為描述、結構描述、數(shù)據(jù)流描述的語言。利用這種語言,數(shù)字電路系統(tǒng)的設計可以從頂層到底層(從抽象到具體)逐層描述自己的設計思想,用一系列分層次的模塊來表示極其復雜的數(shù)字系統(tǒng)。然后,利用電子設計自動化(EDA)工具,逐層進行仿真驗證,再把其中需要變?yōu)閷嶋H電路的模塊組合,經(jīng)過自動綜合工具轉換到門級電路網(wǎng)表。接下去,再用專用集成電路ASIC或現(xiàn)場可編程門陣列

FPGA自動布局布線工具,把網(wǎng)表轉換為要實現(xiàn)的具體電路布線結構。硬件描述語言VerilogHDLVHDL語法自由、易上手語法嚴謹、較難上手適合算法級、門級設計適合系統(tǒng)級設計代碼簡潔代碼冗長發(fā)展較快發(fā)展緩慢系統(tǒng)功能設計RTL級建模設計RTL級仿真綜合門級仿真布局布線時序仿真FPGA板級調試EDA工具三可編程邏輯器件四可編程邏輯器件英文全稱為:programmablelogicdevice即PLD。PLD是做為一種通用集成電路產(chǎn)生的,他的邏輯功能按照用戶對器件編程來確定。一般的PLD的集成度很高,足以滿足設計一般的數(shù)字系統(tǒng)的需要。FPGA與CPLD比較器件種類特性FPGACPLD內部結構查找表乘積項程序存儲內部SRAM結構,外掛EEPROM或Flash存儲程序內部EEPROM或Flash資源類型觸發(fā)器資源豐富組合邏輯資源豐富集成度高低使用場合比較復雜的算法控制邏輯速度塊慢其他資源RAM、PLL、DSP-保密性一般不保密可加密應用領域五語言基礎六Verilog語言簡介Verilog語言最初是于1983年由GatewayDesignAutomation公司為其模擬器產(chǎn)品開發(fā)的硬件建模語言。Verilog語言于1995年成為IEEE標準,稱為IEEEStd1364-1995,也就是通常所說的Verilog-95。Verilog-2001是對Verilog-95的一個重大改進版本。常用三種建模方式結構化描述方式數(shù)據(jù)流描述方式行為描述方式andalwaysassignbeginbufbufif0bufif1casecasexcasezcmosdeassigndefaultdefparamdisableedgeelseendendcaseendfunctionendprimitiveendmoduleendspecifyendtableendtaskeventforforceforeverforkfunctionhighz0highz1ififnoneinitialinoutinputintegerjoinlargemacromoduemediummodulenandnegedgenornotnotif0notif1nmosoroutputparameterpmosposedgeprimitivepulldownpulluppull0pull1rcmosrealrealtimeregreleaserepeatrnmosrpmosrtranrtranif0rtranif1scalaredsmallspecifyspecparamstrengthstrong0strong1supply0supply1tabletasktrantranif0tranif1timetritriandtriortriregtri0tri1vectoredwaitwandweak0weak1whilewireworxnorxor關鍵字含義module模塊開始定義input輸入端口定義output輸出端口定義inout雙向端口定義parameter信號的參數(shù)定義wirewire信號定義regreg信號定義always產(chǎn)生Reg信號語句的關鍵字assign產(chǎn)生wire信號語句的關鍵字begin語句的起始標志end語句的結束標志edge/posedge/negedge時序電路的標志caseCase語句起始標記defaultCase語句的默認分支標志endcaseCase語句結束標記ifif/else語句標記elseif/else語句標記forfor語句標記endmodule模塊結束定義標識符的一些推薦的寫法: 1、用有意義的有效的名字如sum、cpu_addr等。 2、用下劃線區(qū)分詞,如cpu_addr。 3、采用一些前綴或后綴,比如時鐘采用clk前綴:clk_50,clk_cpu;Verilog支持兩種形式的注釋符:/*……*/和//。其中,/*……*/為多行注釋符,用于寫多行注釋;//為單

行注釋符,以雙斜杠//開始到行尾結束為注釋文字。注釋只是為了改善程序的可讀性,在編譯時不起作

用。

邏輯0:表示低電平,也就對應我們電路GND;邏輯1:表示高電平,也就是對應我們電路的VCC;邏輯X:表示未知,有可能是高電平,也有可能是低電平;邏輯Z:表示高阻態(tài),外部沒有激勵信號,是一個懸空狀態(tài)。Verilog整形常量進制格式包括二進制、八進制、十進制和十六進制。一般常用的為二進制、十進制和十六進制。二進制表示如下:4’b0101表示4位二進制數(shù)字0101十進制表示如下:4’d2表示4位十進制數(shù)字2(二進制0010)十六進制表示如下:4’ha表示4位十六進制數(shù)字a(二進制1010)書寫格式:[位寬]’進制數(shù)值16’b1001_1010_1010_1001=16’h9AA9Verilog實型常量一般有兩種表示方法:1.使用十進制計數(shù)法,例如0.1、2.0、6.67。2.使用科學計數(shù)法。Verilog字符型常量使用雙引號“”,內部按照字符序列書寫字符串。在表達式和賦值語句中,字符串轉換為無符號整形,用一串8bitASCII值表示。例如:“helloworld!”存儲需要8*12bit的變量。在Verilog語言中,主要有三大類數(shù)據(jù)類型:

寄存器數(shù)據(jù)類型、線網(wǎng)數(shù)據(jù)類型和參數(shù)數(shù)據(jù)類型。Verilog中的操作符按照功能可以分為下述類型: 1、算術運算符 2、關系運算符 3、邏輯運算符 4、條件運算符 5、位運算符 6、移位運算符 7、拼接運算符結構化描述:結構化描述方式與電路結構一一對應,建模前必須設計好詳細、具體的電路圖,通過實例化調用已有的用戶編好的低層次模塊或Verilog預先定義的基本門級元件,并使用線網(wǎng)來連接各器件,描述出邏輯電路中元件或模塊彼此的連接關系。

模塊端口與之連接的信號的數(shù)據(jù)類型必須遵循:輸入端口在模塊內部必須為wire型數(shù)據(jù),在模塊外部可以連接wire或reg型數(shù)據(jù);輸出端口在模塊內部可以為wire或reg型數(shù)據(jù),在模塊外部必須連接到wire型數(shù)據(jù);

實例化基本門元件:

基本門元件:

實例化底層模塊:實例化用戶定義的底層模塊必須指定實例名,層次化設計中,父模塊例化子模塊時,有兩種例化方法,即端口映射可以采用名字關聯(lián)也可以按順序關聯(lián),但關聯(lián)方式不能混合使用。

第一種方式是命名端口連接方式,其語法格式為

模塊名實例名(.端口名(連線1),.端口名2(連線2),…);

第二種方式是順序端口連接方式,其語法格式為

模塊名實例名(連線名1,連線2,…);

數(shù)據(jù)流描述在數(shù)字電路中,信號經(jīng)過邏輯電路的過程就像數(shù)據(jù)在電路中流動,即信號從輸入流向輸出。當輸入變化時,總會在一定的時間后在輸出端呈現(xiàn)出效果。數(shù)據(jù)流描述就是模擬數(shù)字電路的這一特點。數(shù)據(jù)流描述一般使用連續(xù)賦值語句assign

實現(xiàn),主要用于實現(xiàn)組合邏輯電路。

連續(xù)賦值

連續(xù)賦值語句必須以assign開頭,其語法如下:

assign[延遲]wire型變量=表達式;

數(shù)據(jù)流描述實例

利用各種表達式及算術運算符,可以快速地設計復雜的數(shù)學和邏輯運算。例如

//利用數(shù)據(jù)流描述的4位加法器

moduleadder4

(input[3:0]a,input[3:0]b,inputcin,output[3:0]sum,outputcout);

assign{cout,sum}=a+b+cin;//直接用‘+’運算符進行加法運算

endmodule

數(shù)據(jù)流描述實例

//利用數(shù)據(jù)流描述構建的8×8乘法器

modulemultiplier_8×8

(input[7:0]a,input[7:0]b,output[15:0]p);assignp=a*b;endmodule

對于乘法操作,賦值語句左邊變量的位寬往往是右邊表達式各個操作數(shù)的位寬之和。防止左邊變量沒有足夠的位寬來存儲可能的最大乘法結果而造成的數(shù)據(jù)丟失。

行為描述直接根據(jù)電路的外部行為進行建模,而與硬件電路結構無關,這種建模方式稱為行為描述。行為建模從一個很高的抽象角度來表示電路,通過定義輸入-輸出響應的方式描述硬件行為。行為描述一般使用initial和always過程塊結構,其他所有的行為語句只能出現(xiàn)在這兩種過程結構語句里面。

initial用在仿真中。主要有以下兩種功能,一方面可以在仿真開始時對各變量進行初始化,這個初始化過程不需要任何仿真時間,即在0ns時間內,便可以完成初始化工作;另一方面可以用來生成激勵波形作為電路的測試仿真信號。VerilogHDL語言中,信號有兩種賦值方式

1、阻塞賦值(blocking),如b

=a; 2、非阻塞賦值(Non_Blocking),如b

<=a;always@(posedgeclk)

begin

b<=a;c<=b;

end

always@(posedgeclk)

begin

b=a;c=b;

end

always@(posedgeclk)

begin

b<=a;c<=b;

end

always@(posedgeclk)

begin

b=a;c=b;

end

阻塞賦值可以認為只有一個步驟的操作:

即計算RHS并更新LHS。所謂阻塞的概念是指,在同一個always塊中,后面的賦值語句是在前一句賦值語句結束后才開始賦值的。非阻塞賦值的操作過程可以看作兩個步驟: (1)賦值開始的時候,計算RHS; (2)賦值結束的時候,更新LHS。所謂非阻塞的概念是指,在計算非阻塞賦值的RHS以及更新LHS期間,允許其他的非阻塞賦值語句同時計算RHS和更新LHS。非阻塞賦值只能用于對寄存器類型的變量進行賦值,因此只能用在initial塊和always塊等過程塊中。根據(jù)邏輯功能的不同特點,可以將數(shù)字電路分成兩大類:

組合邏輯電路和時序邏輯電路。組合邏輯電路中,任意時刻的輸出僅僅取決于該時刻的輸入,與電路原來的狀態(tài)無關。時序邏輯電路中,任一時刻的輸出不僅取決于當時的輸入信號,而且還取決于電路原來的狀態(tài)?;蛘哒f還與以前的輸入有關,因此時序邏輯必須具備記憶功能。在描述組合邏輯的always塊中用阻塞賦值=,綜合成組合邏輯的電路結構;這種電路結構只與輸入電平的變化有關系。在描述時序邏輯的always塊中用非阻塞賦值<=,綜合成時序邏輯的電路結構;這種電路結構往往與觸發(fā)沿有關系,只有在觸發(fā)沿時才可能發(fā)生賦值的變化。注意:在同一個always塊中不要既用非阻塞賦值又用阻塞賦值!不允許在多個always塊中對同一個變量進行賦值!VerilogHDL語言提供了三種形式的if語句

判斷語句注意事項:三種形式的if語句中,在if后面都有“表達式”,其一般為邏輯表達式或關系表達式。

系統(tǒng)對表達式的值進行判斷,若為0,x,z,按“假”處理;若為1

按“真”處理,執(zhí)行指定的語句。

else子句不能作為語句單獨使用,它必須是if語句的一部分,與if配對使用。

在if和else后面可以包含一個內嵌的操作語句,也可以有多個操作語句,用begin和end這兩個關鍵詞將幾個語句包含起來形成一個復合塊語句。

判斷語句注意事項:允許一定形式的表達式簡寫方式。

if語句的嵌套是指在if語句中又包含一個或多個if語句

判斷語句注意事項:應當注意,if與else的配對關系,else總是與它上面的最近的if配對。如果if與else的

數(shù)目不一樣,為了實現(xiàn)程序設計者的意圖,可以用begin_end塊語句來確定配對關系。

條件case語句

case語句是一種多分支選擇語句。if語句只有兩個分支可供選擇,而實際問題中常常需

要用到多分支選擇,Verilog語言提供的case語句直接處理多分支選擇。

循環(huán)語句

在Verilog語言中存在著四種類型的循環(huán)語句,它們用來控制執(zhí)行語句的執(zhí)行次數(shù)。

1.forever連續(xù)的執(zhí)行語句。

2.repeat連續(xù)執(zhí)行一條語句n次。

3.while執(zhí)行一條語句直到某個條件不滿足,如果一開始條件即不滿足(為假),則語句一次也不能被執(zhí)行。

4.for通過以下三個步驟來決定語句的循環(huán)執(zhí)行。

a)先給控制循環(huán)次數(shù)的變量賦初值;

b)判定控制循環(huán)的表達式的值,如為假則跳出循環(huán)語句,如為真則執(zhí)行指定的語句后轉到c)步;

c)執(zhí)行一條賦值語句來修正控制循環(huán)變量次數(shù)的變量的值,然后返回b)步。

循環(huán)forever語句循環(huán)repeat語句循環(huán)while語句循環(huán)For語句disable語句一般情況下,循環(huán)語句都留有正常的出口用于退出循環(huán),但是有些特殊情況下,需要強制退出循環(huán),就可以使用disable語句。在使用disable強制退出循環(huán)時,必須給循環(huán)部分起個名字,起名的方法是在begin后面添加“:名字”。

disable語句任務與函數(shù)在Verilog語言中任務和函數(shù)提供了在一個描述中從不同位置執(zhí)行公共程序的能力,將一個大程序可以分解成較小程序,更容易閱讀和調試源文件描述。

任務與函數(shù)

任務如果傳給任務的變量值和任務完成后接收結果的變量已定義,就可以用一條語句啟動任務。任務可以啟動其它的任務,其它任務又可以啟動別的任務,可以啟動的任務數(shù)是沒有限制的。不管有多少任務啟動,只有當所有的啟動任務完成以后,控制才能返回。

任務的調用<任務名>(端口1,端口2,...,端口n);

函數(shù)函數(shù)的目的是返回一個表達式的值。

function<返回值的類型或范圍>(函數(shù)名);<端口說明語句><變量類型說明語句>begin<語句>........endendfunction函數(shù)

word=control?{getbyte(msbyte),getbyte(lsbyte)}:0;

函數(shù)的使用規(guī)則

邏輯仿真

邏輯仿真是邏輯驗證的一種方法,驗證是芯片設計過程中非常重要的一個環(huán)節(jié)。任何無缺陷的芯片都是驗證出來了,而不是設計出來的。驗證過程的準確和完備,在一定程度上決定了芯片的命運。

邏輯仿真工具

邏輯仿真工具

Testbench介紹

即測試平臺

在仿真的時候,Testbench用來產(chǎn)生測試激勵信號給待測試設計(DUT)同時檢查待測設計的輸出是否與預期一致,從而達到驗證設計功能的目的。

激勵信號

進行仿真激勵前,先對待測試設計進行實例化,實例化方法參照模塊調用方法。接下來進行仿真激勵編寫,快速掌握一些測試激勵的寫法是非常重要的,可以有效提高代碼的質量,減少錯誤產(chǎn)生,并能全面覆蓋測試信號。

實例化調用

在引用時既可以按照模塊定義的端口順序來連接,不用標明原模塊定義時規(guī)定的端口名,也可以在引用時采用“.”符號,這樣就不用完全按照模塊定義的端口順序來連接了,一般還是使用“.”來引用比較好,這樣邏輯比較清晰。激勵信號

時鐘信號產(chǎn)生

可調占空比時鐘信號產(chǎn)生

固定數(shù)目的時鐘脈沖產(chǎn)生

相移時鐘信號產(chǎn)生異步復位信號的產(chǎn)生

同步復位信號產(chǎn)生

同步復位波形圖

并行激勵信號的產(chǎn)生

系統(tǒng)自定義函數(shù)和任務

在編寫Testbench時,一些系統(tǒng)函數(shù)和系統(tǒng)任務可以幫助我們產(chǎn)生測試激勵,顯示調試信息,協(xié)助定位。

VerilogHDL語言中共有以下一些系統(tǒng)函數(shù)和任務:

$bitstoreal,$rtoi,$display,$setup,$finish,$skew,$hold,$setuphold,$itor,$strobe,$period,$time,$printtimescale,$timefoemat,$realtime,$width,$realtobits,$write,$recovery。在Verilog語言中,每個系統(tǒng)函數(shù)和任務前面都用一個標識符$來加以確認。

$display任務

$display任務

$display任務

$display任務

$finish任務和$stop任務

系統(tǒng)任務$finish的作用是退出仿真器,返回主操作系統(tǒng),也就是結束仿真過程。

$stop任務

$stop任務的作用是把EDA工具(例如仿真器)置成暫停模式,在仿真環(huán)境下給出一個交互式的命令提示符,將控制權交給用戶。

$readmemb和$readmemeh系統(tǒng)任務

1)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>);2)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>);3)$readmemb("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>,<結束地址>);4)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>);5)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>);6)$readmemh("<數(shù)據(jù)文件名>",<存儲器名>,<起始地址>,<結束地址>);$readmemb和$readmemeh系統(tǒng)任務補充說明

1)如果系統(tǒng)任務聲明語句中和數(shù)據(jù)文件里都沒有進行地址說明,則默認的存放

溫馨提示

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

評論

0/150

提交評論