// basic demo which generates a clock 
// and uses 3 ScriptSim programs to 
// control the bus, act as memory, and monitor the bus 
module Demo; 
   wire clock; 
   wire [1:0]  #1 op; 
   wire [15:0] #1 adr; 
   wire [31:0] #1 data; 

   reg clock_reg; 
   reg [1:0]  op_reg; 
   reg [15:0] adr_reg; 
   reg [31:0] data_read; 
   reg [31:0] data_write; 

   assign clock = clock_reg; 
   assign op = op_reg; 
   assign adr = adr_reg; 
   assign data = data_write; 
   assign data = data_read; 

   initial begin: main_block 
      clock_reg = 1; 
      $scriptsim("monitor.pl", clock, op, adr, data); 
      $scriptsim("master.pl",  clock, op_reg, adr_reg, data_write); 
      $scriptsim("slave.pl",   clock, op, adr, data, data_read); 
   end // block: main_block 

   // generate a clock with 10ns period 
   always begin: clock_gen 
      #5 clock_reg = 1; 
      #5 clock_reg = 0; 
   end // block: clock_gen 

endmodule // Demo 
  


[ [ ['module', 'Demo', ';'],
    [ ['wire', ['clock'], ';'],
      ['wire', '[', '1', ':', '0', ']', ['#', '1'], ['op'], ';'],
      ['wire', '[', '15', ':', '0', ']', ['#', '1'], ['adr'], ';'],
      ['wire', '[', '31', ':', '0', ']', ['#', '1'], ['data'], ';'],
      ['reg', ['clock_reg'], ';'],
      ['reg', '[', '1', ':', '0', ']', ['op_reg'], ';'],
      ['reg', '[', '15', ':', '0', ']', ['adr_reg'], ';'],
      ['reg', '[', '31', ':', '0', ']', ['data_read'], ';'],
      ['reg', '[', '31', ':', '0', ']', ['data_write'], ';'],
      ['assign', [['clock'], '=', ['clock_reg']], ';'],
      ['assign', [['op'], '=', ['op_reg']], ';'],
      ['assign', [['adr'], '=', ['adr_reg']], ';'],
      ['assign', [['data'], '=', ['data_write']], ';'],
      ['assign', [['data'], '=', ['data_read']], ';'],
      [ 'initial',
        [ 'begin',
          ':',
          'main_block',
          [[['clock_reg'], '=', '1'], ';'],
          [ '$scriptsim',
            '(',
            '"monitor.pl"',
            ['clock'],
            ['op'],
            ['adr'],
            ['data'],
            ')',
            ';'],
          [ '$scriptsim',
            '(',
            '"master.pl"',
            ['clock'],
            ['op_reg'],
            ['adr_reg'],
            ['data_write'],
            ')',
            ';'],
          [ '$scriptsim',
            '(',
            '"slave.pl"',
            ['clock'],
            ['op'],
            ['adr'],
            ['data'],
            ['data_read'],
            ')',
            ';'],
          'end']],
      [ 'always',
        [ 'begin',
          ':',
          'clock_gen',
          [['#', '5'], [[['clock_reg'], '=', '1'], ';']],
          [['#', '5'], [[['clock_reg'], '=', '0'], ';']],
          'end']]],
    'endmodule']]
