當前位置:首頁 > 嵌入式 > 嵌入式教程
[導讀]實時嵌入式系統(tǒng)模型校驗技術

模型校驗是最成功的需求驗證工具。模型校驗的基本原理如圖1所示。模型校驗工具的輸入是系統(tǒng)需求或設計(稱為模型)以及最終系統(tǒng)期望實現(xiàn)的特性(稱為“規(guī) 范”)。如果給定的模型滿足給定的規(guī)范,那么工具將輸出yes,否則將生成反例。反例詳細描述了模型無法滿足規(guī)范的原因,通過研究反例,可以精確地定位模 型的缺陷,如此反復。該方法的原理是通過確保模型滿足足夠多的系統(tǒng)特性以增強我們對模型正確性的信心。系統(tǒng)需求之所以稱為模型,因為這些模型表征的是需求 或設計。

  

 

  圖1:模型校驗方法。

  那 么,哪種規(guī)范化語言可以用來定義模型呢?答案當然不是唯一的,因為不同應用領域的需求(或設計)差異很大。例如,銀行系統(tǒng)和空間系統(tǒng)在系統(tǒng)規(guī)模、結構、復 雜度、系統(tǒng)數(shù)據(jù)的屬性及執(zhí)行操作上的需求差異就很明顯。相反,大多數(shù)實時嵌入式或安全臨界系統(tǒng)都面向控制,而不是數(shù)據(jù),這意味著這些系統(tǒng)的動態(tài)特性遠比業(yè) 務邏輯(由系統(tǒng)維護的內(nèi)部數(shù)據(jù)的結構及操作)重要。這些基于控制的系統(tǒng)可以應用于諸多領域:航天系統(tǒng)、航空電子、汽車系統(tǒng)、生物醫(yī)學儀器、工業(yè)自動化及過 程控制、鐵路、核電站等。甚至數(shù)字硬件系統(tǒng)的通信和安全協(xié)議均可視為面向控制的系統(tǒng)。

  對于面向控制的系統(tǒng),可以采用有限狀態(tài) 機(FSM)定義需求和設計,這是一種得到廣泛認可的抽象表示方法。當然,光靠FSM并不能對復雜的實際工業(yè)系統(tǒng)進行建模。我們還需要:1. 能將需求模塊化并區(qū)分需求等級;2. 能合并各組成部分的需求(或設計);3. 能通過更新預先規(guī)定的變量和設備,防止可能出現(xiàn)的異常。

  校驗設計需求時,通常可以通過回答一些問題得到結果。下面給出了校驗需求時最常問的一些問題:

  * 設計需求是否準確地反映了用戶需求?需求中的每一事項是否與用戶的期望一致?需求是否包含用戶所要求的全部內(nèi)容?

  * 設計需求是否表述清晰并無異義?是否能被用戶很好地理解?

  * 設計需求是否具有靈活性和可實現(xiàn)性?例如設計需求是否模塊化并具有良好的架構,從而有助于設計和開發(fā)?

  * 設計需求是否能輕松地定義驗收測試示例以驗證設計實現(xiàn)與需求的一致性。

  * 設計需求是否只是概要地描述而與具體的設計、實現(xiàn)及技術平臺等無關,從而使得設計人員和開發(fā)人員具有充分的自由度實現(xiàn)這些需求?

  回 答這些問題當然絕非輕而易舉而且也沒有任何捷徑可循,但如果需求成功地超越了這些條條框框,那么無疑為優(yōu)良系統(tǒng)的設計打下了堅實基礎。盡管可以利用類似 UML這樣的建模工具,但仍然需要確保設計需求的質(zhì)量。這個過程需要投入大量精力和時間,包括各種形式的審查,有時甚至還需要進行部分原型設計。此外,需 求設計中采用多種表示方法(如UML中的表示方法)通常又將引發(fā)其他的問題,例如:

  * 設計需求需要使用哪種表示方法?

  * 如何確保不同表示方法的描述的一致性?

  

 

  圖2:簡單的雙水槽泵控系統(tǒng)。

  設計需求缺陷的成本通常很高,至少需要重設計并進行維護。錯誤的需求導致錯誤的系統(tǒng)行為并顯著增加成本,如喪失產(chǎn)品的時效性和本質(zhì)特征,而對于工作在實時環(huán)境下的嵌入式安全臨界系統(tǒng)更是如此。為確保系統(tǒng)設計的質(zhì)量,也需要考慮類似的問題。

  改 進需求和設計的一條途徑是利用自動化工具對需求和設計各環(huán)節(jié)的質(zhì)量進行校驗。那么,哪種工具最適用呢?一般而言,校驗用英文描述的需求或設計極為困難。因 此,必須采用一種清晰嚴格且無二義的規(guī)范化語言對需求進行描述。如果這種描述需求和設計的語言具有明確的語義,那么完全可以開發(fā)出自動化工具以分析這種語 言描述的設計需求。這種采用嚴格語言描述需求或設計的基本思想已成為系統(tǒng)驗證的基石。[!--empirenews.page--]簡單的系統(tǒng)模型實例

 

  首 先,讓我們考察一下如何利用模型校驗工具驗證簡單的嵌入式系統(tǒng)特性。為此,我們采用Carnegie-Mellon大學開發(fā)的符號模型驗證器 (symbolic model verifier,SMV)作為模型校驗工具。當然,我們也可以采用其他的模型校驗工具描述該模型。文章結束部分列出了可選的模型校驗工具及獲取方式。

  如 圖2所示,一個簡單的泵控系統(tǒng)通過泵P將源水槽A中的水傳送至接收水槽B。每個水槽都具有兩級刻度線:一個用來檢測水位是否為空(Empty),而另一個 用來檢測水位是否已滿(Full)。如果水槽的水位既不為空也不為滿,那么水槽刻度線設定為ok;換言之,即水位高于空刻度線但低于滿刻度線。

  最 初,兩個水槽均為空。一旦水槽A的水位值為ok(從空開始),啟動泵并假定水槽B尚未為滿。只要水槽A不為空且水槽B不為滿,泵將持續(xù)工作。一旦水槽A為 空或水槽B為滿,泵將停止工作。一旦泵啟動(或停止),系統(tǒng)將不會嘗試停止(或啟動)泵。雖然這個示例非常簡單,但可以很容易地擴展為控制多個源水槽和接 收水槽的復雜泵管線網(wǎng)絡控制器,如應用在水處理系統(tǒng)或化工廠中的控制器。

  表1:SMV模型描述和需求清單。

  MODULE main

  VAR

  level_a : {Empty, ok, Full}; -- lower tank

  level_b : {Empty, ok, Full}; -- upper tank

  pump : {on, off};

  ASSIGN

  next(level_a) := case

  level_a = Empty : {Empty, ok};

  level_a = ok & pump = off : {ok, Full};

  level_a = ok & pump = on : {ok, Empty, Full};

  level_a = Full & pump = off : Full;

  level_a = Full & pump = on : {ok, Full};

  1 : {ok, Empty, Full};

  esac;

  next(level_b) := case

  level_b = Empty & pump = off : Empty;

  level_b = Empty & pump = on : {Empty, ok};

  level_b = ok & pump = off : {ok, Empty};

  level_b = ok & pump = on : {ok, Empty, Full};

  level_b = Full & pump = off : {ok, Full};

  level_b = Full & pump = on : {ok, Full};

  1 : {ok, Empty, Full};

  esac;

  next(pump) := case

  pump = off & (level_a = ok | level_a = Full) &

  (level_b = Empty | level_b = ok) : on;

  pump = on & (level_a = Empty | level_b = Full) : off;

  1 : pump; -- keep pump status as it is

  esac;

  INIT

  (pump = off)

  SPEC

  -- pump if always off if ground tank is Empty or up tank is Full

  -- AG AF (pump = off -> (level_a = Empty | level_b = Full))

  -- it is always possible to reach a state when the up tank is ok or Full

  AG (EF (level_b = ok | level_b = Full))

  該系統(tǒng)的模型的SMV建模如表1所示。起始的VAR部分定義了系統(tǒng)的3個狀態(tài)變量,變量level_a和level_b分別記錄了上層水槽(upper tank)和下層水槽(lower

  

 

  圖3:泵控系統(tǒng)執(zhí)行樹的初始部分。

  tank)的當前水位;在每個“時刻”,這兩個變量都將分別賦值,取值范圍為Empty、ok或Full。變量pump表征了泵的啟動(on)和停止(off)。

  系 統(tǒng)狀態(tài)就可用上述3個變量的不同取值來表示。例如(level_a=Empty, level_b=ok, pump=off)和l (level_a=Empty, level_b=Full, pump=on)就可以表示系統(tǒng)狀態(tài)。在靠近結尾的INIT部分,定義了這些變量的初始值(這里,最初假定pump的初始值為off,而其他兩個變量則可 取任意值)。

  ASSIGN部分定義了系統(tǒng)如何從一個狀態(tài)遷移到另一個狀態(tài)。每個next語句都規(guī)定了特定變量的取值變化。所 有這些賦值語句都假定可以并行執(zhí)行;next語句定義為在該部分執(zhí)行所有賦值語句后的最終結果。下層水槽的狀態(tài)可以從Empty狀態(tài)遷移到Empty或 ok狀態(tài);從ok狀態(tài)遷移到Empty或Full狀態(tài),或保持為ok狀態(tài)(如果pump的狀態(tài)為on);從ok狀態(tài)遷移到ok或Full狀態(tài)(如果 pump的狀態(tài)為off);如果pump狀態(tài)為off,那么下層水槽在Full狀態(tài)無法發(fā)生狀態(tài)遷移;如果泵狀態(tài)為on,則可遷移到ok或Full狀態(tài)。 上層水槽也可規(guī)定類似的操作。

  在系統(tǒng)內(nèi)部,大多數(shù)模型校驗工具通常會將輸入模型擴展為具有Kripke結構的動態(tài)系統(tǒng)。擴展 過程包括在EFSM中除去分層結構、并行成分以及狀態(tài)遷移時的告警和操作。Kripke結構中的每個狀態(tài)實際上都可用每個狀態(tài)均賦值的元組(tuple) 來表示。Kripke結構中的狀態(tài)遷移表征了一個或多個狀態(tài)變量取值的變化;而且還可以比較通過擴展給定模型而得到的Kripke結構,對指定的系統(tǒng)屬性 進行校驗。然而,為了更好地理解每條屬性語句的含義,Kripke結構還必須進一步擴展為無限樹形結構,其中樹形結構的每個分支都表征了系統(tǒng)可能的執(zhí)行操 作或行為。[!--empirenews.page--]路徑和屬性規(guī)范

 

  最開始,系統(tǒng)可以處于9個狀態(tài)中的任意一個,其中對于A和B的水位沒有任何限制,而pump的初始狀態(tài)假定為off。這樣,我們就可以利用有序元組

  這 些狀態(tài)可以無限執(zhí)行(或運算)樹狀結構的形式進行排列。如圖3所示,樹根為我們所選的初始狀態(tài),任意狀態(tài)的分支均表示下一個可能的狀態(tài),而每個系統(tǒng)執(zhí)行都 是執(zhí)行樹狀結構的一條路徑??傮w上,系統(tǒng)可以具有無限多個這樣的執(zhí)行路徑。模型校驗的目標就是檢驗執(zhí)行樹狀結構是否滿足用戶指定的屬性要求。

  現(xiàn) 在的問題在于,我們究竟該如何描述執(zhí)行樹狀結構路徑(及路徑上的狀態(tài))的屬性。從技術的角度看,運算樹邏輯(Computation tree logic, CTL)是時序邏輯(time temporal logic, TTL)的一個分支,其簡單性和直觀性非常適合于本例。CTL是常用的布爾命題邏輯(Boolean propositional logic, BPL)的擴展,除了支持包括“和(and)”、“或(or)”、“否(not)”、“蘊涵(implies)”在內(nèi)的BPL邏輯連接操作外,還支持輔助 的時序連接操作。表2所示為 CTL 中的某些連接操作。

  表1和圖4說明了CTL中一些基本時序連接操作的直觀意義。一般地,E(就某個路徑而言)和A(就所有的路徑而言)表示從某個狀態(tài)開始的路徑數(shù)目。F(就某個狀態(tài)而言)和G(就所有狀態(tài)而言)表示某個路徑中的狀態(tài)數(shù)目。

  

 

  圖4:狀態(tài)s0處滿足CTL公式的直覺推導。

  對 于指定的屬性以及對應于系統(tǒng)模型的運算樹T(可以是無限運算樹),模型校驗算法可以通過校驗T判斷T是否滿足該屬性。例如,考慮指定的屬性AF g,其中g表示與任何CTL連接無關的命題公式。圖4b給出了運算樹T的一個示例。如果屬性AF g在根狀態(tài)s0的值設定為true(即如果T中的每條路徑中有狀態(tài)開始于s0以使公式g為true),那么對于該運算樹TAF g的值為true。如果g在s0為true,那么就實現(xiàn)了預定目標,因為s0將會出現(xiàn)在從s0開始的每條路徑中。但如果g在s0狀態(tài)下不為true,由于 從s0開始的路徑要么是s0的左分支,要么是s0的右分支,因此如果在運算樹T中s0的兩個分支都為true(通過遞歸校驗),那么該屬性在s0處也為 true。

  圖4b顯示,g在左分支根部為true(球體填充為黃色)。因此從s0到左分支單元的所有路徑以及整個左分支樹都 滿足該屬性?,F(xiàn)在假定g在s0的右分支根部不為true;因此對于所有的子單元都將遞歸檢驗該屬性。圖4b顯示,對于s0右分支的所有子單元,g都為 true(球體填充為黃色),因此對于s0的右分支樹該屬性為true。這樣,對于s0的所有子分支樹該屬性為true,從而s0也為true。

  圖4 歸納了類似的其他屬性(例如EG g和AG g)校驗原理。當然,實際應用中的模型校驗算法遠比這復雜;這些算法利用一些巧妙的簡化手段對狀態(tài)空間進行精簡,從而避免了對那些確保為true的屬性進 行校驗。一些設計良好的模型校驗器可用來校驗狀態(tài)數(shù)高達1,040個的狀態(tài)空間的屬性。在SMV中,待驗證的屬性可由SPEC部分的用戶指定。邏輯連接 “否”、“或”、“和”和“if-then”可以分別用!、|、&和 ->表示。CTL時序連接則表示為AF、AG、EF、EG等。屬性AF(pump=on)表示對于每條開始于初始狀態(tài)的路徑,路徑中有一個pump =on的狀態(tài)。在初始狀態(tài),該屬性顯然為false,因為從初始狀態(tài)開始有一條路徑pump的值始終為off(例如,當水槽A永遠保持為空時)。如果希望 在SPEC部分中描述該屬性,那么SMV將為該屬性生成如下反例。循環(huán)表征了開始于初始狀態(tài)的無限狀態(tài)序列(換言之,即路徑),這樣水槽B在該路徑下的每 個狀態(tài)均為Full,因此pump=off。

  與嚴格的規(guī)范化語言相結合,可以下列執(zhí)行序列表示:

  state 1.1:

  level_a = Full

  level_b = Full

  pump = off

  state 1.2:

  屬性AF(pump=off)具有兩重含義,表征的是對于每條開始于初始狀態(tài)的路徑,路徑中有一個狀態(tài)中pump=off。該屬性當然在初始狀態(tài)為true,因為初始狀態(tài)本身(所有路徑均包含初始狀態(tài))pump=off就成立。

  

 

  表2:CTL中的一些時序連接。

  時 序連接和邏輯連接相結合,可以得到一些有趣的復雜屬性。屬性AG((pump=off) -> AF (pump=on))表示如果pump=off,那么最終pump=on這種情形總會發(fā)生。初始狀態(tài),該屬性顯然為false。屬性AG AF (pump=off -> (level_a=Empty | level_b=Full))表示如果底層水槽為Empty或上層水槽為Full,那么pump將總是為off。屬性AG (EF (level_b= ok|level_b=Full))表示總是會出現(xiàn)上層水槽為ok或Full的情形。

  實際應用中的模型校驗

  模型校驗已被證明是對各類系統(tǒng)(尤其是硬件系統(tǒng)、實時嵌入式系統(tǒng)和安全臨界系統(tǒng))進行需求和設計驗證的有效工具。例如,SPIN模型校驗器曾用于驗證NASA的深空1發(fā)射方案中的多線程規(guī)劃執(zhí)行模型并成功地發(fā)現(xiàn)了5個先前未知的并發(fā)缺陷。然而,實際使用模型校驗時還需要注意下面一些主要問題:

  1. 每種模型校驗工具都采用特有的建模語言,這些建模語言一般都無法將不規(guī)范的需求描述自動轉(zhuǎn)化為規(guī)范化語言。這樣的轉(zhuǎn)化顯然需要手工完成,因此很難檢驗模型 是否正確地表示了建模系統(tǒng)。實際上,指定的建模表示法往往很難甚至根本不可能對部分系統(tǒng)需求進行建模。2. 專用工具屬性規(guī)范表示法也存在類似的問題,屬性表示法通??梢允荂TL、CTL*或命題線性時序邏輯(PLTL)的變形。某些需要驗證的屬性很難甚至根本 不可能用該表示法進行描述。3. 模型系統(tǒng)中的狀態(tài)數(shù)量也可能極為龐大。盡管模型校驗算法可以利用一些技巧減小狀態(tài)空間的復雜度,但模型校驗器仍然需要很長的時間才能驗證一個指定的屬性或 者決定“放棄”驗證該屬性。這時,用戶將不得不投入更大的精力,獨立驗證模型的各部分或者通過減小變量的取值范圍以達到簡化狀態(tài)空間的目的。

  盡管如此,模型校驗仍被證明是無與倫比的系統(tǒng)需求或設計驗證工具。該工具能在需求或設計的早期階段發(fā)現(xiàn)瑕疵,因此能極大地節(jié)省后續(xù)的開發(fā)時間。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