0

I'm attempting to write code for a buffer in NuSMV. The buffer has 6 wires. 4 input wires (reset, clock, read_enable, and write_enable) and 2 output wires(full and empty). Wires are modeled as boolean true|false (true being high voltage). The first wire is an asynchronous (instant) reset. If there is a high voltage, the buffer goes instantly to the empty configuration. Other wires are operated in the synchronous mode triggered by a rising edge on the clock wire. The buffer is of Size 3. There are specific behaviors.

I created the following code but I cannot think of what the Main Module could be.

MODULE buffer (reset, clock, read_enable, write_enable, full, empty) 

-- inputs
--  reset  : boolean;        -- asynchronous (instant) reset
--  clock  : boolean;        -- clock
--  read_enable  : boolean;  -- data read request = enqueue
--  write_enable : boolean;  -- data write request = dequeue

-- outputs
--  full   : boolean;  -- is the buffer full?
--  empty  : boolean;  -- is the buffer empty?

-- use SIZE for the maximal buffer size

-- TODO ....

VAR
    reset: {False, True};
    clock: {False, True};
    read_enable: {False, True};
    write_enable: {False, True};
    full: {False, True};
    empty: {False, True};
    
ASSIGN
    SIZE := 0;
    init (reset) := True;
    next (reset) := case 
                    reset = True : empty = True;
                    esac;
                    
    next (clock) := case
                    write_enable = True : clock = True & empty = False;
                    esac;
                    
    next (write_enable):= case
                        write_enable = True : SIZE + 1 & SIZE <=3;
                        esac;
                         
                        
                        
    next (read_enable) := case 
                        write_enable = True & read_enable = True : SIZE != SIZE +1;
                        esac;
    
    next (full) := case 
                    full = True & SIZE = 3 & write_enable = True : reset = True;
                    esac;
                    
MODULE main 
VAR
    reset: boolean;
    turn: boolean;
    pro0: process buffer(reset, 0, clock, read_enable, write_enable);
    pro1: process buffer(reset, 1, clock, read_enable, write_enable);
    
ASSIGN 
        init(turn) := 0;
        FAIRNESS !(reset = True)
        FAIRNESS !(reset = False)

MODULE prc(reset, turn, pro0, pro1)

ASSIGN
    init(reset) := 0;
    next (reset) := case
                    (reset = 0) : {0,1};
                    (reset = 1) : {0};
                    1 : reset;
                esac;   

Please assist

I've tried following basic NuSMV guides on how to write the code but I have no experience in this language.

4YW
  • 1

0 Answers0