HDLRuby 2.11.11 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (119) hide show
  1. checksums.yaml +4 -4
  2. data/README.html +3274 -0
  3. data/README.md +608 -99
  4. data/ext/hruby_sim/hruby_rcsim_build.c +27 -0
  5. data/ext/hruby_sim/hruby_sim.h +3 -0
  6. data/ext/hruby_sim/hruby_sim_calc.c +2 -0
  7. data/ext/hruby_sim/hruby_sim_core.c +17 -5
  8. data/ext/hruby_sim/hruby_sim_stack_calc.c +1 -1
  9. data/ext/hruby_sim/hruby_sim_tree_calc.c +8 -1
  10. data/ext/hruby_sim/hruby_sim_vcd.c +24 -7
  11. data/ext/hruby_sim/hruby_sim_vizualize.c +9 -1
  12. data/lib/HDLRuby/backend/hruby_allocator.rb +2 -2
  13. data/lib/HDLRuby/backend/hruby_c_allocator.rb +7 -7
  14. data/lib/HDLRuby/hdr_samples/constant_in_function.rb +3 -1
  15. data/lib/HDLRuby/hdr_samples/counter_dff_bench.rb +3 -1
  16. data/lib/HDLRuby/hdr_samples/huge_rom.rb +1 -1
  17. data/lib/HDLRuby/hdr_samples/mei8.rb +11 -11
  18. data/lib/HDLRuby/hdr_samples/mei8_bench.rb +12 -12
  19. data/lib/HDLRuby/hdr_samples/neg_arith_bench.rb +4 -4
  20. data/lib/HDLRuby/hdr_samples/rom_nest.rb +1 -1
  21. data/lib/HDLRuby/hdr_samples/ruby_fir_hw.rb +4 -4
  22. data/lib/HDLRuby/hdr_samples/struct.rb +44 -10
  23. data/lib/HDLRuby/hdr_samples/with_bram.rb +45 -0
  24. data/lib/HDLRuby/hdr_samples/with_bram_frame_stack.rb +105 -0
  25. data/lib/HDLRuby/hdr_samples/with_bram_stack.rb +69 -0
  26. data/lib/HDLRuby/hdr_samples/with_casts.rb +3 -3
  27. data/lib/HDLRuby/hdr_samples/with_concat.rb +6 -6
  28. data/lib/HDLRuby/hdr_samples/with_connector_memory.rb +2 -2
  29. data/lib/HDLRuby/hdr_samples/with_def.rb +10 -3
  30. data/lib/HDLRuby/hdr_samples/with_define_operator.rb +44 -0
  31. data/lib/HDLRuby/hdr_samples/with_fixpoint.rb +12 -12
  32. data/lib/HDLRuby/hdr_samples/with_init.rb +3 -3
  33. data/lib/HDLRuby/hdr_samples/with_leftright.rb +21 -0
  34. data/lib/HDLRuby/hdr_samples/with_reduce.rb +13 -13
  35. data/lib/HDLRuby/hdr_samples/with_ref_array.rb +6 -6
  36. data/lib/HDLRuby/hdr_samples/with_register_stack.rb +150 -0
  37. data/lib/HDLRuby/hdr_samples/with_sequencer.rb +190 -0
  38. data/lib/HDLRuby/hdr_samples/with_sequencer_deep.rb +91 -0
  39. data/lib/HDLRuby/hdr_samples/with_sequencer_enumerable.rb +405 -0
  40. data/lib/HDLRuby/hdr_samples/with_sequencer_enumerator.rb +89 -0
  41. data/lib/HDLRuby/hdr_samples/with_sequencer_sync.rb +120 -0
  42. data/lib/HDLRuby/hdr_samples/with_subsums.rb +3 -3
  43. data/lib/HDLRuby/hdr_samples/with_terminate.rb +3 -3
  44. data/lib/HDLRuby/hdr_samples/with_to_a.rb +10 -10
  45. data/lib/HDLRuby/hdr_samples/with_values.rb +3 -3
  46. data/lib/HDLRuby/hdrcc.rb +29 -3
  47. data/lib/HDLRuby/hdrlib.rb +1 -1
  48. data/lib/HDLRuby/hruby_bstr.rb +10 -5
  49. data/lib/HDLRuby/hruby_db.rb +2 -2
  50. data/lib/HDLRuby/hruby_high.rb +152 -47
  51. data/lib/HDLRuby/hruby_high_fullname.rb +3 -1
  52. data/lib/HDLRuby/hruby_low.rb +189 -18
  53. data/lib/HDLRuby/hruby_low2c.rb +129 -54
  54. data/lib/HDLRuby/hruby_low2hdr.rb +66 -40
  55. data/lib/HDLRuby/hruby_low2high.rb +86 -44
  56. data/lib/HDLRuby/hruby_low2seq.rb +26 -18
  57. data/lib/HDLRuby/hruby_low2sym.rb +14 -13
  58. data/lib/HDLRuby/hruby_low2vhd.rb +80 -44
  59. data/lib/HDLRuby/hruby_low_bool2select.rb +61 -46
  60. data/lib/HDLRuby/hruby_low_casts_without_expression.rb +56 -44
  61. data/lib/HDLRuby/hruby_low_cleanup.rb +18 -16
  62. data/lib/HDLRuby/hruby_low_fix_types.rb +65 -32
  63. data/lib/HDLRuby/hruby_low_mutable.rb +83 -119
  64. data/lib/HDLRuby/hruby_low_resolve.rb +38 -30
  65. data/lib/HDLRuby/hruby_low_with_bool.rb +33 -16
  66. data/lib/HDLRuby/hruby_low_with_port.rb +3 -3
  67. data/lib/HDLRuby/hruby_low_with_var.rb +23 -9
  68. data/lib/HDLRuby/hruby_low_without_concat.rb +45 -19
  69. data/lib/HDLRuby/hruby_low_without_namespace.rb +47 -32
  70. data/lib/HDLRuby/hruby_low_without_parinseq.rb +32 -16
  71. data/lib/HDLRuby/hruby_low_without_select.rb +37 -24
  72. data/lib/HDLRuby/hruby_low_without_subsignals.rb +280 -0
  73. data/lib/HDLRuby/hruby_rcsim.rb +158 -134
  74. data/lib/HDLRuby/hruby_rsim.rb +194 -20
  75. data/lib/HDLRuby/hruby_rsim_mute.rb +2 -3
  76. data/lib/HDLRuby/hruby_rsim_vcd.rb +125 -50
  77. data/lib/HDLRuby/hruby_values.rb +48 -33
  78. data/lib/HDLRuby/hruby_verilog.rb +90 -48
  79. data/lib/HDLRuby/soft/stacks.rb +219 -0
  80. data/lib/HDLRuby/std/bram.rb +26 -0
  81. data/lib/HDLRuby/std/clocks.rb +1 -1
  82. data/lib/HDLRuby/std/fixpoint.rb +2 -2
  83. data/lib/HDLRuby/std/fsm.rb +48 -11
  84. data/lib/HDLRuby/std/function_generator.rb +2 -2
  85. data/lib/HDLRuby/std/sequencer.rb +1857 -0
  86. data/lib/HDLRuby/std/sequencer_sync.rb +400 -0
  87. data/lib/HDLRuby/std/std.rb +12 -0
  88. data/lib/HDLRuby/version.rb +1 -1
  89. data/tuto/adder_sat_flags_vcd.png +0 -0
  90. data/tuto/addsub_vcd.png +0 -0
  91. data/tuto/alu_vcd.png +0 -0
  92. data/tuto/bit_pong_vcd.png +0 -0
  93. data/tuto/checksum_vcd.png +0 -0
  94. data/tuto/circuit_hdr.odg +0 -0
  95. data/tuto/circuit_hdr.png +0 -0
  96. data/tuto/circuit_hie.odg +0 -0
  97. data/tuto/circuit_hie.png +0 -0
  98. data/tuto/circuit_view.odg +0 -0
  99. data/tuto/circuit_view.png +0 -0
  100. data/tuto/clock_counter_vcd.png +0 -0
  101. data/tuto/counter_ext_vcd.png +0 -0
  102. data/tuto/fact_vcd.png +0 -0
  103. data/tuto/hw_flow.odg +0 -0
  104. data/tuto/hw_flow.png +0 -0
  105. data/tuto/maxxer_vcd.png +0 -0
  106. data/tuto/pingpong0_vcd.png +0 -0
  107. data/tuto/pingpong1_vcd.png +0 -0
  108. data/tuto/pingpong2_vcd.png +0 -0
  109. data/tuto/ram_vcd.png +0 -0
  110. data/tuto/serializer_vcd.png +0 -0
  111. data/tuto/sw_flow.odg +0 -0
  112. data/tuto/sw_flow.png +0 -0
  113. data/tuto/the_counter_vcd.png +0 -0
  114. data/tuto/tutorial_sw.html +2359 -0
  115. data/tuto/tutorial_sw.md +2684 -0
  116. data/tuto/tutorial_sw.pdf +0 -0
  117. data/tuto/tutorial_sw_jp.md +417 -0
  118. metadata +49 -3
  119. data/lib/HDLRuby/hdr_samples/sumprod.rb +0 -29
