2023年全國(guó)碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  基于SystemC的語音備忘器設(shè)計(jì)</p><p><b>  摘要:</b></p><p>  隨著VLSI的集成度越來越高,設(shè)計(jì)也越趨復(fù)雜。傳統(tǒng)的設(shè)計(jì)方法如原理圖輸入、HDL語言描述在進(jìn)行復(fù)雜系統(tǒng)設(shè)計(jì)時(shí),設(shè)計(jì)效率往往比較低。特別是在算法由軟件轉(zhuǎn)化為硬件的環(huán)節(jié)上,傳統(tǒng)的設(shè)計(jì)方法的效率不是很高,設(shè)計(jì)者往往要耗費(fèi)大量的時(shí)間和精力手工進(jìn)行算法的轉(zhuǎn)化

2、。為解決這些問題,一種新的系統(tǒng)級(jí)的設(shè)計(jì)方法SYSTEM C 被提出。SYSTEM C是一種方法,也是一個(gè)C++庫,用SYSTEM C可以很方便地實(shí)現(xiàn)一個(gè)軟件算法的硬件實(shí)現(xiàn),以及完成一個(gè)系統(tǒng)級(jí)的設(shè)計(jì)。</p><p>  關(guān)鍵詞:SystemC、語音備忘器、UML</p><p>  SystemC的開發(fā)平臺(tái)</p><p><b>  概述</b&g

3、t;</p><p>  隨著VLSI的集成度越來越高,設(shè)計(jì)也越趨復(fù)雜。一個(gè)系統(tǒng)的設(shè)計(jì)往往不僅需要硬件設(shè)計(jì)人員的參與,也需要有軟件設(shè)計(jì)人員的參與。軟件設(shè)計(jì)人員與硬件設(shè)計(jì)人員之間的相互協(xié)調(diào)就變的格外重要,它直接關(guān)系到工作的效率以及整個(gè)系統(tǒng)設(shè)計(jì)的成敗。傳統(tǒng)的設(shè)計(jì)方法沒有使軟件設(shè)計(jì)工作與硬件設(shè)計(jì)工作協(xié)調(diào)一致,而是將兩者的工作割裂開來。軟件算法的設(shè)計(jì)人員在系統(tǒng)設(shè)計(jì)后期不能為硬件設(shè)計(jì)人員的設(shè)計(jì)提供任何的幫助。同時(shí)現(xiàn)在有些大

4、規(guī)模集成電路設(shè)計(jì)中往往帶有DSP Core或其它CPU Core。這些都使得單純地用原理圖或硬件描述語言來設(shè)計(jì)、仿真這么復(fù)雜的系統(tǒng)變得十分困難。System C就是在這些矛盾的背景下提出的。它的出現(xiàn)為復(fù)雜的系統(tǒng)設(shè)計(jì)提供了一條有效的解決途徑。 System C 是由 Synospy Inc. 提出的,目前最新的版本為V2.0。它提出的目的就是以一種系統(tǒng)設(shè)計(jì)的思想進(jìn)行系統(tǒng)設(shè)計(jì)。它將軟件算法與硬件實(shí)現(xiàn)很好的結(jié)合在一起,提高了整個(gè)系統(tǒng)設(shè)計(jì)的效

5、率和正確性。 </p><p>  System C 是一個(gè)C++ 庫,也是一種使設(shè)計(jì)者可以有效地設(shè)計(jì)出一個(gè)軟件算法的準(zhǔn)確循環(huán)模型,硬件結(jié)構(gòu)以及系統(tǒng)級(jí)設(shè)計(jì)的方法。設(shè)計(jì)者可以用System C開發(fā)工具或在標(biāo)準(zhǔn)C++開發(fā)工具中加如System C庫制作系統(tǒng)級(jí)模型,快速地仿真和優(yōu)化設(shè)計(jì),以及研究不同的算法,并且為硬件和軟件設(shè)計(jì)人員提供一個(gè)設(shè)計(jì)系統(tǒng)的可執(zhí)行規(guī)范??蓤?zhí)行規(guī)范本質(zhì)上是一個(gè)C++程序,它顯示了和設(shè)計(jì)系統(tǒng)同樣的性

6、能,為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員提供了一個(gè)設(shè)計(jì)的標(biāo)準(zhǔn)。 </p><p>  System C 庫提供了創(chuàng)造系統(tǒng)結(jié)構(gòu)模型的必須結(jié)構(gòu),包括那些在C++沒有的功能如硬件時(shí)序,并行和觸發(fā)功能。C++這種面對(duì)象語言提供了通過增加類來擴(kuò)展語言的能力,而這種能力是C語言所不具備的。因此,System C使用大家熟悉的C++語言和開發(fā)工具。 </p><p>  SYSTEM C的特點(diǎn)</p&g

7、t;<p>  System C 支持對(duì)硬件和軟件的聯(lián)合設(shè)計(jì),支持描述一個(gè)既包含硬件部分也包含軟件部分的復(fù)雜系統(tǒng)結(jié)構(gòu)。它也支持對(duì)接口的描述,有以下幾個(gè)顯著的特點(diǎn): </p><p>  1.System C可以為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員提供一個(gè)系統(tǒng)的可執(zhí)行規(guī)范。設(shè)計(jì)人員使用該可執(zhí)行規(guī)范可以避免設(shè)計(jì)中矛盾和錯(cuò)誤的產(chǎn)生,并確保設(shè)計(jì)的完備性。這是應(yīng)為在設(shè)計(jì)可執(zhí)行規(guī)范時(shí),系統(tǒng)設(shè)計(jì)者必須設(shè)計(jì)出也一個(gè)和系統(tǒng)具

