抽象工具排解系統(tǒng)設(shè)計(jì)復(fù)雜性
——
抽象工具排解系統(tǒng)設(shè)計(jì)復(fù)雜性
嵌入式開發(fā)工具不斷包含更高層次的抽象來平衡設(shè)計(jì)復(fù)雜性的增長
要點(diǎn)
● 抽象通過隱藏細(xì)節(jié)來降低復(fù)雜性。
● 抽象不會(huì)減少某項(xiàng)設(shè)計(jì)的細(xì)節(jié)數(shù)量。
● 自動(dòng)化開發(fā)工具可簡化以前的創(chuàng)新設(shè)計(jì)思路和實(shí)現(xiàn)方法,并使之商品化。
● 抽象隱藏細(xì)節(jié),但不應(yīng)該妨礙您檢查細(xì)節(jié)。
復(fù)雜性是相對(duì)的。如果您無法在特定環(huán)境內(nèi)描繪問題的特性并了解問題,那么復(fù)雜性就會(huì)使您無法解決問題。同時(shí),復(fù)雜性為你提供制造出與眾不同產(chǎn)品的機(jī)會(huì)。再則,復(fù)雜性如果被你攻克,就會(huì)成為您搞出與眾不同設(shè)計(jì)的基礎(chǔ),并成為競爭對(duì)手的障礙,盡管是臨時(shí)障礙。如果沒有足夠的復(fù)雜性,就很難提供獨(dú)特的增值功能, 這是因?yàn)楦偁帉?duì)手可以很容易地仿制您的開發(fā)成果,并在他們的產(chǎn)品中增加這些功能。
一條工程經(jīng)驗(yàn)法則是:設(shè)計(jì)小組能夠以最低成本,在最短的開發(fā)時(shí)間內(nèi)交付組合有最佳功能的產(chǎn)品,條件是他們只關(guān)注其中的兩個(gè)要素,犧牲第三個(gè)要素。在一個(gè)競爭的領(lǐng)域內(nèi),至關(guān)重要的是要實(shí)現(xiàn)所有這三個(gè)要素,這又會(huì)提高設(shè)計(jì)成果的總復(fù)雜性(附文《無法滿足的胃口》)。幸好,您不必徹底了解產(chǎn)品的每一個(gè)細(xì)節(jié)就能使用它。使用能支持特定領(lǐng)域的抽象工具或能為自己正在研制的系統(tǒng)創(chuàng)建特定抽象的工具,就是一種降低設(shè)計(jì)復(fù)雜性、提高開發(fā)效率的技術(shù)。
抽象是對(duì)某系統(tǒng)的細(xì)節(jié)進(jìn)行組織的過程,這樣您就可以專注于總體情況的關(guān)鍵要素。抽象并不會(huì)減少——甚至還可能增加——您必須為某項(xiàng)設(shè)計(jì)而要處理的細(xì)節(jié)數(shù)量。然而,抽象能夠組織這些細(xì)節(jié),以便您能減少你為設(shè)計(jì)中任何一部分必須考慮的細(xì)節(jié)數(shù)量。建立有用抽象的挑戰(zhàn)性在于根據(jù)環(huán)境和誰將使用這些抽象,確定哪些性能是必不可少的,哪些性能是可以忽略的。抽象是智能框架,從多個(gè)方面對(duì)某個(gè)系統(tǒng)進(jìn)行抽象也許是很有用的。設(shè)計(jì)師和用戶也許需要使用同一系統(tǒng)的不同抽象。對(duì)于分層抽象來說,工作在每個(gè)抽象層次的設(shè)計(jì)師也許需要與一組不同的細(xì)節(jié)打交道。
對(duì)某個(gè)系統(tǒng)適當(dāng)?shù)剡M(jìn)行抽象,可以為設(shè)計(jì)小組的每名成員降低系統(tǒng)復(fù)雜性,這是因?yàn)槟梢员苊饷课辉O(shè)計(jì)師去考慮不相關(guān)的細(xì)節(jié)。實(shí)際上,您是在簡化和限定每一位設(shè)計(jì)師必須面對(duì)的條件范圍。抽象某個(gè)系統(tǒng),可能有利于匯總系統(tǒng)微觀行為,以便能在宏觀層次揭示微觀行為,使之概念化,再進(jìn)行處置。有時(shí),不必了解各事件的具體順序就可以從存儲(chǔ)器中提取數(shù)據(jù),或?qū)@些數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。然而有些時(shí)候,例如,當(dāng)您的系統(tǒng)對(duì)連續(xù)數(shù)據(jù)流進(jìn)行實(shí)時(shí)的計(jì)算密集型操作時(shí),了解并控制這兩種機(jī)制的細(xì)節(jié)對(duì)于項(xiàng)目的成功是至關(guān)重要的。
抽象某個(gè)系統(tǒng)可以幫助您鑒別、隔離并管理一個(gè)系統(tǒng)的邏輯部件之間在計(jì)算和接口兩個(gè)方面的相關(guān)性,這樣您就能在各部分中解決大問題。如果您缺乏恰當(dāng)?shù)脑~匯和其它符號(hào)工具來表述某個(gè)問題,您就會(huì)在解決該問題時(shí)面臨嚴(yán)重的障礙。恰當(dāng)?shù)爻橄竽硞€(gè)系統(tǒng),可以為您提供詞匯和符號(hào)集,從而在設(shè)計(jì)小組成員之間就各個(gè)部分及其相互關(guān)系進(jìn)行有意義的溝通。恰當(dāng)?shù)脑~匯和符號(hào)集是適用于特定應(yīng)用和特定領(lǐng)域的。一個(gè)標(biāo)準(zhǔn)的或通用的符號(hào)集可能無法使您充分表述您正在努力解決的系統(tǒng)和問題,它可能會(huì)使您偏向采用一種次優(yōu)方法。
工具、工具、工具
產(chǎn)品設(shè)計(jì)正在一代一代地增加占用更多處理能力的復(fù)雜功能,而產(chǎn)品設(shè)計(jì)周期比以往任何時(shí)候都短。為了跟上這些設(shè)計(jì)日益提高的復(fù)雜性,開發(fā)小組可以依靠以下手段:重復(fù)使用既有設(shè)計(jì);獲得第三方知識(shí)產(chǎn)權(quán) (IP) 的許可證;使用各種抽象或隱藏目標(biāo)平臺(tái)實(shí)現(xiàn)細(xì)節(jié)的工具。匯編器、編譯器、建模工具、代碼發(fā)生器、操作系統(tǒng)和外設(shè)驅(qū)動(dòng)程序都能隱藏目標(biāo)處理平臺(tái)的細(xì)節(jié),而且一般都能提高設(shè)計(jì)師的工作效率。這幾類工具通常不提供應(yīng)用級(jí)抽象;它們按分層方式工作,從而抽象目標(biāo)實(shí)現(xiàn)細(xì)節(jié)并使之自動(dòng)化,而無需了解系統(tǒng)的行為。
另一類代碼發(fā)生器,比如 Celoxica 公司和 Stretch 公司的產(chǎn)品,有助于把 C 源碼自動(dòng)轉(zhuǎn)換成硬件塊。這些工具使您能夠保持一致的軟件開發(fā)方法,并仍能受益于采用并行單元的硬件處理速度加快。AccelChip 公司和 Catalytic 公司的代碼發(fā)生器工作于更高的層次,直接依靠 Matlab 文件,來生成可合成的 RTL,或把浮點(diǎn)模型轉(zhuǎn)換成定點(diǎn)目標(biāo)代碼。
應(yīng)用抽象工具試圖使系統(tǒng)行為與實(shí)現(xiàn)方法無關(guān)。Aonix公司、The MathWorks公司、National Instruments公司、Teja 公司提供的工具,能為十分關(guān)鍵的信號(hào)安全處理或高度并行的多處理器應(yīng)用系統(tǒng)提供特定域抽象。特定域抽象工具包括合適的符號(hào)工具和結(jié)構(gòu),而這些工具與結(jié)構(gòu)使您能更自然地表述和探索該域中的設(shè)計(jì)方法,不過在目標(biāo)域之外,它們的用處通常是有限的。通用抽象工具,如 I-Logix 公司和 IBM 公司的 UML(統(tǒng)一建模語言)工具, 使您能夠創(chuàng)建自己的抽象,而且在更廣的應(yīng)用范圍內(nèi)都很有用,但要依靠您運(yùn)用您的工程專業(yè)知識(shí)來構(gòu)建有意義的特定域抽象。
圖 1,UML 是OMG公司 的模型驅(qū)動(dòng)體系結(jié)構(gòu)的基礎(chǔ)。與平臺(tái)無關(guān)的模型包含系統(tǒng)行為,而特定平臺(tái)模型根據(jù)特定平臺(tái)映射規(guī)則和與平臺(tái)無關(guān)模型的標(biāo)記,包含實(shí)現(xiàn)細(xì)則。
MDA(模型驅(qū)動(dòng)的體系結(jié)構(gòu))開發(fā)工具使系統(tǒng)行為細(xì)節(jié)的建模與實(shí)現(xiàn)方法細(xì)節(jié)的建模無關(guān),具體做法是將這些模型分割成與UML 平臺(tái)無關(guān)的模型和特定平臺(tái)模型(圖 1)。與平臺(tái)無關(guān)模型不包括技術(shù)實(shí)現(xiàn)細(xì)節(jié),側(cè)重于描述系統(tǒng)的功能和行為。MDA 開發(fā)工具應(yīng)用映射模板來產(chǎn)生特定平臺(tái)模型。為了實(shí)現(xiàn)這種轉(zhuǎn)換,您必須精確調(diào)節(jié)與平臺(tái)無關(guān)的模型,并對(duì)它做注釋,以便加進(jìn)語義學(xué)和規(guī)則,用以生成代碼。MDA 開發(fā)工具根據(jù)這些模型產(chǎn)生機(jī)器生成的代碼,您可以對(duì)照行為模型來測(cè)試已生成代碼的正確性。如果您改變行為模型或?qū)崿F(xiàn)模型,則重新生成的代碼始終會(huì)利用這些變化。
只要對(duì)較低層次實(shí)現(xiàn)細(xì)節(jié)的生成進(jìn)行抽象和自動(dòng)化,這些工具就能提供一種使設(shè)計(jì)能在各種目標(biāo)平臺(tái)之間移植,并使設(shè)計(jì)塊能被反復(fù)使用的機(jī)制。然而,抽象只能實(shí)現(xiàn)移植機(jī)制。例如,如果目標(biāo)處理器沒有代碼生成器,您就必須人工移植設(shè)計(jì)實(shí)現(xiàn)。除了這些益處之外,隨著更高層次的工具在目標(biāo)級(jí)變得更成熟、更便于使用、更有效,能夠維持既有設(shè)計(jì)細(xì)節(jié)并實(shí)質(zhì)性參與嵌入式設(shè)計(jì)的人數(shù)會(huì)相應(yīng)增多(圖 2)。擁有技巧和知識(shí)以便使用較低級(jí)別工具進(jìn)行設(shè)計(jì)的人現(xiàn)在要比能使用較高級(jí)工具進(jìn)行設(shè)計(jì)的人少。
要點(diǎn)
● 抽象通過隱藏細(xì)節(jié)來降低復(fù)雜性。
● 抽象不會(huì)減少某項(xiàng)設(shè)計(jì)的細(xì)節(jié)數(shù)量。
● 自動(dòng)化開發(fā)工具可簡化以前的創(chuàng)新設(shè)計(jì)思路和實(shí)現(xiàn)方法,并使之商品化。
● 抽象隱藏細(xì)節(jié),但不應(yīng)該妨礙您檢查細(xì)節(jié)。
復(fù)雜性是相對(duì)的。如果您無法在特定環(huán)境內(nèi)描繪問題的特性并了解問題,那么復(fù)雜性就會(huì)使您無法解決問題。同時(shí),復(fù)雜性為你提供制造出與眾不同產(chǎn)品的機(jī)會(huì)。再則,復(fù)雜性如果被你攻克,就會(huì)成為您搞出與眾不同設(shè)計(jì)的基礎(chǔ),并成為競爭對(duì)手的障礙,盡管是臨時(shí)障礙。如果沒有足夠的復(fù)雜性,就很難提供獨(dú)特的增值功能, 這是因?yàn)楦偁帉?duì)手可以很容易地仿制您的開發(fā)成果,并在他們的產(chǎn)品中增加這些功能。
一條工程經(jīng)驗(yàn)法則是:設(shè)計(jì)小組能夠以最低成本,在最短的開發(fā)時(shí)間內(nèi)交付組合有最佳功能的產(chǎn)品,條件是他們只關(guān)注其中的兩個(gè)要素,犧牲第三個(gè)要素。在一個(gè)競爭的領(lǐng)域內(nèi),至關(guān)重要的是要實(shí)現(xiàn)所有這三個(gè)要素,這又會(huì)提高設(shè)計(jì)成果的總復(fù)雜性(附文《無法滿足的胃口》)。幸好,您不必徹底了解產(chǎn)品的每一個(gè)細(xì)節(jié)就能使用它。使用能支持特定領(lǐng)域的抽象工具或能為自己正在研制的系統(tǒng)創(chuàng)建特定抽象的工具,就是一種降低設(shè)計(jì)復(fù)雜性、提高開發(fā)效率的技術(shù)。
抽象是對(duì)某系統(tǒng)的細(xì)節(jié)進(jìn)行組織的過程,這樣您就可以專注于總體情況的關(guān)鍵要素。抽象并不會(huì)減少——甚至還可能增加——您必須為某項(xiàng)設(shè)計(jì)而要處理的細(xì)節(jié)數(shù)量。然而,抽象能夠組織這些細(xì)節(jié),以便您能減少你為設(shè)計(jì)中任何一部分必須考慮的細(xì)節(jié)數(shù)量。建立有用抽象的挑戰(zhàn)性在于根據(jù)環(huán)境和誰將使用這些抽象,確定哪些性能是必不可少的,哪些性能是可以忽略的。抽象是智能框架,從多個(gè)方面對(duì)某個(gè)系統(tǒng)進(jìn)行抽象也許是很有用的。設(shè)計(jì)師和用戶也許需要使用同一系統(tǒng)的不同抽象。對(duì)于分層抽象來說,工作在每個(gè)抽象層次的設(shè)計(jì)師也許需要與一組不同的細(xì)節(jié)打交道。
對(duì)某個(gè)系統(tǒng)適當(dāng)?shù)剡M(jìn)行抽象,可以為設(shè)計(jì)小組的每名成員降低系統(tǒng)復(fù)雜性,這是因?yàn)槟梢员苊饷课辉O(shè)計(jì)師去考慮不相關(guān)的細(xì)節(jié)。實(shí)際上,您是在簡化和限定每一位設(shè)計(jì)師必須面對(duì)的條件范圍。抽象某個(gè)系統(tǒng),可能有利于匯總系統(tǒng)微觀行為,以便能在宏觀層次揭示微觀行為,使之概念化,再進(jìn)行處置。有時(shí),不必了解各事件的具體順序就可以從存儲(chǔ)器中提取數(shù)據(jù),或?qū)@些數(shù)據(jù)進(jìn)行算術(shù)運(yùn)算。然而有些時(shí)候,例如,當(dāng)您的系統(tǒng)對(duì)連續(xù)數(shù)據(jù)流進(jìn)行實(shí)時(shí)的計(jì)算密集型操作時(shí),了解并控制這兩種機(jī)制的細(xì)節(jié)對(duì)于項(xiàng)目的成功是至關(guān)重要的。
抽象某個(gè)系統(tǒng)可以幫助您鑒別、隔離并管理一個(gè)系統(tǒng)的邏輯部件之間在計(jì)算和接口兩個(gè)方面的相關(guān)性,這樣您就能在各部分中解決大問題。如果您缺乏恰當(dāng)?shù)脑~匯和其它符號(hào)工具來表述某個(gè)問題,您就會(huì)在解決該問題時(shí)面臨嚴(yán)重的障礙。恰當(dāng)?shù)爻橄竽硞€(gè)系統(tǒng),可以為您提供詞匯和符號(hào)集,從而在設(shè)計(jì)小組成員之間就各個(gè)部分及其相互關(guān)系進(jìn)行有意義的溝通。恰當(dāng)?shù)脑~匯和符號(hào)集是適用于特定應(yīng)用和特定領(lǐng)域的。一個(gè)標(biāo)準(zhǔn)的或通用的符號(hào)集可能無法使您充分表述您正在努力解決的系統(tǒng)和問題,它可能會(huì)使您偏向采用一種次優(yōu)方法。
工具、工具、工具
產(chǎn)品設(shè)計(jì)正在一代一代地增加占用更多處理能力的復(fù)雜功能,而產(chǎn)品設(shè)計(jì)周期比以往任何時(shí)候都短。為了跟上這些設(shè)計(jì)日益提高的復(fù)雜性,開發(fā)小組可以依靠以下手段:重復(fù)使用既有設(shè)計(jì);獲得第三方知識(shí)產(chǎn)權(quán) (IP) 的許可證;使用各種抽象或隱藏目標(biāo)平臺(tái)實(shí)現(xiàn)細(xì)節(jié)的工具。匯編器、編譯器、建模工具、代碼發(fā)生器、操作系統(tǒng)和外設(shè)驅(qū)動(dòng)程序都能隱藏目標(biāo)處理平臺(tái)的細(xì)節(jié),而且一般都能提高設(shè)計(jì)師的工作效率。這幾類工具通常不提供應(yīng)用級(jí)抽象;它們按分層方式工作,從而抽象目標(biāo)實(shí)現(xiàn)細(xì)節(jié)并使之自動(dòng)化,而無需了解系統(tǒng)的行為。
另一類代碼發(fā)生器,比如 Celoxica 公司和 Stretch 公司的產(chǎn)品,有助于把 C 源碼自動(dòng)轉(zhuǎn)換成硬件塊。這些工具使您能夠保持一致的軟件開發(fā)方法,并仍能受益于采用并行單元的硬件處理速度加快。AccelChip 公司和 Catalytic 公司的代碼發(fā)生器工作于更高的層次,直接依靠 Matlab 文件,來生成可合成的 RTL,或把浮點(diǎn)模型轉(zhuǎn)換成定點(diǎn)目標(biāo)代碼。
應(yīng)用抽象工具試圖使系統(tǒng)行為與實(shí)現(xiàn)方法無關(guān)。Aonix公司、The MathWorks公司、National Instruments公司、Teja 公司提供的工具,能為十分關(guān)鍵的信號(hào)安全處理或高度并行的多處理器應(yīng)用系統(tǒng)提供特定域抽象。特定域抽象工具包括合適的符號(hào)工具和結(jié)構(gòu),而這些工具與結(jié)構(gòu)使您能更自然地表述和探索該域中的設(shè)計(jì)方法,不過在目標(biāo)域之外,它們的用處通常是有限的。通用抽象工具,如 I-Logix 公司和 IBM 公司的 UML(統(tǒng)一建模語言)工具, 使您能夠創(chuàng)建自己的抽象,而且在更廣的應(yīng)用范圍內(nèi)都很有用,但要依靠您運(yùn)用您的工程專業(yè)知識(shí)來構(gòu)建有意義的特定域抽象。
圖 1,UML 是OMG公司 的模型驅(qū)動(dòng)體系結(jié)構(gòu)的基礎(chǔ)。與平臺(tái)無關(guān)的模型包含系統(tǒng)行為,而特定平臺(tái)模型根據(jù)特定平臺(tái)映射規(guī)則和與平臺(tái)無關(guān)模型的標(biāo)記,包含實(shí)現(xiàn)細(xì)則。
MDA(模型驅(qū)動(dòng)的體系結(jié)構(gòu))開發(fā)工具使系統(tǒng)行為細(xì)節(jié)的建模與實(shí)現(xiàn)方法細(xì)節(jié)的建模無關(guān),具體做法是將這些模型分割成與UML 平臺(tái)無關(guān)的模型和特定平臺(tái)模型(圖 1)。與平臺(tái)無關(guān)模型不包括技術(shù)實(shí)現(xiàn)細(xì)節(jié),側(cè)重于描述系統(tǒng)的功能和行為。MDA 開發(fā)工具應(yīng)用映射模板來產(chǎn)生特定平臺(tái)模型。為了實(shí)現(xiàn)這種轉(zhuǎn)換,您必須精確調(diào)節(jié)與平臺(tái)無關(guān)的模型,并對(duì)它做注釋,以便加進(jìn)語義學(xué)和規(guī)則,用以生成代碼。MDA 開發(fā)工具根據(jù)這些模型產(chǎn)生機(jī)器生成的代碼,您可以對(duì)照行為模型來測(cè)試已生成代碼的正確性。如果您改變行為模型或?qū)崿F(xiàn)模型,則重新生成的代碼始終會(huì)利用這些變化。
只要對(duì)較低層次實(shí)現(xiàn)細(xì)節(jié)的生成進(jìn)行抽象和自動(dòng)化,這些工具就能提供一種使設(shè)計(jì)能在各種目標(biāo)平臺(tái)之間移植,并使設(shè)計(jì)塊能被反復(fù)使用的機(jī)制。然而,抽象只能實(shí)現(xiàn)移植機(jī)制。例如,如果目標(biāo)處理器沒有代碼生成器,您就必須人工移植設(shè)計(jì)實(shí)現(xiàn)。除了這些益處之外,隨著更高層次的工具在目標(biāo)級(jí)變得更成熟、更便于使用、更有效,能夠維持既有設(shè)計(jì)細(xì)節(jié)并實(shí)質(zhì)性參與嵌入式設(shè)計(jì)的人數(shù)會(huì)相應(yīng)增多(圖 2)。擁有技巧和知識(shí)以便使用較低級(jí)別工具進(jìn)行設(shè)計(jì)的人現(xiàn)在要比能使用較高級(jí)工具進(jìn)行設(shè)計(jì)的人少。
評(píng)論