@@ -0,0 +1,105 @@
1
+ require 'soft/stacks.rb'
2
+
3
+ include HDLRuby::High::Soft
4
+
5
+
6
+ # A system testing the bram-based stack.
7
+ system :bram_stach_test do
8
+
9
+ widthD = 8
10
+ size = 1024
11
+ depth = 16
12
+
13
+
14
+ input :clk, :rst, :ce
15
+ [2].inner :cmd
16
+ { frame: bit[depth.width], offset: bit[size.width] }.inner :loc
17
+ [size.width].inner :frame_size
18
+ [widthD].inner :din,:dout
19
+ inner :empty, :full
20
+
21
+ bram_frame_stack(widthD,size,depth).(:stack0).(clk,rst,ce,cmd,loc,din,dout,empty,full)
22
+
23
+ timed do
24
+ clk <= 0
25
+ rst <= 0
26
+ ce <= 0
27
+ cmd <= READ
28
+ loc.frame <= 0
29
+ loc.offset <= 0
30
+ frame_size <= 0
31
+ din <= 0
32
+ !10.ns
33
+ clk <= 1
34
+ !10.ns
35
+ clk <= 0
36
+ rst <= 1
37
+ !10.ns
38
+ clk <= 1
39
+ !10.ns
40
+ clk <= 0
41
+ rst <= 0
42
+ !10.ns
43
+ clk <= 1
44
+ repeat(9) do
45
+ !10.ns
46
+ clk <= 0
47
+ ce <= 1
48
+ cmd <= PUSH
49
+ frame_size <= frame_size + 16
50
+ loc.offset <= frame_size
51
+ !10.ns
52
+ clk <= 1
53
+ !10.ns
54
+ clk <= 0
55
+ cmd <= WRITE
56
+ din <= 5
57
+ loc.frame <= 0
58
+ loc.offset <= 1
59
+ !10.ns
60
+ clk <= 1
61
+ !10.ns
62
+ clk <= 0
63
+ cmd <= READ
64
+ loc.frame <= 0
65
+ loc.offset <= 1
66
+ !10.ns
67
+ clk <= 1
68
+ !10.ns
69
+ clk <= 0
70
+ cmd <= WRITE
71
+ din <= 55
72
+ loc.frame <= 1
73
+ loc.offset <= 14
74
+ !10.ns
75
+ clk <= 1
76
+ !10.ns
77
+ clk <= 0
78
+ cmd <= READ
79
+ loc.frame <= 1
80
+ loc.offset <= 14
81
+ !10.ns
82
+ clk <= 1
83
+ end
84
+ !10.ns
85
+ clk <= 0
86
+ ce <= 0
87
+ !10.ns
88
+ clk <= 1
89
+ repeat(9) do
90
+ !10.ns
91
+ clk <= 0
92
+ ce <= 1
93
+ cmd <= POP
94
+ !10.ns
95
+ clk <= 1
96
+ end
97
+ !10.ns
98
+ clk <= 0
99
+ ce <= 0
100
+ !10.ns
101
+ clk <= 1
102
+ !10.ns
103
+ end
104
+
105
+ end
@@ -0,0 +1,69 @@
1
+ require 'soft/stacks.rb'
2
+
3
+ include HDLRuby::High::Soft
4
+
5
+
6
+ # A system testing the bram-based stack.
7
+ system :bram_stach_test do
8
+
9
+ size = 8
10
+ widthD = 8
11
+
12
+
13
+ input :clk, :rst, :ce
14
+ inner :cmd
15
+ [widthD].inner :din,:dout
16
+ inner :empty, :full
17
+
18
+ bram_stack(widthD,size).(:stack0).(clk,rst,ce,cmd,din,dout,empty,full)
19
+
20
+ timed do
21
+ clk <= 0
22
+ rst <= 0
23
+ ce <= 0
24
+ cmd <= PUSH
25
+ din <= 0
26
+ !10.ns
27
+ clk <= 1
28
+ !10.ns
29
+ clk <= 0
30
+ rst <= 1
31
+ !10.ns
32
+ clk <= 1
33
+ !10.ns
34
+ clk <= 0
35
+ rst <= 0
36
+ din <= 0
37
+ !10.ns
38
+ clk <= 1
39
+ repeat(9) do
40
+ !10.ns
41
+ clk <= 0
42
+ ce <= 1
43
+ cmd <= PUSH
44
+ din <= din + 1
45
+ !10.ns
46
+ clk <= 1
47
+ end
48
+ !10.ns
49
+ clk <= 0
50
+ ce <= 0
51
+ !10.ns
52
+ clk <= 1
53
+ repeat(9) do
54
+ !10.ns
55
+ clk <= 0
56
+ ce <= 1
57
+ cmd <= POP
58
+ !10.ns
59
+ clk <= 1
60
+ end
61
+ !10.ns
62
+ clk <= 0
63
+ ce <= 0
64
+ !10.ns
65
+ clk <= 1
66
+ !10.ns
67
+ end
68
+
69
+ end
@@ -6,9 +6,9 @@ system :with_cast do
6
6
  [9].inner :val2,:val3
