@@ -305,28 +305,38 @@ INVAR
305
305
--A reset operation must not be initiated during an ongoing ini-
306
306
--tialization, transmission or tear down.
307
307
--(RESET = 0b1_0 | (RESET = 0b1_1 & t_smit.it_state = it_idle
308
- -- & t_smit .tx_state = tx_idle
308
+ -- & t_smiti .tx_state = tx_idle
309
309
-- & t_smit.td_state = td_idle)) &
310
310
-- CHANGE: we require that pa does not start at 0 or 3
311
- pa != 0d2_0 & pa != 0d2_3 &
311
+ pa != 0d2_0 & -- pa != 0d2_3 &
312
312
-- CHANGE: can we do this?
313
313
length != 0d2_0
314
314
& !(length = 0d2_2 & pa = 0d2_2 ) &
315
315
!(pa + length < pa) &
316
316
--If the transmitter is resetting itself, then the transmitter does not
317
317
--transmit nor performs a tear down.
318
318
(RESET = 0d1_0 | (t_smit.tx_state = td_idle & TEARDOWN = 0d1_0)) &
319
+ -- No wrong states allowed
319
320
!d_rive.TRANSMIT_BAD_BUFFER_OR_QUEUE_FULL & !t_smit.TX_BUFFER_OVERFLOW &
320
- (t_smit.tx_state = tx_idle | HW_MEMORY_BP[0] = 0ud2_0) &
321
- (TEARDOWN = 0ud1_0 | d_rive.stop_state != stop_idle) &
322
- (d_rive.transmit_state = transmit_idle | (t_smit.tx_state = tx_idle));
321
+ --A reset operation must not be initiated during an ongoing initialization, transmission or tear down.
322
+ (RESET = 0d1_0 | (t_smit.tx_state = tx_idle & t_smit.td_state = td_idle & t_smit.it_state = it_idle)) &
323
+
324
+ -- First memory spot is unused
325
+ queue_head != 0d2_0 & queue_tail != 0d2_0;
326
+
323
327
324
328
325
329
TRANS
326
330
-- CHANGE: pa and lenght of msg does not change during transmission
327
331
(t_smit.tx_state = tx_idle | (pa = next(pa) & length = next(length))) &
328
332
-- We only change PA and length when we start to transmit
329
- ((pa = next(pa) & length = next(length)) | next(t_smit.tx_state != tx_idle));
333
+ ((pa = next(pa) & length = next(length)) | next(t_smit.tx_state != tx_idle)) &
334
+ --Writing HDP when initialization, transmission or teardown are not idle, is an error.
335
+ (HDP = next(HDP) | (t_smit.tx_state = tx_idle & t_smit.it_state = it_idle & t_smit.td_state = td_idle)) &
336
+ --Writing TEARDOWN during initialization or teardown is an error.
337
+ (TEARDOWN = next(TEARDOWN) | (t_smit.it_state = it_idle & t_smit.td_state = td_idle));
338
+
339
+
330
340
331
341
332
342
@@ -338,32 +348,32 @@ ASSIGN
338
348
-- My assumption
339
349
init(turn) := software;
340
350
--init(length) := 0d2_00;
341
- init(queue_tail) := 0d2_00;
342
- init(queue_head) := 0d2_00;
343
- init(HW_MEMORY_OWN[0]) := 0d1_00;
344
- init(HW_MEMORY_OWN[1]) := 0d1_00;
345
- init(HW_MEMORY_OWN[2]) := 0d1_00;
346
- init(HW_MEMORY_OWN[3]) := 0d1_00;
347
-
348
- init(HW_MEMORY_NDP[0]) := 0d2_00;
349
- init(HW_MEMORY_NDP[1]) := 0d2_00;
350
- init(HW_MEMORY_NDP[2]) := 0d2_00;
351
- init(HW_MEMORY_NDP[3]) := 0d2_00;
352
-
353
- init(HW_MEMORY_BP[0]) := 0d2_00;
354
- init(HW_MEMORY_BP[1]) := 0d2_00;
355
- init(HW_MEMORY_BP[2]) := 0d2_00;
356
- init(HW_MEMORY_BP[3]) := 0d2_00;
357
-
358
- init(HW_MEMORY_BL[0]) := 0d2_00;
359
- init(HW_MEMORY_BL[1]) := 0d2_00;
360
- init(HW_MEMORY_BL[2]) := 0d2_00;
361
- init(HW_MEMORY_BL[3]) := 0d2_00;
351
+ -- init(queue_tail) := 0d2_00;
352
+ -- init(queue_head) := 0d2_00;
353
+ -- init(HW_MEMORY_OWN[0]) := 0d1_00;
354
+ -- init(HW_MEMORY_OWN[1]) := 0d1_00;
355
+ -- init(HW_MEMORY_OWN[2]) := 0d1_00;
356
+ -- init(HW_MEMORY_OWN[3]) := 0d1_00;
357
+
358
+ -- init(HW_MEMORY_NDP[0]) := 0d2_00;
359
+ -- init(HW_MEMORY_NDP[1]) := 0d2_00;
360
+ -- init(HW_MEMORY_NDP[2]) := 0d2_00;
361
+ -- init(HW_MEMORY_NDP[3]) := 0d2_00;
362
+
363
+ -- init(HW_MEMORY_BP[0]) := 0d2_00;
364
+ -- init(HW_MEMORY_BP[1]) := 0d2_00;
365
+ -- init(HW_MEMORY_BP[2]) := 0d2_00;
366
+ -- init(HW_MEMORY_BP[3]) := 0d2_00;
367
+
368
+ -- init(HW_MEMORY_BL[0]) := 0d2_00;
369
+ -- init(HW_MEMORY_BL[1]) := 0d2_00;
370
+ -- init(HW_MEMORY_BL[2]) := 0d2_00;
371
+ -- init(HW_MEMORY_BL[3]) := 0d2_00;
362
372
363
- init(HW_MEMORY_EOQ[0]) := 0d1_00;
364
- init(HW_MEMORY_EOQ[1]) := 0d1_00;
365
- init(HW_MEMORY_EOQ[2]) := 0d1_00;
366
- init(HW_MEMORY_EOQ[3]) := 0d1_00;
373
+ -- init(HW_MEMORY_EOQ[0]) := 0d1_00;
374
+ -- init(HW_MEMORY_EOQ[1]) := 0d1_00;
375
+ -- init(HW_MEMORY_EOQ[2]) := 0d1_00;
376
+ -- init(HW_MEMORY_EOQ[3]) := 0d1_00;
367
377
368
378
369
379
@@ -418,8 +428,8 @@ next(HDP) :=
418
428
HW_MEMORY_NDP[HDP] != 0b2_00 & turn = HW_tx: HW_MEMORY_NDP[HDP];
419
429
420
430
-- Where did this come from?
421
- -- t_smit.tx_state = tx_releasing_bd & turn = HW_tx:
422
- -- 0b2_00;
431
+ t_smit.tx_state = tx_releasing_bd & turn = HW_tx:
432
+ 0b2_00;
423
433
424
434
t_smit.td_state = td_releasing_bd & turn = HW_td:
425
435
0b2_00;
@@ -765,7 +775,7 @@ SPEC AG (t_smit.tx_state != tx_idle -> length != 0d2_0);
765
775
-- The buffer to transmit must be completely placed in RAM. RAM starts at 1, ends at 2, inclusive.
766
776
767
777
SPEC AG (t_smit.tx_state != tx_idle ->
768
- HW_MEMORY_BP[0] = 0d2_0);
778
+ HW_MEMORY_BP[0] ! = 0d2_0 & HW_MEMORY_BP[1] != 0d2_0 & HW_MEMORY_BP[2] != 0d2_0 & HW_MEMORY_BP[3] != 0d2_0 );
769
779
770
780
-- HW_MEMORY_NDP: array 0..3 of word[2];
771
781
-- HW_MEMORY_BP: array 0..3 of word[2];
@@ -777,14 +787,11 @@ SPEC AG (t_smit.tx_state != tx_idle ->
777
787
--The buffer must not overflow w.r.t. unsigned 2**2 arithmetic
778
788
--(See BD/BL for descriptions of memory)
779
789
780
- --The ownership bit must be set
781
790
791
+ --The ownership bit must be set
782
792
783
793
--The EOQ bit must be cleared
784
- SPEC AG (t_smit.tx_state != tx_idle -> --HW_MEMORY_EOQ[0] = 0d1_0
785
- HW_MEMORY_EOQ[1] = 0d1_0
786
- & HW_MEMORY_EOQ[2] = 0d1_0
787
- & HW_MEMORY_EOQ[3] = 0d1_0);
794
+
788
795
789
796
790
797
--open(), transmit(), stop() cannot be executed simultaneously.
0 commit comments