8、有同樣工作狀態(tài)的程序,通過這個(gè)程序可以發(fā)掘出潛在的矛盾和錯(cuò)誤,并將這些矛盾和錯(cuò)誤消除在整個(gè)設(shè)計(jì)的開始階段,而不是在整個(gè)系統(tǒng)進(jìn)行調(diào)試階段才發(fā)現(xiàn)和解決這些矛盾和錯(cuò)誤。這個(gè)程序還可以幫助設(shè)計(jì)者確保整個(gè)系統(tǒng)設(shè)計(jì)的完備性。 </p><p>  2.設(shè)計(jì)人員利用這個(gè)可執(zhí)行的系統(tǒng)規(guī)范,還可以發(fā)現(xiàn)設(shè)計(jì)中概念模糊的地方。無論什么時(shí)候,設(shè)計(jì)人員對(duì)設(shè)計(jì)產(chǎn)生疑惑,就可以運(yùn)行這個(gè)可執(zhí)行程序以明確在這個(gè)問題上系統(tǒng)設(shè)計(jì)人員是如何處理的,從而

9、確保系統(tǒng)設(shè)計(jì)的正確性。而現(xiàn)在的設(shè)計(jì)方法不能使設(shè)計(jì)人員方便迅速的解決這些疑惑。甚至這些疑惑是系統(tǒng)設(shè)計(jì)人員也不曾考慮過,這可能導(dǎo)致系統(tǒng)要重新進(jìn)行設(shè)計(jì)。 </p><p>  3.在系統(tǒng)設(shè)計(jì)被實(shí)現(xiàn)以前,設(shè)計(jì)人員還可以通過用System C設(shè)計(jì)的系統(tǒng)可執(zhí)行規(guī)范來驗(yàn)證整個(gè)系統(tǒng)設(shè)計(jì)。這樣可以避免由于在系統(tǒng)設(shè)計(jì)上的失誤,而使系統(tǒng)實(shí)現(xiàn)不能達(dá)到要求。現(xiàn)在的設(shè)計(jì)方法不能提供這樣的手段在設(shè)計(jì)完成前進(jìn)行系統(tǒng)的驗(yàn)證,對(duì)系統(tǒng)的驗(yàn)證必須是在系

10、統(tǒng)設(shè)計(jì)完后。即使在完成前進(jìn)行驗(yàn)證,由于不能完全模擬實(shí)際系統(tǒng)的工作,其結(jié)果也只能作為一種參考。 </p><p>  4.System C設(shè)計(jì)的可執(zhí)行規(guī)范所使用的TESTBENCH文件可以通過小范圍的修改或直接用在實(shí)現(xiàn)后的系統(tǒng)仿真。這就為設(shè)計(jì)實(shí)現(xiàn)人員帶來很大的好處,他們不必花很多的時(shí)間去編寫用來驗(yàn)證實(shí)現(xiàn)后系統(tǒng)正確性的TESTBENCH文件。而現(xiàn)在采用的設(shè)計(jì)方法所使用的TESTBENCH文件卻沒有提供這樣的便利條件。

11、這是應(yīng)為軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員兩者的設(shè)計(jì)思想和設(shè)計(jì)手段都是不同的,一個(gè)軟件設(shè)計(jì)人員所使用的TESTBENCH文件并不能被硬件設(shè)計(jì)人員使用,甚至不能給硬件設(shè)計(jì)人員任何幫助。</p><p>  SYSTEM C設(shè)計(jì)與傳統(tǒng)設(shè)計(jì)比較</p><p>  現(xiàn)在的系統(tǒng)設(shè)計(jì)一般是由系統(tǒng)工程師用C語言或C++語言設(shè)計(jì)出一個(gè)系統(tǒng)模型,并在系統(tǒng)級(jí)層次上檢驗(yàn)概念和算法。當(dāng)這些概念和算法被檢驗(yàn)為正確無誤時(shí),

12、C/C++模塊被分解為功能相對(duì)獨(dú)立的子模塊。這些相對(duì)對(duì)立的子模塊由硬件設(shè)計(jì)人員手工地轉(zhuǎn)化為VHDL或Verilog語言用以硬件實(shí)現(xiàn)。這一個(gè)設(shè)計(jì)流程被顯示在圖1中。</p><p>  從圖1所示的設(shè)計(jì)流程中我們可以發(fā)現(xiàn)以下幾個(gè)問題: </p><p>  1、人工將C\C++程序轉(zhuǎn)換為HDL程序容易產(chǎn)生錯(cuò)誤。在現(xiàn)在的這種設(shè)計(jì)方法中,系統(tǒng)工程師先按期望的設(shè)計(jì)要求設(shè)計(jì)出一個(gè)C模塊,并驗(yàn)證這個(gè)模

13、塊使其達(dá)到期望的設(shè)計(jì)要求。然后系統(tǒng)工程師所設(shè)計(jì)的C模塊被硬件設(shè)計(jì)人員手工轉(zhuǎn)換為HDL模塊。這個(gè)轉(zhuǎn)換過程不僅容易產(chǎn)生錯(cuò)誤,而且還很浪費(fèi)時(shí)間。這是因?yàn)镃\C++語言和HDL語言有著顯著的區(qū)別。首先,HDL的處理方式比C\C++的復(fù)雜。C\C++程序采用順序執(zhí)行的處理方式,而HDL程序中既有順序執(zhí)行也有并行執(zhí)行的處理方式。要將C\C++程序轉(zhuǎn)化為HDL程序必然要引入一些控制信號(hào),由這些信號(hào)控制HDL程序的運(yùn)行,但這樣也容易產(chǎn)生錯(cuò)誤。其次,C\