7
7
 
8
8
  timed do
9
- val0 <= _11111111
10
- val1 <= _00000010
11
- val3 <= _000000000
9
+ val0 <= _b11111111
10
+ val1 <= _b00000010
11
+ val3 <= _b000000000
12
12
  count <= 0
13
13
  !10.ns
14
14
  count <= 1
@@ -10,16 +10,16 @@ system :with_concat do
10
10
  val3 <= [val2,val0]
11
11
 
12
12
  timed do
13
- val0 <= _1111
14
- val1 <= _0000
13
+ val0 <= _b1111
14
+ val1 <= _b0000
15
15
  count <= 0
16
16
  !10.ns
17
- val0 <= _1001
18
- val1 <= _0110
17
+ val0 <= _b1001
18
+ val1 <= _b0110
19
19
  count <= 1
20
20
  !10.ns
21
- val0 <= _1010
22
- val1 <= _0101
21
+ val0 <= _b1010
22
+ val1 <= _b0101
23
23
  count <= 2
24
24
  !10.ns
25
25
  end
@@ -12,8 +12,8 @@ system :channel_connector do
12
12
  address_width = 4 # lutのアドレスのビット幅
13
13
  typ = signed[integer_width + decimal_width] # データ型
14
14
 
15
- inputs_x = _00010011
16
- inputs_h = _10100001
15
+ inputs_x = _b00010011
16
+ inputs_h = _b10100001
17
17
  columns = [2, 2, 1]
