廣工EDA數(shù)字邏輯第5章_第1頁
廣工EDA數(shù)字邏輯第5章_第2頁
廣工EDA數(shù)字邏輯第5章_第3頁
廣工EDA數(shù)字邏輯第5章_第4頁
廣工EDA數(shù)字邏輯第5章_第5頁
已閱讀5頁,還剩24頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、5.7 EDA開發(fā)綜合實(shí)例3:SmartDesign的使用在Libero中,除了可以編寫程序?qū)崿F(xiàn)相應(yīng)設(shè)計(jì)外,還可通過可視化操作方式(“SmartDesign”軟件),對(duì)現(xiàn)成的模塊進(jìn)行連線和拼裝,實(shí)現(xiàn)特定的功能。下例采用可視化方法實(shí)現(xiàn)1位全加器,再改造為2位串行進(jìn)位加法器,操作過程既有通過編寫代碼建立模塊,也有調(diào)用現(xiàn)成模塊,還有通過IP核創(chuàng)建實(shí)例模塊,并對(duì)多個(gè)模塊進(jìn)行拼裝和測(cè)試。5.7.1 使用半加器構(gòu)造全加器通過半加器來構(gòu)造全加器的方法在4.7.3中討論了,以下的模塊及其連接均基于圖4-24完成。1. 新建工程打開Libero IDE,選擇“Project”菜單的“New Project”命令

2、,輸入項(xiàng)目名稱、選擇項(xiàng)目存放路徑,選擇語言Verilog(如圖5-62所示)。設(shè)備的選擇同5.6中的實(shí)例2。2. 新建SmartDesign設(shè)計(jì)在“Project Manager”中點(diǎn)擊“SmartDesign”按鈕(如圖5-63),在彈出的對(duì)話框中輸入設(shè)計(jì)名稱,如圖5-64所示。工作區(qū)中會(huì)顯示打開了“adders”設(shè)計(jì)的畫布,但畫布是一片空白,如圖5-65所示。3. 添加半加器模塊點(diǎn)擊“Project Flow”切換回項(xiàng)目流程,點(diǎn)擊“HDL Editor”按鈕,輸入并新建Verilog程序文件。如圖5-66所示:在打開的文件中輸入半加器程序代碼,代碼同4.7.3中的半加器設(shè)計(jì)。/ halfa

3、dder.vmodule half_adder (S, C, A, B); input A, B; output S, C; xor gate1 (S,A,B); and gate2 (C,A,B);endmodule項(xiàng)目會(huì)把第一個(gè)建立的模塊或設(shè)計(jì)作為“根”(Root),并加粗顯示,如果項(xiàng)目中的根不是“adders”,則可在“Design Explorer”窗口中對(duì)著“adders”按右鍵,選擇“Set As Root”進(jìn)行修改。如圖5-68所示:4. 在設(shè)計(jì)中添加“半加器”模塊對(duì)著“half_adder”模塊右鍵,選擇“Instantiate in adders”,或者按著“half_add

4、er”模塊拖拽至“adders”的畫布(Canvas)上。重復(fù)操作兩次,在此需要兩個(gè)半加器來構(gòu)造全加器。操作如圖5-69所示:在圖中可看到,添加兩個(gè)模塊后,設(shè)計(jì)中自動(dòng)設(shè)定了模塊的實(shí)例化名稱(half_adder_0 和half_adder_1),直接雙擊可修改其實(shí)例名。5. 在設(shè)計(jì)中添加“或”模塊在“Catalog”窗口中,列出了Libero IDE提供的各種現(xiàn)成可使用的IP核,包括宏單元(Actel Macros)、基本塊(Basic Blocks)等。在搜索欄輸入“or2”(也可直接在“Actel Macros”列表中找),可找到在此需要用到的“or2”宏單元(即2輸入“或”門)。點(diǎn)擊右鍵

5、,選擇“Instantiate in adders”,或者通過拖拽操作,添加至“adders”的畫布(Canvas)上(如圖5-70所示)。6. 連線到頂層整個(gè)畫布就是一個(gè)“芯片”的設(shè)計(jì),而剛才添加的模塊只是該“芯片”的內(nèi)部零件,故需要定義這些子模塊中哪些端口是連接到整個(gè)設(shè)計(jì)的對(duì)外(輸入/輸出)端口上。對(duì)著“half_adder_0”模塊的“A”端口按右鍵,選擇“Promote to Top Level”(如圖5-71),可把該子模塊的端口連接至頂層。通過類似操作,將“half_adder_0”模塊的“B”端口、“half_adder_1”的“B”端口“half_adder_1”的“S”端口、