14、C++語言不涉及到時(shí)序關(guān)系。由于C\C++語言不支持對(duì)時(shí)序的描述,系統(tǒng)工程師設(shè)計(jì)的系統(tǒng)模型只是驗(yàn)證了概念和算法,而只能對(duì)時(shí)間耗費(fèi)上有一個(gè)大概的估計(jì)。這就使得硬件實(shí)現(xiàn)時(shí),為滿足系統(tǒng)在時(shí)間上的要求,硬件設(shè)計(jì)人員必須對(duì)軟件算法進(jìn)行一定的改造或優(yōu)化。而這些改造或優(yōu)化也有可能引入各種錯(cuò)誤。 </p><p>  2、系統(tǒng)模塊和HDL模塊間缺乏聯(lián)系。當(dāng)系統(tǒng)模塊被轉(zhuǎn)換為HDL模塊后,HDL模塊成為整個(gè)系統(tǒng)設(shè)計(jì)的焦點(diǎn)。為適應(yīng)硬件

15、實(shí)現(xiàn)的特點(diǎn),硬件設(shè)計(jì)人員會(huì)更改系統(tǒng)設(shè)計(jì)人員的設(shè)計(jì),但這種更改只是在HDL模塊中進(jìn)行,而系統(tǒng)設(shè)計(jì)人員設(shè)計(jì)的C模塊并沒有因此更改。這就使得系統(tǒng)工程師設(shè)計(jì)的C模塊和當(dāng)前硬件設(shè)計(jì)人員設(shè)計(jì)的HDL模塊缺乏必要的聯(lián)系。當(dāng)硬件設(shè)計(jì)人員遇到概念模糊或理解錯(cuò)誤的地方時(shí),往往不能馬上從C模塊中得到明確的解答。此時(shí),C模塊的設(shè)計(jì)人員也不一定能為HDL設(shè)計(jì)人員提供有效的幫助。 </p><p>  3、多系統(tǒng)測(cè)試。不但C模塊要轉(zhuǎn)換為HD

16、L模塊,對(duì)C模塊的測(cè)試也要人工轉(zhuǎn)換為在HDL環(huán)境下的測(cè)試。這種轉(zhuǎn)換也很復(fù)雜,而且浪費(fèi)時(shí)間。HDL設(shè)計(jì)人員是根據(jù)他所設(shè)計(jì)的HDL模塊和系統(tǒng)要求來設(shè)計(jì)TESTBENCH,這使得硬件設(shè)計(jì)人員不可能利用軟件設(shè)計(jì)人員所使用的測(cè)試文件。同時(shí),HDL人員要設(shè)計(jì)出一個(gè)好的TESTBENCH也需要比較長(zhǎng)的時(shí)間。</p><p>  為解決在現(xiàn)在設(shè)計(jì)流程中所帶來的種種弊端,一種全新的設(shè)計(jì)流程被提出,這就是System C設(shè)計(jì)流程。它

17、能很好的解決上面所提到的各種設(shè)計(jì)弊端,大大提高設(shè)計(jì)效率。圖2是System C的硬件設(shè)計(jì)流程。</p><p>  這種設(shè)計(jì)方法與現(xiàn)在常用的設(shè)計(jì)方法相比有很多優(yōu)點(diǎn): </p><p>  1、精煉的設(shè)計(jì)方法。使用System C設(shè)計(jì)系統(tǒng),系統(tǒng)設(shè)計(jì)人員不必花費(fèi)很大的精力將整個(gè)系統(tǒng)設(shè)計(jì)由C語言描述轉(zhuǎn)換為HDL描述。系統(tǒng)設(shè)計(jì)人員可以通過在C模塊中很小的區(qū)域范圍內(nèi)加入必要的硬件和時(shí)序結(jié)構(gòu)描述,從而

18、將C模塊方便準(zhǔn)確地轉(zhuǎn)化為一個(gè)有效的硬件設(shè)計(jì),而避免將另行設(shè)計(jì)一個(gè)硬件模塊。利用System C設(shè)計(jì)方法,設(shè)計(jì)人員可以很輕松地實(shí)現(xiàn)一個(gè)設(shè)計(jì)的更改,或在優(yōu)化算法時(shí)檢測(cè)出一些設(shè)計(jì)錯(cuò)誤并及時(shí)修改。 </p><p>  2、單一語言書寫。使用System C設(shè)計(jì)系統(tǒng),整個(gè)設(shè)計(jì)都用一種語言設(shè)計(jì)系統(tǒng),降低了對(duì)設(shè)計(jì)人員的要求,減少了語言轉(zhuǎn)換時(shí)所造成的錯(cuò)誤。這一優(yōu)點(diǎn)也使得設(shè)計(jì)人員可以在一個(gè)比較高的層次上進(jìn)行系統(tǒng)模塊設(shè)計(jì)。在較高層