18
18
 
19
19
  inner :clk, # clock
@@ -9,11 +9,18 @@ end
9
9
  system :def_bench do
10
10
 
11
11
  [2].inner :addr
12
- [8].inner :val0, :val1
12
+ [8].inner :val0, :val1, :val2, :val3
13
13
 
14
14
  par do
15
- val0 <= lut84([0,1,4,9],addr)
16
- val1 <= lut84([0,1,4,9],3-addr)
15
+ val0 <= lut84([_b8d0,_b8d1,_b8d4,_b8d9],addr)
16
+ val1 <= lut84([_b8d0,_b8d1,_b8d4,_b8d9],3-addr)
17
+ end
18
+
19
+ bit[8][-4].inner otbl: [_b8d0,_b8d1,_b8d4,_b8d9]
20
+
21
+ par do
22
+ val2 <= otbl[addr]
23
+ val3 <= otbl[3-addr]
17
24
  end
18
25
 
19
26
  timed do
@@ -0,0 +1,44 @@
1
+ # A sample for testing define operator.
2
+
3
+ typedef :sat100 do |width|
4
+ signed[width]
5
+ end
6
+
7
+ sat100.define_operator(:+) do |width, x,y|
8
+ tmp = x.as(bit[width]) + y.as(bit[width])
9
+ mux(tmp > 100,tmp,100)
10
+ end
11
+
12
+ typedef :sat do |width, max|
13
+ signed[width]
14
+ end
15
+
16
+ sat.define_operator(:+) do |width,max, x,y|
17
+ tmp = x.as(bit[width]) + y.as(bit[width])
18
+ mux(tmp > max, tmp, max)
19
+ end
20
+
21
+
22
+ system :bench_sat do
23
+ sat100(8).inner :x,:y,:z
24
+ sat(8,55).inner :u,:v,:w
25
+
26
+ timed do
27
+ x <= 40
28
+ y <= 32
29
+ z <= x+y
30
+ !10.ns
31
+ u <= 20
32
+ v <= 24
33
+ w <= u+v
34
+ !10.ns
35
+ x <= 70
36
+ y <= 32
37
+ z <= x+y
38
+ !10.ns
39
+ u <= 50
40
+ v <= 24
41
+ w <= u+v
42
+ !10.ns
43
+ end
44
+ end
@@ -14,9 +14,9 @@ system :fix_test do
14
14
 
