
6 Тарау
ЖҮЙЕЛІК ДЕҢГЕЙДЕ
ЖОБАЛАУДАҒЫ SystemC ТІЛІ
Кіріспе
SystemC пайдалануының артықшылығы
Жүйелік деңгейде SoC жобалау және верификациялау үшін жүйелік деңгейде жобалаудың абстракцияларынасеніп құрылған, сонымен қатар қазіргі SoC қиындығын ескеретін жобалау және верификациялау тілі қажет.
Жүйелер және SoC – аппараттық бөліммен қатар, бағдарламалық процессорларда жүзеге асырылатын бағдарламалық бөлімді де қамтиды. Демек, SoC жобалау және верификациялау тілі аппараттық компоненттермен қоса бағдарламалық компоненттердің де үлгілерін интегралдауы қажет.Сонымен қатар ол бағдарламаланған процессорлардың команда жүйелерінің симуляторларын қолдау керек. Оның көмегімен құрастырылған объектілік код жасауға болады.
Жүйелер және SoC жобалық элементтер мен компоненттерден құралған. Олар әрқалай өңделеді, көптеген «есептеу үлгілерінде» – мәліметтер ағыны (dataflow), ақырғы автоматтар, дискретті оқиғалар және аналогті/аралас аймақтар – осы компоненттердің үлгілері әртүрлі есептеу болжамдарының негізінде тұжырымдалады. Демек, SoC жобалау және верификациялау тілі әртүрлі есептеуіш үлгілерінің интеграциялануын қолдау керек.
SoC схемаларын «жоғарыдан төмен» немесе «төменнен жоғары» жобалауға болады; яғни оны ары қарай бөлшектерге бөлінетін жоғарғы деңгей үлгілерінен, немесе орындалу эффективтілігін жоғарылату үшін абстракцияланатын (дерексізденетін) жүзеге асыру үлгілерінен, немесе аралас үлгілер жиынтығынан бастайды. Демек, SoC жобалау және верификациялау тілі абстракцияның әртүрлі деңгейлерінде – функционалдық, архитектуралық, транзакциялар деңгейінде және сигнал мен бит деңгейлерінде үлгілердің әрекеттестігімен қатар бірге жүзеге асырылуын қамтамасыз ету керек.
SoC үлгілері мен компоненттерін жасауда әртүрлі салалардан келген сарапшылар қатыса алады. Мысалы: аппараттық, бағдарламалық, алгоритмдік және жүйелік. Демек, SoC жобалау және верификациялау тілі осы сарапшылардың барлығына таныс белгілеулерге негізделу керек.
SoC жобалау барысында оның верификациясы жүргізілуі керек. Верификация абстракцияның әртүрлі деңгейлерінде өтілуі тиіс, функционалдықтан транзакция деңгейі арқылы жүзеге асыру деңгейіне дейін.Жобалаудың эффективтілігі мен өнімділігін арттыру үшін верификацияның тесттік платформалары осы деңгейлердің барлығында пайдалануға жарамды болу керек. Жобалау және верификациялау орталарынан қолдау табуға тиісті жаңа верификация үлгілері пайда болуда. Демек, SoC жобалау және верификациялау тілі арнайы верификациялық негіздерді қолдау керек, барлық деңгейлерде қолдануға жарамды және қайталап пайдалануды қолдау керек.
IP-блоктары мен платформаға негізделген жобалауда – жобалау және верификациялау компоненттерін қайталап қолдану қажет. Бұл үлгілер қайталап қолдануды ескере отырып жасалған белгілеулермен бірге кең таралған және түсінуге оңай тілдерде жасалса ғана мүмкіндігі жоғары. Демек, SoC жобалау және верификациялау тілі «қайталап қолдануға негізделе отырып жобалануы» керек.
Аппарттық бөлік жағынан SoC үлгілеу және жобалау кезеңдерін ғана емес, сонымен бірге жүзеге асыру кезеңін де ескеру керек. Цифрлық аппараттық бөліктің жүзеге асырылуы көбінесе RTL синтез көмегімен жүреді. Демек, SoC жобалау және верификациялау тілі жүзеге асырудың немесе синтездің RTL деңгейіне дейінгі талдап тексеруін қолдау керек.
SoC жобалары чипта күрделі коммуникация схемаларын сақтайды. Бөлек функционалдық блоктарды үлгілеу сияқты чиптағы коммуникацияларды да үлгілеу өте маңызды. Демек, SoC жобалау және верификациялау тілі әртүрлі деңгейлердегі коммуникацияларды үлгілеуді және осы үлгілерді жұмысқа жарамды жүйе үлгілеріне интегралдауды қолдау керек.
Неге SystemC SoC схемалары мен жүйелерін жобалау және верификациялау, үлгілеу және айрықшалау үшін қолайлы тіл болып табылады? Бұл тілдің ерекшеліктері мен артықшылықтарын жоғарыда көрсетілген талаптар тұрғысында көрсетейік:
SystemC – C++-қа негізделген және C++-та жазылған симуляция ядросы мен кеңейту кітапханасы негізінде құрылған. Демек, ол С++-қа негізделген барлық үлгілерді интегралдай алады, оған команда жүйелерінің симуляторлары, бағдарламалық үлгілер, аппараттық үлгілер және С немесе С++ кодында генерацияланатын, жоғарғы деңгейдегі үлгілендіру әдістерінің жұмыс қорытындылары кіреді.
SystemC каналдар, интерфейстар менбарлық модельдердің бірігіп жұмыс істеуін қамтамасыз ете алатын және әртүрлі есептеу әдістерінің негізінде модельдеуде үлкен икемділік беретін әдістер сияқты қарапайым құралдарды қолданады. SystemC-дағы барлығын мәліметтер ағынын, ақырғы автоматтарды, аналогты бөлігін және HW дискретті оқиғаларды қосатын жүйелік модельдер көрсетілген.
SystemC модельдерді барлық абстракция деңгейлерінде қолдайды және OSCI (Open SystemC Initiative) өзіндік бастама шегінде, стандартты семантиканы транзакциялар мен API деңгейінде пайдаланады. Ол модельдеудің бірігіп жұмыс істеуіне кепілдік бере алады.
SystemC тілі C++-ке негізделген, ал ол өз кезегінде С-ға негізделген. Дегенмен, кейбір HW сарапшыларына C/C++ таныс емес болуы да мүмкін. Аппараттық салада, бағдарламалық, алгоритмдер саласында және жүйелер саласында көптеген сарапшылар мен бағдарлама жасаушылар C/C++-пен азды көпті таныс.Техникалық жоғарғы оқу орындарында оқыту кезінде C/C++-пен кездеспеген түлек сирек кездеседі. SystemCкең таралған тілге негізделген.
SystemC көпдеңгейлі верификация кітапханасының (SCV – SystemC Verification library) көмегімен SystemC верификацияның заманауи әдістерін қолдайды. SCV тесттік платформаларын, транзакциялар жазбаларын (кіріс сигналдары, мониторлар, дыбыс беруді бақылау), айнымалылар рандомизациясын, шектеу/байланыс қондыруды жасауды, сонымен қатар транзакция негізіндегі верификацияның жаңа әдістемелерін қолдануды қолдайды.
SystemC –IP-блоктар базасында жобалау және С++ пен OSCI стандарттарының компоненттерінің транзакциялар деңгейінде өзара әрекетке негізделетін жобалық және верификациялық компоненттерін қайта қолдану мақсатымен жасалған. SystemC «қайталап қолдануға жобаланған».
SystemC жобаның RTL деңгейіне дейінгі аппараттық бөліктің модельдеуін және талдап тексеруін қолдайды. SystemC аппараттық, сигналдық, биттік құрылымдық компоненттердің өзара үйлесімділігін қамтамасыз етеді. Және қолмен талдап тексерумен қатар RTL деңгейіне дейінгі әдіс синтезін толық қолдайды.
SystemC чиптағы – стандартты шиналарды, желілік және нүкте-нүкте типіндегі (point to point) барлық коммуникация схемаларының түрлерін икемді,қолайлы және нәтижелі модельдеуге мүмкіндік беретін каналдар, модульдер, интерфейстар және әдістерді пайдалануға береді. Чипта коммуникацияларды модельдеу кәдімгі қалпымен SystemC-да қолдау табады.
Осылайша, SoC жобалауда SystemC-ның артықшылықтары анық. SystemC кәдімгі қалпымен SoC жобалау және верификациялау тіліне қойылған барлық негізгі талаптарды қолдайды.
Сол мезгілде ақырғы екі жылдың ішінде пікірталас едәуір күшейді және әлдеқашан бар, сондай-ақ жаңа, немесе жобалау тілдерімен түрлендірілген, әртүрлі орын алатын рөлдер бойынша аздап түсінбестік туындады. Егер біз SoC жобасында немесе күрделі схемаларды жобалауда қолданатын тілдер тізімін жасағымыз келсе, шамамен келесідей болып шығады:
Көптеген SoC жобаларында кем дегенде бір бағдарламалық процессор болады. Сондықтан бізге ең дұрысы нұсқамалар жиынтығының симуляторымен (ISS), жадтың ішкі жүйесі және шинамен (мысалы ARM+AMBA) жұмыс істеуге тура келеді, және осының барлығы SystemC-да жобалануы мүмкін. Шынында аса ықтимал екі процессор бар, RISC-типті және DSP, әрбіреуінде ISS және модельдеудің ішкі жүйесі бар.
Бұл процессорларда қандай да бір кірістірілген бағдарламалар жасалады: жүйелік және қолданбалы аппаратқа тәуелді SW(HdS), қолданбалы және делдалдық SW. Сәйкесінше C, C++ және/немесе Java тілдерін қосамыз.
Құрастырушылар командасы IP-блоктарды жасай алады немесе түрлендіре алады.IP-блоктардың кейбіреулері (мысалы, сигнал/суретті өңдеу блогы немесе кодтау/кері кодтау) Matlab/Simulink-қа (мәліметтер ағыны) модельдендіріледі, ал кейбіреулері Verilog немесе VHDL-ға.
Қазіргі күндерде SoC жобасының Verilog немесе VHDL тілдерінде суреттелген, шеттен алынған сандық IP-блоктарсыз өткізілуі сирек кездеседі.
Көптеген SoC жобаларында PLL (phase-locked loop) негізіндегі, шеттен алынған немесе жобалық командалармен жасалған AMS (analogue/mixed-signal) интерфейс немесе тактті генераторлар блоктары бар, олар – Spice-та, әлде Verilog немесе SoC жалпы жобасында AMS интерфейсын тестілей алу үшін, AMS интерфейс жағдайында (Verilog-A, VHDL-AMS)VHDL нұсқасында модельденеді. Тестілеу олардың модельдерін аралас модельдеу симуляторына қосу арқылы жүзеге асырылады.
Сонымен қатар жобаны верификациялау үшін тесттар және тесттік платформалар (testbench) құру керек. Бірақ бұл үшін негізінде HDL тілдер қолданылады, ақырғы кезде Verisity-дан «e», Synopsys-тан Vera, HDL негізіндегі Open Verification Library (OVL), сонымен қатар қазіргі кезде жасалып жатқан тілдер SystemVerilog және Verilog-2005 сияқты аппаратты верификациясының мамандандырылған тілдеріне (Hardware Verification Languages – HVLs) қатысты қызығушылық артуда. Әрине, бұл мақсаттар үшін SystemC верификациясының жаңа кітапханасы – SystemC Verification Library (SCV) да қолданылуы мүмкін.
Бекітулер және бекіту негізіндегі верификациялар жобалық сипаттамалардың спецификациясының, формальды (статикалық) да, динамикалық (симуляция негізінде) та верификация жағдайларында жаңа тәсілін көрсетеді. Бұл мақсат үшін Open Vera Assertions (OVA), IBM-ның Sugar-на негізделген Property Specification Language (PSL) және SystemVerilog тілінің бекітулері сияқты тілдер қолданыла алады. Шын жобада әртүрлі жеткізушілерден алынған IP блоктарда, жоғарыда айтылған тілдердің барлығында берілген бекітулер бар болуы мүмкін.
Егер біз жобада қолданылатын тілдер мен белгілеу жүйелерін есептесек, онда минимум тоғыз, максимум 16 немесе 17түрлі модельдер шығады.
Дегенмен, осындай мөлшердегі тілдермен жұмыс істеу тәсілдері бар. Алдымен біз әрбір тілге нақты мақсаттар немесе қолдану модельдері сәйкес келетінін түсінуіміз керек. Жобалаудың әрбір мәселесінекөбінесе бірнеше тілдер бірдей жарамды болуы мүмкін. Сонымен қатар қандай да бір жалғыз тілдің жүйелік жобалаудың барлық мәселелерін – жоғарғы деңгейдегі спецификациядан RTL жүзеге асыруына дейінгі; модельдеу арқылы верификациядан синтезге дейін; кіріктірме бағдарламаларды құрудан аппараттық жобалауға дейін шешетіні екіталай.
Жүйелік деңгейде жобалаудың кең аймағын қарастырғанда, SystemC –HW-SW платформасын транзакциялар деңгейінде, RTL деңгейіндегі жүзеге асыруға дейінгі,уақытқа тәуелсіз функционалдық үлгілеуденжүйелік деңгейдегі жобалаудың ең маңызды абстракция деңгейлерін өтейтін, жүйелік жобалаудың тілі екені анық. Ол расында да жүйелік абстракция деңгейлерінде жобалық командаларға жобаларды модельдеуге және верификациялауға, содан кейін бұл жобаларды жүзеге асырудың бөлшектерін қамтып көрсетіп, талдап тексеруге, және соңында, аппараттық жобаның жүзеге асыруы мен верификациясын жүйелік модельмен байланыстыруға мүмкіндік береді. SystemC-да транзакциялар деңгейінде жобалық платформаның үлгі-түптұлғасын жасауға болады. Ол одан арғы талдап тексеруге көшпес бұрын жүйелік деңгейде тестті платформаларды тез верификациялауына мүмкіндік береді. SystemC – аппараттық және бағдарламалық бөліктері аралас жүйелер мен платформаларда туындайтын барлық мәселелердің шешімі болатын тіл.
Одан әрі SystemC тілін және оның жүйелік деңгейде жобалауда қолданылуын талқылайық. SystemC мәнмәтіні мен оның басқа тілдермен байланысын қысқаша қарастырғаннан кейін, SystemC пайдалануының басты абстракция деңгейлері мен модельдерін қарастырамыз. Онда кіреді:
Жүйелік алгоритмдерді фукционалды модельдеу.
Транзакция деңгейінде жүйелік архитектураларды модельдеу.
RTL деңгейінде модельдеу және жүзеге асыру маршрутына SystemC-ны байлау.
SystemC-ға верификация тақырыбына жақындағы қосылулар: SystemC верификациясының кітапханасы.
Соңында біз SystemC-ның стандарт ретінде болашақ даму мүмкіндігін, сонымен бірге SystemC-ның мүмкін болатын жаңа ерекшеліктерін талқылаймыз.
SystemC мәнмәтіні
Жобалық тілдерді көпэтажды ғимараттың бөлмелерімен салыстыруға болатыны алдыңғы талқылаудан анық: оларда бөлменің төбесі де едені де бар (үстінде және астында шектеулері). Бүкіл ғимаратты үстіден астыға немесе астыдан үстіге дейін қамтитын тілдер болмайтындықтан, жобалық командалар сәйкес «жиһазды» (жоба, верификация және шектеулер туралы мәлімет) бір қабаттан екіншісіне жеткізе алу үшін, біз қабаттарды бір-бірімен баспалдақ (қол әдістер) немесе лифттың (автоматтандырылған әдістер)көмегімен дұрыстап байланыстыруымыз керек. Осылайша біз жобалық және верификациялық тілдердің үйлесімді әрекеттестігіне қол жеткізе аламыз.
Бір жағынан, SystemC вентильді деңгейдегі жобалау мен HDL үшін қолайлы әдіс болып табылмайды, екінші жағынан, Verilog-2005 (және System Verilog) жүйелік деңгейде модельдеуге және жоғары нәтижелі жүйелік түптұлғаларды құруға жарамайды.Дәл осы әртүрлі тілдердің әрекеттестігі минимум тәуекелмен жоғары нәтижелі жобалау маршруттарын жасауға мүмкіндік береді.
Осыны ескере отырып, SystemC-ның тілі де жоғарыдан шектелгенін ұмытпау керек.Дегенмен, 3.0 жаңа нұсқасы ең дұрысы бағдарламаларды жобалау және модельдеу мүмкіндіктерін қамтитын болады, ол бағдарламалық қамтамасыздандыруды әзірлеу платформасы болмайды. UML көмегімен бағдарламаларды модельдеу әлеміндегі алға жылжулар осы жылы UML 2.0 нұсқасының шығуына үміт береді. Жаңа нұсқа жүйелік бағдарламаларды модельдеу мен кодты генерациялау мүмкіндіктерін айтарлықтай жақсартуға уәде береді, әсіресе нақты уақыттағы кірістірілген жүйелер жағдайында. Болашақ әдістемелік жұмыс үшін көп үміт күттіретін салалардың бірі үш тіл әлемін құру болып табылады. Онда UML-да дайындалған және модельденген бағдарламалар платформаға оңтайландырылған кодты генерациялай алады. Ал код өз кезегінде транзакциялар деңгейінде SystemC негізіндегі платформалық модель шегінде, сәйкес ОС модельдерін қолданумен жасала алады. Жобаның аппараттық бөлігі Verilog-2005 және VHDL көмегімен, алдында жасалған функционалдық прототиптерді қолданумен жүзеге асырылады және верификацияланады. Бұндай амал жүйелік деңгейде жобалауда SystemC-ны қолдану (мәнмәтінмен) модельдерінің бірі болып табылады. Әрине SystemC-ны уақытқа тәуелсіз функционалды аппарттық модельдерді құру, кейін оларды регистрлік беріліс (RTL) деңгейінде жүзеге асыруға ауыстырып, ары қарай Verilog немесе VHDL көмегімен жүзеге асыру үшін қолмен тарату немесе жинақтауға қолдануға болады.Бұл сондай-ақ SystemC-ны жүйелік жобалау тілі ретінде қолданудың қызықты моделі.
SystemC-ны қолданудың мәнмәтіндері жобалаудың қандай да бір қатаң маршрутын талап етпейтінін естен шығармау керек. Мысалы, жоғарыдан төменге, төменнен жоғарыға немесе тағы басқадай. Жобалау маршруттарының көп бөлігі қайталама болғандықтан, және жобаның барлық бөліктері абстракцияның бір деңгейінде модельденуі сирек кездесетіндіктен, модельдеу абстракцияларының деңгейлері бірыңғай жүйелік модельге жиі қосылатынын ескерткен маңызды. Сонымен бірге қандай да бір жоба сирек таза беттен басталатынын білдіретін, қайталап қолдану тәжірибесін ескеру керек.Кіріспеде көрсетілгендей, тәжірибелік SoC жобалар әртүрлі абстракция деңгейлеріндегі көптеген түрлі-түрлі жобалық және верификациялық модельдердің әрекеттестігін талап етеді.
Әртүрлі модельдеу деңгейлерін қолданатын көп таралған жобалау әдістерін атап өтейік: верификацияланатын жобаның толық жүзеге асыру деңгейіндегі моделін,сынақтама импульстарын генерациялайтын және баға беруді бақылайтын, тестті платформаның абстрактілі моделімен біріктіру; симуляцияны тездету немесе блоктың интеллектуалды меншігін қорғау мақсатымен бөлек IP блоктың абстрактілеу моделін қолдану; бір блоктың спецификация деңгейінен транзакция деңгейіне және ары қарай RTL модельге талдап тексеру, және берілген блоктың спецификация деңгейінде қалған басқа блоктармен бірыңғай жүйелік модельге бірігуі.
SystemC аспектілері
Модельдеу дәлдігі
Жүйелік деңгейдегі жобалық модельдердің VSIA (Virtual Socket Iterface Alliance) классификациялау жағдайындағыдай, кез-келген модельді зерттеп және оны ақырғы жүзеге асырумен салыстыра отырып, біз модельдің дәлдігін бірнеше тәуелсіз бағыттармен өлшей аламыз. Мұнда құрылымдық дәлдік кіреді: модель мен нақты жүзеге асыру құрылымы арасындағы айырмашылық дәрежесі. Модель функционалдық модуль мен оның сыртқы интерфейсінің дәл мінез-құлықтық көрінісі бола алады, бірақ сонымен бірге оның ішкі құрылымы IP блок немесе модульдың ақырғы жүзеге асыру құрылымынан қатты ерекшеленуі мүмкін. Мысалы, модульде аппараттық және бағдарламалық жүйе бөліктері болуы мүмкін, бірақ сонда да абстрактілі функционалды модель осы ішкі құрылымдардың кез-келгенін көрсетпеуі де мүмкін. Аппаратты жүзеге асырылған IP блоктарда сигналдар негізіндегі толық интерфейсті шығысы болады, бірақ интерфейс моделінің құрылымы модельдің орындалу эффекивтілігі артығырақ болу үшін мәліметтер типі қиынырақ болатын абстрактілі интерфейсті қолдана алады.
Жүйелік модельдердің уақыттық дәлдігі өте қатты өзгере алады. Басында уақыт дәлдігі оқиғаларды реттеу деңгейінде болуы мүмкін. Сондықтан уақыт наносекунд немесе такттарда шығарылса да, маңыздысы модельдердің орындалу реттілігі. Сондай-ақ уақыт жүзеге асыру деңгейіндегі шектеу ретінде қарастырыла алады және уақытқа шектеу қойылған жүйелік модельдің орындалуы көбінесе анализдің орындалу дәлдігі мен жалпы жүйенің өндірімділігі үшін жүргізілуі мүмкін. Жүйелік деңгейде ең дәл уақыт негізінде тактарға дейін дәл болады. Дәл уақыттық сипаттамалар негізінен жүзеге асыру деңгейінде мағызды.
Функционалдық дәлдік – жүйелік модель ақырғы жүзеге асырудың толық функционалдығын қаншалықты дәл жаңғыртатынын көрсетеді. Модельді жеңілдету мақсатымен, оның жасалуына кететін уақытты азайту немесе орындалу жылдамдығын арттыру, жобалық командалар қиын немесе сирек қолданылатын функционалдық аспектілерді қалдырып кете алады. Мысалы, егер олар сирек қоладанылатын болса, әртүрлі диагностикалық немесе тесттік режимдерді тастап кете алады; DSP қосымшасы жағдайында, функционалдық модель арифметика мен құбылмалы үтірлі мәліметтерді қолдана алады,ақырғы жүзеге асыру фиксацияланған үтірлі арифметиканы қолданса да. Бұл жағдайда модель ақырғы жүзеге асыруды анық көрсетпесе де, құбылмалы үтірлі модельдеу тезірек орындалады.
Сонымен бірге модельдер дәлдігі мен мәліметтерді ұйымдастыру толықтығына байланысты ерекшеленеді. Бұл модельдегі және ақырғы жүзеге асырудағы мәліметтердің орналасуы арасындағы үйлесімділік деңгейін білдіреді. Модельде ақырғы жүзеге асырудағыға қарағанда мәліметтерді тез орналастыратын схемалар қолданылуы мүмкін. Дәлдіктің басқа бағыты коммуникациялық интерфейстер мен протоколдарды модельдеумен байланысты. Аппараттық деңгейде дәл сигналдық интерфейстер мен протоколдардан ерекше, транзакциялар және мәліметтердің абстрактілі құрылымы негізіндегі, абстрактілі коммуникацияларды модельдеу,керек дәлдікті жоғалтпай, алдындағысынан тез жұмыс істейтін модельді құруға мүмкіндік береді.
Есептеу модельдері
Есептеу моделі (model of computation – MoC) жүйелік деңгейде жобалаудың негізгі ұғымы болып табылады. Бұл ұғым аппараттық деңгейде жобалауда сирек талқыланған, сондықтан көптеген оқырмандарға қызықты болуы мүмкін. Есептеу моделін бейресми түрде модельдеудің нақты стилі ретінде көрсетуге болады. Ол берілген жобаға немесе қолданбалы салаға жақсы сәйкес келетін және сонымен бірге симуляция, синтез және анализда қажет ерекшеліктерге ие. Мысалы,көптеген қосымшалардың сигналдар мен кескіндерді өңдейтін жүйелік модельдерін мәліметтер ағыны моделінің көмегімен, дәлірек айтқанда оның варианттарының бірі SDF (synchronous data flow – мәліметтердің синхронды ағыны) көмегімен құруға болады. Егер жүйелік модель SDF қағидаттарына сәйкес келсе, онда эффективті симуляциялық модельдер және жүзеге асыру жоспарын жасауға болады. Басқа MoC кейбір формальды анализ әдістерін қолдай алады.
Ресми түрде есептеу моделін үш анықтамамен көрсетуге болады:
Базалық уақыттық модель (уақытсыз, немесе берілген дәлдікпен толық және бүтін сандар негізінде ) және уақыттық модель негізіндегі оқиғаларды реттеу семантикасы (қатаң реттеу, нон-детерминизм, ішінара реттеу, кездейсоқ реттеу және т.б.).
Процесстер арасындағы әрекеттестік. Оқиғалар, объектілер және бір процесстен екіншісіне мәліметтерді беру семантикасы.
Процессті «іске қосу» немесе активтеу шарттары (кейде «процессті іске қосу ережелері» деп аталады). Мәліметтер ағыны моделінде, мысалы, процесс кірісіне белгілі мөлшерде токендер келгенде іске қосылады.
Көптеген жобалау тілдері, дәстүрлік HDL тілдер сияқты, бір есептеу моделін қолданады(жүйе семантикасының жинақтылығы үшін «уақыттық интервалдар» сеантикасымен қатар жүретін, жалпы «уақыттық шкалада» реттелген бөлек мәселе). Дегенмен SystemC да өзінің тіліне және симуляциялық өзегіне жазылған бір есептеу моделін қолданады, бұл модель жалпы және оның үстіне әртүрлі жеке есептеу модельдерін жазуға болады. Ол күйге келтірілген оқиғалар мен синхронизация мүмкіндігін, мамандандырылған каналдар, порттар, интерфейстер және модульдерді құру мүмкіндігін қолдайды. Сонымен бірге оған жалпы уақыттық модель кіреді. Осының барлығы мамандандырылған есептеу модельдерін құруға мүмкіндік береді. Толық мамандандырылған бір MoC класына кіретін жүйелік модельдер жағдайында, берілген МоС класының эффективтілігі артығырақ симуляциясына қол жеткізу үшін SystemC симуляциялық өзегін оңтайландыруға болады. Мысалы, статикалық жоспарланған мәліметтер ағыны жағдайында айтарлықтай тез орындалатын статикалық жоспарланған симуляциялық модельдіжасауға болады.
SystemC тілі мүмкін есептеу модельдерінің көбін қолдайды және оның ашықтығы көп тәжірибе жасауға мүмкіндік береді. Көп тәжірибелер табысты болды, мысалы мәліметтер ағыны мен процесстер желісі (Кана процесстер желісі (Kahn)), RTL деңгейінде аппараттық модельдеу, желілік модельдеу, SystemC симуляциялық өзегінің үздіксіз уақыттық модельдеу мен симуляциямен (AMS жобалары үшін) байланыстыру, және желілік симуляторлар.
Функционалдық модельдеу
Жүйенің функционалдық моделі – орындалатын спецификация ретінде белгілі. Жалпы бұл SystemC-да модель және модельдер иерархиясын таратқан жобалық спецификациялар мен талаптар. Бұл функционалдық модельдер мүмкін жүзеге асырумен байланыссыз деп болжанған. Бірақ қарапайым жағдайда функционалдық модельдерді бөліктерге және құрылымына бөлгенде, оған модель кем дегенде бір платформада жүзеге асырылу мүмкіндігі жайлы жобалаушының кейбір ойлары салынады. Мысалы, теориядамәліметтерді кодтау немесе қайта кодтау моделі, жобалық спецификацияның кез-келген аппараттық және бағдарламалық компоненттерге бөлінуіне тәуелсіз, бір процесс бола алса, алгоритм қалай жүзеге асатынын өзіне алдын-ала елестететін жобалаушы, мүмкін басқа жүйелердегі ұқсас алгоритмдері бар алдыңғы тәжірибелері негізінде, екі немесе одан көп тізбектес процесстерден тұратын модель жасай алады. Олардың кейбіреуі аппараттық жүзеге асыруға арналған, ал кейбіреулері RISC немесе DSP процессорларында орындауға арналған. Сондықтан жүзеге асыруға тәуелсіз атқарылатын спецификацияны талап ету қиын; кейде функционалдық модельдің құрылымында көрсетілген жобалау тәжірибесі, ескермеу үшін өте бағалы болып табылады.
Функционалдық модельдер уақыттық (уақытқа тәуелді (timed)) немесе уақытқа тәуелсіз (untimed) бола алады. Біз функционалдық спецификациямен жұмыс істейтініміздіктен, бәсеңдейтін жобалау процесінде (top-down) уақытқа тәуелсіз функционалдық модельден бастап, ары қарай талдап тексеру процесінде кідіріс туралы ақпаратты кірістерген жөн.Бірақ, функционалдық модель жүзеге асыруға тәуелсіз болғандықтан, бұл кідіріс туралы ақпарат нақтылы жүзеге асырудың бөлігі ретінде қарастырылмауы керек. Бұл– жүзеге асырылу процесіне берілуі қажет қарапайым уақыттық шектеулер, жобаланатын жүйе және оның сипаттамаларымен қондырылған минималды жүйе өнімділігіне қойылатын талартар.
Функционалдық модельдер негізінен абстрактілі болғандықтан, спецификацияға бағдарланған және тез орындалуға арналған, интерфейстер абстрактілі, екі нүктелік (point-to-point), ( модульдар арасындағы аралық тасушыларсыз тура байланыс), абстрактілі мәліметтерді қолданатын (эффективтілігі үшін), және қарапайым механизмдер, оқу мен жазып алуды оқшаулайтын FIFO сияқты болады (немесе оқшауламайтын, жүйе спецификациясында мәліметтерді жоғалту мүмкіндігі болса). Бұл функционалдық уақыттық модельдерде де қолданылады, бірақ бұл жағдайда кідіріс туралы ақпарат жүйенің өнімділігінің спецификациясы негізінде қосылуы мүмкін.
Алгоритмдерді модельдеу үшін мәліметтер ағыны (dataflow) деген функционалдық модельдеу типі жиі қолданылады, әсіресе сигналдар және кескіндерді өндеудің қосымша салаларында. Жалпы есептеу моделі Кана (Kahn) процесстер желісі болып табылады. Оның арнайы жағдайлары – мәліметтер ағынының статикалық және динамикалық модельдері. Осындай функционалдық алгоритмдік модельдер акторлардың (actors) көмегімен кіріс мәліметтер ағынынан өзгертілген шығыс мәліметтер ағынын көрсетеді.SystemC – ағындарды, FIFO каналдар мен оқу/жазып алуды оқшаулайтын әдістерді қолданып, мәліметтер ағындарының модельдері мен процесстер желілерін жүзеге асыруының эффективті тәсілдерін қамтамасыз етеді. Бұндай функционалдық модельдерге уақыттық кідірістерді еркін қосуға болады.
Ақырғы автоматтар жалпы басқару үшін жиі қолданылады. Олар мәліметтер ағыны модельдерімен әрекеттесе алады; ал уақыттық және уақытқа тәуелсіз модельдер сондай-ақ FIFO каналдар көмегімен әрекеттесе алады.
Транзакция деңгейінде модельдеу
Транзакция деңгейінде модельдеу модульдар арасындағы әрекеттестікті жалпылауға мүмкіндік береді. Сондықтан модульдердің функциясы нақты анықталады, ал олардың арасындағы әрекеттестік симуляцияны тездету үшін оңтайландырылған. Бұл оңтайландыруға, дербес битті сигналдардың орнына, модульдер арасында берілетін ақпаратты сипаттау үшін, абстрактілі мәліметтер типін қолданумен қол жеткізіледі; сонымен қатар сигналдық оқиғалардың орнына интерфейстік әдістер көмегімен. Жалпы, сигналдар деңгейіндегі симуляция,мәліметтердің толық құрылымдарын жіберетін эффективті айналым әдістерімен алмастырылады. Бұл симуляция жылдамдығын RTL-дағы симуляциямен салыстырғанда 100-1000 есе арттыруға мүмкіндік береді. Осыған қоса транзакция деңгейінде модельдеу кезінде кейбір транзакциялар ескерілмеуі мүмкін. Шиналардың толық транзакциясы жиынтығынан, кейбір қателер немесе апаттық тоқтау транзакциясы мүлдем модельденбеуі мүмкін, немесе шина моделі қолдайтын мәліметтерді жіберудің басты транзакциясы негізінде, бастапқы күштерінің шоғырлануы мақсатымен, келесі кезеңде ғана модельдену. Арбитраж сатысы модельденудің басында ескерілмеуі мүмкін, және келесі кезеңде, немесе алмастырып қою (кітапханадан) негізінде талдап тексеру процесінде қосылады.
OSCI (Open SystemC Initiative) байланысты мамандарда, транзакция типтерінің стандартты жиынтығын анықтауда үлкен қызығушылық бар. Олардың мақсаты транзакцияларды жүйелік модельдеуде қолдану және әртүрлі ІР модельдердің әрекеттестігін қамтамасыз ету. Бұл SW бағдарламашының («бағдарламалық модель») да аппараттық жобалаушының («тактына дейін нақты аппараттық модель») да көзқарасы болып табылады. Талдап тексеру әдістері кітапханалық алмастыру негізінде, белгілі деңгейлерде, АРІ интерфейстерінің стандартты жиынтық негізіндегі, осындай транзакциялық модельдерді қолдануды қолдай алады.
Транзакция деңгейінде модельдеу платформалы бағдарланған SoC модельдер үшін өте маңызды. Мысалы, түзетілген модельдеуді қамтамасыз ету, және шинаны жүктеу, шинадағы шиеленіс, сонымен бірге шинаның жалпы жүйенің өнімділігіне әсері сияқты жоғарғы деңгейдегі коммуникацияда әртүрлі эффекттерді зерттеу. Сонымен қатар бұл платформалы бағдарланған модельдер тактті дәлдікке дейін талдап тексерілуі мүмкін. Бұл аппараттық жобалауға қажет, және аппаратты жобалау процесінде тесттік платформалар немесе эталондық модельдер ретінде қызмет ете алады.
RTL деңгейі және жүзеге асырумен байланыс
SystemC тілі бар модельді талдап тексеруге немесе жаңа модельдер жасап, VHDL немесе Verilog-тағы RTL модельдердің синтезделу дәрежесін дәл анықтауға мүмкіндік береді.
RTL есептеу модельдерінде барлық процесстер арасындағы коммуникациялар сигналдар деңгейінде өту керек; процесстер тізбектес немесе комбинаторлық логиканы көрсетеді; олар бірінші жағдайда синхроимпульстердің фронттарына сезімтал, ал екінші жағдайда – кіріс сигналдарының жиынтығына. RTL модульдердің порттары ақырғы жүзеге асырудың ажыратуы мен біріктірілуіне сәйкес келуі керек, және олар міндетті түрде тактілеріне дейін нақты анықталу керек.
Жобалау маршрутында SystemC моделін RTL деңгейіне дейін талдап тексерудің қажеті жоқ, тек қолайлылық үшін болмаса. HW симуляциясының бағдарламалармен әрекеттесу мүмкіндігі SystemC мен HDL-дағы модельдерді біріктіруге рұқсат етеді; мінез-құлықтық синтез SystemC моделіне RTL деңгейінен құтылуға мүмкіндік береді; сонымен қатар RTL конструкциясындағы SystemC астындағы жиынтықтарын трансляциялауға мүмкіндік береді.
Верификациялық кеңейтілімдер
SystemC (SCV) верификациясының кітапханасы[7,8] SystemC қауымдастығына тестілеудің көптеген жаңа мүмкіндіктерін ұсынады, ол SystemC және SystemC-ның басты кітапханалары негізіндегі кеңейтілімдер кітапханасы ретінде құрылған еді.
SCV SoC-ты жобалау үшін қажет IP ретінде де, өзге жобаларда қайталап қолдану үшін қажет IP ретінде де қарастырылатын верификациялық IP-блоктарды құруға мүмкіндік береді. Верификацияға (жобалау үрдісінде) қанша күш-жігер жұмсалатынын (бейресми көрсеткіштер бойынша –50-70%) ескеретін болсақ, верификациялық ІР құру мүмкіндігі өте маңызды болып табылады.
SCV кітапхананың басты верификациялық мүмкіншіліктеріне келесілер кіреді:
Мәліметтердің өзін диагностикалауы (introspection), және еркін типтердің мәліметтерінің элементтерін басқару мүмкіндігі. SCV осы негізде пайдаланушымен белгіленген типтерді басқарып, оларға сілтеме жасай алады – мысалға, пакеттер мен фреймдерді көрсететін құрылымдар. Бұл осындай объектілерге PLI (Programming Language Interface – Verilog) шығу мүмкіндігін қамтамасыз етеді және осындай типтердің барлық атрибуттары мен сипаттамаларын анықтауға мүмкіндік тудырады.
Транзакциялар жазбасы, ол транзакциялар негізіндегі верификацияны (TBV) транзакциялар деңгейіндегі жүйелерді модельдеудің құрамдас бөлігі етеді. Сонымен қатар TBV оқиғалар тізбегін бір «транзакция» ретінде маркілеу арқылы, симуляцияны жекелеген оқиғалар деңгейінде жазып, нәтижені тестілік платформаның ортақ транзакциялары деңгейіне жалпылауға мүмкіндік береді, сондай-ақ осы жалпыланған деңгейде транзакцияларды жазып, маркілеуге мүмкіндік туғызады. SCV өзара байланысты транзакцияларды ағымдарға топтауға жағдай туғызады, ол өз кезегінде симуляциялар нәтижесі бойынша іздестіру жүргізуге, жоғары деңгейдегі верификациялық транзакциялар, сондай-ақ бақылаушы және қадағалаушы бағдарламалар құруға мүмкіндік туғызады.
Рандомизация – қарапайым, өлшеулі және қойылған шектеулер негізінде. Рандомизация қазіргі заманғы функционалды верификация үрдістеріндегі күшті әдіс болып келеді. SCV қарапайым рандомизацияны (онда, мысалға алатын болсақ, мәліметтер мекенжайларының мәндері дұрыс мекенжайларды теру арқылы жүзеге асатын қарапайым интервалды функция негізінде қалыптасады) қоса алғанда, бірнеше типтермен жұмыс жасайды. Қарапайым рандомизация дұрыс интервалдарды күрделі жолмен теру арқылы мәндердің бөлінуін жасауға, сондай-ақ бос интервалдар құруға мүмкіндік береді.
Өлшеулі рандомизация берілген аралықта мағыналары не көптеген мағыналары бар ықтималдықтар үлестірімін байланыстыруға мүмкіндік туғызады, сол себепті күрделі үлестірімдер (мысалы биноминал, Пуассон, қалыпты) тестілік платформалармен байланыстырылуы мүмкін. Бұл – тестілік платформада нақты статистикалық үлестірімдерді көрсетудің жақсы амалы.
Қойылған шектеулер тестілік платформаларда күрделі кездейсоқ оқиғалардың орын алуы кезінде ең жоғарғы абстракцияға қол жеткізуге жағдай жасайды. Олар тестілік айнымалының мүмкін мәндерін теруде күрделі шарттар мен амалдарды енгізуді мүмкін етеді. Мысалы, коммуникациялық қосымшаларда мекенжайлар интервалы, қателердің туындауы, және өзге де шектеулер бойынша пакеттер үлестірілімін жасауға болады. SCV шектеулер қою және осы шектеулерді толықтай қанағаттандыратын шешімдер табу механизмін қолдайды, бұнда: шешімдер барлық мүмкін мәндер бойынша біркелкі бөлінеді; механизм өнімділігі шектеулер мен тестілік айнымалылар санының артуы жағдайында тиімді; механизм тәртіпке еш байланысты емес және шешілмейтін жүйелердің (тым артық шектеулер санымен) кейінге қалдырылуын қолдайды.
SCV сонымен қатар: верификация нәтижелерін сақтау және зерттеу үшін қажет қарапайым дерекқорды ұсынады; SystemC мен HDL симуляторды байланыстыратын қарапайым механизм ұсынады; қателіктерді өңдеу мен кейінге қалдырудың үйлесімді механизмін ұсынады.
Қорытынды – SystemC тілінің болашақ дамуы
және SLD (System-Level-Design) талаптары
Жоғарыда көрсетіліп өткен қысқаша шолуда модельдеудің әртүрлі мақсаттары үшін System C-ны пайдалану, сондай-ақ SCV верификациялық кітапханасы туралы қарастырылды. Open SystemC Initiative (OSCI) [9] ұйымы SystemC 2.01-ді IEEE-ге стандарттау бойынша егжей-тегжейлі құрастырылған жоспар ұсынып, тілді дамыту бойынша жұмысты жалғастырмақшы. Қазіргі уақытта OSCI-дың тілді дамыту бойынша тобы келесідей мәселелер бойынша жұмыс жүргізуде:
Стандарттау үшін IEEE-ге берілу жоспарланған SystemC 2.01 бойынша анықтамалық дайындау.
Қателердің түзетілулерінен және SW есептерді модельдеуді қолдау бойынша жаңа ерекшеліктерден – мысалы ағымдарды динамикалық құру және кетіру – тұратын SystemC-тың 2.1 нұсқасын беру және жүзеге асыру.
Мәліметтер ағымдары мен сәйкесінше тілдік кеңейтілімдердің моделін қолдау қандай болу керектігі туралы анықтама дайындау.
Модельдеу бойынша топ транзакция деңгейінде ІР блоктардың TLM үлгілерінің орынды абстракцияларын, сондай-ақ үлгілердің өзара әрекеттесуін жүзеге асыруға жәрдемдесетін стандартты АРІ интерфейстерді белсенді түрде зерттеуде.
AMS (analogue/mixed-signal) бойынша жұмысшы топ AMS саласында өзара әрекеттесу мүмкіндігіне қол жеткізу үшін SystemC кеңейтілімдерін құруда үлкен жұмыс атқарды. Олардың жұмысы бірнеше есептерде қарастырылған [6,10].
SystemC-ның 3.0 нұсқасы бойынша үлкен жұмыс жүргізілді, ол бағдарламалық модельдеуді және SystemC-ның HW мен SW үлгілерінің келесідей ерекшеліктері – RTOS жоспарлаушыларды модельдеу, есептер құру және оларды басқару, ОС деңгейінде хабар алмасу – негізінде өзара әрекеттесу мүмкіндігін қолдайтын болады.
SVC кітапханасы IEEE-ге стандарттау үшін берілуі әбден мүмкін.
Барлық жүргізілген жұмысқа қарамастан, SystemC-ны үлгілі платформа ретінде пайдалануға болатын талай қарастырылмаған қызықты салалар бар:
Жоғары деңгейде жобаны сипаттаудан түпкілікті жүзеге асыруға өту. Мысалы, мінез-құлықтық нысандар негізіндегі бірінші буынның мінез-құлықтық синтезі әдетте сәтсіз болады, ол көптеген себептерге байланысты, негізінен нәтижелердің нашар сапасына байланысты. SystemC және жоғары деңгейдегі абстракциялар модельдеуді анағұрлым жеңілдетеді, дегенмен түпкілікті жүзеге асыру негізінен талдап тексерудің қол әдістеріне жүктеледі. Таңдалған платформада аппараттық немесе бағдарламалық жүзеге асыруды (аппараттық бөлік ретінде стандартты ұяшықтар, құрылымдалған ASIC немесе FPGA; бағдарламалық бөлік ретінде – платформаға бағытталған оңтайландырылған С-код) алу мақсатында жоғары сапалы және жоғары өнімді код үлгісі негізіндегі («жүйелік синтез») генерация міндетін орындауда әлі көп нәрсені жетілдіруге болады. Бүгінгі таңда қарастырылып отырған тақырып бойынша үміт күттіретіні – со-процессорлар синтезінің қолданбалы аймағы.
Жүйелік деңгейдегі жоспарлауда «есептеу үлгілері» мәселесі әлі толықтай шешілмеген. Біріктірілген HW-SW жүйелерінің барлық құрамдас бөліктерін қалайша тиімді модельдеуге болады; қосалқы жүйелер үлгілерінің композициясы көмегімен қалайша жүйелік үлгі құруға болады; түпкілікті жүйені қалайша верификациялауға болады – осылардың барлығы әлі күнге дейін өзекті мәселелер болып табылады. Жүйелік өзгешеліктер мен платформалық үлгілерді аппараттық және бағдарламалық жүзеге асырумен байланыстыратын жоспарлау бағытын құру – ресімдеуден тек ұтатындай тиімді өзгерістердің болуын талап етеді.
Осы мәселелердің барлығы ұлғайып келе жатқан SystemC қауымдастығына ары қарай зерттеу және тілді дамыту үшін жақсы мүмкіндік береді.