19、次的設(shè)計(jì)會(huì)導(dǎo)致產(chǎn)生小的設(shè)計(jì)代碼,使設(shè)計(jì)和仿真的速度比傳統(tǒng)的設(shè)計(jì)方法要快很多。這一點(diǎn)是很顯著的。</p><p>  SystemC的開發(fā)流程</p><p>  用SystemC可以在抽象層次的不同級(jí)別描述系統(tǒng)。在系統(tǒng)最高層的系統(tǒng)級(jí)可以用C/C++描述系統(tǒng)的功能和算法。在系統(tǒng)的硬件實(shí)現(xiàn)部分可以在行為級(jí)到RTL級(jí)用SystemC的類來進(jìn)行描述。系統(tǒng)的軟件部分自然可以用C/C++語言描述。由此

20、可見針對(duì)系統(tǒng)的不同部分,SystemC都可以在不同的抽象層次對(duì)其進(jìn)行描述,而且這些描述在系統(tǒng)仿真時(shí)可以協(xié)同工作。</p><p>  用SystemC不僅可以描述要開發(fā)的系統(tǒng)本身,還可以描述系統(tǒng)的測(cè)試平臺(tái)以提供測(cè)試信號(hào)用于系統(tǒng)的仿真。一個(gè)熟悉C++語言的用戶只要了解類庫中各種類引入的語義就可以用SystemC編程。SystemC由一組描述類的頭文件和一個(gè)包含仿真核的連接庫所組成,在用戶的描述程序中必須包括相應(yīng)的頭

21、文件,然后可以用通常的ANSI C++編譯器編譯該程序。在連接時(shí)要調(diào)用SystemC的連接庫產(chǎn)生可執(zhí)行的系統(tǒng)仿真程序。整個(gè)開發(fā)流程如圖3所示。</p><p>  SystemC的建模特點(diǎn)</p><p>  SystemC語言的特點(diǎn)就是能夠支持對(duì)復(fù)雜系統(tǒng)的設(shè)計(jì)。一個(gè)復(fù)雜的系統(tǒng)設(shè)計(jì)一般都要涉及軟件和硬件兩個(gè)方面,SystemC在這兩個(gè)方面都有其獨(dú)到之處。它可以在任何C++集成環(huán)境中描述硬件

22、和軟件,以及它們之間的接口。SystemC語言平臺(tái)提供的建模元素和建模能力主要包括以下內(nèi)容:</p><p>  模塊語句:SystemC中定義了“模塊”類,它相當(dāng)于C++中的類定義。它是一個(gè)層次式設(shè)計(jì)的入口,一個(gè)模塊可以嵌套其他模塊;</p><p>  進(jìn)程語言:進(jìn)程被包含在模塊中,用來描述模塊的功能。在SystemC中有三種不同類型進(jìn)程以滿足不同軟、硬件設(shè)計(jì)人員的需求;</p&

23、gt;<p>  端口語句:用來描述模塊和外界通信的端口。SystemC中支持單向和雙向的端口;</p><p>  信號(hào)語句:信號(hào)主要用來實(shí)現(xiàn)模塊間以及模塊內(nèi)部各進(jìn)程間的通訊。SystemC支持單驅(qū)動(dòng)和多驅(qū)動(dòng)的信號(hào)。多驅(qū)動(dòng)的信號(hào)可以有多個(gè)驅(qū)動(dòng),就是通常說的總線(BUS);</p><p>  豐富的數(shù)據(jù)類型:SystemC提供豐富的數(shù)據(jù)類型以滿足多種抽象模型,固定精度的數(shù)據(jù)

24、類型可用于快速仿真,任意精度的數(shù)據(jù)類型可用于大量數(shù)據(jù)的計(jì)算,定點(diǎn)數(shù)據(jù)類型可用來實(shí)現(xiàn)DSP;</p><p>  時(shí)鐘語句:時(shí)鐘在同步電路設(shè)計(jì)中是一個(gè)非常重要的角色,而C/C++在描述系統(tǒng)時(shí)卻很難表達(dá)時(shí)鐘。SystemC中對(duì)時(shí)鐘進(jìn)行了描述,并把它當(dāng)作一種特殊的信號(hào)。時(shí)鐘為仿真過程提供了時(shí)間基準(zhǔn),SystemC同時(shí)還支持在同一系統(tǒng)中的多個(gè)時(shí)鐘,以及任意相位的時(shí)鐘;</p><p>  通訊協(xié)議

25、:SystemC支持多層通訊協(xié)議,用來描述各種抽象級(jí)別的模型和系統(tǒng)I/O協(xié)議;</p><p>  波形跟蹤:SystemC支持VCD、WIF 和ISDB格式波形的跟蹤。</p><p><b>  UML統(tǒng)一建模語言</b></p><p><b>  概論</b></p><p>  UML與S

26、ystemC的絕妙搭配形成一股新式的芯片設(shè)計(jì)風(fēng)潮。他們都可以用來呈現(xiàn)軟硬件設(shè)計(jì),最大的不同之處在于,UML是一種圖形語言,而SystemC則是程序語言。當(dāng)芯片設(shè)計(jì)的復(fù)雜度不斷增高時(shí),SystemC代碼機(jī)會(huì)變得越來越難以掌握,所以會(huì)需要通過UML的圖形式設(shè)計(jì)來呈現(xiàn)真題的設(shè)計(jì),再對(duì)應(yīng)生成SystemC代碼以得出更細(xì)致的設(shè)計(jì)。</p><p>  UML的目標(biāo)是以面向?qū)ο髨D的方式來描述任何類型的系統(tǒng),具有很寬的應(yīng)用領(lǐng)域