15
15
  # Performs calculation between then
16
16
  timed do
17
- # x <= _00110011 # 3.1875
17
+ # x <= _b00110011 # 3.1875
18
18
  x <= 3.1875.to_fix(4)
19
- y <= _01000000 # 4
19
+ y <= _b01000000 # 4
20
20
  !10.ns
21
21
  z <= x + y
22
22
  !10.ns
@@ -24,8 +24,8 @@ system :fix_test do
24
24
  !10.ns
25
25
  z <= z / x
26
26
  !10.ns
27
- a <= _00010000
28
- b <= _00001111
27
+ a <= _b00010000
28
+ b <= _b00001111
29
29
  !10.ns
30
30
  c <= a * b
31
31
  d <= 0
@@ -49,15 +49,15 @@ system :fix_test do
49
49
  !10.ns
50
50
  c <= a * b
51
51
  !10.ns
52
- # a <= _00010000
53
- # b <= _00010101
54
- a <= _0000111x
55
- b <= _1110011x
52
+ # a <= _b00010000
53
+ # b <= _b00010101
54
+ a <= _sb0000111x
55
+ b <= _sb1110011x
56
56
  !10.ns
57
- # a <= a & _11111110
58
- # b <= b | _00000001
59
- a <= a | _00000001
60
- b <= b | _00000001
57
+ # a <= a & _b11111110
58
+ # b <= b | _b00000001
59
+ a <= a | _b00000001
60
+ b <= b | _b00000001
61
61
  !10.ns
62
62
  c <= a * b
63
63
  !10.ns
@@ -2,9 +2,9 @@
2
2
  # A benchmark for testing the initialization of signals.
3
3
  system :with_init do
