Examples

This page as PDF

Quadrature Encoder with Communication Module

The Dining Philosopher Problem

open Core;
open Process;
open Semaphore;
open System;
open Event;
object sys: system; 
sys.simu_cycles (500);
object ev: event;
array eating,thinking: reg[5] of logic;
export eating,thinking;
array fork: object semaphore[5] with depth=8 and scheduler="fifo";
process init:
begin
 for i = 0 to 4 do fork.[i].init (1);
 ev.init ();
end;

function eat(n):
begin
  begin
  eating.[n] ← 1;
  thinking.[n] ← 0;
  end with bind;
wait for 5;
  begin
  eating.[n] ← 0;
 thinking.[n] ← 1;
 end with bind;
end with inline;

array philosopher: process[5] of
begin
 if # < 4 then
 begin
  ev.await ();
 always do
 begin
  -- get left fork then right
  fork.[#].down ();
  fork.[#+1].down ();
  eat (#);
  fork.[#].up ();
  fork.[#+1].up ();
 end;
 end
 else
 begin
  always do
  begin
  -- get right fork then left
  fork.[4].down ();
  fork.[0].down ();
  eat (#);
  fork.[4].up ();
  fork.[0].up ();
  end;
 end;
end;

process main:
begin
 init.call ();
 for i = 0 to 4 do
 begin
  philosopher.[i].start ();
 end;
 ev.wakeup ();
end;
Example 2: A complete ConPro example: the dininig philosopher problem.