27、。其中最常用的是建立軟件系統(tǒng)的模型,但它同樣可以用于描述非軟件領(lǐng)域的系統(tǒng),如機(jī)械系統(tǒng)、企業(yè)機(jī)構(gòu)或業(yè)務(wù)過程,以及處理復(fù)雜數(shù)據(jù)的信息系統(tǒng)、具有實(shí)時(shí)要求的工業(yè)系統(tǒng)或工業(yè)過程等??傊琔ML是一個(gè)通用的標(biāo)準(zhǔn)建模語言,可以對(duì)任何具有靜態(tài)結(jié)構(gòu)和動(dòng)態(tài)行為的系統(tǒng)進(jìn)行建模。</p><p>  此外,UML適用于系統(tǒng)開發(fā)過程中從需求規(guī)格描述到系統(tǒng)完成后測(cè)試的不同階段。在需求分析階段,可以用用例來捕獲用戶需求。通過用例建模,描述對(duì)系

28、統(tǒng)感興趣的外部角色及其對(duì)系統(tǒng)(用例)的功能要求。分析階段主要關(guān)心問題域中的主要概念(如抽象、類和對(duì)象等)和機(jī)制,需要識(shí)別這些類以及它們相互間的關(guān)系,并用UML類圖來描述。為實(shí)現(xiàn)用例,類之間需要協(xié)作,這可以用UML動(dòng)態(tài)模型來描述。在分析階段,只對(duì)問題域的對(duì)象(現(xiàn)實(shí)世界的概念)建模,而不考慮定義軟件系統(tǒng)中技術(shù)細(xì)節(jié)的類(如處理用戶接口、數(shù)據(jù)庫、通訊和并行性等問題的類)。這些技術(shù)細(xì)節(jié)將在設(shè)計(jì)階段引入,因此設(shè)計(jì)階段為構(gòu)造階段提供更詳細(xì)的規(guī)格說明。

29、</p><p>  編程(構(gòu)造)是一個(gè)獨(dú)立的階段,其任務(wù)是用面向?qū)ο缶幊陶Z言將來自設(shè)計(jì)階段的類轉(zhuǎn)換成實(shí)際的代碼。在用UML建立分析和設(shè)計(jì)模型時(shí),應(yīng)盡量避免考慮把模型轉(zhuǎn)換成某種特定的編程語言。因?yàn)樵谠缙陔A段,模型僅僅是理解和分析系統(tǒng)結(jié)構(gòu)的工具,過早考慮編碼問題十分不利于建立簡(jiǎn)單正確的模型。</p><p>  UML模型還可作為軟件測(cè)試階段的依據(jù)。系統(tǒng)通常需要經(jīng)過單元測(cè)試、集成測(cè)試、系統(tǒng)測(cè)

30、試和驗(yàn)收測(cè)試。不同的測(cè)試小組使用不同的UML圖作為測(cè)試依據(jù):?jiǎn)卧獪y(cè)試使用類圖和類規(guī)格說明;集成測(cè)試使用部件圖和合作圖;系統(tǒng)測(cè)試使用用例圖來驗(yàn)證系統(tǒng)的行為;驗(yàn)收測(cè)試由用戶進(jìn)行,以驗(yàn)證系統(tǒng)測(cè)試的結(jié)果是否滿足在分析階段確定的需求。</p><p>  總之,標(biāo)準(zhǔn)建模語言UML適用于以面向?qū)ο蠹夹g(shù)來描述任何類型的系統(tǒng),而且適用于系統(tǒng)開發(fā)的不同階段,從需求規(guī)格描述直至系統(tǒng)完成后的測(cè)試和維護(hù)。</p><

31、p><b>  UML的特點(diǎn)</b></p><p>  標(biāo)準(zhǔn)建模語言UML的主要特點(diǎn)可以歸結(jié)為三點(diǎn):</p><p> ?。?) UML統(tǒng)一了Booch、OMT和OOSE等方法中的基本概念。</p><p> ?。?) UML還吸取了面向?qū)ο蠹夹g(shù)領(lǐng)域中其他流派的長(zhǎng)處,其中也包括非OO方法的影響。UML符號(hào)表示考慮了各種方法的圖形表示,刪

32、掉了大量易引起混亂的、多余的和極少使用的符號(hào),也添加了一些新符號(hào)。因此,在UML中匯入了面向?qū)ο箢I(lǐng)域中很多人的思想。這些思想并不是UML的開發(fā)者們發(fā)明的,而是開發(fā)者們依據(jù)最優(yōu)秀的OO方法和豐富的計(jì)算機(jī)科學(xué)實(shí)踐經(jīng)驗(yàn)綜合提煉而成的。</p><p> ?。?)UML在演變過程中還提出了一些新的概念。在UML標(biāo)準(zhǔn)中新加了模板(Stereotypes)、職責(zé)(Responsibilities)、擴(kuò)展機(jī)制(Extensib

33、ility mechanisms)、線程(Threads)、過程(Processes)、分布式(Distribution)、并發(fā)(Concurrency)、模式(Patterns)、合作(Collaborations)、活動(dòng)圖(Activity diagram)等新概念,并清晰地區(qū)分類型(Type)、類(Class)和實(shí)例(Instance)、細(xì)化(Refinement)、接口(Interfaces)和組件(Components)等概念

