mm_design.od 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. Block:Class {
  2. abstract = True;
  3. }
  4. InPort:Class
  5. OutPort:Class
  6. hasInPort:Association (Block -> InPort) {
  7. # Every Port contained by exactly one Block:
  8. source_lower_cardinality = 1;
  9. source_upper_cardinality = 1;
  10. }
  11. hasOutPort:Association (Block -> OutPort) {
  12. # Every Port contained by exactly one Block:
  13. source_lower_cardinality = 1;
  14. source_upper_cardinality = 1;
  15. }
  16. link:Association (OutPort -> InPort) {
  17. # Every InPort connected to exactly one OutPort
  18. source_lower_cardinality = 1;
  19. source_upper_cardinality = 1;
  20. }
  21. # Function Block: pure function that computes outputs based on inputs
  22. Function:Class
  23. :Inheritance (Function -> Block)
  24. Function_func:AttributeLink (Function -> ActionCode) {
  25. name = "func";
  26. optional = False;
  27. }
  28. DetailedFunction:Class
  29. :Inheritance (DetailedFunction -> Function)
  30. VeryDetailedFunction:Class
  31. :Inheritance (VeryDetailedFunction -> DetailedFunction)
  32. # Delay Block
  33. Delay:Class {
  34. constraint = ```
  35. errors = []
  36. num_inports = len(get_outgoing(this, "hasInPort"))
  37. num_outports = len(get_outgoing(this, "hasOutPort"))
  38. if num_inports != 1:
  39. errors.append(f"Delay block must have one inport, instead got {num_inports}")
  40. if num_outports != 1:
  41. errors.append(f"Delay block must have one inport, instead got {num_outports}")
  42. errors
  43. ```;
  44. }
  45. :Inheritance (Delay -> Block)