6、“or2_0”模塊的“Y”端口連接到頂層。由于“half_adder_0” 和“half_adder_1”都有名為“B”的端口,故連接到頂層時(shí)會(huì)有命名上的沖突,如圖5-72所示為彈出的對(duì)話框,如果選擇“是”,則連接到一個(gè)新的端口,系統(tǒng)自動(dòng)給這個(gè)端口改名(如“B_0”),如果選擇“否”,就會(huì)將“half_adder_0” 和“half_adder_1”的“B”端口都連接到同一個(gè)對(duì)外的頂層端口上。可修改端口的名稱,對(duì)著要修改的端口名按右鍵,選擇“Modify Port”(或直接雙擊),輸入新的端口名稱(如圖5-73所示)。連接并修改端口名后的結(jié)果如圖5-74所示:7. 進(jìn)行內(nèi)部連線選擇“half_

7、adder_0” 的“S”端口,按下“Ctrl”鍵同時(shí),點(diǎn)擊選擇“half_adder_1”的“A”端口,同時(shí)選中了兩個(gè)端口,點(diǎn)擊右鍵,選擇“Connect”命令,就可把這兩個(gè)選中的端口進(jìn)行連線。如圖5-75所示:用同樣的方法,把“half_adder_0” 的“C”端口與“or2_0” 的“A”端口、“half_adder_1” 的“C”端口與“or2_0” 的“B”端口進(jìn)行連接。模塊的布局看起來可能會(huì)比較亂,連線可能會(huì)產(chǎn)生視覺上的重疊,可調(diào)整各模塊的位置達(dá)到較好的顯示效果,如圖5-76所示:8. 規(guī)則檢查選擇“SmartDesign”菜單的“Check Design Rules”命令,工具

8、會(huì)自動(dòng)檢查設(shè)計(jì)是否存在問題(如還有端口沒有進(jìn)行連接等),如果發(fā)現(xiàn)問題,按照檢查結(jié)果的提示進(jìn)行修正。至此,一個(gè)全加器的設(shè)計(jì)已完成。5.7.2 與現(xiàn)有的全加器對(duì)比在5.5綜合實(shí)例1中,已經(jīng)設(shè)計(jì)了全加器的模塊并保存在磁盤中(“Fadd1.v”文件),在此可調(diào)用原來已經(jīng)完成的模塊,將兩種設(shè)計(jì)思路都放到設(shè)計(jì)中,一起進(jìn)行驗(yàn)證并對(duì)結(jié)果進(jìn)行對(duì)比。1. 導(dǎo)入全加器模塊在“File”菜單運(yùn)行“Import Files”命令(如圖5-77),找到已保存了的全加器設(shè)計(jì)文件“Fadd1.v”,點(diǎn)擊“Import”按鈕導(dǎo)入文件(如圖5-78)。導(dǎo)入文件后,Libero IDE會(huì)復(fù)制該文件到項(xiàng)目文件夾的“/ hdl”子文件

9、夾下,對(duì)該文件中的代碼進(jìn)行改動(dòng),不會(huì)影響原文件。/ Fadd1.v module FA_behav2(A,B,Cin,Sum,Cout);input A,B,Cin;output Sum,Cout;reg Sum,Cout;always(A or B or Cin) beginCout,Sum=A+B+Cin; / 使用拼接運(yùn)算符endendmodule5.5中的文件,也可用這里的代碼2. 添加全加器模塊到設(shè)計(jì)中導(dǎo)入文件后,該模塊會(huì)顯示在項(xiàng)目層次結(jié)構(gòu)圖中,如圖5-79所示:選擇“FA_behav2”模塊,添加到“adders”設(shè)計(jì)中(實(shí)例化),層次結(jié)構(gòu)也會(huì)發(fā)生變化,如圖5-80所示:3. 連線

