




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章系統(tǒng)仿真5.1ModelSim軟件的安裝及簡(jiǎn)介5.2在ISE中調(diào)用ModelSim5.3在ModelSim中進(jìn)行仿真5.4基于IPCore的FIFO仿真實(shí)例小結(jié)習(xí)題實(shí)驗(yàn)項(xiàng)目5.1ModelSim軟件的安裝及簡(jiǎn)介5.1.1ModelSim軟件的安裝首先從MentorGraphics官方網(wǎng)(/)注冊(cè)下載ModelSim評(píng)估版或購(gòu)買完全版,也可以到Xilinx官方網(wǎng)站注冊(cè)下載ModelSimXE版本,然后雙擊setup.exe文件,啟動(dòng)ModelSim安裝向?qū)нM(jìn)行安裝。首先根據(jù)向?qū)崾具x擇(完全版)或者(評(píng)估版),然后根據(jù)向?qū)崾具x擇安裝路徑,軟件安裝完成后會(huì)彈出授權(quán)向?qū)А綥icenseWizard】窗口,在該窗口中單擊按鈕,彈出授權(quán)文件加載窗口【LicenseFileLocation】,在該窗口中單擊按鈕加載授權(quán)文件。然后點(diǎn)擊按鈕,向?qū)崾臼跈?quán)文件加載成功,軟件就可以使用了。若沒有成功安裝授權(quán)文件,啟動(dòng)Modelsim時(shí)會(huì)提示“Unablecheckoutalicense”(沒有檢測(cè)到授權(quán)文件)的提示信息,此時(shí)可通過從Windows桌面單擊任務(wù)欄【開始】→【程序】→【Modelsim6.2SE】→【LicenseWizard】命令,彈出【LicenseWizard】窗口對(duì)授權(quán)文件進(jìn)行加載,如圖5.1所示。圖5.1授權(quán)文件加載窗口5.1.2ModelSim窗口簡(jiǎn)介
ModelSim仿真工具有一個(gè)隨著ModelSim的啟動(dòng)而打開的主窗口和多個(gè)子窗口(如圖5.2所示):源程序窗口、進(jìn)程(ActiveProsess)窗口、數(shù)據(jù)流(dataflow)窗口、波形(wave)窗口、列表(list)窗口、對(duì)象(Objects)窗口和監(jiān)視(Watch)窗口等。打開ModelSim仿真工具,單擊主窗口工具欄上的【View】命令,在彈出頁(yè)中勾選相應(yīng)的子窗口選項(xiàng)即可看到對(duì)應(yīng)的子窗口。每個(gè)子窗口右上角的按鈕,可以將其鎖定在主窗口中或解除與主窗口的鎖定,解鎖后可以單獨(dú)對(duì)該子窗口進(jìn)行操作。圖5.2ModelSim的窗口
下面介紹ModelSim中的主窗口和幾個(gè)常用的子窗口:
(1)主窗口:它是所有其它窗口運(yùn)行的基礎(chǔ),包含工作(Workspace)區(qū)和腳本(Transcript)區(qū)。當(dāng)【Transcript】區(qū)中顯示設(shè)計(jì)加載提示符“ModelSim>”時(shí),在當(dāng)前狀態(tài)下能瀏覽幫助編輯庫(kù)、編輯源代碼;當(dāng)設(shè)計(jì)導(dǎo)入后,【Transcript】區(qū)顯示提示符“VSIM>”,可以顯示仿真器的行為動(dòng)作,如命令、信息、聲明等?!網(wǎng)orkspace】區(qū)的視圖數(shù)量在不同的仿真流程中會(huì)有所不同,包括庫(kù)文件(Library)視圖、文件(Files)視圖、數(shù)據(jù)集合(sim)視圖、工程(Project)視圖、存儲(chǔ)(Memories)視圖,每種仿真流程中都有庫(kù)文件視圖,它顯示了當(dāng)前工作庫(kù)包含的所有設(shè)計(jì)單元信息。
(2)源程序窗口:該窗口是編輯源程序的地方,窗口視窗左上角顯示源程序的路徑和名稱。在此窗口中可以設(shè)置斷點(diǎn),用于調(diào)試。設(shè)置了斷點(diǎn)后該行前面會(huì)有一個(gè)紅色圓指示,取消斷點(diǎn)后變?yōu)榭招幕疑甘?。也可以查找或?biāo)注某一個(gè)待查信號(hào),標(biāo)注后該行前面會(huì)有一個(gè)圓圈指示。
(3)進(jìn)程【ActiveProsess】窗口:該窗口顯示了仿真中用到的所有進(jìn)程的列表。選擇【View】→【DebugWindows】→【Active】菜單命令,可以在該窗口顯示當(dāng)前工程中的全部進(jìn)程。每一個(gè)進(jìn)程都有<Ready>、<Wait>和<Done>?三個(gè)不同的狀態(tài)。
●?<Ready>:表示這個(gè)進(jìn)程將在當(dāng)前的計(jì)算機(jī)能分辨最短時(shí)間內(nèi)被執(zhí)行。
●?<Wait>:表示進(jìn)程正在等待VHDL信號(hào)或者Verilog網(wǎng)表和信號(hào)的變化。
●?<Done>:表示進(jìn)程正在執(zhí)行等待語(yǔ)句。
(4)對(duì)象【Objects】窗口:該窗口主要用來選擇要查看的信號(hào)。在仿真時(shí),可以將此窗口中的信號(hào)拖動(dòng)到待導(dǎo)入的窗口,或者在此窗口中選中需要查看的信號(hào),然后右擊,選擇待導(dǎo)入的窗口。如將信號(hào)導(dǎo)入到【wave】窗口,首先在【Objects】窗口中右擊待查看的信號(hào),選擇【AddtoWave】選項(xiàng),然后單擊【SelectedSignals】二級(jí)選項(xiàng)就可將待觀察的信號(hào)導(dǎo)入到【wave】窗口中,也可以如圖5.3所示單擊工具欄上【Add】→【W(wǎng)ave】→【SelectedSignals】完成同樣的操作。每個(gè)窗口導(dǎo)入選項(xiàng)下都有【SelectedSignals】、【SignalsinRegion】和【SignalsinDesign】三個(gè)二級(jí)選項(xiàng)?!維electedSignals】指【Objects】窗口中被選中的信號(hào);【SignalsinRegion】指【Objects】窗口中所有的信號(hào);【SignalsinDesign】指當(dāng)前設(shè)計(jì)中所有端口信號(hào)。另外,【Objects】窗口中的信號(hào)列表將根據(jù)【W(wǎng)orkspace】區(qū)【sim】視圖中設(shè)計(jì)層次的變化而發(fā)生變化。另外,在【Objects】窗口右擊某信號(hào),選擇【Force…】選項(xiàng),在彈出的【ForceSelectedSignal】對(duì)話框中根據(jù)需要可以強(qiáng)制改變信號(hào)的值,如圖5.3所示。圖5.3對(duì)象窗口
(5)列表【list】窗口:該窗口使用表格的形式顯示仿真的結(jié)果。窗口被分為左右兩個(gè)部分,左邊為仿真運(yùn)行時(shí)間以及仿真的Delta時(shí)間,右邊為信號(hào)列表,如圖5.4所示。向【list】窗口中導(dǎo)入信號(hào)有如下方法:
●?從【Objects】窗口、【W(wǎng)orkspace】區(qū)的【sim】視圖、【wave】窗口或【dataflow】窗口中選中信號(hào)并拖動(dòng)到【list】窗口中。
●?在【W(wǎng)orkspace】區(qū)的【sim】視圖或【Objects】窗口中選中被觀察信號(hào),然后右擊選擇【AddtoList】選項(xiàng)或者單擊主窗口中工具欄上【Add】→【AddtoList】選項(xiàng)下的【SelectedSignals】、【SignalsinRegion】或【SignalsinDesign】某一選項(xiàng)可以將待觀察的信號(hào)導(dǎo)入到【list】窗口中。圖5.4列表窗口
(6)波形【wave】窗口:在【wave】窗口可以查看仿真的波形文件,如圖5.5所示,【wave】窗口中的豎線是光標(biāo)?!緒ave】窗口從左到右分為三個(gè)不同的區(qū)域,分別用來顯示信號(hào)名稱及路徑、光標(biāo)處的信號(hào)值和波形?!緒ave】窗口導(dǎo)入數(shù)據(jù)的方法與【list】窗口類似,該窗口可以使用【Add】→【Divider】命令將數(shù)據(jù)分為多個(gè)組,也可以使用【Add】→【W(wǎng)indowPane】命令分為多個(gè)窗口,以便于信號(hào)分析,所有信號(hào)可以在多個(gè)窗口和區(qū)域之間進(jìn)行拷貝、復(fù)制和移動(dòng)等。如圖5.5中的【wave】窗口被一條橫穿窗口的橫線分為上下兩個(gè)窗口,且上面窗口右邊的信號(hào)列表被分為兩組。在【wave】窗口中可以直觀地對(duì)信號(hào)進(jìn)行分析。●?拖曳光標(biāo),會(huì)出現(xiàn)一粗一細(xì)兩條光標(biāo),在兩條光標(biāo)間顯示仿真的相對(duì)時(shí)間。
●?單擊工具欄上的或按鈕,光標(biāo)移動(dòng)到被選信號(hào)鄰近的下降沿或上升沿。
●?激活工具欄上的按鈕,在【wave】窗口的波形上進(jìn)行拖曳,可對(duì)被選區(qū)域放大。
●?工具欄上的【Tools】命令可實(shí)現(xiàn)信號(hào)波形比較【W(wǎng)aveformCompare】、設(shè)置斷點(diǎn)【Breakpoints…】以及進(jìn)行信號(hào)分組【Group…】等。圖5.5波形窗口
(7)數(shù)據(jù)流窗口【dataflow】:通過該窗口可以跟蹤設(shè)計(jì)中的物理連接、設(shè)計(jì)中事件的傳播、寄存器、網(wǎng)線等,如圖5.6所示。在【dataflow】窗口中可以顯示進(jìn)程、信號(hào)、網(wǎng)線和寄存器等,也可以顯示設(shè)計(jì)中的內(nèi)部連接。向該窗口中導(dǎo)入信號(hào)的方法與【list】窗口類似,雙擊【wave】窗口中任何一個(gè)信號(hào)波形也可將信號(hào)導(dǎo)入到【dataflow】窗口。圖5.6數(shù)據(jù)流窗口5.1.3ModelSim的使用方式
單獨(dú)使用ModelSim有兩種方式:基本方式和工程方式。
1.基本方式
基本方式的仿真步驟:首先建立仿真庫(kù),編譯源代碼,然后啟動(dòng)仿真器,執(zhí)行仿真。
(1)建立仿真庫(kù)。
為了便于文件管理,建立庫(kù)前首先要改變庫(kù)的路徑。在ModelSim主窗口中選擇【File】→【ChangeDirectory】,選擇庫(kù)將要存放的路徑,然后在主窗口中選擇【File】→【New】→【Library…】命令,彈出如圖5.7所示對(duì)話框,輸入仿真庫(kù)的名字,默認(rèn)為“work”。這個(gè)操作相當(dāng)于在命令控制臺(tái)輸入“vlibwork”或“vmapworkwork”命令。圖5.7新建一個(gè)庫(kù)
(2)編譯源代碼。
在主窗口中選擇【Compile】→【Compile…】,彈出如圖5.8所示對(duì)話框。選擇庫(kù)名“work”,然后選擇已編寫好的一個(gè)或者多個(gè)VerilogHDL文件,單擊按鈕進(jìn)行編譯。此處選用ModelSim安裝目錄下【examples\tutorials\verilog\basicSimulation】中的源程序counter.v。counter.v是ModelSim安裝自帶的示例文件,可以實(shí)現(xiàn)八位二進(jìn)制計(jì)數(shù)器功能。如果編譯通過,就會(huì)在“work”庫(kù)中出現(xiàn)導(dǎo)入的模塊,否則在【transcript】區(qū)中就會(huì)出現(xiàn)某個(gè)文件編譯不能通過的提示信息,以及錯(cuò)誤的原因和源程序代碼的行號(hào)。雙擊提示信息后將彈出源程序窗口且提示的錯(cuò)誤行被標(biāo)注,根據(jù)錯(cuò)誤提示信息,修改源程序后重復(fù)編譯步驟直到該文件通過編譯為止。圖5.8選擇要編譯的文件
(3)啟動(dòng)仿真器。
編譯通過后就可對(duì)導(dǎo)入的模塊進(jìn)行仿真,測(cè)試該模塊邏輯功能是否正確實(shí)現(xiàn)八位二進(jìn)制計(jì)數(shù)器功能。首先須對(duì)其編寫測(cè)試激勵(lì)(test_bencher)文件,測(cè)試文件編譯通過后就可以進(jìn)行仿真了。此處我們選擇ModelSim安裝目錄下“examples\tutorials\verilog\basicSimulation”文件夾中的測(cè)試激勵(lì)文件tcounter.v,按上一步的方法將激勵(lì)文件編譯后,雙擊結(jié)構(gòu)窗口中的“tset_counter”模塊或者單擊工具欄上的按鈕,或者在主窗口中選擇【Simulate】→【StartSimulation…】命令,彈出如圖5.9所示窗口,選擇要仿真的test_counter模塊,然后單擊按鈕把該模塊導(dǎo)入到庫(kù)中,啟動(dòng)仿真器進(jìn)入下一步。圖5.9輸入待仿真的模塊
(4)運(yùn)行仿真。
在如圖5.10所示的仿真器中就可以在【W(wǎng)orkspace】區(qū)的【sim】視圖中看到仿真模塊的結(jié)構(gòu)圖,其中test_counter單元調(diào)用了由counter.v模塊例化的單元dut。此時(shí)可先右擊待觀察的模塊,然后將其添加到【wave】窗口、【dataflow】窗口或者【list】窗口中。也可以在【Objects】窗口中對(duì)某個(gè)需要觀察的信號(hào)拖入或者右擊,將其導(dǎo)入到【wave】窗口、【dataflow】窗口或者【list】窗口。圖5.10將仿真單元導(dǎo)入到【wave】窗口
(5)功能分析。
運(yùn)行仿真后,在【wave】窗口就會(huì)看到需要觀察的信號(hào)的功能仿真波形,如圖5.11所示。分析波形文件和主窗口的輸出結(jié)果,由圖5.11可以判斷counter計(jì)數(shù)器的功能是正確的,這樣就完成了基本的邏輯功能驗(yàn)證。如果在其它設(shè)計(jì)中仿真功能不正確,必須返回檢查并修改源程序后重新仿真。圖5.11功能仿真結(jié)果
2.工程方式
工程方式的仿真步驟:首先建立工程,添加源文件,然后編譯并導(dǎo)入測(cè)試文件,執(zhí)行仿真。
(1)建立工程。
啟動(dòng)ModelSim,在主窗口中選擇【File】→【New】→【Project】命令,彈出新建工程【CreateProject】窗口,如圖5.12所示。在【ProjectName】欄輸入工程名“counter”,在【ProjectLocation】欄中單擊按鈕設(shè)置工程存放路徑,默認(rèn)庫(kù)名(DefaultLibraryName)為“work”,單擊按鈕,進(jìn)入下一步操作。圖5.12建立工程窗口
(2)添加源文件。
在彈出的對(duì)話框中選擇【AddExistingFile】命令,彈出向工程中添加已有文件【AddfiletoProject】對(duì)話框,如圖5.13所示。單擊按鈕,選擇需要添加的文件,此處導(dǎo)入和前面基本方式仿真相同的counter.v和tcounter.v兩個(gè)文件。在對(duì)話框中可以選擇【Referencefromcurrentlocation】或者【Copytoprojectdirectory】單選框。選擇【Referencefromcurrentlocation】是將源文件存儲(chǔ)在當(dāng)前的目錄下,不復(fù)制源文件;選擇【Copytoprojectdirectory】是將源文件復(fù)制后,存儲(chǔ)在當(dāng)前的工程目錄下。單擊按鈕,完成源文件添加后,可在【W(wǎng)orkspace】區(qū)的【Library】視圖中看到添加進(jìn)來的counter.v和tcounter.v文件。圖5.13添加文件到工程窗口
(3)編譯。
在工程標(biāo)簽的任意位置右擊,選擇【Compile】→【Compileall】將工程中所有文件進(jìn)行編譯,編譯成功后,在【Transcript】區(qū)中出現(xiàn)仿真成功提示信息。
(4)執(zhí)行仿真。
在【Library】視圖中展開work,雙擊測(cè)試模塊“test_counter”,啟動(dòng)仿真器,在【W(wǎng)orkspace】區(qū)啟動(dòng)【sim】視圖,如圖5.14所示,然后將信號(hào)加載進(jìn)【wave】或其它待分析的窗口,運(yùn)行仿真,最后分析窗口或腳本區(qū)中的信號(hào),判斷功能是否正確。圖5.14啟動(dòng)仿真窗口 5.2在ISE中調(diào)用ModelSim
5.2.1建立仿真環(huán)境
1.設(shè)置仿真接口
ModelSim是一個(gè)獨(dú)立的仿真工具,ISE集成環(huán)境并沒有集成ModelSim仿真工具,但預(yù)留了仿真軟件接口,通過這個(gè)接口可以直接從ISE中啟動(dòng)ModelSim。這個(gè)接口可以在工程屬性窗口中進(jìn)行設(shè)置:?jiǎn)?dòng)ISE集成開發(fā)環(huán)境后,單擊【Edit】→【Preference…】打開屬性對(duì)話框,在屬性對(duì)話框中單擊【ISEGeneral】→【IntegratedTools】,在【ModelTechSimulator】欄中正確填寫仿真工具的安裝路徑,如圖5.15所示。單擊按鈕,關(guān)閉屬性對(duì)話框。圖5.15第三方工具接口設(shè)置
2.仿真庫(kù)的命名
ISE和ModelSim是兩個(gè)可以單獨(dú)使用的軟件,在ISE環(huán)境中啟動(dòng)ModelSim前需要做一些準(zhǔn)備工作,下面我們介紹有關(guān)仿真庫(kù)的一些知識(shí)。
ModelSim有很多不同的版本,如Xilinx公司使用的ModelSim為ModelSimXE的OEM版,這樣的版本含有該公司的仿真庫(kù),只支持該公司器件的仿真,不需要建立仿真庫(kù),直接使用就可以了。但對(duì)于ModelSimSE\PE版,它沒有任何公司的FPGA/CPLD仿真庫(kù),沒有添加仿真庫(kù)就只能進(jìn)行功能仿真,所以在使用之前要建立相應(yīng)的仿真庫(kù)。在Modesim中編譯Xilinx器件的仿真庫(kù)時(shí),需要添加Simprims、Unisims、Xilinxcorelib三個(gè)庫(kù)。Simprim用于布局布線后的仿真;Unisim用于綜合后的仿真;如果設(shè)計(jì)中調(diào)用了CoreGen產(chǎn)生的IPCore,則還需要編譯Xilinxcorelib庫(kù)。仿真庫(kù)的命名可以是任意的,但是如果在ISE集成環(huán)境中啟動(dòng)仿真器,VerilogHDL仿真庫(kù)的名字必須命名為Xilinxcorelib_ver、Simprims_ver和Unisims_ver,分別對(duì)應(yīng)ISE安裝目錄【verilog\src】下的Xilinxcorelib、Simprims和Unisims等三個(gè)庫(kù)。VHDL仿真庫(kù)的名字必須命名為Xilinxcorelib、Simprims和Unisims,分別對(duì)應(yīng)ISE安裝目錄【vhdl\src】下的Xilinxcorelib、Simprims和Unisims等三個(gè)庫(kù)。
3.仿真庫(kù)的建立
建立Xilinx器件的仿真庫(kù)需要編譯ISE安裝目錄下的Xilinx器件庫(kù)。對(duì)仿真庫(kù)文件的編譯有多種方法,如在仿真器中編譯仿真庫(kù)、在ISE環(huán)境中編譯仿真庫(kù)和使用仿真庫(kù)編譯向?qū)У确椒ā?/p>
1)在ModelSim仿真器中編譯仿真庫(kù)
在ModelSim仿真器中編譯仿真庫(kù)的操作步驟如下:
(1)修改modelsim.ini文件屬性。因?yàn)镸odelSim根目錄下的配置文件modelsim.ini中記錄了仿真庫(kù)的路徑,在編譯仿真庫(kù)時(shí),在modelsim.ini中會(huì)自動(dòng)記錄創(chuàng)建的庫(kù)的路徑,并與編譯的庫(kù)形成映射關(guān)系,因此首先需要將配置文件的modelsim.ini的只讀屬性修改為存檔屬性,使軟件可以記錄仿真庫(kù)建立的路徑和映射關(guān)系,啟動(dòng)ModelSim時(shí)就可以直接調(diào)用Xilinx仿真庫(kù),而不用再次編譯仿真庫(kù)了。
(2)啟動(dòng)ModelSim仿真工具。在主窗口中選擇【File】→【ChangeDirectory】命令,將工作路徑改為打算存放仿真庫(kù)的路徑,如圖5.16所示。圖5.16更改路徑
(3)創(chuàng)建仿真庫(kù)。在主窗口中選擇【File】→【New】→【Library…】命令,彈出新建庫(kù)【CreateaNewLibrary】對(duì)話框。在該對(duì)話框中輸入仿真庫(kù)的名字“Simprims_ver”,如圖5.17所示。圖5.17輸入庫(kù)名稱
(4)編譯仿真庫(kù)。在主窗口中選擇【Compile】→【Compile…】命令,或者單擊工具欄上的按鈕,出現(xiàn)編譯源文件【CompileSourceFiles】對(duì)話框,如圖5.18所示。在【CompileSourceFiles】對(duì)話框的【Library】下拉列表中首先選擇“simprims_ver”庫(kù),然后單擊按鈕,對(duì)ISE安裝路徑下【verilog\src\simprims】的所有源文件進(jìn)行編譯(如果源文件數(shù)量太大,則分多次進(jìn)行編譯);或者在主窗口中輸入命令“vlog-worksimprims_verD:\Xilinx\
10.1\ISE\verilog\src\simprims\*.v”(根目錄由ISE的安裝路徑?jīng)Q定)。編譯完成之后,在【W(wǎng)orkspace】區(qū)【Library】視圖中展開庫(kù)“simprims_ver”,會(huì)看到剛編譯的模塊,該庫(kù)建立成功。然后按照上述添加庫(kù)的方法,繼續(xù)添加另外兩個(gè)庫(kù)“Unisims_ver”、“Xilinxcorelib_ver”。圖5.18選擇需編譯的庫(kù)
(5)完成以上的步驟后,重新啟動(dòng)ModelSim,在【W(wǎng)orkspace】區(qū)就會(huì)看到新添加的三個(gè)標(biāo)準(zhǔn)庫(kù),Xilinx器件的仿真環(huán)境就建立了。以后在ISE環(huán)境下調(diào)用ModelSim時(shí)就不需要再次建立仿真庫(kù)了,除非更改了使用的硬件描述語(yǔ)言。
2)在ISE環(huán)境中編譯仿真庫(kù)
利用ISE10.1中的仿真庫(kù)編譯向?qū)А維imulationLibraryCompilationWizard】可以很方便地完成仿真庫(kù)的編譯。
在ISE環(huán)境中編譯仿真庫(kù)的操作步驟如下:
(1)將modelsim.ini去掉只讀屬性,設(shè)為存檔,然后單擊Windows任務(wù)欄【開始】→【程序】→【XilinxISEsuite10.1】→【ISE】→【Accessories】→【SimulationLibraryCompilationWizard】,彈出圖5.19所示對(duì)話框。圖5.19仿真器選擇
(2)選擇【ModelSim】,單擊按鈕,彈出如圖5.20所示對(duì)話框。
(3)在圖5.20中列出需要編譯的庫(kù)和映射到新的仿真庫(kù)名稱,單擊按鈕,進(jìn)入編譯狀態(tài)。圖5.20編譯列表編譯過程大概需要幾分鐘到十幾分鐘,編譯完成后,在ModelSim根目錄下的配置文件modelsim.ini中會(huì)多出下面幾行信息:
UNISIMS_VER=E:\Xilinx\10.1\ISE\verilog\mti_se\unisims_ver
UNIMACRO_VER=E:\Xilinx\10.1\ISE\verilog\mti_se\unimacro_ver
…
SIMPRIM=E:\Xilinx\10.1\ISE\vhdl\mti_se\simprim
XILINXCORELIB=E:\Xilinx\10.1\ISE\vhdl\mti_se\XilinxCoreLib
我們可以看到,在modelsim.ini中已經(jīng)將需要用到的各個(gè)庫(kù)的路徑信息都添加進(jìn)來了,形成了映射關(guān)系,以后使用時(shí)就不需要再編譯仿真庫(kù)了,ModelSim可以根據(jù)這些路徑直接找到Xilinx的仿真庫(kù)。5.2.2在ISE中調(diào)用ModelSim實(shí)現(xiàn)功能仿真
1.創(chuàng)建工程
啟動(dòng)ISE后,按照2.2.1節(jié)介紹的方法新建工程“Up_down_counter”。在圖5.21工程屬性窗口中配置工程屬性,在【Simulator】欄中選擇“Modelsim-SEVerilog”仿真工具。圖5.21工程屬性窗口
2.仿真
添加源文件和測(cè)試文件。在主窗口中選擇【File】→【AddExistingSource】命令,導(dǎo)入測(cè)試文件“test_counter.v”以及源文件“up_down_counter.v”以后,在【Sources】窗口中顯示兩個(gè)文件的層次結(jié)構(gòu),如圖5.22中右邊窗口所示。在【Sources】窗口中,單擊測(cè)試文件“test_counter.v”,然后在【Souresfor】欄選擇功能仿真【BehavioralSimulation】選項(xiàng),此時(shí)在窗口中就會(huì)出現(xiàn)ModelSim仿真器,如圖5.22中左邊窗口所示,雙擊【Prosesses】窗口中的【SimulateBehavioralModel】啟動(dòng)ModelSim仿真器,就可以看到在【wave】窗口以及在主窗口中的仿真數(shù)據(jù),如圖5.23所示,這樣就在ISE中啟動(dòng)了ModelSim仿真器,此時(shí)的仿真功能分析完全在ModelSim中進(jìn)行,方法同前節(jié)。如發(fā)現(xiàn)結(jié)果不對(duì),則返回ISE軟件修改。邏輯功能正確后,再通過ISE軟件綜合產(chǎn)生時(shí)序仿真需要的文件,就可以調(diào)用ModelSim進(jìn)行時(shí)序仿真了。圖5.22ISE中調(diào)用ModelSim窗口圖5.23在ISE中啟動(dòng)的ModelSim仿真器5.2.3在ISE中調(diào)用ModelSim實(shí)現(xiàn)時(shí)序仿真
在完成功能仿真后,需要進(jìn)一步驗(yàn)證設(shè)計(jì)加入布局布線延時(shí)后的仿真結(jié)果,這就是時(shí)序仿真。進(jìn)行時(shí)序仿真前需要產(chǎn)生時(shí)序仿真需要的文件,包括綜合布局布線生成的網(wǎng)表文件、測(cè)試激勵(lì)、元件庫(kù)、綜合布局布線生成的具有時(shí)延信息的反標(biāo)文件,這些文件通過ISE工具中的綜合、實(shí)現(xiàn)等步驟得到。綜合實(shí)現(xiàn)方法在書中第2.2.3節(jié)和2.2.4節(jié)作了詳細(xì)介紹,這里僅作簡(jiǎn)要說明。
1.建立時(shí)序仿真文件步驟
1)設(shè)置綜合工具
打開ISE,按照第2.2.1節(jié)中介紹的方法新建工程,并添加待綜合的文件和測(cè)試文件。綜合工具可以選擇ISE自帶的XST綜合,也可選擇第三方綜合工具,如Synplify。
2)設(shè)置用戶約束
約束包括時(shí)序、管腳配置和面積約束。一般情況下,當(dāng)時(shí)鐘頻率低于50MHz,且設(shè)計(jì)只有一個(gè)時(shí)鐘時(shí),不需要對(duì)設(shè)計(jì)附加時(shí)序約束條件,這時(shí)用自動(dòng)綜合就能達(dá)到設(shè)計(jì)要求。但是,當(dāng)設(shè)計(jì)的時(shí)鐘頻率較高,或者設(shè)計(jì)中有像多周期這樣復(fù)雜的時(shí)序時(shí),就需要附加時(shí)序約束條件來保證綜合、實(shí)現(xiàn)的結(jié)果滿足設(shè)計(jì)的時(shí)序要求。
在【Sources】窗口中單擊頂層文件,此時(shí)對(duì)應(yīng)的進(jìn)程【Processes】窗口如圖5.24所示。展開【Processes】窗口中的【UserConstraints】選項(xiàng),雙擊展開項(xiàng)就可以進(jìn)行用戶約束設(shè)置,包括設(shè)置時(shí)序約束(CreateTimingConstraints)、引腳配置(AssignPackagePins)和面積約束(CreateAreaConstraints),也可以用EditConstraints文本編輯綜合約束信息。圖5.24用戶約束設(shè)置
3)進(jìn)行邏輯綜合
行為級(jí)功能仿真通過后,在圖5.22中【Sources】窗口的【Sourcesfor】欄選擇【Implementation】命令,雙擊【Processes】窗口中的【Synthesize-XST】選項(xiàng),進(jìn)行邏輯綜合。當(dāng)綜合選項(xiàng)前的問號(hào)變成綠勾時(shí)表示綜合成功,如圖5.25所示,否則變成紅色叉。這時(shí)根據(jù)【Tanscript】中的錯(cuò)誤提示信息修改源程序直到綜合通過。雙擊【Processes】窗口中的【GeneratePost-SynthesisSimulationModel】選項(xiàng),產(chǎn)生綜合后的網(wǎng)表文件“TOP_synthesis.v”(TOP代表進(jìn)行綜合的頂層文件,它的名稱根據(jù)設(shè)計(jì)者進(jìn)行綜合的模塊名而定),該文件保存在當(dāng)前工程目錄下【\netgen\synthesis】文件夾中,將它導(dǎo)入到ModelSim中就可以做綜合后的仿真。邏輯綜合的詳細(xì)過程參見書中第2.2.3節(jié)。圖5.25進(jìn)程窗口
4)進(jìn)行物理實(shí)現(xiàn)
物理實(shí)現(xiàn)包括轉(zhuǎn)換(Translate)、映射(Map)和布局布線(Place&Route)等三個(gè)步驟。轉(zhuǎn)換是將多個(gè)文件合并為一個(gè)網(wǎng)表;映射是將網(wǎng)表中的邏輯符號(hào)組裝到物理單元中;布局布線是將元件放置到器件中將它們連接起來,同時(shí)提取時(shí)序數(shù)據(jù)并產(chǎn)生各種報(bào)表。綜合通過后,展開圖5.25中【ImplementDesign】選項(xiàng)的層次,可以看到【Translate】、【Map】和【Place&Route】這三種實(shí)現(xiàn)方式。雙擊【Processes】窗口中【GeneratePost-SynthesisSimulationModel】選項(xiàng),生成仿真文件“Top_translate.v”(TOP表示在源程序窗口選擇的頂層文件,名稱根據(jù)設(shè)計(jì)者的設(shè)計(jì)而定)。雙擊【Processes】窗口中的【GeneratePost-MapSimulationMode】選項(xiàng),生成一個(gè)網(wǎng)表文件“Top_map.v”和一個(gè)帶有門延時(shí),但是沒有線延時(shí)信息的反標(biāo)文件“Top_map.sdf”。雙擊【Processes】窗口中的【GeneratePost-Place&RouteSimulationModel】選項(xiàng),也生成一個(gè)網(wǎng)表文件“Top_timesim.v”和一個(gè)帶有門延時(shí)和線延時(shí)信息的反標(biāo)文件“Top_timesim.sdf”。這些文件分別保存在工程目錄下的【netgen\translate】、【netgen\map】、【netgen\par】文件夾中,其中“Top_timesim.sdf”文件有完整的器件延時(shí)信息,是作精確時(shí)序仿真所需的文件。
2.進(jìn)行時(shí)序仿真
在圖5.26中的【Sources】窗口【Sourcesfor】欄的下拉列表中可以看到轉(zhuǎn)換后仿真(Post-TranslateSimulation)、映射后仿真(Post-MapSimulation)和布局布線后仿真(Post-Place-RouteSimulation)。首先選擇轉(zhuǎn)換后仿真【Post-TranslateSimulation】選項(xiàng),然后選中【Sources】窗口中的頂層文件,在圖5.26【Processes】窗口單擊【SimulatePost-TranslateModel】選項(xiàng)激活ModelSim仿真器,開始運(yùn)行轉(zhuǎn)換后仿真。按照同樣的方法繼續(xù)作映射后仿真和布局布線后仿真,并驗(yàn)證設(shè)計(jì)是否滿足要求。如果此時(shí)設(shè)計(jì)不能滿足要求,則要仔細(xì)分析原因,此時(shí)可能需要返回修改約束條件,也有可能需要修改源程序,然后重新綜合,重新進(jìn)行仿真,直到設(shè)計(jì)滿足要求,仿真結(jié)束。圖5.26轉(zhuǎn)換后仿真窗口 5.3在ModelSim中進(jìn)行仿真
直接在ISE中進(jìn)行仿真操作雖然比較簡(jiǎn)單,但是速度卻沒有直接在ModelSim中快,因?yàn)樵贗SE中源文件的每次修改都需要重新綜合后才能調(diào)用ModelSim,且每一次仿真都要重新啟動(dòng)ModelSim。而直接在ModelSim中進(jìn)行仿真,源文件修改后只要重新編譯即可仿真,不用重啟軟件,速度要快得多。直接在ModelSim中仿真調(diào)試也非常方便,因?yàn)樵贗SE中調(diào)用ModelSim只能看到輸入/輸出信號(hào),而對(duì)于設(shè)計(jì)的中間信號(hào),特別是IPCore的內(nèi)部信號(hào)無法觀測(cè)。直接在ModelSim中仿真可以觀測(cè)設(shè)計(jì)中出現(xiàn)的任何信號(hào)和IPCore內(nèi)的任何信號(hào),這樣我們?cè)O(shè)計(jì)的數(shù)據(jù)流向不僅可以很清楚地表示出來,而且還可以檢測(cè)不同編程方式的處理效果,極大地方便了設(shè)計(jì)和調(diào)試。直接在ModelSim中進(jìn)行仿真時(shí),每種仿真對(duì)應(yīng)的文件不同,其對(duì)應(yīng)關(guān)系如下:
●?功能仿真需要導(dǎo)入的文件:Testbench文件和TOP.v。
●?轉(zhuǎn)換后仿真需要導(dǎo)入的文件:Testbench文件、glbl.v和TOP_post_traslate.v。
●?映射后仿真需要導(dǎo)入的文件:Testbench文件、glbl.v、TOP_map.v和TOP_map.sdf。
●?布局布線后仿真需要導(dǎo)入的文件:Testbench文件、glbl.v、TOP_timesim.v和TOP_timesim.sdf。這幾種仿真的流程和激勵(lì)是相同的,后三種仿真需要Xilinx的器件庫(kù),且需導(dǎo)入“glbl.v”文件,該文件在Xilinx安裝路徑【verilog\src】下,是仿真時(shí)需要的全局初始化文件。時(shí)序仿真導(dǎo)入到仿真器的設(shè)計(jì)包括基于實(shí)際布局布線設(shè)計(jì)的最壞情況的布局布線延時(shí),并且在仿真結(jié)果波形圖中,時(shí)序仿真后的信號(hào)加載了時(shí)延,而功能仿真沒有?,F(xiàn)在以布局布線后的仿真為例,對(duì)時(shí)序仿真進(jìn)行介紹。
在ModelSim中進(jìn)行仿真一般有兩種方式,前面我們已經(jīng)作了介紹,現(xiàn)在以工程方式進(jìn)行時(shí)序仿真的介紹,具體步驟如下:
(1)新建工程。首先在主窗口中改變工作路徑,然后單擊工具欄上的【File】→【New】→【Projecte…】命令,彈出工程屬性窗口,新建工程,按照5.1.3節(jié)介紹的方法將“Top_timsim.v”、“Top_timsim.sdf”、“glbl.v”添加到該工程中。在將文件添加到工程中之前,最好新建一個(gè)文件夾,將這些文件復(fù)制到該文件夾中以便于管理。在【W(wǎng)orkspace】區(qū)【Project】視圖右擊,選擇【AddtoProject】→【AddingSimulationConfiguration】命令,彈出仿真配置對(duì)話框(AddSimulationConfiguration),如圖5.27所示。
(2)添加SDF文件。在圖5.27【AddingSimulationConfiguration】對(duì)話框中選擇【SDF】標(biāo)簽項(xiàng),單擊按鈕,彈出如圖5.28所示的【AddSDFEntry】對(duì)話框,在【SDFFile】單擊按鈕,把ISE生成的SDF文件添加進(jìn)去。在【ApplytoRegion】欄默認(rèn)值是“/”,表示該SDF文件應(yīng)用于當(dāng)前工作路徑下的所有模塊,若輸入當(dāng)前工作路徑下測(cè)試文件中例化的頂層文件名“/test_counter/dut”(在本例中測(cè)試文件名為test_counter,例化的頂層文件counter的名字為dut),表示該SDF文件僅僅應(yīng)用于“dut”模塊。注意TOP_map.v和TOP_timesim.v文件中有一句初始化SDF文件路徑的代碼,如“initial$sdf_annotate("netgen/par/TOP_timesim.sdf");”,該代碼指定調(diào)用ModelSim當(dāng)前工作路徑下的SDF文件,手動(dòng)添加SDF文件時(shí)需要將該初始化語(yǔ)句刪除,或者將該路徑改為SDF文件保存的路徑,這時(shí)就不用手動(dòng)添加SDF文件了,如改為“initial$sdf_annotate?("TOP_timesim.sdf"),表示指定SDF文件在ModelSim當(dāng)前的工作路徑下,此時(shí)只需要將SDF文件復(fù)制到當(dāng)前工作路徑即可。圖5.27仿真配置對(duì)話框圖5.28添加SDF文件
(3)添加庫(kù)。在圖5.27【AddingSimulationConfiguration】對(duì)話框中選擇【Libriaries】標(biāo)簽項(xiàng),將已編譯好的simprims_ver、unisims_ver和XilinxcoreLib_ver三個(gè)庫(kù)(庫(kù)的編譯過程見5.2.1節(jié))添加到工程中,如圖5.29所示。圖5.29仿真庫(kù)設(shè)置
(4)選擇仿真文件進(jìn)行仿真。在圖5.29中選擇【Design】標(biāo)簽項(xiàng),出現(xiàn)如圖5.30所示對(duì)話框,在該對(duì)話框中選擇測(cè)試文件,本例為“test_counter”,并在【SimulationConfigurationName】標(biāo)簽下輸入仿真項(xiàng)名稱,如“Simulation1”,單擊按鈕后,在【W(wǎng)orkspace】區(qū)【Project】視圖中出現(xiàn)仿真名“Simulation1”。雙擊“Simulation1”啟動(dòng)仿真器,以后的分析過程同5.2節(jié)。仿真屬性可以通過右擊仿真名“Simulation1”,選擇【properties…】進(jìn)入屬性窗口進(jìn)行修改。
有時(shí)設(shè)計(jì)中存在多個(gè)設(shè)計(jì)源文件和多個(gè)測(cè)試源文件,若想在同一工程中測(cè)試不同的文件,可按上述方法將它們?nèi)刻砑拥焦こ?,然后?duì)于不同的測(cè)試文件可在圖5.30中選擇對(duì)應(yīng)的被測(cè)文件并設(shè)置不同的仿真項(xiàng)名稱,即可在同一工程中進(jìn)行仿真測(cè)試。圖5.30添加仿真文件5.4基于IPCore的FIFO仿真實(shí)例
5.4.1建立FIFOIPCore的源文件
1.新建工程
從Windows任務(wù)欄選擇【開始】→【程序】→【XilinxISEsuite10.1】→【ISE】→【Accessories】→【COREGenerator】命令,直接啟動(dòng)CoreGenerater工具,按照第4.4節(jié)的方法,新建名為[工程名].cgp的工程,在圖5.31工程屬性窗口中設(shè)置工程屬性。在【Generation】標(biāo)簽項(xiàng)【Folw】欄中選擇用戶輸出產(chǎn)品【CustomOutputProducts】,在仿真語(yǔ)言【SimulationFiles】欄中選擇【Verilog】,將輸出給用戶的IPCore源文件設(shè)為Verilog語(yǔ)言,仿真文件其它選項(xiàng)可以為默認(rèn)值。圖5.31工程屬性窗口
2.產(chǎn)生FIFOIPCore的源文件
在COREGenerator的【Founction】窗口中單擊【Memories&StorageElements】→【FIFOs】→【FifoGeneratorv4.3】命令,按照4.4.2節(jié)的方法設(shè)置FIFO參數(shù)。根據(jù)設(shè)置參數(shù)的不同,在保存工程的文件夾里會(huì)產(chǎn)生一系列不同后綴名的文件,其中Corename.v文件是在ModelSim中進(jìn)行功能仿真的Verilog源文件;Corename.veo文件是Verilog源代碼,在對(duì)模塊進(jìn)行例化時(shí)使用;Corename.xco包含當(dāng)前工程屬性與IPCore的參數(shù)信息,該文件既可以用于功能仿真,也可以用于產(chǎn)生IPCore。本實(shí)例中產(chǎn)生的IPCore的名稱Corename為“my_fifo”,它具有18位輸入/輸出端口,功能仿真時(shí)直接導(dǎo)入“my_fifo.v”。但作時(shí)序仿真前,必須將生成的名為“my_fifo”的IPCore進(jìn)行例化,例化文件“ip_fifo.v”代碼如下所示,其中注釋符號(hào)//***之間是例化IPCore“my_fifo.v”的代碼,該段代碼即是COREGenerator自動(dòng)生成的文件的內(nèi)容:
moduleip_fifo(clk,din,rd_en,rst,wr_en,dout,empty,full);
inputclk;
input[17:0]din;
inputrd_en;
inputrst;
inputwr_en;
output[17:0]dout;
outputempty;
outputfull;
//***以下代碼對(duì)生成的名為“my_fifo”的IPCore進(jìn)行例化,例化模塊名稱為“dut”
my_fifodut(
.clk(clk),
.din(din),//Bus[17:0]
.rd_en(rd_en),
.rst(rst),
.wr_en(wr_en),
.dout(dout),//Bus[17:0]
.empty(empty),
.full(full));
//***
endmodule將名為“my_fifo”的IPCore進(jìn)行例化后產(chǎn)生時(shí)序仿真所需文件的步驟如下:
(1)在ISE中導(dǎo)入“ip_fifo.v”和“my_fifo.v”兩個(gè)文件。
(2)設(shè)置工程屬性選擇器件“Virtex-5”以及設(shè)置約束條件等。
(3)對(duì)頂層文件“ip_fifo.v”進(jìn)行綜合實(shí)現(xiàn)。
(4)單擊【Processes】窗口中的【GeneratePost-Place&RouteStaticTiming】選項(xiàng),在當(dāng)前工程路徑下【netgen\par】文件夾中自動(dòng)產(chǎn)生時(shí)序仿真網(wǎng)表文件“ip_fifo_timesim”和時(shí)序約束文件“ip_fifo_timesim”。5.4.2建立Testbench文件
Testbench文件是進(jìn)行仿真必不可少的測(cè)試文件,該文件的建立可利用ISENavergation中新建測(cè)試文件向?qū)硗瓿?,因?yàn)門estbench的初始化都是相同的,這樣可以節(jié)省設(shè)計(jì)時(shí)間。
首先打開ISE軟件,新建工程,導(dǎo)入IPCore源文件“my_fifo.v”,并通過編譯。然后按照ISE新建文件的方法,在【SelectSourceType】中選擇【VerilogTestFixture】添加測(cè)試激勵(lì)文件(可參考第二章的2.2.1節(jié))。單擊按鈕,在【Select】選項(xiàng)卡中選擇待測(cè)試文件“my_fifo.v”,然后根據(jù)向?qū)瓿蓽y(cè)試激勵(lì)(Testbench)文件的添加,測(cè)試激勵(lì)fifo_test文件的Verilog代碼如下:
`timescale1ns/1ps
modulefifo_test;
//定義輸入端口
regclk;
reg[17:0]din;
regrd_en;
regrst;
regwr_en;
//定義輸出端口
wire[17:0]dout;
wireempty;
wirefull;
//例化測(cè)試單元(UUT)
ip_fifouut(
.clk(clk),
.din(din),
.rd_en(rd_en),
.rst(rst),
.wr_en(wr_en),
.dout(dout),
.empty(empty),
.full(full)
);
initialbegin
//輸入信號(hào)初始化
clk=0;
din=0;
rd_en=0;
rst=0;
wr_en=0;
end
initialbegin
#100rst=1; //?100ns后,結(jié)束復(fù)位
rd_en=0;
wr_en=1; //寫有效
#300;
rd_en=1;//讀有效
wr_en=0;
end
initialbegin
#80din=18‘b00_1111_1000_1111_1111;
#20din=18’b10_1111_1000_1100_1001;
… //根據(jù)測(cè)試需要編輯激勵(lì)
end
endmodule5.4.3在ModelSim中進(jìn)行仿真
在ModelSim對(duì)FIFOIPCore進(jìn)行仿真必須添加Xilinx器件的Xilinxcorelib仿真庫(kù),可按照5.2.1節(jié)介紹的方法對(duì)庫(kù)進(jìn)行編譯,建立仿真環(huán)境。
按照5.3節(jié)的工程方式新建工程,在ModelSim工程中添加功能仿真文件:IPCore源文件“my_fifo.v”和Testbench文件“fifo_test.v”;在【AddSimulationConfiguration】窗口中添加仿真庫(kù)Xilinxcorelib_ver,如圖5.32所示。圖5.32添加仿真文件以及配置仿真屬性在【W(wǎng)orkspace】區(qū)【Project】選項(xiàng)中單擊[Simulation1]啟動(dòng)仿真器,然后將需要觀察的信號(hào)添加進(jìn)波形文件,并運(yùn)行仿真,F(xiàn)IFO功能仿真結(jié)果如圖5.33所示,仿真結(jié)果與FIFO實(shí)際功能相符。圖5.33FIFO功能仿真結(jié)果下面進(jìn)行時(shí)序仿真:
(1)在ModelSim工程中新建工程。
(2)添加時(shí)序仿真文件:網(wǎng)表文件“ip_fifo_timesim.v”、Testbench文件“fifo_test.v”和全局初始化文件“glbl.v”。
(3)添加SDF文件。右擊【Project】窗口,在彈出的對(duì)話框中單擊【AddtoProject】→【SimulationConfiguration…】,彈出【AddSimulationConfiguration】對(duì)話框。將ip_fifo_timesim.v文件中初始化SDF文件路徑代碼修改為“initial$sdf_annotate("ip_tififo?_mesim.sdf");”,然后將ISE中產(chǎn)生的反標(biāo)文件“ip_tififo_mesim.sdf”拷貝到ModelSim當(dāng)前工作路徑下。
(4)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國(guó)噴砂氧化牌數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)衛(wèi)生熱水設(shè)備數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)東方巨龍煙花數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025至2030年中國(guó)PVC纖維增強(qiáng)花園管數(shù)據(jù)監(jiān)測(cè)研究報(bào)告
- 2025年中國(guó)銅跑車市場(chǎng)調(diào)查研究報(bào)告
- 2025年中國(guó)花桿市場(chǎng)調(diào)查研究報(bào)告
- 2025年度版權(quán)交易稅務(wù)籌劃及費(fèi)用協(xié)議
- 文化創(chuàng)意居間協(xié)議
- 房屋固定資產(chǎn)買賣合同范本
- 影視廣告宣傳片拍攝制作合同范本
- 人美版四年級(jí)書法下冊(cè)《第6課 豎心旁》教學(xué)設(shè)計(jì)
- 二年級(jí)綜合實(shí)踐活動(dòng)課件-我與蔬菜交朋友-全國(guó)通(41張)
- 血型與輸血檢驗(yàn)-臨床輸血(臨床檢驗(yàn)課件)
- 按摩師培訓(xùn)協(xié)議書
- 落地式腳手架安全技術(shù)措施
- 開心麻花《白蛇前傳》劇本
- 常州市旅游資源調(diào)查與評(píng)價(jià)
- 中職物理課件
- 分子生物學(xué)課件:緒論-細(xì)胞生物學(xué)發(fā)展簡(jiǎn)史
- 光伏支架安裝工程質(zhì)量驗(yàn)收記錄完整
- 波普解析PPT質(zhì)譜教案資料
評(píng)論
0/150
提交評(píng)論