HDLRuby 2.11.11 → 3.0.0

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 (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