10、由于“FA_behav2”模塊是一個(gè)獨(dú)立的整體,不需要進(jìn)行內(nèi)部連線,故全部端口都連接到頂層設(shè)計(jì)。為了對(duì)比兩個(gè)設(shè)計(jì),將“FA_behav2_0”實(shí)例的輸入(A,B,Cin)與“全加器1”(半加器組裝的)的輸入都接到同一個(gè)端口(DataA,DataB,Cin),輸出端口直接接到頂層設(shè)計(jì),如圖5-81所示:注:在圖5-81中,由于全加器1是由多個(gè)部件組裝而成,為了更好的顯示效果,加入了一個(gè)長方體和文字,這些元素可在畫布內(nèi)添加,而不會(huì)影響原來的設(shè)計(jì)。4. 生成設(shè)計(jì)選擇“SmartDesign”菜單的“Check Design Rules”命令,提示“Design Rules Check of Smar

11、tDesign adders found no errors and no warnings”表示檢查無誤。選擇“SmartDesign”菜單的“Generate Design”命令(如圖5-82所示),或者對(duì)著畫布區(qū)按右鍵,選擇“Generate Design”命令。提示“Design adders was successfully generated”表示生成成功。5. 編寫測(cè)試平臺(tái)點(diǎn)擊“Project Flow”切換回項(xiàng)目流程,點(diǎn)擊“HDL Editor”按鈕,在打開的對(duì)話框中選擇“HDL Stimulus File”,輸入測(cè)試平臺(tái)的文件名,如圖5-83所示:在打開的文件中輸入以下代碼:

12、timescale 1ns/1ns module testbench; reg pa,pb,pCin; wire Sum1,Cout1,Sum2,Cout2;adders testadders(.DataA(pa),.DataB(pb),.Cin(pCin), .Sum1(Sum1),.Cout1(Cout1),.Sum2(Sum2),.Cout2(Cout2); / 3個(gè)輸入,4個(gè)輸出 initial begin pa=0;pb=0;pCin=0; #5 pCin=1; #5 pb=1; #5 pCin=0; #5 pa=1; #5 pCin=1; #5 pb=0; #5 pCin=0; #

13、5;$finish; endendmodule6. 選項(xiàng)配置點(diǎn)擊“Project Flow”切換回項(xiàng)目流程,對(duì)著“Simulation”按鈕按右鍵,在彈出的菜單中選擇“Options”,配置好測(cè)試平臺(tái)模塊名稱及頂層實(shí)例名。如圖5-84所示:僅僅配置這個(gè)還不夠,還要用右鍵點(diǎn)擊“adders”設(shè)計(jì),選擇“Organize Stimulus”(如圖5-85所示);在彈出的窗口中選擇左邊窗口中來源為“User”的激勵(lì)文件“testbench.v”,點(diǎn)擊“Add”按鈕添加到右邊窗口中,并點(diǎn)擊“OK”(如圖5-86所示)。讀者不禁奇怪,為什么會(huì)有兩個(gè)“testbench.v”,還需額外進(jìn)行配置才能進(jìn)行仿真

14、呢?那是因?yàn)樵诒緋roject中調(diào)用了Actel提供的宏單元(or2),Libero會(huì)自動(dòng)提供一個(gè)“testbench.v”文件,而恰好用戶在此也用了“testbench.v”作為測(cè)試平臺(tái)的文件名,故有兩個(gè)“testbench.v”文件,一個(gè)來源是User(用戶),一個(gè)來源是adders。7. 功能仿真在“Project Flow”中,點(diǎn)擊“Simulation”按鈕,進(jìn)行功能仿真(綜合前仿真),仿真結(jié)果如圖5-87所示:說明:(1) 由于測(cè)試平臺(tái)中有“$finish”操作,故仿真結(jié)束時(shí)會(huì)提示是否結(jié)束“Are you sure you want to finish?”,在此不要選擇“是”,否則

