logicuit 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/README.md +94 -2
  4. data/Rakefile +12 -1
  5. data/Steepfile +6 -0
  6. data/lib/logicuit/array_as_signal_group.rb +1 -1
  7. data/lib/logicuit/circuits/combinational/full_adder.rb +6 -2
  8. data/lib/logicuit/circuits/combinational/full_adder_4bit.rb +6 -0
  9. data/lib/logicuit/circuits/combinational/half_adder.rb +4 -0
  10. data/lib/logicuit/circuits/combinational/multiplexer_2to1.rb +5 -1
  11. data/lib/logicuit/circuits/combinational/multiplexer_4to1.rb +5 -1
  12. data/lib/logicuit/circuits/sequential/d_flip_flop.rb +4 -0
  13. data/lib/logicuit/circuits/sequential/one_bit_cpu.rb +4 -0
  14. data/lib/logicuit/circuits/sequential/program_counter.rb +10 -4
  15. data/lib/logicuit/circuits/sequential/register_4bit.rb +6 -0
  16. data/lib/logicuit/circuits/td4/cpu.rb +11 -2
  17. data/lib/logicuit/circuits/td4/decoder.rb +9 -5
  18. data/lib/logicuit/circuits/td4/rom.rb +4 -0
  19. data/lib/logicuit/dsl.rb +21 -17
  20. data/lib/logicuit/gates/and.rb +5 -1
  21. data/lib/logicuit/gates/nand.rb +5 -1
  22. data/lib/logicuit/gates/not.rb +4 -0
  23. data/lib/logicuit/gates/or.rb +5 -1
  24. data/lib/logicuit/gates/xor.rb +5 -1
  25. data/lib/logicuit/runner.rb +1 -1
  26. data/lib/logicuit/signals/clock.rb +1 -1
  27. data/lib/logicuit/signals/signal.rb +12 -0
  28. data/lib/logicuit/signals/signal_group.rb +1 -1
  29. data/lib/logicuit/version.rb +1 -1
  30. data/sig/generated/logicuit/circuits/combinational/full_adder.rbs +20 -0
  31. data/sig/generated/logicuit/circuits/combinational/full_adder_4bit.rbs +38 -0
  32. data/sig/generated/logicuit/circuits/combinational/half_adder.rbs +18 -0
  33. data/sig/generated/logicuit/circuits/combinational/multiplexer_2to1.rbs +18 -0
  34. data/sig/generated/logicuit/circuits/combinational/multiplexer_4to1.rbs +24 -0
  35. data/sig/generated/logicuit/circuits/sequential/d_flip_flop.rbs +14 -0
  36. data/sig/generated/logicuit/circuits/sequential/one_bit_cpu.rbs +16 -0
  37. data/sig/generated/logicuit/circuits/sequential/program_counter.rbs +28 -0
  38. data/sig/generated/logicuit/circuits/sequential/register_4bit.rbs +28 -0
  39. data/sig/generated/logicuit/circuits/td4/cpu.rbs +28 -0
  40. data/sig/generated/logicuit/circuits/td4/decoder.rbs +32 -0
  41. data/sig/generated/logicuit/circuits/td4/rom.rbs +36 -0
  42. data/sig/generated/logicuit/gates/and.rbs +14 -0
  43. data/sig/generated/logicuit/gates/nand.rbs +14 -0
  44. data/sig/generated/logicuit/gates/not.rbs +12 -0
  45. data/sig/generated/logicuit/gates/or.rbs +14 -0
  46. data/sig/generated/logicuit/gates/xor.rbs +14 -0
  47. data/sig/logicuit/array_as_signal_group.rbs +11 -0
  48. data/sig/logicuit/dsl.rbs +35 -0
  49. data/sig/logicuit/runner.rbs +4 -0
  50. data/sig/logicuit/signals/clock.rbs +30 -0
  51. data/sig/logicuit/signals/signal.rbs +32 -0
  52. data/sig/logicuit/signals/signal_group.rbs +20 -0
  53. data/sig/logicuit/version.rbs +3 -0
  54. metadata +26 -2
  55. data/sig/logicuit.rbs +0 -4
@@ -41,6 +41,18 @@ module Logicuit
41
41
  current ? "1" : "0"
42
42
  end
43
43
 
44
+ def &(other)
45
+ Signal.new(current && other.current)
46
+ end
47
+
48
+ def |(other)
49
+ Signal.new(current || other.current)
50
+ end
51
+
52
+ def !
53
+ Signal.new(!current)
54
+ end
55
+
44
56
  private
45
57
 
46
58
  def propagate_current
@@ -24,7 +24,7 @@ module Logicuit
24
24
 
25
25
  def set(vals)
26
26
  vals.split("").zip(signals).each do |v, o|