34、。</p><p>  因此可以認(rèn)為,UML是一種先進(jìn)實(shí)用的標(biāo)準(zhǔn)建模語言,但其中某些概念尚待實(shí)踐來驗(yàn)證,UML也必然存在一個(gè)進(jìn)化過程。</p><p><b>  語音備忘器設(shè)計(jì)</b></p><p><b>  設(shè)計(jì)目的及意義</b></p><p>  人們經(jīng)常會(huì)有重短暫忘記的感覺,比如正在運(yùn)

35、動(dòng)場(chǎng)上跑步,突然想到回去時(shí)順便買瓶酸奶帶回家,這樣的念頭一閃而過,沒有趕快記錄下來,跑完步回家時(shí), 會(huì)這樣想“記得跑完步我要做什么的”,但總是想不起來。等回到家后要喝酸奶時(shí)才想起沒有買。如果有語音備忘器在口袋里,就可以在計(jì)劃要做什么的時(shí)候錄下音。</p><p>  用UML開始圖形化設(shè)計(jì)</p><p><b>  用例設(shè)計(jì)</b></p><p

36、>  語音備忘器的用例圖包括兩個(gè)模塊,錄制語音和播放語音。在starUML中新建工程更名為Recorder,Add->Model新建模塊更名為用例,選擇Add Diagram ->Use Case Diagram。然后建立如圖4所示的語音備忘器的用例.</p><p><b>  模塊設(shè)計(jì)</b></p><p>  在模塊設(shè)計(jì)中,畫兩種類圖,一種是

37、展現(xiàn)全部模塊的整體類圖,如圖5所示為整體類圖。另一種是個(gè)體類圖,特別用來展現(xiàn)單一模塊設(shè)置端口及接口的情況,如圖6-圖10所示為。在Recorder工程中新建模塊,更名為模塊設(shè)計(jì),選擇Add Diagram ->Class Diagram。建立如圖5-圖10的類圖:</p><p><b>  結(jié)構(gòu)設(shè)計(jì)</b></p><p>  在進(jìn)行結(jié)構(gòu)設(shè)計(jì)時(shí),通過組合結(jié)構(gòu)圖

38、來展現(xiàn)對(duì)象內(nèi)部,數(shù)個(gè)部件之間的整合組裝細(xì)節(jié)。在Recorder工程中新建模塊,更名為結(jié)構(gòu)設(shè)計(jì),選擇Add Diagram ->Composite Structure Diagram。如圖11-15所示。</p><p><b>  線程設(shè)計(jì)</b></p><p>  在Recorder工程中新建模塊,更名為進(jìn)程設(shè)計(jì),在選擇Add Diagram ->Ac

39、tivity Diagram新建活動(dòng)圖。然后開始繪制如下活動(dòng)圖。</p><p>  編寫System代碼</p><p>  下載systemC 后在Microsoft Visual Studio 10.0 中編譯出systemc.lib文件。</p><p>  新建工程Recorder。在工程的properties中設(shè)置如下選項(xiàng):</p><

40、;p>  設(shè)置完后選擇菜單欄的Build-> Build Solution.</p><p>  開始在工程中編寫.h文件和.cpp文件,包括有main.cpp、Recorder.h、Recorder.cpp、Controller .h</p><p>  、Controller.cpp、Memory.h、Memory.cpp、ADC.h、ADC.cpp、DAC.h,DAC.c

41、pp。(具體SyatemC的代碼則分置于附件)</p><p><b>  仿真結(jié)果</b></p><p>  案例的一開始,外界會(huì)通過xpiOpCode端口,傳送操作嗎給Recoder模塊對(duì)象;操作碼1是仿真錄音功能,2是仿真播放功能。模擬錄音已經(jīng)啟動(dòng),外界會(huì)通過xpiAudioIn端口,將四組8位字符串“00000000”,“00000001”,“0000001

42、0”,“000000011”寫進(jìn)sc_fifo通道,路經(jīng)Recorder、Controller、ADC模塊對(duì)象,最后存到Memory模塊對(duì)象,內(nèi)部bvSample[4]數(shù)組(Array)里。</p><p>  在創(chuàng)建Memory模塊對(duì)象的同時(shí),我們先預(yù)存了四組8位字符串“11111111”、“11111110”、“11111101”、“11111100”到bvSample[4]數(shù)組里。一旦執(zhí)行仿真錄音的功能后,

43、將會(huì)從外界寫進(jìn)“00000000”,“00000001”,“00000010”,“000000011”字符串取代預(yù)存字符串。這樣一來,如果錄音動(dòng)作有誤的話,執(zhí)行畫面的錄音數(shù)字會(huì)跟播放數(shù)字不一致。</p><p>  圖20是模擬錄音的執(zhí)行畫面,圖21是模擬播放的執(zhí)行畫面。</p><p><b>  附件:</b></p><p>  //--

44、-------------------- main.cpp : Defines the entry point for the console application.--------------------------</p><p>  #include "stdafx.h"</p><p>  #include "systemc.h"</

45、p><p>  #include "Recorder.h"</p><p>  int sc_main(int argc, char* argv[])</p><p><b>  {</b></p><p>  Recorder *myRecorder= new Recorder("myReco

46、rder");</p><p>  cout<<"1(錄音),(播放)...";</p><p><b>  int iOp;</b></p><p><b>  cin>>iOp;</b></p><p>  switch(iOp)</p

