在 NuSMV 中确实没有像 NULL、nil、None 这样的值吗?
而且我们不应该为流程制作模型,因为模型应该代表电子电路?
我的场景是我有一个 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))