27
- v == "1" ? o.on : o.off
27
+ v == "1" ? o&.on : o&.off
28
28
  end
29
29
  end
30
30
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Logicuit
4
- VERSION = "0.3.1"
4
+ VERSION = "0.3.2"
5
5
  end
@@ -0,0 +1,20 @@
1
+ # Generated from lib/logicuit/circuits/combinational/full_adder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # FullAdder class
7
+ class FullAdder < DSL
8
+ attr_reader cin: Signals::Signal
9
+
10
+ attr_reader a: Signals::Signal
11
+
12
+ attr_reader b: Signals::Signal
13
+
14
+ attr_reader s: Signals::Signal
15
+
16
+ attr_reader c: Signals::Signal
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,38 @@
1
+ # Generated from lib/logicuit/circuits/combinational/full_adder_4bit.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # FullAdder class
7
+ class FullAdder4bit < DSL
8
+ attr_reader cin: Signals::Signal
9
+
10
+ attr_reader a0: Signals::Signal
11
+
12
+ attr_reader b0: Signals::Signal
13
+
14
+ attr_reader a1: Signals::Signal
15
+
16
+ attr_reader b1: Signals::Signal
17
+
18
+ attr_reader a2: Signals::Signal
19
+
20
+ attr_reader b2: Signals::Signal
21
+
22
+ attr_reader a3: Signals::Signal
23
+
24
+ attr_reader b3: Signals::Signal
25
+
26
+ attr_reader s0: Signals::Signal
27
+
28
+ attr_reader s1: Signals::Signal
29
+
30
+ attr_reader s2: Signals::Signal
31
+
32
+ attr_reader s3: Signals::Signal
33
+
34
+ attr_reader c: Signals::Signal
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/logicuit/circuits/combinational/half_adder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # HalfAdder class
7
+ class HalfAdder < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader s: Signals::Signal
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # Generated from lib/logicuit/circuits/combinational/multiplexer_2to1.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # A Multiplexer with 2 inputs and 1 output
7
+ class Multiplexer2to1 < DSL
8
+ attr_reader c0: Signals::Signal
9
+
10
+ attr_reader c1: Signals::Signal
11
+
12
+ attr_reader a: Signals::Signal
13
+
14
+ attr_reader y: Signals::Signal
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ # Generated from lib/logicuit/circuits/combinational/multiplexer_4to1.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Combinational
6
+ # A Multiplexer with 4 inputs and 1 output
7
+ class Multiplexer4to1 < DSL
8
+ attr_reader c0: Signals::Signal
9
+
10
+ attr_reader c1: Signals::Signal
11
+
12
+ attr_reader c2: Signals::Signal
13
+
14
+ attr_reader c3: Signals::Signal
15
+
16
+ attr_reader b: Signals::Signal
17
+
18
+ attr_reader a: Signals::Signal
19
+
20
+ attr_reader y: Signals::Signal
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/circuits/sequential/d_flip_flop.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # D Flip-Flop
7
+ class DFlipFlop < DSL
8
+ attr_reader d: Signals::Signal
9
+
10
+ attr_reader q: Signals::Signal
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,16 @@
1
+ # Generated from lib/logicuit/circuits/sequential/one_bit_cpu.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # 1 bit CPU with a Multiplexer
7
+ # Input A is H, MOV A,A
8
+ # Input A is L, NOT A
9
+ class OneBitCpu < DSL
10
+ attr_reader a: Signals::Signal
11
+
12
+ attr_reader y: Signals::Signal
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/sequential/program_counter.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # Program Counter
7
+ class ProgramCounter < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader d: Signals::Signal
15
+
16
+ attr_reader ld: Signals::Signal
17
+
18
+ attr_reader qa: Signals::Signal
19
+
20
+ attr_reader qb: Signals::Signal
21
+
22
+ attr_reader qc: Signals::Signal
23
+
24
+ attr_reader qd: Signals::Signal
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/sequential/register_4bit.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Sequential
6
+ # 4 bit register
7
+ class Register4bit < DSL
8
+ attr_reader a: Signals::Signal
9
+
10
+ attr_reader b: Signals::Signal
11
+
12
+ attr_reader c: Signals::Signal
13
+
14
+ attr_reader d: Signals::Signal
15
+
16
+ attr_reader ld: Signals::Signal
17
+
18
+ attr_reader qa: Signals::Signal
19
+
20
+ attr_reader qb: Signals::Signal
21
+
22
+ attr_reader qc: Signals::Signal
23
+
24
+ attr_reader qd: Signals::Signal
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ # Generated from lib/logicuit/circuits/td4/cpu.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # TD4 CPU
7
+ class Cpu < DSL
8
+ attr_reader in0: untyped
9
+
10
+ attr_reader in1: untyped
11
+
12
+ attr_reader in2: untyped
13
+
14
+ attr_reader in3: untyped
15
+
16
+ attr_reader led1: untyped
17
+
18
+ attr_reader led2: untyped
19
+
20
+ attr_reader led3: untyped
21
+
22
+ attr_reader led4: untyped
23
+
24
+ def to_s: () -> untyped
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,32 @@
1
+ # Generated from lib/logicuit/circuits/td4/decoder.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # Decoder class
7
+ class Decoder < DSL
8
+ attr_reader op3: Signals::Signal
9
+
10
+ attr_reader op2: Signals::Signal
11
+
12
+ attr_reader op1: Signals::Signal
13
+
14
+ attr_reader op0: Signals::Signal
15
+
16
+ attr_reader c_flag: Signals::Signal
17
+
18
+ attr_reader sel_b: Signals::Signal
19
+
20
+ attr_reader sel_a: Signals::Signal
21
+
22
+ attr_reader ld0: Signals::Signal
23
+
24
+ attr_reader ld1: Signals::Signal
25
+
26
+ attr_reader ld2: Signals::Signal
27
+
28
+ attr_reader ld3: Signals::Signal
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,36 @@
1
+ # Generated from lib/logicuit/circuits/td4/rom.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Circuits
5
+ module Td4
6
+ # Timer
7
+ class Rom < DSL
8
+ attr_reader a3: Signals::Signal
9
+
10
+ attr_reader a2: Signals::Signal
11
+
12
+ attr_reader a1: Signals::Signal
13
+
14
+ attr_reader a0: Signals::Signal
15
+
16
+ attr_reader d7: Signals::Signal
17
+
18
+ attr_reader d6: Signals::Signal
19
+
20
+ attr_reader d5: Signals::Signal
21
+
22
+ attr_reader d4: Signals::Signal
23
+
24
+ attr_reader d3: Signals::Signal
25
+
26
+ attr_reader d2: Signals::Signal
27
+
28
+ attr_reader d1: Signals::Signal
29
+
30
+ attr_reader d0: Signals::Signal
31
+
32
+ def evaluate: () -> untyped
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/and.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # AND gate
6
+ class And < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/nand.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # NAND gate
6
+ class Nand < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,12 @@
1
+ # Generated from lib/logicuit/gates/not.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # NOT gate
6
+ class Not < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader y: Signals::Signal
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/or.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # OR gate
6
+ class Or < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,14 @@
1
+ # Generated from lib/logicuit/gates/xor.rb with RBS::Inline
2
+
3
+ module Logicuit
4
+ module Gates
5
+ # XOR gate
6
+ class Xor < DSL
7
+ attr_reader a: Signals::Signal
8
+
9
+ attr_reader b: Signals::Signal
10
+
11
+ attr_reader y: Signals::Signal
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,11 @@
1
+ # Logicuit module
2
+ module Logicuit
3
+ # Treats Array#>> as SignalGroup#>> for the purpose of connecting signals
4
+ module ArrayAsSignalGroup
5
+ def >>: (untyped other) -> void
6
+ end
7
+ end
8
+
9
+ class Array[unchecked out T]
10
+ def >>: (untyped other) -> void
11
+ end
@@ -0,0 +1,35 @@
1
+ # Logicuit module
2
+ module Logicuit
3
+ # base class for all gates and circuits
4
+ class DSL
5
+ def initialize: (*(0 | 1) args) -> void
6
+
7
+ def evaluate: (*Signals::Signal args) -> void
8
+
9
+ attr_reader input_targets: Array[Symbol]
10
+
11
+ attr_reader output_targets: Array[Symbol]
12
+
13
+ attr_reader clock: bool
14
+
15
+ attr_reader components: Array[untyped]
16
+
17
+ attr_reader initialized: bool
18
+
19
+ def self.inputs: (*Symbol args, ?clock: Symbol) -> void
20
+
21
+ def []: (*Symbol keys) -> Signals::SignalGroup
22
+
23
+ def self.outputs: (*Symbol args, **^(instance) [self: instance] -> Signals::Signal kwargs) -> void
24
+
25
+ def self.assembling: () { () [self: instance] -> void } -> void
26
+
27
+ def self.diagram: (String source) -> void
28
+
29
+ def self.truth_table: (String source) -> void
30
+
31
+ def self.verify_against_truth_table: () -> void
32
+
33
+ def self.run: (?hz: ::Integer, ?noclear: bool) -> void
34
+ end
35
+ end
@@ -0,0 +1,4 @@
1
+ # Logicuit module
2
+ module Logicuit
3
+ def self.run: (DSL circuit, ?hz: ::Integer, ?noclear: bool) -> void
4
+ end
@@ -0,0 +1,30 @@
1
+ module Logicuit
2
+ module Signals
3
+ # Clock
4
+ class Clock
5
+ self.@instance: Clock
6
+
7
+ @downstreams: Array[DSL]
8
+
9
+ @tick_count: Integer
10
+
11
+ def initialize: () -> void
12
+
13
+ attr_reader downstreams: Array[DSL]
14
+
15
+ attr_reader tick_count: Integer
16
+
17
+ def tick: () -> void
18
+
19
+ def self.instance: () -> Clock
20
+
21
+ def self.connects_to: (DSL component) -> void
22
+
23
+ alias self.>> self.connects_to
24
+
25
+ def self.tick: () -> void
26
+
27
+ def self.tick_count: () -> Integer
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,32 @@
1
+ module Logicuit
2
+ module Signals
3
+ # Signal
4
+ class Signal
5
+ @current: bool
6
+
7
+ @downstreams: Array[Signal | DSL]
8
+
9
+ def initialize: (?bool current) -> void
10
+
11
+ attr_reader current: bool
12
+
13
+ def on: () -> void
14
+
15
+ def off: () -> void
16
+
17
+ def connects_to: (Signal | SignalGroup | Array[Signal] | DSL other) -> void
18
+
19
+ alias >> connects_to
20
+
21
+ def to_s: () -> ("1" | "0")
22
+
23
+ def &: (Signal other) -> Signal
24
+ def |: (Signal other) -> Signal
25
+ def !: () -> Signal
26
+
27
+ private
28
+
29
+ def propagate_current: () -> void
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,20 @@
1
+ module Logicuit
2
+ module Signals
3
+ # Signal Group
4
+ class SignalGroup
5
+ @signals: Array[Signal]
6
+
7
+ def initialize: (*Signal signals) -> void
8
+
9
+ def signals: () -> Array[Signal]
10
+
11
+ def connects_to: (SignalGroup | Array[Signal] others) -> void
12
+
13
+ alias >> connects_to
14
+
15
+ def to_s: () -> String
16
+
17
+ def set: (String vals) -> void
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Logicuit
2
+ VERSION: String
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logicuit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koji NAKAMURA
@@ -20,6 +20,7 @@ files:
20
20
  - LICENSE.txt