47、><p><b>  { </b></p><p><b>  case 1:</b></p><p>  cout<<"錄音模擬開始..."<<endl;</p><p>  myRecorder->xpiOpCode->write(1);&

48、lt;/p><p>  myRecorder->xpiAudioIn->write("00000000");</p><p>  myRecorder->xpiAudioIn->write("00000001");</p><p>  myRecorder->xpiAudioIn->write(

49、"00000010");</p><p>  myRecorder->xpiAudioIn->write("00000011");</p><p>  sc_start();</p><p>  cout<<"錄音模擬結(jié)束..."<<endl<<endl;&l

50、t;/p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  cout<<"播放模擬開始..."<<endl;</p><p>  myRecorder->xpiOpCode->writ

51、e(2);</p><p>  sc_start();</p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  if(myRecorder->xpoAudioOut->num_available()==0)</p><

52、p>  wait(myRecorder->xpoAudioOut->data_written_event());</p><p>  cout<< myRecorder->xpoAudioOut->read()<<endl;</p><p>  }//end for</p><p>  cout<<&

53、quot;播放模擬結(jié)束..."<<endl<<endl;</p><p><b>  break;</b></p><p><b>  default:</b></p><p>  return 0; </p><p>  }//end switch</p&g

54、t;<p>  system("PAUSE");</p><p>  return 0; </p><p><b>  }</b></p><p>  //------------------------------------------ Recorder.h ------------------------

55、-----------------------------------</p><p>  #pragma once</p><p>  #include "Memory.h"</p><p>  #include "Controller.h"</p><p>  class Recorder :pub

56、lic sc_module</p><p><b>  {</b></p><p><b>  public:</b></p><p>  sc_export<sc_signal_out_if<int> > xpiOpCode;</p><p>  sc_export<

57、sc_fifo_out_if<sc_bv<8> > >xpiAudioIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8> > >xpoAudioOut;</p><p>  SC_HAS_PROCESS(Recorder);</p><p>  Recorde

58、r(sc_module_name mn);</p><p><b>  private:</b></p><p>  Memory* myMemory;</p><p>  Controller* myController;</p><p>  sc_signal<int> chOpCode;</p&g

59、t;<p><b>  };</b></p><p>  //------------------------------------- Recorder.cpp------------------------------------------------------------------</p><p>  #include "stdaf

60、x.h"</p><p>  #include "systemc.h"</p><p>  #include "Recorder.h"</p><p>  Recorder::Recorder(sc_module_name mn) : sc_module(mn)</p><p><b&g

61、t;  {</b></p><p>  myMemory =new Memory("myMemory");</p><p>  myController = new Controller("myController");</p><p>  xpiOpCode(chOpCode);</p><p

62、>  xpiAudioIn(myController->xpiAudioIn);</p><p>  xpoAudioOut(myController->xpoAudioOut);</p><p>  myMemory->piOpCode(chOpCode);</p><p>  myMemory->piSampleIn(myContr

63、oller->xpoDataOut);</p><p>  myMemory->poSampleOut(myController->xpiDataIn);</p><p><b>  };</b></p><p>  //------------------------------------- Controller.h --

64、----------------------------------------------------------------</p><p>  #pragma once</p><p>  #include "ADC.h"</p><p>  #include "DAC.h"</p><p>  

65、class Controller :public sc_module</p><p><b>  {</b></p><p><b>  public:</b></p><p>  sc_port<sc_signal_in_if<int> > piOpCode;</p><p&g

66、t;  sc_export<sc_fifo_out_if<sc_bv<8> > >xpiAudioIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8> > >xpoDataOut;</p><p>  sc_export<sc_fifo_out_if<sc_bv<

67、;8> > >xpiDataIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8> > >xpoAudioOut;</p><p>  SC_HAS_PROCESS(Controller);</p><p>  Controller(sc_module_name mn);&l

68、t;/p><p><b>  private:</b></p><p>  ADC* myADC;</p><p>  DAC* myDAC;</p><p><b>  };</b></p><p>  //-----------------------------------

69、-- Recorder.cpp ------------------------------------------------------------------</p><p>  #include "stdafx.h"</p><p>  #include "systemc.h"</p><p>  #include &

70、quot;Controller.h"</p><p>  Controller::Controller(sc_module_name mn) : sc_module(mn)</p><p><b>  {</b></p><p>  myADC =new ADC("myADC");</p><p

71、>  myDAC = new DAC("myDAC");</p><p>  myADC->piOpCode(piOpCode);</p><p>  xpiAudioIn(myADC->xpiAudioIn);</p><p>  xpoDataOut(myADC->xpoDataOut);</p><

72、;p>  myDAC->piOpCode(piOpCode);</p><p>  xpiDataIn(myDAC->xpiDataIn);</p><p>  xpoAudioOut(myDAC->xpoAudioOut);</p><p><b>  };</b></p><p>  //--

73、----------------------------------- Memory.h ------------------------------------------------------------------</p><p>  #pragma once</p><p>  class Memory : public sc_module</p><p>

74、;<b>  {</b></p><p><b>  public:</b></p><p>  sc_port<sc_signal_in_if<int> > piOpCode;</p><p>  sc_port<sc_fifo_in_if<sc_bv<8> > &

75、gt;piSampleIn;</p><p>  sc_port<sc_fifo_out_if<sc_bv<8> > >poSampleOut;</p><p>  SC_HAS_PROCESS(Memory);</p><p>  Memory(sc_module_name mn);</p><p>  

76、void ReadIn(void);</p><p>  void WriteOut(void);</p><p><b>  private:</b></p><p>  sc_bv<8> bvSample[4];</p><p><b>  };</b></p><