15、ModelSim軟件將退出。(2) 在波形結(jié)果中,兩個(gè)全加器采用相同的輸入(pa,pb,pCin),分別產(chǎn)生不同的輸出(“Sum1”,“Cout1”為“全加器1”的輸出,“Sum2”,“Cout2”為“FA_behav2”的輸出)8. 綜合結(jié)果對(duì)設(shè)計(jì)進(jìn)行綜合,RTL視圖如圖5-88所示:接下來操作包括綜合后仿真、布局布線等,實(shí)現(xiàn)步驟與5.6的綜合實(shí)例2相同,在此不作贅述。5.7.3 改造為2位串行進(jìn)位加法器1. 設(shè)計(jì)結(jié)構(gòu)圖在第二章(2.3.5)中,討論了如何通過1位全加器構(gòu)造多位串行進(jìn)位加法器,圖2-42是一個(gè)4位的串行進(jìn)位加法器,稍作刪改,可得到如圖5-89所示的2位串行進(jìn)位加法器。在此可將

16、現(xiàn)有的2個(gè)全加器拼裝為2位的串行進(jìn)位加法器,。2. 連線并修改端口名稱按照?qǐng)D5-89對(duì)“adders”設(shè)計(jì)進(jìn)行改造,更改端口連線及端口名稱為如圖5-90所示的結(jié)構(gòu)。3. 保存并生成設(shè)計(jì)選擇“File”菜單的“Save adders As”命令,將設(shè)計(jì)另存為“adder_2”。選擇“SmartDesign”菜單的“Generate Design”命令,或者對(duì)著畫布區(qū)按右鍵,選擇“Generate Design”命令,生成設(shè)計(jì)。4. 編寫測(cè)試平臺(tái)新建測(cè)試平臺(tái),保存文件為“testbench2.v”。代碼如下:timescale 1ns/1ns module testbench2; reg a0,b

17、0,a1,b1,cin; integer i; wire s0,s1,cout;adder_2 testadder_2(.A0(a0),.B0(b0),.A1(a1),.B1(b1),.Cin(cin),.S0(s0),.S1(s1),.Cout(cout); initial begin for(i=0;i<32;i=i+1) begin a0,a1,b0,b1,cin=i; #5; end #5;$finish; endendmodule5. 選項(xiàng)配置由于新建了另一個(gè)設(shè)計(jì)和測(cè)試平臺(tái),故須調(diào)整若干的選項(xiàng)設(shè)置:設(shè)置“adder_2”為根,設(shè)置方法跟前面是一致的,如圖5-91所示:配置測(cè)試平

18、臺(tái)文件,對(duì)著“adder_2”模塊按右鍵,選擇“Organize Stimulus”(如圖5-92所示),把“testbench2.v”文件加到測(cè)試平臺(tái)關(guān)聯(lián)項(xiàng)中(如圖5-93所示)。點(diǎn)擊“Project Flow”切換回項(xiàng)目流程,對(duì)著“Simulation”按鈕按右鍵,在彈出的菜單中選擇“Options”,配置好測(cè)試平臺(tái)模塊名稱及頂層實(shí)例名。如圖5-94所示:6. 功能仿真功能仿真結(jié)果如圖5-95所示:波形說明:(1) a1,a0表示兩位輸入數(shù)據(jù),如“a1=1,a0=0”,則相當(dāng)于輸入兩位“A1:0=2'b10”;(2) 同理,b1,b0可理解為“B1:0”,s1,s0可理解為“S1:

19、0”,計(jì)算的內(nèi)容相當(dāng)于“cout,S1:0=A1:0 + B1:0+cin”;(3) 由于是串行進(jìn)位,仿真結(jié)果中考慮了延遲因素,出現(xiàn)了毛刺。7. 綜合結(jié)果綜合結(jié)果如圖5-96所示:5.7.4 調(diào)用IP核創(chuàng)建2位串行進(jìn)位加法器前面是通過拼裝的方式實(shí)現(xiàn)2位串行進(jìn)位加法器,只是為了說明SmartDesign的使用方法,并不是最佳的實(shí)現(xiàn)方法。在Libero IDE中,可以通過現(xiàn)成的模塊非常方便地創(chuàng)建多種功能模塊:在Catalog窗口中列出了Actel公司提供的多種IP核,從簡單的宏單元(基本門等)、中規(guī)模的基本塊(加法器、編碼器等)、總線接口,到大規(guī)模的DSP、處理器等都可以提供使用(如圖5-97所示

20、)。1. 創(chuàng)建新核并實(shí)例化選擇“Basic Blocks”下的“Adder”,按右鍵選擇“Instantiate in adders”(Libero 9.1版本菜單改為“Configure core”)),或直接雙擊,出現(xiàn)如圖5-98所示的對(duì)話框。 “Ripple”是代表串行進(jìn)位,“Width”中最小是2位,代表所創(chuàng)建加法器的位數(shù),“Carry In”和“Carry out”中選擇“Active High”表示進(jìn)位輸入/出高電平為1。點(diǎn)擊“Generate”按鈕,出現(xiàn)如圖5-99的對(duì)話框,輸入新建核的名稱。該核顯示在項(xiàng)目層次結(jié)構(gòu)圖中,可將其實(shí)例化到畫布中,如圖5-100所示:模塊建立成功,需要