4
4
  [8].constant cst0: 127
5
- constant cst1: _1
6
- [8].inner sig0: _10000000
7
- inner sig1: _1
5
+ constant cst1: _b1
6
+ [8].inner sig0: _b10000000
7
+ inner sig1: _b1
8
8
  [8].inner :sig2
9
9
 
10
10
  timed do
@@ -0,0 +1,21 @@
1
+ # A benchmark for the cases where a left value is also a right value
2
+ # in a block without sensitivity list.
3
+ system :leftright_bench do
4
+ [8].inner :l,:r0,:r1,:lr
5
+
6
+ par do
7
+ lr <= r0*2
8
+ l <= [lr[7],lr[6..0]].to_expr + r1
9
+ end
10
+
11
+ timed do
12
+ !10.ns
13
+ r0 <= 1
14
+ !10.ns
15
+ r1 <= 2
16
+ !10.ns
17
+ r0 <= 3
18
+ r1 <= 4
19
+ !10.ns
20
+ end
21
+ end
@@ -6,33 +6,33 @@ system :with_reduce_bench do
6
6
  [64].inner :val64
7
7
 
8
8
  timed do
9
- val <= _01101010
10
- res <= val.reduce(_00000000,:+)
9
+ val <= _b01101010
10
+ res <= val.reduce(_b00000000,:+)
11
11
  !10.ns
12
12
  val <= _01010010
13
- res <= val.reduce(_00000000,:+)
13
+ res <= val.reduce(_b00000000,:+)
14
14
  !10.ns
15
15
  val <= _01101111
16
- res <= val.reduce(_00000000,:+)
16
+ res <= val.reduce(_b00000000,:+)
17
17
  !10.ns
18
- val64 <= _0110101001101010011010100110101001101010011010100110101001101010
19
- res <= val64.reduce(_00000000,:+)
18
+ val64 <= _b0110101001101010011010100110101001101010011010100110101001101010
19
+ res <= val64.reduce(_b00000000,:+)
20
20
  !10.ns
21
21
  res <= val64[7..0]
22
22
  !10.ns
23
- res <= res.reduce(_00000000,:+)
23
+ res <= res.reduce(_b00000000,:+)
24
24
  !10.ns
25
25
  res <= val64[63..60]
26
26
  !10.ns
27
- res <= res.reduce(_00000000,:+)
27
+ res <= res.reduce(_b00000000,:+)
28
28
  !10.ns
29
29
  val64 <= ~(val64 ^ val64)
30
- res <= val64.reduce(_00000000,:+)
30
+ res <= val64.reduce(_b00000000,:+)
31
31
  !10.ns
32
- val64[0] <= _0
33
- val64[3] <= _0
34
- val64[63] <= _0
35
- res <= val64.reduce(_00000000,:+)
32
+ val64[0] <= _b0
33
+ val64[3] <= _b0
34
+ val64[63] <= _b0
35
+ res <= val64.reduce(_b00000000,:+)
36
36
  !10.ns
37
37
  end
38
38
  end
@@ -10,16 +10,16 @@ system :with_concat do
10
10
  val3[6..3] <= val1[7..4]
11
11
 
12
12
  timed do
13
- val0 <= _00001111
14
- val1 <= _11000011
13
+ val0 <= _b00001111
14
+ val1 <= _b11000011
15
15
  count <= 0
16
16
  !10.ns
17
- val0 <= _11110000
18
- val1 <= _00111100
17
+ val0 <= _b11110000
18
+ val1 <= _b00111100
19
19
  count <= 1
20
20
  !10.ns
21
- val0 <= _10101010
22
- val1 <= _01010101
21
+ val0 <= _b10101010
22
+ val1 <= _b01010101
23
23
  count <= 2
24
24
  !10.ns
25
25
  end
