版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、1,系統(tǒng)級設(shè)計描述語言SystemC,徐寧儀xuny97@mails.tsinghua.edu.cnXuny @ smth東主樓9區(qū)324房間62781914,版權(quán)所有 2004,第二部分 SystemC的基本語法,教材:陳曦 徐寧儀《SystemC片上系統(tǒng)設(shè)計》,科學(xué)出版社,2003本課件大部分內(nèi)容參考此書,僅作為大學(xué)教學(xué)之用, 請勿用于商業(yè),2,課程主要內(nèi)容,共講4次,爭取講清楚Why,What &How。,內(nèi)容
2、包括:為什么用SystemC做片上系統(tǒng)設(shè)計?SystemC基本語法*SystemC行為建?;A(chǔ)*SystemC交易級建模與通信細(xì)化*SystemC 方法庫Master/Slave庫驗證庫,3,第二部分,SystemC的基本語法,4,,目的掌握基本語法語義了解SystmeC的語言架構(gòu)了解SystemC的語言能力編程中容易出現(xiàn)的錯誤養(yǎng)成良好的編程習(xí)慣,5,內(nèi)容,1 一個“Hello,SystemC”實例SC_MAI
3、N()和全局函數(shù)2 一個2輸入與非門組合邏輯實例SystemC的仿真過程與時間模型3 語法模塊端口和信號時鐘和時間模型數(shù)據(jù)類型進(jìn)程4 仿真和波形跟蹤5 寄存器傳輸級SystemC設(shè)計簡介,6,1 一個“Hello,SystemC”實例,輸出“Hello,SystemC”、SystemC版本信息 、SystemC版權(quán)聲明、當(dāng)前仿真時間、SystemC缺省時間單位和時間分辨率。包括一個模塊Hello和sc_main函數(shù)
4、。,7,1 一個“Hello,SystemC”實例,//頭文件// hello.h#ifndef _HELLO_H //基本C++#define _HELLO_H#include “systemc.h” //所有SystemC模塊必須包含“systemc.h”#endif,SC_MODULE(hello){ //此處聲明SystemC模塊};,SC_CTOR(hello){ //此
5、處聲明SystemC構(gòu)造函數(shù)cout<<“Hello,SystemC!”<<endl; //輸出“Hello, SystemC!”cout<<“sc_version():”<<endl; cout<<sc_version()<<endl; //輸出SystemC版本cout<<“sc_copyright():”<<endl;
6、 cout<<sc_copyright()<<endl; //輸出版權(quán)聲明cout<<"sc_time_stamp():"<<sc_time_stamp()<<endl;cout<<"sc_get_time_resolution():"<<sc_get_time_resolution()<<e
7、ndl;cout<<"sc_get_default_time_unit():"<<sc_get_default_time_unit()<<endl;},8,1 一個“Hello,SystemC”實例,sc_main函數(shù)運(yùn)行結(jié)果,// 主文件// main.cpp#include "hello.h"int sc_main(int i,
8、 char* av[ ]){ hello h(“hello””); //實例化模塊 return 0;},9,1 運(yùn)行結(jié)果,10,從本例得出的結(jié)論,SystemC的缺省時間單位為ns,缺省的時間分辨率為1ps,用Verilog HDL可以描述為 `timescale 1 ns/1 ps,SystemC中的模塊用SC_MODULE(module_name) {…}來聲明,等
9、效于VHDL的entity。,SystemC的一個模塊實際上是一個類,所以它有構(gòu)造函數(shù)和析構(gòu)函數(shù)。,SystemC的最頂層函數(shù)是sc_main。既然SystemC是C++,為什么不用main()?,11,main() & sc_main(),所有的C/C++的代碼的入口是main()。,SystemC也不例外。但main()函數(shù)是SystemC核心語言庫的一部分,它調(diào)用sc_main(),所以SystemC用戶代碼的入口函數(shù)是s
10、c_main()。Return 0代表正常返回。,如果SystemC庫中的main()函數(shù)不能滿足我們的要求,我們可以修改這個函數(shù) 。,int sc_main(int i, char* av[ ])的兩個參數(shù)中,前面一個表示參數(shù)的數(shù)目,后面一個是用字符串表示的參數(shù)的值,這與C語言的main()函數(shù)的參數(shù)的意義一樣。,12,SystemC的全局函數(shù),全局函數(shù)是在幾乎任意位置的用戶代碼處使用的函數(shù)。,sc_version()、sc_copy
11、right()。T sc_abs(const T& val)返回實參的絕對值 (模板函數(shù))。T sc_max( const T& a,const T& b)返回a、b中較大的一個, sc_min類似。sc_start()開始運(yùn)行仿真核;sc_stop()停止運(yùn)行。,13,內(nèi)容,1 “Hello,SystemC”實例SC_MAIN()和全局函數(shù)2 組合邏輯實例 - 2輸入與非門SystemC的仿真過程
12、與時間模型3 語法模塊端口和信號時鐘和時間模型數(shù)據(jù)類型進(jìn)程4 仿真和波形跟蹤5 寄存器傳輸級SystemC設(shè)計簡介,14,組合邏輯實例 - 2輸入與非門,本例目的學(xué)習(xí)如何使用Visual C++6.0建一個SystemC項目以及如何用ModelSim查看波形。初步了解SystemC的仿真語義,也就是仿真執(zhí)行過程。,,SC_MAIN,15,Nand2模塊,// A SystemC description of 2-in
13、put nand gate Designed By Chenxi,2003.3.22.#include #include SC_MODULE(nand2){sc_in A,B;sc_out F;void do_nand(){ F=!( A & B); };SC_CTOR(nand2){ SC_METHOD(do_nand);//聲明do_nand為進(jìn)程 sensitive<<A<&
14、lt;B; } //這里是do_nand進(jìn)程的敏感表};,16,Nand2模塊的驗證程序(Testbench),#ifndef _TB_H#define _TB_H#include “systemc.h”SC_MODULE(tb){ sc_out a,b; sc_in f; sc_in_clk clk; void gen_input(); void display_variabl
15、e();SC_CTOR(tb){ SC_CTHREAD(gen_input, clk.pos()); SC_METHOD(display_variable);sensitive<<f<<a<<b; dont_initialize(); }};#endif;,17,Nand2模塊的驗證程序(Testbench),#include “tb.h”void tb::gen
16、_input(){ wait(); a=0; b=0; wait(); a=0; b=1; wait(); a=1; b=0; wait(); a=1; b=1; wait(); a=0; b=0; wait(); a=0; b=0;},void tb::display_variable(){cout<&l
17、t;"a="<<a<<",b="<<b<<",f="<<f<<endl; },,18,Nand2項目的sc_main()函數(shù),#include "nand2.h“#include "tb.h"int sc_main(int, char**){ sc_signal
18、a, b, f; sc_clock clk("Clk",20,SC_NS); nand2 N2("Nand2"); N2.A(a); N2.B(b); N2.F(f); tb tb1("tb"); tb1.clk(clk); tb1.a(a); tb1.b(b); tb1.f(f); //
19、 trace file creation sc_trace_file *tf = sc_create_vcd_trace_file("Nand2"); sc_trace(tf,N2.A, "A"); sc_trace(tf,N2.B, "B"); sc_trace(tf,N2.F, "F"); sc_start(20
20、0); sc_close_vcd_trace_file(tf);//Never forget this function return 0; },Go to Scheduler,19,SystemC安裝 – 以MSVC6.0為例,下載SystemC庫http://www.systemc.orgftp://166.111.172.77/incoming/各種講義專用目錄/本系/研究生課程/SystemC-周祖成-20
21、04秋/SystemCLib解壓縮C:\temp\ systemc-2.0.1\打開項目文件C:\temp\systemc-2.0.1\msvc60\systemc\systemc.dsw創(chuàng)建Build->Build systemclib (F7),20,Nand2,Create new projectFile->New->Project->win32 Console application -&g
22、t; empty projectAdd existed filesProject->Add to Project -> Filesmain.cpp tb.h nand2.hBuilding argument and dependencyproject->settings->C/C++->c++ language->Enable runtime informationproject->
23、settings->C/C++->preprocessor->additional include directory-> C:\temp\systemc-2.0.1\srcAdd Systemc.lib: project->add to project->files-> C:\temp\systemc-2.0.1\msvc60\systemc\debug\systemc.libBuild,
24、 Run,21,用ModeSim查看波形,建一個ModelSim項目,將Nand2.vcd復(fù)制到該項目的目錄下。使用ModelSim行命令vcd2wlf 將VCD文件轉(zhuǎn)化為WLF文件。命令格式為: vcd2wlf ,這里我們輸入: vcd2wlf Nand2.vcd Nand2.wlf。請注意vcd2wlf與Nand2.vcd、Nand2.vc與Nand2.wlf之間都有空格。如果沒
25、有任何提示,則命令被正確執(zhí)行,這時將產(chǎn)生一個Nand2.wlf文件。,22,用ModeSim查看波形,打開signal、structure和wave窗口。,在wave窗口下選擇Open dataset菜單,將生成的Nand2.wlf文件導(dǎo)入進(jìn)來。這時你將在structure窗口中看到設(shè)計SystemC:,在signal窗口中選擇所要看的信號放到wave窗口中你就可以看到波形了。,23,特別強(qiáng)調(diào),所有的支持標(biāo)準(zhǔn)C++的編譯器都可以編譯Sy
26、stemC。為了方便PC上的使用,我們使用Visual C++ 6.0編譯器。,可以使用ModelSim、 WaveViewer、VCS、SignalScan等查看波形。 WaveViewer是免費的,直接可以查看vcd文件記錄的波形。,24,SystemC仿真過程,SystemC可執(zhí)行文件的執(zhí)行(Execution)過程分為目標(biāo)描述(Elaboration)、初始化(Initialization)和仿真(Simulation)三個階段
27、。,SystemC的仿真過程是基于事件(Event)的。仿真時間只前進(jìn),不后退。前進(jìn)的尺度與仿真時間分辨率和時間單位有關(guān)。,25,目標(biāo)描述(Elaboration)階段,從sc_main()到sc_start()的第一次執(zhí)行。sc_main(int,char**){//Elaboration starts here ……; sc_start(1000); //Elaboration ends here……;},
28、Elaboration部分一般包括:模塊實例和連接模塊的通道的初始化、設(shè)置缺省時間單位和仿真分辨率、sc_clock的初始化、sc_time類型數(shù)據(jù)的初始化。,SystemC不支持模塊的動態(tài)創(chuàng)建。(SystemC模塊等效于VHDL的Entity),26,初始化(Initialization)階段,整個SystemC仿真的執(zhí)行過程由SystemC調(diào)度器控制,Initialization是SystemC調(diào)度器執(zhí)行的第一步。,SystemC核
29、心語言庫定義了三種進(jìn)程: SC_METHOD、SC_THREAD和SC_CTHREAD。在初始化階段,缺省情況下每一個進(jìn)程都被執(zhí)行一次,THREAD進(jìn)程被執(zhí)行到第一個wait()語句。,通過don’t_initialize( )函數(shù)可以關(guān)閉對進(jìn)程的初始化。當(dāng)進(jìn)程的敏感表上有事件發(fā)生的時候,沒有初始化的進(jìn)程的第一條語句才開始執(zhí)行。,27,初始化(Initialization)階段 con’t,在初始化階段,進(jìn)程的初始化順序是不確定的。但不
30、同次執(zhí)行中進(jìn)程的初始化順序是確定的。所以同一設(shè)計用不同的編譯器得到的可執(zhí)行文件由于初始化順序不同可能產(chǎn)生不同的運(yùn)行結(jié)果??聪马摰睦樱?28,初始化(Initialization)階段 con’t,上述代碼中第一次顯示的addr的值是0還是1?,SC_MODULE(Example){sc_in_clk clk;sc_uint last_addr(0); sc_uint addr(0); void inc(){ while(
31、true) {addr=last_addr+1;wait();} }void display(){ cout<<“At time : ”<<sc_time_stamp(); cout<<“, addr changed to:”<<addr<<endl; }SC_CTOR(Example){ SC_THREAD(inc); sensitive_p
32、os<<clk; SC_METHOD(display); sensitive<<addr;} },都有可能!,29,初始化(Initialization)階段 con’t,在Verilog HDL中的初始化過程(Initial語句)存在同樣的問題。(此頁的目的是說明初始化中的不確定問題并不只是存在于SystemC,實際代碼編寫過程中應(yīng)避免不確定性) module example inte
33、ger last_addr; wire [31:0] addr; assign addr=last_addr+1; initial begin last_addr=0;$display(“At time : ”,$time, “;the addr changed to: %d”,addr); end endmodule,30,初始化(Initialization)階段 con’t,上
34、面代碼中到底是賦值先執(zhí)行還是$display先執(zhí)行?都有可能。在默認(rèn)選項下在Verilog-XL顯示的addr值為x(仿真命令為verilog example.v)。VCS中的結(jié)果為1(仿真命令為vcs –o example.out example.v,然后執(zhí)行example.out)。仿真結(jié)果是不同的!原因是Verilog-XL是執(zhí)行完整個initial語句后才對addr賦值,而vcs是在last_addr被賦值后中斷initi
35、al語句,在執(zhí)行完對addr賦值后返回initial。有趣的是如果將上例中第三和第四行合并為wire addr=last_addr+1,則仿真結(jié)果就會相同!,31,仿真(Simulation)階段,Simulation階段從第一次遇到sc_start( )開始到預(yù)先設(shè)定的仿真時間結(jié)束或者遇到sc_stop()。,預(yù)先設(shè)定的仿真時間由sc_start()確定。如: SC_MODULE(Example){ ……
36、 sc_start(500); …… } 如果缺省的時間單位為ns且代碼中沒有使用sc_stop(),則仿真進(jìn)行500ns。,32,仿真(Simulation)階段,如果sc_start()的參數(shù)為空,則仿真進(jìn)行到遇到sc_stop()。,練習(xí):對照Nand2的例子分析仿真過程中的這三個仿真階段,33,,sc_start()函數(shù)激活SystemC調(diào)度器開始運(yùn)行。,對進(jìn)程的初始化是SystemC調(diào)度器的第一個工作。
37、,SystemC調(diào)度器控制仿真時序、進(jìn)程的執(zhí)行順序、處理仿真過程中的事件和更新信號的值,SystemC調(diào)度器也是基于Delta周期的。一個Delta周期包括求值和更新兩個階段。Delta周期是重要的概念,在VHDL中已經(jīng)講過,這里不詳述。,SystemC調(diào)度器,34,內(nèi)容,1 “Hello,SystemC”實例SC_MAIN()和全局函數(shù)2 組合邏輯實例 - 2輸入與非門SystemC的仿真過程與時間模型3 語法模塊端口和信
38、號時鐘和時間模型數(shù)據(jù)類型進(jìn)程4 仿真和波形跟蹤5 寄存器傳輸級SystemC設(shè)計簡介,35,SystemC的模塊,模塊是SystemC中是設(shè)計的最基本的單位,可以將模塊理解為完成一個特定功能的基本單元。,SystemC中的模塊相當(dāng)于Verilog HDL的module或者VHDL的entity。,一個模塊可以包含一些其它的SystemC基本元素如端口、內(nèi)部信號、內(nèi)部數(shù)據(jù)、子模塊、進(jìn)程、構(gòu)造函數(shù)和析構(gòu)函數(shù)等。這些元素共同定義模塊
39、所表達(dá)的功能。,36,SystemC模塊的定義,模塊使用SystemC中的關(guān)鍵字SC_MODULE來聲明,如下例所示: //the direct memory access controller for ARM SC_MODULE(DMA) {……//Details of the design},SC_MODULE是SystemC庫中定義的一個宏,使用它定義一個模塊實際上是定義
40、了一個新的C++類。,37,SystemC模塊的定義con’t,還可以直接用C++類的定義方法來定義模塊。舉例如下: //the direct memory access controller for ARMclass DMA :public sc_module { ……//Port Declaration SC_HAS_PROCESS(DMA); ……//Other details of the desi
41、gn };,38,SystemC模塊的定義con’t,在C++中,struct是一個特殊的類,所以也可以利用struct來定義一個模塊。舉例如下: //the direct memory access controller for ARM struct DMA :public sc_module { ……//Details of the design };,39,模塊的端口,模塊的端口使數(shù)據(jù)能夠在模
42、塊間通過,模塊之間通過信號將端口連接起來。端口分為in、out和inout三種類型,如果需要將某一個端口的數(shù)據(jù)賦給模塊自身的其它信號,那么該端口就應(yīng)該是inout類型(與VHDL類似),你也可以指定端口的數(shù)據(jù)類型,允許的數(shù)據(jù)類型包括C++基本數(shù)據(jù)類型如bool、int、short、char等或者是SystemC專有數(shù)據(jù)類型如sc_int、sc_unit、sc_logic等或用戶定義的任何數(shù)據(jù)類型。,40,端口的實例,#define MA
43、X 1514struct packet{char[6] source_address;char[6] destination_address;int length;char data[MAX];}下面的代碼就定義了一個輸入端口,端口的數(shù)據(jù)類型就是packet。 sc_in pkt_in;,41,一個FIFO的端口定義,sc_in_clk clk;
44、 //clock sc_in rst; //reset sc_in wr_en; //FIFO write enable sc_in rd_en; //FIFO read enable sc_in
45、din; //data input ,32 bit bus sc_out full,almost_full; sc_out empty,almost_empty; sc_out data_count; //FIFO data count sc_out dout; /
46、/FIFO data out,42,向量型端口和信號,有時候需要聲明一個端口向量,如計算機(jī)的數(shù)據(jù)和地址總線,這在SystemC中也是允許的,舉例如下:sc_in a[32];,這句代碼聲明了a[0]到a[31]這32個端口,端口方向為輸入,端口數(shù)據(jù)類型為sc_logic。信號(見后面的頁)也可以使用類似的辦法聲明: sc_signal abus[16];,上面這句代碼聲明了a[0]到a[15]這16個信號,信號類型為sc_
47、logic。,43,抽象端口,SystemC為了支持交易級建模,還支持抽象端口。假設(shè)接口direct_if的定義如下:class direct_if : public virtual sc_interface{public: // direct BUS/Slave interface virtual bool direct_read(int *data, unsigned int address) = 0; vir
48、tual bool direct_write(int *data, unsigned int address) = 0; }; // end class direct_if 那么下面的代碼定義了一個抽象端口: sc_port arbiter_port; 讀者可能希望更好的理解抽象端口和接口,參見SystemC行為建模部分,44,端口和信號的讀寫,在SystemC中端口
49、的讀寫可以是與VHDL/Verilog HDL一樣的賦值。如果定義了sc_in data_in; 那么在進(jìn)程中可以進(jìn)行下面的讀操作:if(data_in==TRUE) {……} bool flag=data_in;,45,端口和信號的讀寫con’t,另外在SystemC中對端口還定義了read()和write()助手函數(shù)以幫助完成可能需要的隱式類型轉(zhuǎn)換。上面的代碼也可以寫成如下格式:sc_out data
50、_out;……if(data_in.read()==TRUE) {……}if(data_in.read()==1) {……} bool flag=data_in.read();data_out.write(10);data_out.write(data_in.read());,46,端口和信號的讀寫con’t,對于需要隱式類型轉(zhuǎn)換的場合,只能是用助手函數(shù)read()和write()進(jìn)行讀寫操作。如上面例子中data_out
51、.write(data_in.read())是允許的,而直接賦值data_out=data_in就是非法的,因為兩者類型不同。前者是int型,后者是bool型,編譯器不知道重載哪一個函數(shù)。,所以:推薦使用read()和write()進(jìn)行端口的讀寫操作。,47,端口和信號的多驅(qū)動處理,下圖中result的值應(yīng)該為什么?,答案:result=x,48,端口和信號的多驅(qū)動處理con’t,SystemC的邏輯值解析表,49,端口和信號的多驅(qū)動處
52、理con’t,普通的信號是不允許多驅(qū)動的。SystemC中引入了解析邏輯向量信號(Resolved Logic Vector signal)來解決多驅(qū)動的問題??梢允褂孟旅娴姆椒ǘx解析型端口:sc_in_rv x; //x被定義為n比特寬的解析邏輯向量型輸入端口sc_out_rv y; //y被定義為n比特寬的解析邏輯向量型輸出輸出端口sc_inout_rv z; //z被定義為n比特寬的解析邏輯向量型雙向端口 這里
53、n是任意正值。,類似的,解析型信號的定義方法如下: sc_signal_rv x; //寬度為n比特的解析型向量信號x。,50,一個多驅(qū)動的例子——2選1的三態(tài)門,方框圖如下:,51,一個多驅(qū)動的例子——2選1的三態(tài)con’t,SC_MODULE(Tristate) { sc_in in_sela, in_selb; sc_in in_a; sc_in in_b; sc_out_rv out_1;// Me
54、thod for first three-state driver void tristate_a();// Method for second three-state driver void tristate_b();// ConstructorSC_CTOR( Tristate) { SC_METHOD( tristate_a); sensitive << in_sela << in_a
55、; SC_METHOD( tristate_b); sensitive << in_selb << in_b;}};,52,信號和變量,信號不能用in,out或inout來聲明,信號的傳輸方向取決于連接部分的端口狀態(tài) 。,信號的定義方法: sc_signal signal_name;,如:sc_signal a; sc_signal> > data_bus;,SystemC中信號與變量
56、的區(qū)別與VHDL中一樣。信號常被用來連接模塊和用于進(jìn)程間通信,變量則用于進(jìn)程和模塊的本地存儲。變量仿真的賦值是立刻發(fā)生的,沒有delta延時.而信號和端口的值刷新要經(jīng)過一個delta延時.,變量的定義與標(biāo)準(zhǔn)C++是一樣的。,按照上面的說法,信號應(yīng)常被綜合為邏輯塊間的連線。變量常被綜合為邏輯塊,可以是組合或者時序邏輯。,53,信號和端口的關(guān)聯(lián),關(guān)聯(lián)(Association)基本等于連接(Connect),也稱為綁定(Bind),關(guān)聯(lián)(A
57、ssociation)分為位置關(guān)聯(lián)和名字關(guān)聯(lián),與VHDL一樣。名字關(guān)聯(lián)就是按照名字一一對應(yīng);位置關(guān)聯(lián)就是按照端口定義的順序一一對應(yīng)。,54,名字關(guān)聯(lián)實例,#include "nand2.h"#include "tb.h"int sc_main(int, char**){ sc_signal a,b,f; sc_clock clk("Clk",20,SC_NS);
58、 nand2 N2("Nand2"); N2.A(a); N2.B(b); N2.F(f); tb tb1("tb"); tb1.clk(clk); tb1.a(a); tb1.b(b); tb1.f(f); ……//Rest of the code omitted return 0; },55,位置關(guān)聯(lián)實例,#i
59、nclude "nand2.h"#include "tb.h"int sc_main(int, char**){ sc_signal a,b,f; sc_clock clk("Clk", 20, SC_NS); nand2 N2("Nand2"); N2(a,b,f); tb tb1("tb");
60、 tb1(clk, a, b ,f); ……//Rest of the code omitted return 0; },56,兩種關(guān)聯(lián)方式的對比,位置關(guān)聯(lián)在一個只有少量端口的模塊的初始化中是非常合適的,它能夠使描述簡單化。,然而在對一個有大量端口的模塊的初始化中使用位置關(guān)聯(lián)將是非常危險的,因為實際工作中設(shè)計者可能會不經(jīng)意間修改了模塊的端口的順序,這時就會產(chǎn)生關(guān)聯(lián)錯誤,而這種錯誤很可能是很難發(fā)現(xiàn)的。遇到這種情
61、況最好使用下文所述的名字關(guān)聯(lián)。,所以對于一個大的SystemC項目,一般建議統(tǒng)一的使用名字關(guān)聯(lián)。,57,模塊的構(gòu)造函數(shù),C++中的構(gòu)造函數(shù)創(chuàng)建模塊內(nèi)部數(shù)據(jù)結(jié)構(gòu),并把這些數(shù)據(jù)結(jié)構(gòu)初始化為已知的值 。,SystemC構(gòu)造函數(shù)還用于初始化進(jìn)程的類型并創(chuàng)建進(jìn)程的敏感表。,SystemC的構(gòu)造函數(shù)用SC_CTOR標(biāo)識,構(gòu)造函數(shù)的名字必須與模塊的名字相同。,58,一個構(gòu)造函數(shù)的實例,// A SystemC description of 2-inp
62、ut nand gate Designed By Chenxi,2003.3.22.#include #include SC_MODULE(nand2){sc_in A,B;sc_out F;void do_nand(){ F=!( A & B); };SC_CTOR(nand2){ SC_METHOD(do_nand);//聲明do_nand為SC_METHOD進(jìn)程 sensitive<<A&
63、lt;<B; } //這里是do_nand進(jìn)程的敏感表};,59,另外一個構(gòu)造函數(shù)的例子,#include //Other includesSC_MODULE(simple_soc){ CPU *cpu1; MemoryUnit *mu1; GPIO *gpio1; DMA *dma1; ……//declare c
64、lock and //other singals //Constructor SC_CTOR(simple_soc){……//See next slide} ~simple_soc(){……}//Destructor},60,另外一個構(gòu)造函數(shù)的例子con’t,simple_soc的構(gòu)造函數(shù)如下:,SC_CTOR(simple_soc){ cpu1 = new CPU("CPU");
65、 ……//connect ports mu1 = new MemoryUnit("MU"); …… //connect ports gpio1= new GPIO("GPIO"); …… //connect ports dma1 = new DMA("DMA"); …… //connect ports},61,在構(gòu)造函數(shù)中對端口的初始化方法
66、,SC_MODULE(Tb){ sc_out data_source; //Other port declarations bool value; void GenInput(){data_source.write(value);value= !value;}; SC_CTOR(Tb){SC_METHOD(GenInput);sensitive_pos<<clk;data_sou
67、rce.write(TRUE);//Wrong! data_source = TRUE;//Wrong! data_source.initialize(true);//OK!value=TRUE;//Ok! }; }; (Int2BoolTest.dsw),62,析構(gòu)函數(shù),析構(gòu)函數(shù)釋放代碼中申請的內(nèi)存simple_soc的析構(gòu)函數(shù)如下:,//Destructor ~s
68、imple_soc(){ if(cpu1) {delete cpu1; cpu1 =0;} if(mu1) {delete mu1; mu1 =0;} if(gpio1){delete gpio1;gpio1=0;} if(dma1) {delete dma1; dma1 =0;} },63,SystemC時鐘模型,在SystemC中,時鐘被作為一個特殊的對象處理,它就是sc_clock類。,時鐘端口作為一個特殊
69、的端口。如:sc_in_clk clk1;//可以用sc_in clk1代替,在SystemC2.0.1中,sc_clock一共有6個重載的構(gòu)造函數(shù) 。如: sc_clock( sc_module_name name_, const sc_time& period_, double duty_cycle_ = 0.5,
70、 const sc_time& start_time_ = SC_ZERO_TIME, bool posedge_first_ = true );,64,SystemC時鐘定義實例1,sc_clock clk1("clk1", 20, 0.5, 5, true);,65,SystemC時鐘定義實例2,sc_clock clk2("clk2", 20,
71、0.5, 0, true);,66,以上兩例的缺點,在clk1和clk2的定義中,沒有給出時鐘的具體時間單位,系統(tǒng)默認(rèn)的時間單位將被采用,不同的系統(tǒng)的默認(rèn)時間單位可能不同,這將不利于IP核的設(shè)計復(fù)用。假設(shè)clk1的周期為50MHz,則更合適的定義方法為: sc_clock clk1("clk1", 20, SC_NS, 0.5, 5, SC_NS, true);,67,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- verilog硬件描述語言課程設(shè)計
- 通用安全事件描述語言的設(shè)計.pdf
- 基于語義網(wǎng)描述語言的信息檢索系統(tǒng).pdf
- 教學(xué)大綱-fpga及硬件描述語言
- 課程名稱fpga與硬件描述語言
- 服裝描述語
- 服裝描述語
- 動畫自動生成系統(tǒng)中規(guī)范描述語言設(shè)計與集成環(huán)境構(gòu)建.pdf
- 硬件描述語言的哲學(xué)分析.pdf
- 面向網(wǎng)格計算的描述語言研究.pdf
- 基因調(diào)控網(wǎng)絡(luò)模型描述語言研究.pdf
- 通用指令集描述語言的設(shè)計和實現(xiàn).pdf
- 權(quán)利描述語言的學(xué)習(xí)研究及其驗證系統(tǒng)的實現(xiàn).pdf
- 基于XML數(shù)據(jù)模式的構(gòu)架描述語言.pdf
- XrML權(quán)利描述語言邏輯實施機(jī)制研究.pdf
- 畢業(yè)設(shè)計---基于硬件描述語言vhdl的電子鐘設(shè)計
- 軟件體系結(jié)構(gòu)描述語言CCJava的設(shè)計與實現(xiàn).pdf
- 通用構(gòu)架描述語言的研究與實現(xiàn).pdf
- 包包服裝描述語
- 基于中間件可信構(gòu)件描述語言設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論