21、更改加法器的位寬和其它參數(shù),只需對(duì)著“Core_adder”核按右鍵,選擇“Open Component”命令(或直接雙擊)即可,非常方便。2. 連線由于該核的端口采用多位向量形式,不能直接與原來的端口進(jìn)行連接,是否需要改寫測(cè)試平臺(tái)才能進(jìn)行仿真測(cè)試?可以通過如下方法,將多位向量形式的端口按每一位單獨(dú)進(jìn)行連線操作:選擇“SmartDesign”菜單的“Show Grid View”命令,出現(xiàn)如圖5-101的表格,該表中列出了所有實(shí)例的端口連接情況。因?yàn)樾枰研略龅摹癈ore_adder_0”的“DataA”端口分成兩個(gè)單獨(dú)的位端口以便連接,故對(duì)著“DataA”右鍵,選擇“Expand to Bi

22、t Ports”,如圖5-102所示。 “DataA”端口前出現(xiàn)一個(gè)加號(hào),點(diǎn)擊展開后,選擇其中的1位行,“adder_2”列的下拉菜單,可選擇“adder_2”實(shí)例的各個(gè)端口,在此選擇“A1”端口(如圖5-103所示)。端口前面的“I”標(biāo)志表示輸入端口,“O”標(biāo)志表示輸出端口。用同樣的操作方法,把“DataA”端口的0位連接到“adder_2”的“A0”端口。點(diǎn)擊“Canvas”切換回畫布視圖,可看到如圖5-104所示的連接效果。從圖中可看到,A1和A0同時(shí)連接到不同的實(shí)例上了,但顯示效果不好,也看不出DataA每位的具體連接情況。可點(diǎn)擊DataA前面的加號(hào),展開DataA端口的各位,顯示效果

23、就好多了(如圖5-105所示)。再進(jìn)行以下連線操作:l 通過“Grid”視圖,將“DataB”端口的0位連接到“adder_2”的“B0”端口;l 通過“Grid”視圖,將“DataB”端口的1位連接到“adder_2”的“B1”端口;l 將“Cout”端口連接到頂層,端口命名為“Core_Cout”;l 將“Sum1:0”端口連接到頂層,端口命名為“Core_Sum”,系統(tǒng)自動(dòng)顯示為“Core_Sum1:0”連接結(jié)果如圖5-106所示:3. 保存并生成設(shè)計(jì)選擇“File”菜單的“Save adders As”命令,將設(shè)計(jì)另存為“adder_3”。選擇“SmartDesign”菜單的“Gene

24、rate Design”命令,或者對(duì)著畫布區(qū)按右鍵,選擇“Generate Design”命令,生成設(shè)計(jì)。4. 編寫測(cè)試平臺(tái)在前面例子的基礎(chǔ)上編寫測(cè)試平臺(tái),輸入端口沒有變化,輸出端口多了兩個(gè),故只需增加輸出端口的連接即可。該文件保存為“testbench3.v”。timescale 1ns/1ns module testbench3; reg a0,b0,a1,b1,cin; integer i; wire s0,s1,cout,core_cout; wire1:0 core_sum;adder_3 testadder_3(.A0(a0),.B0(b0),.A1(a1),.B1(b1),.Cin(cin), .S0(s0),.S1(s1),.Cout(cout),.Core_Cout(core_cout),.Core_Sum(core_sum); initial begin for(i=0;i<32;i=i+1) begin a0,a1,b0,b1,cin=i; #5; end #5;$finish; endendmodule5. 選項(xiàng)配置與上一例子的操作相同,修改以下設(shè)置:首先,設(shè)置“adder_

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論