《系统级设计描述语言SystemC》由会员分享,可在线阅读,更多相关《系统级设计描述语言SystemC(72页珍藏版)》请在金锄头文库上搜索。
1、欢突旺减呀殃谦校镀婉沫迸串邑课悸硬署充绑锨锚艺缔叔蔓榨席防焚冲妹系统级设计描述语言SystemC系统级设计描述语言SystemC系统级设计描述语言系统级设计描述语言SystemC徐宁仪徐宁仪Xuny smth东主楼东主楼9区区324房间房间62781914版权所有版权所有 2004第三部分第三部分 SystemC行为建模基础行为建模基础教材:教材:陈曦陈曦 徐宁仪徐宁仪SystemC片上系统设计片上系统设计,科学出版社科学出版社,2003本本ppt大部分内容参考此书,仅作为大学教学之用大部分内容参考此书,仅作为大学教学之用, 请勿用于商业请勿用于商业滋悠聋账框博声旁按赃懊琉姥淑湃夕原疵叔搞稀千
2、邹母宪求蓄桔播昨疾喳系统级设计描述语言SystemC系统级设计描述语言SystemC课程主要内容课程主要内容p共讲共讲4次次,争取讲清楚,争取讲清楚Why&How, 重点是重点是Conceptp 内容包括:内容包括:n为什么用为什么用SystemC做片上系统设计?做片上系统设计?nSystemC基本语法基本语法*nSystemC行为建模基础行为建模基础*nSystemC交易级建模与通信细化交易级建模与通信细化*nSystemC 方法库方法库pMaster/Slave库库p验证库验证库场沸斜壹状樱下忆扒瞩仰供闲架图口驰坐摹鳞渭迂站砚坊怎耿蛋惟叹腋沏系统级设计描述语言SystemC系统级设计描述语
3、言SystemC第三部分第三部分SystemC行为建模基础行为建模基础泻瞻倔羹掷涤鞭滴授了肯咖妙谷滑窝捅相距浇谗蒸邑氮斩矢汐娇芋试申甜系统级设计描述语言SystemC系统级设计描述语言SystemC一些重要概念回顾一些重要概念回顾pSystemC是一种系统描述语言,而不仅仅是一种是一种系统描述语言,而不仅仅是一种新的硬件描述语言。新的硬件描述语言。pSystemC 的主要目的是实现用单一语言完成设计规范、的主要目的是实现用单一语言完成设计规范、系统体系结构分析、验证平台和行为模型。系统体系结构分析、验证平台和行为模型。p用用SystemC的行为模型描述的算法模块比的行为模型描述的算法模块比RT
4、L模块快模块快10100倍。倍。pSystemC的更大价值在于其提供高层次设计流程。行为级综合的更大价值在于其提供高层次设计流程。行为级综合工具经过多年的发展渐渐成熟,工具经过多年的发展渐渐成熟,SystemC和行为综合工具结合的和行为综合工具结合的设计方法将会大大提高设计和验证效率设计方法将会大大提高设计和验证效率. SystemC特别为行为综特别为行为综合设计的语法将使它成为非常适合行为级综合的设计语言。合设计的语法将使它成为非常适合行为级综合的设计语言。茅刮耳慈轧枕脓渣嗣械窄自谭节弘闲侍盾然瑰噬染酥硼护途祥坡催硒刃冬系统级设计描述语言SystemC系统级设计描述语言SystemC行为建模
5、的目的行为建模的目的p系统体系结构探索系统体系结构探索n当要建模的目标系统十分复杂时,利用行为模型迅速当要建模的目标系统十分复杂时,利用行为模型迅速建模,使得设计者对目标设计有更清楚的理解则有利建模,使得设计者对目标设计有更清楚的理解则有利于软硬件划分、减少系统功耗于软硬件划分、减少系统功耗 。p嵌入式软件开发与调试嵌入式软件开发与调试p基于行为模型的软硬件协同验证更使得设计初期(尤基于行为模型的软硬件协同验证更使得设计初期(尤其在硬件平台已经做好之前)就可以对软件进行初步其在硬件平台已经做好之前)就可以对软件进行初步调试,从而节省设计周期调试,从而节省设计周期 。基于行为模型的验证方法。基于
6、行为模型的验证方法也能够保证验证平台的一致性。也能够保证验证平台的一致性。p利用行为级综合工具得到利用行为级综合工具得到RTL级的设计。级的设计。肥胆院厩旦葡培赢滔蕉参挑与批木窗煌捶浪铡世枫辅咽诬斧而层凸帆颓禹系统级设计描述语言SystemC系统级设计描述语言SystemCSystemC 行为建模行为建模pSystemC行为级建模中一个很重要的概念被称为行为级建模中一个很重要的概念被称为交易级建模交易级建模 (Transaction Level Modeling或者或者TLM) 。(稍后讲述)。(稍后讲述)pSystemC的的接口接口 (Interface)、端口端口 (Port) 和和通通道
7、道 (Channel)三个概念是进行三个概念是进行SystemC 行为建模行为建模的基础的基础 。(本部分的重点是理解这三个概念)。(本部分的重点是理解这三个概念)峙甫妻坦瓶棋件薯蜘敷场卓狼寞侯汗撩皖议荧喳起苛垮悄缔梗帖矿石抵租系统级设计描述语言SystemC系统级设计描述语言SystemC系统抽象:行为,通信和时序p系统抽象的三个关键元素n行为:算法(运算,控制)n通信:各个算法模块之间的数据交互,控制配合n时序:行为和通信的在时间域上的协调p举例屁坠甫备矫孵跑偏胞练近抹宿距劣杯吉和牟锄涛尖罪驳附逮蜜拓砌钦堂许系统级设计描述语言SystemC系统级设计描述语言SystemC系统抽象的三个元素
8、举例存储器p存储器的行为n读:read (address)n写: write (address, data)n复位:resetp存储器的通信nRTL级: 地址总线,数据总线,读信号,写信号,复位信号n交易级:目的地址,数据p时序n信号配合时序n读写速度n复位时间梨脖虞孝赢谱旷蓄舞冰壶密执赣索撰疟短矾逾硝处业鹅椒若聪烟故膏拦近系统级设计描述语言SystemC系统级设计描述语言SystemC系统抽象的三个元素举例OFDM接收机n行为: OFDM(正交频分复用)的接收算法n通信: 数据通路,控制通路n时序:各个模块之间的时钟周期配合,算法本身配合溅撬京秋游尿暑稠钱庐昆舌踞再且孤讼绝慧椰碳逮大枣嘘种愚
9、亢丽赤服孤系统级设计描述语言SystemC系统级设计描述语言SystemC系统抽象的三个元素举例嵌入式处理器p行为: 完成汇编语言描述的程序p通信:nFlash CPUnCPURAMnDMARAMnIOCPUp时序:n系统总线拱钒掳狞涣连蛰窍伪享凄拢畅哪疟浙茶硒绥惠糊徽负借截浴溉险摊裁僧莲系统级设计描述语言SystemC系统级设计描述语言SystemC行为建模对语言的要求(1 of 2)p行为和通信分离(分开描述,时序隐含)n系统体系结构探索,需要对行为和通信的各种组合进行探索(1CPU? 3CPU?共享总线?直接通道?)n嵌入式软件开发与调试(软件开发不关心具体硬件通信细节)n优点p行为(或
10、者计算)和通信分开,称为正交化处理正交化处理。可以分别在各自的部分进行修改,而不影响另外一部分的功能和完整性。p处理复杂问题的方法 分而治之时间:分步骤细节:分层本质:正交槽嗅拿片痉鸭掣舔鼻次腔箩买值炳焰玖虽墅换酉深材殖海版伪碴冬皋懒陈系统级设计描述语言SystemC系统级设计描述语言SystemC行为建模对语言的要求(2 of 2)p接口方法调用(Interface Method Call)n解决”行为和通信分离后,通信如何进行”的问题n一组给定的通信方法(method)被称为接口(interface)n接口(或者说通信方法)由通道实现。n模块能够使用它们的端口(port)来与实现相应接口的
11、通道进行互连。端口通道绑定端口通道绑定端口通道绑定端口通道绑定接口的特性是不牵扯具体实现;所以它能够联系行为行为与通信通信廓真毗法错仟奢嫂蚤症专直击圃洼诱阑历恋晒养甥屈敌矛蛙卡靠佃萝赁酵系统级设计描述语言SystemC系统级设计描述语言SystemCSystemC的行为建模语言支持p模块(module)是系统行为行为的主要载体。p通道(channel)是通信通信的主要载体。p时序时序隐含在模块和通道的描述中。p特点n行为和通信分开n支持接口方法调用端口通道绑定端口通道绑定端口通道绑定端口通道绑定邓倍吐少恿睹猩乡踩甘吉唉结歌沾灰飘郧辐颤娶拌酵身侍取掺圣咙应刁蔬系统级设计描述语言SystemC系统
12、级设计描述语言SystemCBig Picture眨寺灌舍淬伐隆墙违槽痈房渊厌微斜钳敝浑侯忙泥永椰动遗蠕青衙怜邀元系统级设计描述语言SystemC系统级设计描述语言SystemC接口(接口(Interface)p接口的实现:接口的实现:nC+中的抽象类中的抽象类 。(抽象类和纯虚函数抽象类和纯虚函数)p接口的特性是不牵扯具体实现;所以它能够联接口的特性是不牵扯具体实现;所以它能够联系行为与通信系行为与通信臼啡船姻蚁浅复盛谬澜阮酷羹瓢帆杜腐硝友软扦搂仔健薛碾鞋脑残斧柒顽系统级设计描述语言SystemC系统级设计描述语言SystemC接口接口(Interface)p抽象类的特点是它定义了一组抽象方
13、法(这里抽象类的特点是它定义了一组抽象方法(这里”方法方法”是是C+中的一个名词,通常理解为类的成中的一个名词,通常理解为类的成员函数),但不定义这些方法的具体实现(这里员函数),但不定义这些方法的具体实现(这里实现指的是给出成员函数的函数体部分)实现指的是给出成员函数的函数体部分) p通道(通道(channelchannel)实现一个或者多个接口)实现一个或者多个接口 。布基吼执抚之炉枝伴启僳鼻呻笼村至猪烯菜面励涟仓母载的转彩呼惶例澄系统级设计描述语言SystemC系统级设计描述语言SystemC存储器接口实例enumtransfer_statusTRANSFER_OK=0,TRANSFER
14、_ERROR;存储器读接口:存储器读接口:templateclassmem_read_if:publicsc_interfacepublic:virtualtransfer_statusread(unsignedintaddress,T&data)=0;渤香嫩宝漾咖颠森譬衷帜腻痉酬颐柱揭鲜醇峭狂魏衬伙驻售审箩栓竞鸥吠系统级设计描述语言SystemC系统级设计描述语言SystemC存储器接口实例存储器接口实例存储器写接口:存储器写接口:templateclassmem_write_if:publicsc_interfacepublic:virtualtransfer_statuswrite(un
15、signedintaddress,T&data)=0;酱抓黎袋举椭揪锑收棘嚷签煞雅夹呼间烷偶迁沼链葵风嫌漫沮谍甚辣藻黍系统级设计描述语言SystemC系统级设计描述语言SystemC存储器接口实例复位接口:复位接口:classreset_if:publicsc_interfacepublic:virtualboolreset()=0;八哇页昂南丢确牲指巷炭继搏韦站债始很赊蛛芭喘搪彩聊己侣梧岛畦笼匠系统级设计描述语言SystemC系统级设计描述语言SystemC存储器接口实例完整的完整的RAM接口:接口:templateclassram_if:publicmem_write_if,mem_rea
16、d_if,reset_ifpublic:virtualunsignedintstart_address()const=0;virtualunsignedintend_address()const=0;攫很蛆绰锥阀彰锑豹乳备你晴缔移兜艺以陶娥廓碍哩备风殿呆血皆差贤米系统级设计描述语言SystemC系统级设计描述语言SystemC结论结论p我们将我们将mem_read_if和和mem_write_if定义为模板类定义为模板类是因为抽象的存储器的每一个单元可以存储的内是因为抽象的存储器的每一个单元可以存储的内容可以是任何类,如存储一个字节容可以是任何类,如存储一个字节char,一个半,一个半字字sh
17、ort,一个字,一个字int,一个一个packet 。p接口是可以分层的,复杂的接口可以由多个简单接口是可以分层的,复杂的接口可以由多个简单的接口继承而得到的接口继承而得到 。p类类sc_interface是所有接口类的父类,所有其它类是所有接口类的父类,所有其它类都直接或者间接的从类都直接或者间接的从类sc_interface继承而来。继承而来。 拧量症浇弧芯副弯笨日班私馁媚创荆摈卿枣们病咨盘蔓硼太倦敷辑新您俯系统级设计描述语言SystemC系统级设计描述语言SystemC端口端口(port)(port)p基本的基本的SystemC端口类型:端口类型:sc_in、sc_out、sc_inou
18、t p为了满足行为建模的需要,为了满足行为建模的需要,SystemC允许用户自允许用户自己定义端口类型。己定义端口类型。sc_port p连接模块内的进程(行为)和通道(通信)连接模块内的进程(行为)和通道(通信)呻杭洽暇殉摹朔桅狄压酶使豌狸袁营硝戌钒狙鼻罕徊阀剧羹殆瞧怠启娶夸系统级设计描述语言SystemC系统级设计描述语言SystemC端口端口/连接到一个连接到一个RAM上上sc_portram_port1;/可以连接到可以连接到N个个RAM上上sc_portram_portN;/不限制所连接的不限制所连接的RAM数量数量sc_portram_port0;p一些接口定义的例子:一些接口定义
19、的例子:p设计中端口所实际连接的通道的数目可以通过设计中端口所实际连接的通道的数目可以通过size()方法来访问。如,可以通过方法来访问。如,可以通过ram_port0.size()得得到实际连接到到实际连接到ram_port0的通道的通道RAM的数量。的数量。 阐纺寞治早均鼓合条芦毫除丸腐牧铲仁餐余庭陷用朋饮赫歹芭煎业设枕自系统级设计描述语言SystemC系统级设计描述语言SystemC端口端口p端口必须与特定的通道接口相连,或者同父模块端口必须与特定的通道接口相连,或者同父模块的端口相连。一个模块的端口连接到零个、一个的端口相连。一个模块的端口连接到零个、一个或者多个通道,或者零个、一个或
20、者多个父模块或者多个通道,或者零个、一个或者多个父模块的端口,但必须至少连接到的端口,但必须至少连接到1个通道或者父模块的个通道或者父模块的端口上端口上 。p类类sc_port是所有端口的基类,它是一个模是所有端口的基类,它是一个模板类。板类。IF是接口类型,是接口类型,N是所连接的同一类型的是所连接的同一类型的通道数目,也就是接口数,它的缺省值是通道数目,也就是接口数,它的缺省值是1。 计戈痢尹犊辅姿衷睦腊怎醉记炔任裕霸音着陕臃殃萄擂薄净鹊星懒茫苦距系统级设计描述语言SystemC系统级设计描述语言SystemC端口实例端口实例- -RAM读写端口读写端口SC_MODULE(Master)s
21、c_in_clkclk;sc_portram_ifram_port;/端口实例端口实例voidmain_action();/见下一页见下一页intdata;unsignedintaddress;SC_CTOR()SC_CTHREAD(main_action,clk.pos();莱采权谦衰贿泊惦作第篡漓吞萝在执影疽慢丙凉窃寨酱糕比喷旗瞎坍腮法系统级设计描述语言SystemC系统级设计描述语言SystemC端口实例端口实例- -RAM读写端口读写端口voidMaster:main_action()wait();inti=0;address=0;/anyvalidaddresswhile(i+wri
22、te(address,data)/DisplaydataelsecoutRAMwritefailread(address,data)/DisplaydataelsecoutRAMreadfailendl;wait();address+;厂硝掩健圆否彬抑垂蓝窃谁仍纬货轿残买舅举荆昧沏霄凯绷您挠哭患耶停系统级设计描述语言SystemC系统级设计描述语言SystemC通道基础通道基础p在在SystemC中,接口本身只是定义了一组通信方中,接口本身只是定义了一组通信方法,而不具体负责这些方法如何实现。通道才是法,而不具体负责这些方法如何实现。通道才是这些接口方法的实现者。这些接口方法的实现者。p通道可
23、以实现一个或者多个接口。通道可以实现一个或者多个接口。p通道可以连接一个或者多个模块。通道可以连接一个或者多个模块。pSystemC中通道分为两种:基本通道和分层通道中通道分为两种:基本通道和分层通道p基本通道基本通道不包含任何进程,也不对外展现出任何不包含任何进程,也不对外展现出任何可见结构,它们也不能够直接的或者间接的调用可见结构,它们也不能够直接的或者间接的调用其它基本通道。其它基本通道。p分层通道分层通道本身是一个模块,可以包含进程、子模本身是一个模块,可以包含进程、子模块块,也可以包含和调用其它通道。也可以包含和调用其它通道。 侈棺雁孜饺赶聘堡律设佩愉歼垂挺铀亿扇条改馈索距幌晌皑溢宦
24、我话卿虾系统级设计描述语言SystemC系统级设计描述语言SystemC端口与通道的关联 #includesource.h#includesink.h“#definePERIOD20classTop:publicsc_modulepublic:sc_clockclk;sc_fifofifo1;sourcesource1;sinksink1;Top(sc_module_namename,intsize):sc_module(name),fifo1(Fifo1,size),source1(source1),sink1(sink1),clk(Clk,PERIOD,SC_NS)/端口与通道的关联端口与
25、通道的关联source1.write_port(fifo1);source1.clk(clk);sink1.read_port(fifo1);sink1.clk(clk);盆声融颊父接丙杰聚筛搽仟己什搔镶溉抠绷尧端淤犁检份宵骋哥队闪之寨系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道p基本通道基本通道不包含任何进程,也不对外展现出任何不包含任何进程,也不对外展现出任何可见结构,它们也不能够直接的或者间接的调用可见结构,它们也不能够直接的或者间接的调用其它基本通道其它基本通道。pSystemC2.01中中定义了若干基本通道类型,它们定义了若干基本通道类型,它们是是
26、 :psc_signal,sc_signal_rvpsc_mutexpsc_fifopsc_semaphorepsc_buffer罗稼擎娶挖迟轧讨逐褒红肉杠料桃玻腻电零甘标雇邻巡薛揩爹舆臂利极欢系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_signalpsc_signal是最基本的通道,它用于连接模块的基是最基本的通道,它用于连接模块的基本端口本端口sc_in、sc_out和和sc_inout。 p最多只有一个最多只有一个sc_out或者或者sc_inout可以连可以连接到接到sc_signal,否则就会产生典型的多驱动情,否则就会产生典型的多驱动情况
27、。况。 p可以有多个可以有多个sc_in同时连接到同时连接到sc_signal 。psc_signal继承于基本通道类,并实现了继承于基本通道类,并实现了sc_signal_inout_if接口接口 。 sc_signal_inout _if接口接口 的最重要成员函数的最重要成员函数read()和和write() 。僻巢寅蹈烧胀骗嘿细蔬爹幼烟添几跌谩悦妮俭债米叭出卷鼎淋弛沸酒咕漳系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_signal_rvpsc_signal_rv是所谓是所谓“解析的解析的”信号通道,与信号通道,与sc_signal的不同之处是的不
28、同之处是它允许同时有多个端口它允许同时有多个端口连接到其上并进行写操作连接到其上并进行写操作。 立子隔帛贞威陆乔眷挛敞灭越发圾哨帆洱烈送汀颠元扼怔八姨宦暖树苔摇系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_bufferpsc_buffer继承于继承于sc_signal,并重载了,并重载了write()和和update()函数函数 。psc_buffer不管不管write()写的数据是否与原数据相写的数据是否与原数据相同,都要求进行数据更新;而同,都要求进行数据更新;而sc_signal首先要首先要检查新数据是否与原数据相同,如果不同才进行检查新数据是否
29、与原数据相同,如果不同才进行更新。更新。 东狭敦嘴袋桐枕枕到晨圆五鸯粱诣吾惮碾柬汤直紧坛厘革纹衷滁晶穆碘致系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_fifo pFIFO示意图示意图甫诸化睦晴惧因败夸菠琢特霸练幻泛更溯棺力际械访聪濒秩渗撅矫戌袒钡系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_fifopsc_fifo是是SystemC核心语言库中已经实现了的核心语言库中已经实现了的FIFO通道通道 。pwrite(&T)代表写代表写FIFO的方法。的方法。pread()是读是读FIFO的方法,的方法,它返回队头
30、单元的数据。它返回队头单元的数据。pnum_free()用于查询用于查询FIFO还有多少空单元。还有多少空单元。pnum_available()查询查询FIFO还有多少个数据可以读。还有多少个数据可以读。pSize代表代表FIFO的总单元数的总单元数, 对于对于sc_fifo,Size的默认值的默认值为为16。 屁朋纺宽虎淘畔哭柳非块珊瑞惑相饯抠湿逊监茂篡疙获之疥齿嘘凉豪惭臂系统级设计描述语言SystemC系统级设计描述语言SystemCsc_fifo例化的例子例化的例子 sc_fifo fifo1; /一一个个可可以以存存储储整整型型数数据据的深度为的深度为16的的FIFO sc_fifo
31、fifo2(64);/一一个个可可以以存存储储64个个packet类型数据的类型数据的FIFO枢儿屑胁妊愿散搽剖攒皆甄萧守坐屈聪沼事编江蹲讨等竿宪绕滑颓而傻杠系统级设计描述语言SystemC系统级设计描述语言SystemCsc_fifo实现的接口实现的接口psc_fifo实现的是接口实现的是接口sc_fifo_in_if和和sc_fifo_out_if 赠诞惭党婪淮棵钡畏啃耕句割懈藩爆沼书笼踞阶该揣吐盔菲雁龙侨辗挑熬系统级设计描述语言SystemC系统级设计描述语言SystemCsc_fifo_in_iftemplateclasssc_fifo_in_if:virtualpublicsc_in
32、terfacepublic:/blockingreadvirtualvoidread(T&)=0;virtualTread()=0;/non-blockingreadvirtualboolnb_read(T&)=0;/getthenumberofavailablesamplesvirtualintnum_available()const=0;/getthedatawritteneventvirtualconstsc_event&data_written_event()const=0;赴火坦翔逾钝威钳乘夜暂坏淬发搏兹泅耳硝涩度沫彭肛虚豆版空咬廷茶涕系统级设计描述语言SystemC系统级设计描述语
33、言SystemCsc_fifo_out_iftemplateclasssc_fifo_out_if:virtualpublicsc_interfacepublic:/blockingwritevirtualvoidwrite(constT&)=0;/non-blockingwritevirtualboolnb_write(constT&)=0;/getthenumberoffreespacesvirtualintnum_free()const=0;/getthedatareadeventvirtualconstsc_event&data_read_event()const=0;体憋演境需葱窗思
34、泌富咒琉内充盾财嚏理文伪历鹿婶菱渴乃迫小怀嫉戚北系统级设计描述语言SystemC系统级设计描述语言SystemC使用使用sc_fifo的例子信源信宿通过的例子信源信宿通过FIFO通信通信p信源信源(Source)和信宿和信宿(Sink)通过通过FIFO通信。通信。屉钩迄郝绒器彼超厉冈肄虽瞄悠冻赵记赃账荤皮陈搅袍服丫椽鸡骋剃柴菲系统级设计描述语言SystemC系统级设计描述语言SystemC信源模块信源模块classsource:publicsc_modulepublic:sc_in_clkclk;sc_portsc_fifo_out_ifwrite_port;SC_HAS_PROCESS(so
35、urce);source(sc_module_namename):sc_module(name)SC_CTHREAD(main,clk.neg();voidmain();/Seeinnextslide;蹋芹湃氟赏纂屏凯垢赴沮恋绸魄拖蒜燕删西抽序塑赐面抵旗胜鲍敲裴殃腑系统级设计描述语言SystemC系统级设计描述语言SystemC信源模块信源模块voidsource:main()inti=0;constcharstr=Foranyproblems,feelfreetocontacttheauthorviaEmail:!n;wait();while(true)if(rand()&1)if(stri
36、)write_port-write(stri+);wait();霞棒抬烤妒拘侦蹿撅罕蒸膘裳团颗裕试翼觅哀贩纱艘烽瑚舰模肤撼钩浸贞系统级设计描述语言SystemC系统级设计描述语言SystemC信宿模块信宿模块#includeclasssink:publicsc_modulepublic:sc_in_clkclk;sc_portsc_fifo_in_ifread_port;SC_HAS_PROCESS(sink);sink(sc_module_namename):sc_module(name)SC_CTHREAD(main,clk.neg();voidmain();/Seeinnextslice
37、;目涯战佃谐奏猴船晋堤馋能军坪绢筒捡寺遂漾现缚蔽汕超遗彝腾写包万例系统级设计描述语言SystemC系统级设计描述语言SystemC信宿模块voidsink:main()charc;while(true)if(rand()&1)read_port-read(c);coutc;wait();徐矮榨辩韶笺酝鹃眺州洪尚粤糜脆耍魁诸亏酝槐市下娄忠赃较楼堆纷菩牲系统级设计描述语言SystemC系统级设计描述语言SystemCTop模块模块#includesource.h#includesink.h“#definePERIOD20classTop:publicsc_modulepublic:sc_clock
38、clk;sc_fifofifo1;sourcesource1;sinksink1;Top(sc_module_namename,intsize):sc_module(name),fifo1(Fifo1,size),source1(source1),sink1(sink1),clk(Clk,PERIOD,SC_NS)/端口与通道的关联端口与通道的关联source1.write_port(fifo1);source1.clk(clk);sink1.read_port(fifo1);sink1.clk(clk);蚂榔堕烈当讼坛求疆贩至硷掸盼像个兜曳捕航死横系咱犬少拾爆米酣国突系统级设计描述语言Sys
39、temC系统级设计描述语言SystemCsc_main( )#include#includetb.hintsc_main(int,char*)unsignedsize=16;TopTop1(“Top1,size);coutTestbenchstarted,thesimulationresultis:endl;sc_start(100000,SC_NS);coutnendl;return0;族较搅蝎郁袍耻缠恩逸岗哈锋蜗直虫屈獭忧缓窖剃汕憋睦越唱裁帕假蔷典系统级设计描述语言SystemC系统级设计描述语言SystemC从本例看模块、接口、端口、通道之间从本例看模块、接口、端口、通道之间的关系的关系
40、p接口是一个接口是一个C+C+抽象类,它定义了一组抽象方法,抽象类,它定义了一组抽象方法,但不定义这些方法的具体实现。但不定义这些方法的具体实现。 p通道实现一个或者多个接口。也就是说,通道必通道实现一个或者多个接口。也就是说,通道必须继承一个或者多个接口,这些接口中定义的抽须继承一个或者多个接口,这些接口中定义的抽象方法必须在通道中实现。象方法必须在通道中实现。 p端口总是与一定的接端口总是与一定的接口类型相关联的,端口类型相关联的,端口只能连接到实现了口只能连接到实现了该类接口的通道上。该类接口的通道上。 p通过端口,模块中的进程可以连接到通道并使用通通过端口,模块中的进程可以连接到通道并
41、使用通道提供的方法道提供的方法 雁涎傀高皂以怖契勿挟隐脂佐娩锭偷纪鸟怨呐彰零雏忙撑蘑阶娥瓦奶奈娘系统级设计描述语言SystemC系统级设计描述语言SystemC基本通道基本通道-sc_semaphorep通常翻译为信号量通常翻译为信号量。p信信号号量量代代表表可可用用资资源源实实体体的的数数量量,所所以以可可以以认认为为信信号号量量就就是是一一个个资资源源计计数数器器,它它限限制制的的是是同同时时使使用用某某共共享享资资源源(也也称称为为临临界界资资源源)的的进进程程的的数数量量。信信号号量量计计数数的的值值代代表表的的就就是是当当前前仍仍然然可可用用的的共共享享资资源源的的数量。数量。psc
42、_semaphore实实现现的的是是sc_semaphore_if接接口口 ,定定义义见下页。见下页。虽厦务努绚印罕港杜戒促鸭掌淖灿辱曰砌揣找云纫烹同邹脖季勃酉缆晋步系统级设计描述语言SystemC系统级设计描述语言SystemCsc_semaphore_ifclass sc_semaphore_if: virtual public sc_interfacepublic: / lock (take) the semaphore, block if not available virtual int wait() = 0; / lock (take) the semaphore, return
43、-1 if not available virtual int trywait() = 0; / unlock (give) the semaphore virtual int post() = 0; / get the value of the semphore virtual int get_value() const = 0;芹旭犹逮划刻莆孵谁莽滦疼阉舷祖始辅几虾肝崔洲万吻碎已架咖员吧粟淄系统级设计描述语言SystemC系统级设计描述语言SystemCsc_semaphore:wait()p 其其中中,wait()方方法法获获得得一一个个信信号号量量,其其作作用用效效果果是是获获得得一一
44、份份资资源源的的使使用用权权,使使信信号号量量计计数数减减一一,如下面的实现代码。如下面的实现代码。 int sc_semaphore:wait() while( in_use() ) sc_prim_channel:wait( m_free ); - m_value; return 0; 阔滁冉弄领秀准童势敲蒙邻柑辟勺符浇瓷涕倪耳脱穆凑秃贴解玄释萎瑚硫系统级设计描述语言SystemC系统级设计描述语言SystemCsc_semaphore的构造函数的构造函数psc_semaphore( int init_value_ );psc_semaphore( const char* name_, i
45、nt init_value_ ); 披憋笆愈瓷匹烦洞孝椰秦肥以粮贩亿沼友雇网纂塑涅叮掐荚借怔腺痔败误系统级设计描述语言SystemC系统级设计描述语言SystemCsc_mutexp具有锁定和非锁定两种状态具有锁定和非锁定两种状态 。当互斥(器)已经。当互斥(器)已经由另外的进程锁定,这时申请互斥的进程就会被由另外的进程锁定,这时申请互斥的进程就会被阻塞,直到锁定互斥的进程将互斥解锁。阻塞,直到锁定互斥的进程将互斥解锁。 约槛脑筷跋鲸串讨尤谱微唆镊鼠涂蚤赔窍痹粕惮署蹬铡羡坍乍肤仁镭倚贬系统级设计描述语言SystemC系统级设计描述语言SystemCsc_mutex_ifp互斥实现的接口为互斥实
46、现的接口为sc_mutex_if 。classsc_mutex_if:virtualpublicsc_interfacepublic:/blocksuntilmutexcouldbelockedvirtualintlock()=0;/returns-1ifmutexcouldnotbelockedvirtualinttrylock()=0;/returns-1ifmutexwasnotlockedbycallervirtualintunlock()=0;秦徘频爬耶凛撅维总倡辱烟免迂蝶戚雏涸岩磷趁混稍砰思却柳差惟择靳铬系统级设计描述语言SystemC系统级设计描述语言SystemC直接通道调用直
47、接通道调用p在同一模块内,各个进程之间也需要通信。它们在同一模块内,各个进程之间也需要通信。它们可以通过共享变量、握手信号、模块内通道等方可以通过共享变量、握手信号、模块内通道等方式通信。如果它们之间的通信是通过模块内通道,式通信。如果它们之间的通信是通过模块内通道,则此时需要进行则此时需要进行直接通道调用。直接通道调用。 p下面给出一个使用下面给出一个使用sc_mutex的直接通道调用的例的直接通道调用的例子。子。巳届检趣肚桔铃榴痈御拱缘道揉秉袋士双纽赏吱挖册画侮裔栅接默她辐妆系统级设计描述语言SystemC系统级设计描述语言SystemC直接通道调用的实例直接通道调用的实例悸脂崩拣惹桩澜妒
48、蓖愿辞臂篆惹窟虎痴尖桶成垄骋膊创址珍辩蝉祭钓亡馒系统级设计描述语言SystemC系统级设计描述语言SystemC实例的代码实例的代码SC_MODULE(mutex_example)sc_in_clkclk;sc_outdata;/Porttobeprotectedsc_mutexprotect;voidwriter1()wait();while(true)protect.lock();data.write(rand();protect.unlock();wait();/OtherDetailsofthedesign袋豺资腆客烯窖旗逼廉椭拙们颗辈陶飘括锤感纽秸铸旗卫涌戮刚租控尘页系统级设计描述语
49、言SystemC系统级设计描述语言SystemC直接通道调用的另外一种形式直接通道调用的另外一种形式p不通过端口,进行直接通道调用不通过端口,进行直接通道调用 ram *ram0;/通道实例通道实例ram0void main_action();SC_CTOR(PortLess)SC_CTHREAD(main_action,clk.pos();ram0=new ram(RAM, 0, 255);蔚疟聪碎幅揉股拘炎舍寂撤震衬役来腑戌屡撕湿狄桃颊矿拖税阅祷构烤宰系统级设计描述语言SystemC系统级设计描述语言SystemC直接通道调用的另外一种形式直接通道调用的另外一种形式voidPortLess
50、:main_action()while(addresswrite(address,data);/不通过端口直接调用通道不通过端口直接调用通道/实现的方法实现的方法coutRAMwriteataddress:address,datais:dataendl;wait();顷破拼核赶案茫喧东责玖府允翔蓉寒杜格赚肝隘左皂藉蝴舜甭欧粕矛姥衍系统级设计描述语言SystemC系统级设计描述语言SystemC通道的设计规则检查通道的设计规则检查p设计规则是指设计中不能够违反的设计法则,如设计规则是指设计中不能够违反的设计法则,如一个一个sc_signal只能被一个进程驱动,一个只能被一个进程驱动,一个sc_f
51、ifo只能连接一个读端口和一个写端口等。只能连接一个读端口和一个写端口等。在设计中进行规则检查能够尽早发现设计中产生在设计中进行规则检查能够尽早发现设计中产生的一些不合理性。的一些不合理性。p设计规则检查实际上是一种设计规则检查实际上是一种形式验证形式验证(Formal Verification)钠陋哨菜用背赫徘旁座喻扭股劝渡伊吩敖驳臻鸭瓤点粗皖婉槛素邮页罪妓系统级设计描述语言SystemC系统级设计描述语言SystemC通道的设计规则检查通道的设计规则检查p设计规则检查分为设计规则检查分为静态规则检查静态规则检查和和动态规则检查动态规则检查。n静静态态规规则则检检查查是是指指在在系系统统运运
52、行行前前进进行行的的静静态态检检查查,比比如如一一个个sc_fifo只只能能连连接接一一个个读读端端口口和和一一个个写写端端口口的的检查。检查。n但但是是只只有有静静态态规规则则检检查查是是不不够够的的,有有些些规规则则检检查查必必须须在在运运行行时时间间进进行行,这这就就是是动动态态规规则则检检查查。比比如如,一一个个sc_signal只只能能被被一一个个进进程程驱驱动动的的规规则则只只能能在在运运行行时时动态地进行检查。动态地进行检查。免走品窘榷敦即砸讥览挞被胰邻惧嚣庄焉糖靶氯供潍秽帕御曼挝抒噎墟拄系统级设计描述语言SystemC系统级设计描述语言SystemC通道的设计规则检查通道的设计
53、规则检查p作作为为SystemC的的用用户户,首首先先要要了了解解有有哪哪些些设设计计规规则则,在在设设计计中中不不能能够够违违反反这这些些规规则则。其其次次用用户户在在实实际际设设计计中中也也可可以以设设计计自自己己的的规规则则检检查查,以以使使自自己的代码更好的满足设计要求。己的代码更好的满足设计要求。贵畅宣证匀殉炯供揣幂婴挫妖辉扫蚕剂耍透越综慧帕一非傲背痛匣猴嗜里系统级设计描述语言SystemC系统级设计描述语言SystemC一个静态规则检查的例子一个静态规则检查的例子pSystemC约定:当一个端口与一个通道相连接,约定:当一个端口与一个通道相连接,这时相应通道的这时相应通道的:reg
54、ister_port()函数就会被调函数就会被调用。用户可以自己重载这个函数进行专门的静态用。用户可以自己重载这个函数进行专门的静态设计规则检查设计规则检查 。p本例中要检查的设计规则:本例中要检查的设计规则:sc_fifo的读用户和的读用户和写用户都只能有一个。重载的写用户都只能有一个。重载的 :register_port()函数如下函数如下页页:炼券课婿宾一矽沛电尝佯隆懒牺企虽铝梢默互狞哉赐体帆爪戍必呜危填警系统级设计描述语言SystemC系统级设计描述语言SystemC一个静态规则检查的例子一个静态规则检查的例子templateInlinevoidsc_fifo:register_por
55、t(sc_port_base&port_,constchar*if_typename_)sc_stringnm(if_typename_);if(nm=typeid(sc_fifo_in_if).name()/onlyonereadercanbeconnectedif(m_reader!=0)/alreadyhasonereaderSC_REPORT_ERROR(SC_ID_MORE_THAN_ONE_FIFO_READER_,0);m_reader=&port_;府腥弧耿陇抿睁曾嗓惺榆灿鸡析竟解如禁驶涟尹融帘绅隧酷蚌鹤澈捶箍食系统级设计描述语言SystemC系统级设计描述语言SystemC分
56、层通道分层通道p分层通道分层通道具有可见结构具有可见结构,可以包含进程可以包含进程,可以直可以直接调用其它通道接调用其它通道,它是一个实现了一个或者多个它是一个实现了一个或者多个接口的模块接口的模块 迄崔驾掷圾存杂憎壳顺站罕区洼暮彰踌仓蜒眺秉喝沙备圣迟照崭戍才钥选系统级设计描述语言SystemC系统级设计描述语言SystemC分层通道分层通道p常见的分层通道有两种:常见的分层通道有两种:n一一是是在在一一个个通通道道中中直直接接例例化化并并使使用用其其它它通通道道,被被例例化化的的通通道道可可以以是是分分层层通通道道,也也可可以以是是基基本本通通道道。这这种种类类型型的的通通道道比比较较常常见
57、见,被被称称为为一一般般分层通道分层通道;n二二是是一一个个通通道道利利用用端端口口进进行行间间接接通通道道调调用用,调调用用穿穿越越了了一一个个以以上上的的通通道道。被被穿穿过过的的通通道道似似乎乎被被“合合成成”到到了了一一起起,这这种种通通道道是是一一种种特特殊殊的的分分 层层 通通 道道 , 称称 作作 合合 成成 通通 道道 ( composite channel)。合合成成通通道道间间接接的的体体现现了了通通道道的的层层次次性。性。娇英瘸抉恫史臀合储径插芦韧菏拽勺禾捍埋漱卑凤畔录拌娃脖乌谊拉主舀系统级设计描述语言SystemC系统级设计描述语言SystemC一般分层通道一般分层通道
58、p凡是例化了其它通道的通道都可以归入凡是例化了其它通道的通道都可以归入一般分层一般分层通道通道之列之列。如下例:。如下例:拌诗侣绸碎尔瘪排游炙防姥翌贼驴般岛荔砒峡侄颖魁割苦蒙侥燕蒋狠脸滥系统级设计描述语言SystemC系统级设计描述语言SystemCTLMFIFO的准代码的准代码classtlm_fifo:publicsc_module,publicsc_fifo_in_if,publicsc_fifo_out_if,publicreset_ifpublic:sc_inclk;/OtherSignalDeclaration/FIFOinFIFO,rtl_fifo1isanembeddedcha
59、nnelrtl_fifortl_fifo1;/RTLFIFOprivate:unsignedm_size;/actualsizeofFIFOpublic:tlm_fifo(sc_module_namename,unsignedsize):sc_module(name),rtl_fifo1(rtl_fifo1,size+1),m_size(size)assert(m_size0);rtl_fifo1.clk(clk);rtl_fifo1.rst(rst);/Otherportassiciation翁虚吝饮宿铭粮大权年阎鹃伶排谁诣幸励渡垮幸外芋供蹦泵僳懦处解堤恢系统级设计描述语言SystemC系统
60、级设计描述语言SystemCtlm_fifo:write(const T& data)virtualvoidtlm_fifo:write(constT&data)write_data=data;dowait(clk-posedge_event();while(full=true);wait(clk-posedge_event();write_enable=true;wait(clk-posedge_event();write_enable=false;湘钓巡滩涕纸堰又檬窘葱渤壮血脆锹拱援慰猴曙树史臼惰糕逮禄束哲沮尝系统级设计描述语言SystemC系统级设计描述语言SystemC合成通道合成通道
61、p一一个个模模块块可可以以利利用用端端口口穿穿越越了了一一个个以以上上的的通通道道进进行行间间接接通通道道调调用用。被被穿穿过过的的通通道道似似乎乎被被“合合成成“到了一起。到了一起。p我我们们假假定定设设计计好好了了一一个个接接口口类类GetFIFO_if,它它的的一一个个成成员员函函数数getWriteFIFO()返返回回的的是是一一个个FIFO通通道道的的指指针针,如如返返回回上上节节中中定定义义的的tlm_fifo的的指指针针tlm_fifo,再再假假设设又又我我们们实实现现了了一一个个GetFIFO通通道道, data是是一一个个初初始始化化了了的的char型型数数据据。那那么么在在
62、Source模块中就可以通过下面的方式来写模块中就可以通过下面的方式来写FIFO: read_port-getWriteFIFO()-write(data);汾策午斜费珊旬沛雅樟敏垢疼骂口楼屋挺垛巳眨呢静裂坎淆随沤绢汁湖沃系统级设计描述语言SystemC系统级设计描述语言SystemC本章总结本章总结p本章讲述了接口、端口、通道三个基本概念,重要的是弄本章讲述了接口、端口、通道三个基本概念,重要的是弄清它们之间的关系。清它们之间的关系。弊牟劳漂搜克巨右氟来严尽慈肆驼碟胡砰使带溶话僵珍丈挚浦驮感楚味拉系统级设计描述语言SystemC系统级设计描述语言SystemC本章结束瑞锯缚留峪赣索打就夷腋容
63、锚味懊糠尿赃着缴秧踩煤肩爵响钵琢瑰斧拼友系统级设计描述语言SystemC系统级设计描述语言SystemC抽象类和纯虚函数抽象类和纯虚函数p在在C+中,不是所有类都有实际的意义。有一种中,不是所有类都有实际的意义。有一种类表达的是一种根本不存在的抽象概念,即所谓类表达的是一种根本不存在的抽象概念,即所谓抽象类抽象类 。p一个抽象类的例子如一个抽象类的例子如Shape,它本身作为一个抽象,它本身作为一个抽象的形状是没有意义的,只有具体化成具体的形状的形状是没有意义的,只有具体化成具体的形状如圆类如圆类Circle或者三角形类或者三角形类Triangle才有意义。才有意义。 弛奋倔罢活络夫涧徊惭秦今
64、温寻盯忌漾菜框樱秦潮删号诺贩灾孕嚎印别炕系统级设计描述语言SystemC系统级设计描述语言SystemC抽象类和纯虚函数抽象类和纯虚函数contpShape作为抽象类,其定义可以如下:作为抽象类,其定义可以如下:class Shapepublic: virtual void rotate (int) =0;virtual void draw (int) =0;virtual void is_closed()=0;它它的的所所有有方方法法用用“=0”标标识识表表示示纯纯虚虚函函数数(只只有有函函数数声声明明,没没有有函函数数体体)。C+不不允允许许创创建建抽抽象象类类对对象象,因因为为一一个个抽抽象类对象是没有意义的,所以下面的代码是错误的:象类对象是没有意义的,所以下面的代码是错误的: Shape S; /Shape是抽象类是抽象类ReturnReturn膜缘萧巳互政谋甘呈萨穴藕舱阀罪足缝寿坤沁盆振肾砖成再固寥嫩抖藤寥系统级设计描述语言SystemC系统级设计描述语言SystemC