確實在NuSMV中沒有像NULL,Nil,None這樣的值嗎?使用NuSMV進行模型檢查
而且我們不應該爲過程建立模型,因爲模型應該重複電子電路?
我的方案是我有一個UART連接器,一個主存儲器和一個進程,後者讀寫主內存並讀寫UART。在主存中有數據名爲K
,應該保持不變。我們想證明,如果過程不寫入K' then the value of
K`等於它的下一個值。
我在想我的模型是否足夠精細,或者太抽象了。另外如果我使用正確的數據類型。
MODULE UART (proc, output, input)
VAR state : {idle, receive, transmit};
Rx : unsigned word [ 8 ]; --vector of bytes
Tx : unsigned word [ 8 ];
ASSIGN
next (Rx) :=
case
proc = read : input; TRUE : (Rx);
esac;
next (Tx) :=
case
proc = write : output; TRUE : (Tx);
esac;
next (state) :=
case
proc = write : receive; proc = read : transmit; TRUE : idle;
esac;
TRANS
proc != read -> next (Rx) = Rx;
MODULE MEM (proc, input, output)
VAR K : unsigned word [ 8 ]; data : array 0 .. 7 of array 0 .. 7 of unsigned word [ 8 ];
ASSIGN
init (data[1][0]) := K;
next (K) :=
case
output = data[1][0] : output;
TRUE : K;
esac;
MODULE main
VAR proc : {idle, read, write}; input : unsigned word [ 8 ];
output : unsigned word [ 8 ];
memory : MEM (proc, input, output);
uart0 : UART (proc, input, output);
ASSIGN init (input) := memory.data[0][0]; init (output) := memory.data[0][0];
LTLSPEC G (output != memory.data[1][0]) -> G (memory.K = next (memory.K))
非常感謝您的回答。我仍然是NuSMV的初學者。我做了程序的更改,並將其放在代碼審查http://codereview.stackexchange.com/questions/160295/model-checking-with-nusmv我希望我可以得到更多的信息。你的回答很好。 –