@@ -0,0 +1,150 @@
1
+ require 'soft/stacks.rb'
2
+
3
+ include HDLRuby::High::Soft
4
+
5
+
6
+ # A system testing the bram-based stack.
7
+ system :register_stack_test do
8
+
9
+ widthA = 3
10
+ size = 2**widthA
11
+ widthD = 8
12
+
13
+
14
+ input :clk,:rst,:ce
15
+ [2].inner :cmd
16
+ [widthD].inner :din,:dout
17
+ inner :empty, :full
18
+ douts = size.times.map { |i| [widthD].inner :"dout#{i}" }
19
+
20
+ register_stack(widthA,widthD,size).(:stackI).(clk,rst,ce,cmd,din,dout,empty,full,*douts)
21
+
22
+ [widthD].inner :count # Additional counter for the test.
23
+
24
+ timed do
25
+ clk <= 0
26
+ ce <= 0
27
+ rst <= 0
28
+ cmd <= READ
29
+ din <= 0
30
+ !10.ns
31
+ clk <= 1
32
+ !10.ns
33
+ clk <= 0
34
+ rst <= 1
35
+ !10.ns
36
+ clk <= 1
37
+ !10.ns
38
+ clk <= 0
39
+ rst <= 0
40
+ ce <= 1
41
+ din <= 1
42
+ !10.ns
43
+ clk <= 1
44
+ repeat(9) do
45
+ !10.ns
46
+ clk <= 0
47
+ cmd <= PUSH
48
+ din <= din + 1
49
+ !10.ns
50
+ clk <= 1
51
+ end
52
+ !10.ns
53
+ clk <= 0
54
+ !10.ns
55
+ clk <= 1
56
+ din <= -1
57
+ repeat(8) do
58
+ !10.ns
59
+ clk <= 0
60
+ cmd <= READ
61
+ din <= din + 1
62
+ !10.ns
63
+ clk <= 1
64
+ end
65
+ !10.ns
66
+ clk <= 0
67
+ !10.ns
68
+ clk <= 1
69
+ count <= 0
70
+ repeat(4) do
71
+ !10.ns
72
+ clk <= 0
73
+ din <= 1
74
+ cmd <= POP
75
+ !10.ns
76
+ clk <= 1
77
+ !10.ns
78
+ clk <= 0
79
+ count <= count + 1
80
+ din <= count
81
+ cmd <= PUSH
82
+ !10.ns
83
+ clk <= 1
84
+ end
85
+ !10.ns
86
+ clk <= 0
87
+ !10.ns
88
+ clk <= 1
89
+ repeat(9) do
90
+ !10.ns
91
+ clk <= 0
92
+ din <= 1
93
+ cmd <= POP
94
+ !10.ns
95
+ clk <= 1
96
+ end
97
+ !10.ns
98
+ clk <= 0
99
+ din <= _b8hAA
100
+ cmd <= PUSH
101
+ !10.ns
102
+ clk <= 1
103
+ !10.ns
104
+ clk <= 0
105
+ din <= 7
106
+ cmd <= WRITE
107
+ !10.ns
108
+ clk <= 1
109
+ din <= -1
110
+ repeat(8) do
111
+ !10.ns
112
+ clk <= 0
113
+ cmd <= WRITE
114
+ din <= din + 1
115
+ !10.ns
116
+ clk <= 1
117
+ end
118
+ !10.ns
119
+ clk <= 0
120
+ din <= size-1
121
+ cmd <= READ
122
+ !10.ns
123
+ clk <= 1
124
+ !10.ns
125
+ clk <= 0
126
+ din <= -3
127
+ cmd <= POP
128
+ !10.ns
129
+ clk <= 1
130
+ !10.ns
131
+ clk <= 0
132
+ din <= 31
133
+ cmd <= PUSH
134
+ !10.ns
135
+ clk <= 1
136
+ !10.ns
137
+ clk <= 0
138
+ din <= 3
139
+ cmd <= POP
140
+ !10.ns
141
+ clk <= 1
142
+ !10.ns
143
+ clk <= 0
144
+ din <= size-1
145
+ cmd <= READ
146
+ !10.ns
147
+ clk <= 1
148
+ end
149
+
150
+ end