producer_consumer.aadl 2.21 KB
Newer Older
1
2
3
package Producer::Consumer
public
  with Deployment, Software;
4
5
  with ocarina_drivers;
  with ocarina_buses;
6
7
8
9
10
11
12
13
14
15

---------------
-- Processor --
---------------

processor the_processor
properties
  Deployment::Execution_Platform => Native;
end the_processor;

16
17
18
processor implementation the_processor.i
end the_processor.i;

19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
---------------
-- Processes --
---------------

process A
features
  Alpha : out data port Software::Alpha_Type;
  Beta  : in data port Software::Alpha_Type;
end A;

process implementation A.Impl
subcomponents
  Producer        : thread Software::P.Impl;
  Result_Consumer : thread Software::Q.Impl;
connections
  port Producer.Data_Source -> Alpha;
  port Beta -> Result_Consumer.Data_Sink;
end A.Impl;

process B
features
  Alpha : out data port Software::Alpha_Type;
  Beta  : in data port Software::Alpha_Type;
end B;

process implementation B.Impl
subcomponents
  Consumer        : thread Software::Q.Impl;
  Result_Producer : thread Software::P.Impl;
connections
  port Beta -> Consumer.Data_Sink;
  port Result_Producer.Data_Source -> Alpha;
end B.Impl;

------------
-- System --
------------

system PC_Simple
end PC_Simple;

system implementation PC_Simple.Impl
subcomponents
  pr_A : process A.Impl {Deployment::port_number => 4001;};
  pr_B : process B.Impl {Deployment::port_number => 4002;};
64
65
66
67
68
69
70
  Device_A : device ocarina_drivers::generic_sockets_ip.pohic
               {Source_Text => ("devicesconf.c");};
  Device_B : device ocarina_drivers::generic_sockets_ip.pohic
               {Source_Text => ("devicesconf.c");};
  CPU_A : processor the_processor.i;
  CPU_B : processor the_processor.i;
  the_bus : bus ocarina_buses::ip.i;
71
connections
jdelange's avatar
jdelange committed
72
73
  bus access the_bus -> Device_A.link;
  bus access the_bus -> Device_B.link;
74

75
76
77
78
79
  port pr_A.Alpha -> pr_B.Beta
    {Actual_Connection_Binding => (reference (the_bus));};
  port pr_B.Alpha -> pr_A.Beta
    {Actual_Connection_Binding => (reference (the_bus));};
properties
80
81
82
83
  actual_processor_binding => reference (CPU_A) applies to pr_A;
  actual_processor_binding => reference (CPU_B) applies to pr_B;
  actual_processor_binding => (reference (CPU_A)) applies to Device_A;
  actual_processor_binding => (reference (CPU_B)) applies to Device_B;
84
85
86
end PC_Simple.Impl;

end Producer::Consumer;