21
21
  - README.md
22
22
  - Rakefile
23
+ - Steepfile
23
24
  - lib/logicuit.rb
24
25
  - lib/logicuit/array_as_signal_group.rb
25
26
  - lib/logicuit/circuits/combinational/full_adder.rb
@@ -45,7 +46,30 @@ files:
45
46
  - lib/logicuit/signals/signal.rb
46
47
  - lib/logicuit/signals/signal_group.rb
47
48
  - lib/logicuit/version.rb
48
- - sig/logicuit.rbs
49
+ - sig/generated/logicuit/circuits/combinational/full_adder.rbs
50
+ - sig/generated/logicuit/circuits/combinational/full_adder_4bit.rbs
51
+ - sig/generated/logicuit/circuits/combinational/half_adder.rbs
52
+ - sig/generated/logicuit/circuits/combinational/multiplexer_2to1.rbs
53
+ - sig/generated/logicuit/circuits/combinational/multiplexer_4to1.rbs
54
+ - sig/generated/logicuit/circuits/sequential/d_flip_flop.rbs
55
+ - sig/generated/logicuit/circuits/sequential/one_bit_cpu.rbs
56
+ - sig/generated/logicuit/circuits/sequential/program_counter.rbs
57
+ - sig/generated/logicuit/circuits/sequential/register_4bit.rbs
58
+ - sig/generated/logicuit/circuits/td4/cpu.rbs
59
+ - sig/generated/logicuit/circuits/td4/decoder.rbs
60
+ - sig/generated/logicuit/circuits/td4/rom.rbs
61
+ - sig/generated/logicuit/gates/and.rbs
62
+ - sig/generated/logicuit/gates/nand.rbs
63
+ - sig/generated/logicuit/gates/not.rbs
64
+ - sig/generated/logicuit/gates/or.rbs
65
+ - sig/generated/logicuit/gates/xor.rbs
66
+ - sig/logicuit/array_as_signal_group.rbs
67
+ - sig/logicuit/dsl.rbs
68
+ - sig/logicuit/runner.rbs
69
+ - sig/logicuit/signals/clock.rbs
70
+ - sig/logicuit/signals/signal.rbs
71
+ - sig/logicuit/signals/signal_group.rbs
72
+ - sig/logicuit/version.rbs
49
73
  homepage: https://github.com/kozy4324/logicuit
50
74
  licenses:
51
75
  - MIT
data/sig/logicuit.rbs DELETED
@@ -1,4 +0,0 @@
1
- module Logicuit
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end