77、;p>  //------------------------------------- Memory.cpp ------------------------------------------------------------------</p><p>  #include "stdafx.h"</p><p>  #include "syste

78、mc.h"</p><p>  #include "Recorder.h"</p><p>  Memory::Memory(sc_module_name mn) : sc_module(mn)</p><p><b>  {</b></p><p>  bvSample[0]="

79、11111111";</p><p>  bvSample[0]="11111110";</p><p>  bvSample[0]="11111101";</p><p>  bvSample[0]="11111100";</p><p>  SC_THREAD(Read

80、In);</p><p>  SC_THREAD(WriteOut);</p><p><b>  };</b></p><p>  void Memory::ReadIn(void)</p><p><b>  {</b></p><p><b>  for( ;

81、 ;)</b></p><p><b>  {</b></p><p>  if(piOpCode->read()==1)</p><p><b>  { </b></p><p>  for(int i=0;i<4;i++)</p><p><

82、b>  {</b></p><p>  if(piSampleIn->num_available()==0)</p><p>  wait(piSampleIn->data_written_event());</p><p>  bvSample[i]=piSampleIn->read();</p><p>

83、;  cout<< bvSample[i]<< endl;</p><p>  }//end for</p><p><b>  }//end if</b></p><p>  wait(piOpCode->value_changed_event());</p><p>  }//end f

84、or</p><p><b>  };</b></p><p>  void Memory::WriteOut(void)</p><p><b>  {</b></p><p><b>  for( ; ;)</b></p><p><b>

85、  {</b></p><p>  if(piOpCode->read()==2)</p><p><b>  { </b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p><p>  po

86、SampleOut->write(bvSample[i]);</p><p>  }//end for</p><p><b>  }//end if</b></p><p>  wait(piOpCode->value_changed_event());</p><p>  }//end for</p

87、><p><b>  };</b></p><p>  //------------------------------------- ADC.h ------------------------------------------------------------------</p><p>  #pragma once</p>

88、<p>  class ADC : public sc_module</p><p><b>  {</b></p><p><b>  public:</b></p><p>  sc_port<sc_signal_in_if<int> > piOpCode;</p>&

89、lt;p>  sc_export<sc_fifo_out_if<sc_bv<8> > >xpiAudioIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8> > >xpoDataOut;</p><p>  SC_HAS_PROCESS(ADC);</p>&

90、lt;p>  ADC(sc_module_name mn);</p><p>  void Convert(void);</p><p><b>  private:</b></p><p>  sc_fifo<sc_bv<8> > chAudioIn;</p><p>  sc_fifo&

91、lt;sc_bv<8> > chDataOut;</p><p><b>  };</b></p><p>  //------------------------------------- ADC.h ------------------------------------------------------------------</p&g

92、t;<p>  #pragma once</p><p>  class ADC : public sc_module</p><p><b>  {</b></p><p><b>  public:</b></p><p>  sc_port<sc_signal_in_if&

93、lt;int> > piOpCode;</p><p>  sc_export<sc_fifo_out_if<sc_bv<8> > >xpiAudioIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8> > >xpoDataOut;</p><p

94、>  SC_HAS_PROCESS(ADC);</p><p>  ADC(sc_module_name mn);</p><p>  void Convert(void);</p><p><b>  private:</b></p><p>  sc_fifo<sc_bv<8> > ch

95、AudioIn;</p><p>  sc_fifo<sc_bv<8> > chDataOut;</p><p><b>  };</b></p><p>  //------------------------------------- DAC.h -----------------------------------

96、-------------------------------</p><p>  #pragma once</p><p>  class DAC : public sc_module</p><p><b>  {</b></p><p><b>  public:</b></p>

97、<p>  sc_port<sc_signal_in_if<int> > piOpCode;</p><p>  sc_export<sc_fifo_out_if<sc_bv<8> > >xpiDataIn;</p><p>  sc_export<sc_fifo_in_if<sc_bv<8>

98、 > >xpoAudioOut;</p><p>  SC_HAS_PROCESS(DAC);</p><p>  DAC(sc_module_name mn);</p><p>  void Convert(void);</p><p><b>  private:</b></p><p

99、>  sc_fifo<sc_bv<8> > chDataIn;</p><p>  sc_fifo<sc_bv<8> > chAudioOut;</p><p><b>  };</b></p><p>  ------------------------------------ DAC.c

100、pp ------------------------------------------------------------------</p><p>  #include "stdafx.h"</p><p>  #include "systemc.h"</p><p>  #include "DAC.h&qu

101、ot;</p><p>  DAC::DAC(sc_module_name mn) : sc_module(mn)</p><p><b>  {</b></p><p>  xpiDataIn(chDataIn);</p><p>  xpoAudioOut(chAudioOut);</p><p&

102、gt;  SC_THREAD(Convert);</p><p><b>  };</b></p><p>  void DAC::Convert(void)</p><p><b>  {</b></p><p><b>  for( ; ;)</b></p>

103、<p><b>  {</b></p><p>  if(piOpCode->read()==2)</p><p><b>  { </b></p><p>  for(int i=0;i<4;i++)</p><p><b>  {</b></p&

104、gt;<p>  if(chDataIn.num_available()==0)</p><p>  wait(chDataIn.data_written_event());</p><p>  chAudioOut.write(chDataIn.read());</p><p>  }//end for</p><p><

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論