vertigo_vhdl 0.8.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 (183) hide show
  1. checksums.yaml +7 -0
  2. data/bin/vertigo +7 -0
  3. data/lib/vertigo.rb +4 -0
  4. data/lib/vertigo/ast.rb +87 -0
  5. data/lib/vertigo/ast_vertigo_rkgen.rb +607 -0
  6. data/lib/vertigo/code.rb +57 -0
  7. data/lib/vertigo/compiler.rb +61 -0
  8. data/lib/vertigo/generic_lexer.rb +61 -0
  9. data/lib/vertigo/generic_parser.rb +44 -0
  10. data/lib/vertigo/indent.rb +20 -0
  11. data/lib/vertigo/lexer.rb +172 -0
  12. data/lib/vertigo/parser.rb +1458 -0
  13. data/lib/vertigo/pretty_printer.rb +749 -0
  14. data/lib/vertigo/runner.rb +115 -0
  15. data/lib/vertigo/tb_generator.rb +81 -0
  16. data/lib/vertigo/template.tb.vhd +72 -0
  17. data/lib/vertigo/token.rb +67 -0
  18. data/lib/vertigo/version.rb +3 -0
  19. data/lib/vertigo/vertigo.rkg +354 -0
  20. data/lib/vertigo/visitor_vertigo_rkgen.rb +447 -0
  21. data/tests/ghdl_tests/fsm.vhd +98 -0
  22. data/tests/ghdl_tests/fsm_synth.vhd +248 -0
  23. data/tests/ghdl_tests/test_fsm.vhd +162 -0
  24. data/tests/parser_tests/else.vhd +64 -0
  25. data/tests/parser_tests/test_MUST_fail.vhd +1 -0
  26. data/tests/parser_tests/test_accelerator.vhd +160 -0
  27. data/tests/parser_tests/test_accelerator_pp.vhd +144 -0
  28. data/tests/parser_tests/test_aggregate.vhd +17 -0
  29. data/tests/parser_tests/test_aggregate_pp.vhd +15 -0
  30. data/tests/parser_tests/test_archi_1.vhd +45 -0
  31. data/tests/parser_tests/test_archi_1_pp.vhd +41 -0
  32. data/tests/parser_tests/test_array_array_00.vhd +25 -0
  33. data/tests/parser_tests/test_array_array_00_pp.vhd +25 -0
  34. data/tests/parser_tests/test_array_urange.vhd +25 -0
  35. data/tests/parser_tests/test_array_urange_pp.vhd +25 -0
  36. data/tests/parser_tests/test_chu-1.vhd +80 -0
  37. data/tests/parser_tests/test_chu-1_pp.vhd +104 -0
  38. data/tests/parser_tests/test_concat.vhd +11 -0
  39. data/tests/parser_tests/test_concat_pp.vhd +14 -0
  40. data/tests/parser_tests/test_counter.vhd +35 -0
  41. data/tests/parser_tests/test_counter_pp.vhd +35 -0
  42. data/tests/parser_tests/test_de2.vhd +358 -0
  43. data/tests/parser_tests/test_de2_pp.vhd +274 -0
  44. data/tests/parser_tests/test_encode.vhd +2679 -0
  45. data/tests/parser_tests/test_encode_pp.vhd +2549 -0
  46. data/tests/parser_tests/test_fsm.vhd +162 -0
  47. data/tests/parser_tests/test_fsm_pp.vhd +125 -0
  48. data/tests/parser_tests/test_fsm_synth.vhd +248 -0
  49. data/tests/parser_tests/test_fsm_synth_pp.vhd +197 -0
  50. data/tests/parser_tests/test_function-01.vhd +33 -0
  51. data/tests/parser_tests/test_function-01_pp.vhd +18 -0
  52. data/tests/parser_tests/test_lfsr.vhd +75 -0
  53. data/tests/parser_tests/test_lfsr_pp.vhd +44 -0
  54. data/tests/parser_tests/test_microwatt_cache_ram.vhd +1 -0
  55. data/tests/parser_tests/test_microwatt_cache_ram_pp.vhd +68 -0
  56. data/tests/parser_tests/test_microwatt_common.vhd +1 -0
  57. data/tests/parser_tests/test_microwatt_common_pp.vhd +336 -0
  58. data/tests/parser_tests/test_microwatt_control.vhd +1 -0
  59. data/tests/parser_tests/test_microwatt_control_pp.vhd +187 -0
  60. data/tests/parser_tests/test_microwatt_core.vhd +1 -0
  61. data/tests/parser_tests/test_microwatt_core_debug.vhd +1 -0
  62. data/tests/parser_tests/test_microwatt_core_debug_pp.vhd +104 -0
  63. data/tests/parser_tests/test_microwatt_core_pp.vhd +231 -0
  64. data/tests/parser_tests/test_microwatt_core_tb.vhd +1 -0
  65. data/tests/parser_tests/test_microwatt_core_tb_pp.vhd +43 -0
  66. data/tests/parser_tests/test_microwatt_countzero.vhd +1 -0
  67. data/tests/parser_tests/test_microwatt_countzero_pp.vhd +120 -0
  68. data/tests/parser_tests/test_microwatt_countzero_tb.vhd +1 -0
  69. data/tests/parser_tests/test_microwatt_countzero_tb_pp.vhd +70 -0
  70. data/tests/parser_tests/test_microwatt_cr_file.vhd +1 -0
  71. data/tests/parser_tests/test_microwatt_cr_file_pp.vhd +74 -0
  72. data/tests/parser_tests/test_microwatt_cr_hazard.vhd +1 -0
  73. data/tests/parser_tests/test_microwatt_cr_hazard_pp.vhd +51 -0
  74. data/tests/parser_tests/test_microwatt_crhelpers.vhd +1 -0
  75. data/tests/parser_tests/test_microwatt_crhelpers_pp.vhd +48 -0
  76. data/tests/parser_tests/test_microwatt_dcache.vhd +1 -0
  77. data/tests/parser_tests/test_microwatt_dcache_pp.vhd +481 -0
  78. data/tests/parser_tests/test_microwatt_dcache_tb.vhd +1 -0
  79. data/tests/parser_tests/test_microwatt_dcache_tb_pp.vhd +98 -0
  80. data/tests/parser_tests/test_microwatt_decode1.vhd +1 -0
  81. data/tests/parser_tests/test_microwatt_decode1_pp.vhd +138 -0
  82. data/tests/parser_tests/test_microwatt_decode2.vhd +1 -0
  83. data/tests/parser_tests/test_microwatt_decode2_pp.vhd +300 -0
  84. data/tests/parser_tests/test_microwatt_decode_types.vhd +1 -0
  85. data/tests/parser_tests/test_microwatt_decode_types_pp.vhd +67 -0
  86. data/tests/parser_tests/test_microwatt_divider.vhd +1 -0
  87. data/tests/parser_tests/test_microwatt_divider_pp.vhd +132 -0
  88. data/tests/parser_tests/test_microwatt_divider_tb.vhd +1 -0
  89. data/tests/parser_tests/test_microwatt_divider_tb_pp.vhd +95 -0
  90. data/tests/parser_tests/test_microwatt_dmi_dtm_dummy.vhd +1 -0
  91. data/tests/parser_tests/test_microwatt_dmi_dtm_dummy_pp.vhd +29 -0
  92. data/tests/parser_tests/test_microwatt_dmi_dtm_tb.vhd +1 -0
  93. data/tests/parser_tests/test_microwatt_dmi_dtm_tb_pp.vhd +197 -0
  94. data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx.vhd +1 -0
  95. data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx_pp.vhd +139 -0
  96. data/tests/parser_tests/test_microwatt_execute1.vhd +1 -0
  97. data/tests/parser_tests/test_microwatt_execute1_pp.vhd +689 -0
  98. data/tests/parser_tests/test_microwatt_fetch1.vhd +1 -0
  99. data/tests/parser_tests/test_microwatt_fetch1_pp.vhd +88 -0
  100. data/tests/parser_tests/test_microwatt_fetch2.vhd +1 -0
  101. data/tests/parser_tests/test_microwatt_fetch2_pp.vhd +79 -0
  102. data/tests/parser_tests/test_microwatt_glibc_random.vhd +1 -0
  103. data/tests/parser_tests/test_microwatt_glibc_random_helpers.vhd +1 -0
  104. data/tests/parser_tests/test_microwatt_glibc_random_helpers_pp.vhd +25 -0
  105. data/tests/parser_tests/test_microwatt_glibc_random_pp.vhd +41 -0
  106. data/tests/parser_tests/test_microwatt_gpr_hazard.vhd +1 -0
  107. data/tests/parser_tests/test_microwatt_gpr_hazard_pp.vhd +68 -0
  108. data/tests/parser_tests/test_microwatt_helpers.vhd +1 -0
  109. data/tests/parser_tests/test_microwatt_helpers_pp.vhd +153 -0
  110. data/tests/parser_tests/test_microwatt_icache.vhd +1 -0
  111. data/tests/parser_tests/test_microwatt_icache_pp.vhd +337 -0
  112. data/tests/parser_tests/test_microwatt_icache_tb.vhd +1 -0
  113. data/tests/parser_tests/test_microwatt_icache_tb_pp.vhd +104 -0
  114. data/tests/parser_tests/test_microwatt_insn_helpers.vhd +1 -0
  115. data/tests/parser_tests/test_microwatt_insn_helpers_pp.vhd +208 -0
  116. data/tests/parser_tests/test_microwatt_loadstore1.vhd +1 -0
  117. data/tests/parser_tests/test_microwatt_loadstore1_pp.vhd +222 -0
  118. data/tests/parser_tests/test_microwatt_logical.vhd +1 -0
  119. data/tests/parser_tests/test_microwatt_logical_pp.vhd +87 -0
  120. data/tests/parser_tests/test_microwatt_multiply.vhd +1 -0
  121. data/tests/parser_tests/test_microwatt_multiply_pp.vhd +84 -0
  122. data/tests/parser_tests/test_microwatt_multiply_tb.vhd +1 -0
  123. data/tests/parser_tests/test_microwatt_multiply_tb_pp.vhd +75 -0
  124. data/tests/parser_tests/test_microwatt_plru.vhd +1 -0
  125. data/tests/parser_tests/test_microwatt_plru_pp.vhd +46 -0
  126. data/tests/parser_tests/test_microwatt_plru_tb.vhd +1 -0
  127. data/tests/parser_tests/test_microwatt_plru_tb_pp.vhd +93 -0
  128. data/tests/parser_tests/test_microwatt_ppc_fx_insns.vhd +1 -0
  129. data/tests/parser_tests/test_microwatt_ppc_fx_insns_pp.vhd +665 -0
  130. data/tests/parser_tests/test_microwatt_register_file.vhd +1 -0
  131. data/tests/parser_tests/test_microwatt_register_file_pp.vhd +86 -0
  132. data/tests/parser_tests/test_microwatt_rotator.vhd +1 -0
  133. data/tests/parser_tests/test_microwatt_rotator_pp.vhd +149 -0
  134. data/tests/parser_tests/test_microwatt_rotator_tb.vhd +1 -0
  135. data/tests/parser_tests/test_microwatt_rotator_tb_pp.vhd +134 -0
  136. data/tests/parser_tests/test_microwatt_sim_bram.vhd +1 -0
  137. data/tests/parser_tests/test_microwatt_sim_bram_helpers.vhd +1 -0
  138. data/tests/parser_tests/test_microwatt_sim_bram_helpers_pp.vhd +52 -0
  139. data/tests/parser_tests/test_microwatt_sim_bram_pp.vhd +53 -0
  140. data/tests/parser_tests/test_microwatt_sim_console.vhd +1 -0
  141. data/tests/parser_tests/test_microwatt_sim_console_pp.vhd +43 -0
  142. data/tests/parser_tests/test_microwatt_sim_jtag.vhd +1 -0
  143. data/tests/parser_tests/test_microwatt_sim_jtag_pp.vhd +64 -0
  144. data/tests/parser_tests/test_microwatt_sim_jtag_socket.vhd +1 -0
  145. data/tests/parser_tests/test_microwatt_sim_jtag_socket_pp.vhd +36 -0
  146. data/tests/parser_tests/test_microwatt_sim_uart.vhd +1 -0
  147. data/tests/parser_tests/test_microwatt_sim_uart_pp.vhd +90 -0
  148. data/tests/parser_tests/test_microwatt_soc.vhd +1 -0
  149. data/tests/parser_tests/test_microwatt_soc_pp.vhd +195 -0
  150. data/tests/parser_tests/test_microwatt_utils.vhd +1 -0
  151. data/tests/parser_tests/test_microwatt_utils_pp.vhd +39 -0
  152. data/tests/parser_tests/test_microwatt_wishbone_arbiter.vhd +1 -0
  153. data/tests/parser_tests/test_microwatt_wishbone_arbiter_pp.vhd +54 -0
  154. data/tests/parser_tests/test_microwatt_wishbone_bram_tb.vhd +1 -0
  155. data/tests/parser_tests/test_microwatt_wishbone_bram_tb_pp.vhd +157 -0
  156. data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper.vhd +1 -0
  157. data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper_pp.vhd +62 -0
  158. data/tests/parser_tests/test_microwatt_wishbone_debug_master.vhd +1 -0
  159. data/tests/parser_tests/test_microwatt_wishbone_debug_master_pp.vhd +124 -0
  160. data/tests/parser_tests/test_microwatt_wishbone_types.vhd +1 -0
  161. data/tests/parser_tests/test_microwatt_wishbone_types_pp.vhd +38 -0
  162. data/tests/parser_tests/test_microwatt_writeback.vhd +1 -0
  163. data/tests/parser_tests/test_microwatt_writeback_pp.vhd +87 -0
  164. data/tests/parser_tests/test_package-1.vhd +68 -0
  165. data/tests/parser_tests/test_package-1_pp.vhd +53 -0
  166. data/tests/parser_tests/test_precedence.vhd +13 -0
  167. data/tests/parser_tests/test_precedence_pp.vhd +16 -0
  168. data/tests/parser_tests/test_selected_sig.vhd +14 -0
  169. data/tests/parser_tests/test_selected_sig_pp.vhd +10 -0
  170. data/tests/parser_tests/test_slice.vhd +15 -0
  171. data/tests/parser_tests/test_slice_pp.vhd +16 -0
  172. data/tests/parser_tests/test_tb-00.vhd +94 -0
  173. data/tests/parser_tests/test_tb-00_pp.vhd +71 -0
  174. data/tests/parser_tests/test_type_decl_02.vhd +9 -0
  175. data/tests/parser_tests/test_type_decl_02_pp.vhd +11 -0
  176. data/tests/parser_tests/test_use.vhd +7 -0
  177. data/tests/parser_tests/test_use_pp.vhd +10 -0
  178. data/tests/parser_tests/test_while_1.vhd +38 -0
  179. data/tests/parser_tests/test_while_1_pp.vhd +26 -0
  180. data/tests/parser_tests/test_with-00.vhd +21 -0
  181. data/tests/parser_tests/test_with-00_pp.vhd +12 -0
  182. data/tests/tb_gen_tests/test_accelerator.vhd +160 -0
  183. metadata +224 -0
@@ -0,0 +1 @@
1
+ error
@@ -0,0 +1,160 @@
1
+ library ieee,std;
2
+ use ieee.std_logic_1164.all;
3
+ use ieee.numeric_std.all;
4
+ use work.accelerator_pkg.all;
5
+
6
+ entity accelerator is
7
+ port(
8
+ clk : in std_logic;
9
+ reset_n : in std_logic;
10
+ bus_addr : in std_logic_vector(31 downto 0);
11
+ bus_data_p2a : in std_logic_vector(31 downto 0);
12
+ bus_data_a2p : out std_logic_vector(31 downto 0);
13
+ bus_rd : in std_logic;
14
+ bus_wr : in std_logic
15
+ );
16
+ end accelerator;
17
+
18
+ architecture rtl of accelerator is
19
+
20
+ type regs_t is record
21
+ a, b, res : std_logic_vector(31 downto 0);
22
+ ctrl : std_logic;
23
+ status : std_logic_vector(1 downto 0); --busy,done
24
+ end record;
25
+
26
+ constant INIT_REGS : regs_t := (
27
+ (others => '0'),
28
+ (others => '0'),
29
+ (others => '0'),
30
+ '0',
31
+ "00"
32
+ );
33
+
34
+ signal ifregs : regs_t;
35
+
36
+ type state_t is (idle, running);
37
+ signal state, state_c : state_t;
38
+
39
+ type vars_t is record
40
+ go : std_logic;
41
+ a, b : unsigned(31 downto 0);
42
+ done : std_logic;
43
+ end record;
44
+
45
+ -- constant VARS_INIT : vars_t := (
46
+ -- '0',
47
+ -- to_unsigned(0, 32),
48
+ -- to_unsigned(0, 32),
49
+ -- '0');
50
+
51
+ signal vars, vars_c : vars_t;
52
+
53
+ begin
54
+ --========================================
55
+ -- Bus interface
56
+ --========================================
57
+ bus_wr_proc : process(clk, reset_n)
58
+ begin
59
+ if reset_n = '0' then
60
+ ifregs <= INIT_REGS;
61
+ elsif rising_edge(clk) then
62
+ ifregs.ctrl <= '0'; --autoreset
63
+ if bus_wr = '1' then
64
+ case bus_addr is
65
+ when ADDR_A =>
66
+ ifregs.a <= bus_data_p2a;
67
+ when ADDR_B =>
68
+ ifregs.b <= bus_data_p2a;
69
+ when ADDR_CTRL =>
70
+ ifregs.ctrl <= bus_data_p2a(0); --write/clear a go
71
+ when ADDR_STATUS =>
72
+ ifregs.status <= bus_data_p2a(1 downto 0); --clear rdy
73
+ when others => null;
74
+ end case;
75
+ elsif vars.done = '1' then
76
+ ifregs.res <= std_logic_vector(vars.a); --BUG : vars.a ne passait pas
77
+ --=> FIX lexer : selected_name
78
+ --ifregs.status(0) <= vars.done; --BUG : (0) ne passe pas
79
+ ifregs.status <= vars.done; --BUG : (0) ne passe pas
80
+ end if;
81
+ end if;
82
+ end process;
83
+
84
+ bus_rd_proc : process(reset_n, clk)
85
+ begin
86
+ if reset_n = '0' then
87
+ bus_data_a2p <= (others => '0');
88
+ elsif rising_edge(clk) then
89
+ if bus_rd = '1' then
90
+ case bus_addr is
91
+ when ADDR_A =>
92
+ bus_data_a2p <= ifregs.a;
93
+ when ADDR_B =>
94
+ bus_data_a2p <= ifregs.b;
95
+ when ADDR_CTRL =>
96
+ null;
97
+ --bus_data_a2p <= X"0000000" & "000" & ifregs.ctrl; --write/clear a go
98
+ when ADDR_STATUS =>
99
+ null;
100
+ bus_data_a2p <= X"0000000" & "00" & ifregs.status;
101
+ when ADDR_RES =>
102
+ bus_data_a2p <= ifregs.res;
103
+ when others => null;
104
+ end case;
105
+ end if;
106
+ end if;
107
+ end process;
108
+
109
+ --=============================================
110
+ -- BUG
111
+ --=============================================
112
+
113
+ reg : process(clk, reset_n)
114
+ begin
115
+ if reset_n = '0' then
116
+ state <= idle;
117
+ vars <= VARS_INIT;
118
+ elsif rising_edge(clk) then
119
+ state <= state_c;
120
+ vars <= vars_c;
121
+ if ifregs.ctrl = '1' then
122
+ vars.a <= unsigned(ifregs.a);
123
+ vars.b <= unsigned(ifregs.b);
124
+ vars.go <= '1';
125
+ end if;
126
+ end if;
127
+ end process;
128
+
129
+ comb : process (state, vars)
130
+ variable state_v : state_t;
131
+ variable vars_v : vars_t;
132
+ begin
133
+ state_v := state;
134
+ vars_v := vars;
135
+ case state_v is
136
+ when idle =>
137
+ if vars_v.go = '1' then
138
+ state_v := running;
139
+ vars_v.go := '0';
140
+ else
141
+ vars_v := VARS_INIT;
142
+ end if;
143
+ when running =>
144
+ if vars_v.a /= vars_v.b then
145
+ if vars_v.a > vars_v.b then
146
+ vars_v.a := vars_v.a-vars_v.b;
147
+ else
148
+ vars_v.b := vars_v.b-vars_v.a;
149
+ end if;
150
+ else
151
+ vars_v.done := '1';
152
+ state_v := idle;
153
+ end if;
154
+ when others => null;
155
+ end case;
156
+ state_c <= state_v;
157
+ vars_c <= vars_v;
158
+ end process;
159
+
160
+ end rtl;
@@ -0,0 +1,144 @@
1
+ -- generated by Vertigo VHDL tool
2
+ library ieee;
3
+ library std;
4
+ use ieee.std_logic_1164.all;
5
+ use ieee.numeric_std.all;
6
+ use work.accelerator_pkg.all;
7
+
8
+ entity accelerator is
9
+ port(
10
+ clk : in std_logic;
11
+ reset_n : in std_logic;
12
+ bus_addr : in std_logic_vector(31 downto 0);
13
+ bus_data_p2a : in std_logic_vector(31 downto 0);
14
+ bus_data_a2p : out std_logic_vector(31 downto 0);
15
+ bus_rd : in std_logic;
16
+ bus_wr : in std_logic);
17
+ end entity accelerator;
18
+
19
+ architecture rtl of accelerator is
20
+
21
+ type regs_t is record
22
+ a : std_logic_vector(31 downto 0);
23
+ b : std_logic_vector(31 downto 0);
24
+ res : std_logic_vector(31 downto 0);
25
+ ctrl : std_logic;
26
+ status : std_logic_vector(1 downto 0);
27
+ end record;
28
+ constant init_regs : regs_t := ((others => '0'),(others => '0'),(others => '0'),'0',"00");
29
+ signal ifregs : regs_t;
30
+
31
+ type state_t is (idle,running);
32
+ signal state : state_t;
33
+ signal state_c : state_t;
34
+
35
+ type vars_t is record
36
+ go : std_logic;
37
+ a : unsigned(31 downto 0);
38
+ b : unsigned(31 downto 0);
39
+ done : std_logic;
40
+ end record;
41
+ signal vars : vars_t;
42
+ signal vars_c : vars_t;
43
+ begin
44
+
45
+
46
+ bus_wr_proc : process(clk,reset_n)
47
+ begin
48
+ if reset_n = '0' then
49
+ ifregs <= init_regs;
50
+ elsif rising_edge(clk) then
51
+ ifregs.ctrl <= '0';
52
+ if bus_wr = '1' then
53
+ case bus_addr is
54
+ when addr_a =>
55
+ ifregs.a <= bus_data_p2a;
56
+ when addr_b =>
57
+ ifregs.b <= bus_data_p2a;
58
+ when addr_ctrl =>
59
+ ifregs.ctrl <= bus_data_p2a(0);
60
+ when addr_status =>
61
+ ifregs.status <= bus_data_p2a(1 downto 0);
62
+ when others =>
63
+ null;
64
+ end case;
65
+ elsif vars.done = '1' then
66
+ ifregs.res <= std_logic_vector(vars.a);
67
+ ifregs.status <= vars.done;
68
+ end if;
69
+ end if;
70
+ end process;
71
+
72
+ bus_rd_proc : process(reset_n,clk)
73
+ begin
74
+ if reset_n = '0' then
75
+ bus_data_a2p <= (others => '0');
76
+ elsif rising_edge(clk) then
77
+ if bus_rd = '1' then
78
+ case bus_addr is
79
+ when addr_a =>
80
+ bus_data_a2p <= ifregs.a;
81
+ when addr_b =>
82
+ bus_data_a2p <= ifregs.b;
83
+ when addr_ctrl =>
84
+ null;
85
+ when addr_status =>
86
+ null;
87
+ bus_data_a2p <= x"0000000" & "00" & ifregs.status;
88
+ when addr_res =>
89
+ bus_data_a2p <= ifregs.res;
90
+ when others =>
91
+ null;
92
+ end case;
93
+ end if;
94
+ end if;
95
+ end process;
96
+
97
+ reg : process(clk,reset_n)
98
+ begin
99
+ if reset_n = '0' then
100
+ state <= idle;
101
+ vars <= vars_init;
102
+ elsif rising_edge(clk) then
103
+ state <= state_c;
104
+ vars <= vars_c;
105
+ if ifregs.ctrl = '1' then
106
+ vars.a <= unsigned(ifregs.a);
107
+ vars.b <= unsigned(ifregs.b);
108
+ vars.go <= '1';
109
+ end if;
110
+ end if;
111
+ end process;
112
+
113
+ comb : process(state,vars)
114
+ variable state_v : state_t;
115
+ variable vars_v : vars_t;
116
+ begin
117
+ state_v := state;
118
+ vars_v := vars;
119
+ case state_v is
120
+ when idle =>
121
+ if vars_v.go = '1' then
122
+ state_v := running;
123
+ vars_v.go := '0';
124
+ else
125
+ vars_v := vars_init;
126
+ end if;
127
+ when running =>
128
+ if vars_v.a /= vars_v.b then
129
+ if vars_v.a > vars_v.b then
130
+ vars_v.a := vars_v.a - vars_v.b;
131
+ else
132
+ vars_v.b := vars_v.b - vars_v.a;
133
+ end if;
134
+ else
135
+ vars_v.done := '1';
136
+ state_v := idle;
137
+ end if;
138
+ when others =>
139
+ null;
140
+ end case;
141
+ state_c <= state_v;
142
+ vars_c <= vars_v;
143
+ end process;
144
+ end rtl;
@@ -0,0 +1,17 @@
1
+ entity test is
2
+ end entity;
3
+
4
+ architecture bhv of test is
5
+ begin
6
+
7
+ reg_ctrl_out <= (63 downto 11 => '0', 10 downto 0 => reg_ctrl);
8
+
9
+ -- from microwatt_dcache.vhd
10
+ req_laddr <= r0.addr(63 downto LINE_OFF_BITS) & (LINE_OFF_BITS-1 downto 0 => '0');
11
+
12
+ regs_t <= (1,2,3);
13
+ regs_t <= (others => '0');
14
+ regs_t <= ( (others => '0'), '0',"00" );
15
+ regs_t <= ( (others => '0'), (others => '0'), '0',"00" );
16
+
17
+ end bhv;
@@ -0,0 +1,15 @@
1
+ -- generated by Vertigo VHDL tool
2
+
3
+ entity test is
4
+ end entity test;
5
+
6
+ architecture bhv of test is
7
+ begin
8
+
9
+ reg_ctrl_out <= (63 downto 11 => '0',10 downto 0 => reg_ctrl);
10
+ req_laddr <= r0.addr(63 downto line_off_bits) & (line_off_bits - 1 downto 0 => '0');
11
+ regs_t <= (1,2,3);
12
+ regs_t <= (others => '0');
13
+ regs_t <= ((others => '0'),'0',"00");
14
+ regs_t <= ((others => '0'),(others => '0'),'0',"00");
15
+ end bhv;
@@ -0,0 +1,45 @@
1
+ library ieee,std;
2
+ use ieee.std_logic_1164.all;
3
+ use ieee.numeric_std.all;
4
+
5
+ entity accelerator is
6
+ port(
7
+ reset_n : in std_logic;
8
+ clk : in std_logic;
9
+ a1 : in std_logic_vector(31 downto 0);
10
+ f1 : out std_logic_vector(31 downto 0)
11
+ );
12
+ end entity accelerator;
13
+
14
+ architecture rtl of accelerator is
15
+ signal a,b,c : std_logic;
16
+ signal s : integer;
17
+ signal d,e,f: std_logic_vector(31 downto 0);
18
+ begin
19
+
20
+ c <= '0','1' after 15 ns;
21
+
22
+ a <= b;
23
+
24
+ s <= 1 when a='1' else
25
+ 2 when a='0' else
26
+ 3;
27
+
28
+ -- absurd code
29
+ label_1:process(s,reset_n,clk)
30
+ begin
31
+
32
+ if s > 32 then
33
+ s <= 1;
34
+ end if;
35
+
36
+ if reset_n='0' then
37
+ s <= 2;
38
+ elsif rising_edge(clk) then
39
+ s <= 1;
40
+ end if;
41
+
42
+ wait;
43
+ end process;
44
+
45
+ end rtl;
@@ -0,0 +1,41 @@
1
+ -- generated by Vertigo VHDL tool
2
+ library ieee;
3
+ library std;
4
+ use ieee.std_logic_1164.all;
5
+ use ieee.numeric_std.all;
6
+
7
+ entity accelerator is
8
+ port(
9
+ reset_n : in std_logic;
10
+ clk : in std_logic;
11
+ a1 : in std_logic_vector(31 downto 0);
12
+ f1 : out std_logic_vector(31 downto 0));
13
+ end entity accelerator;
14
+
15
+ architecture rtl of accelerator is
16
+ signal a : std_logic;
17
+ signal b : std_logic;
18
+ signal c : std_logic;
19
+ signal s : integer;
20
+ signal d : std_logic_vector(31 downto 0);
21
+ signal e : std_logic_vector(31 downto 0);
22
+ signal f : std_logic_vector(31 downto 0);
23
+ begin
24
+
25
+ c <= '0','1' after 15 ns;
26
+ a <= b;
27
+ s <= 1 when a = '1' else 2 when a = '0' else 3;
28
+
29
+ label_1 : process(s,reset_n,clk)
30
+ begin
31
+ if s > 32 then
32
+ s <= 1;
33
+ end if;
34
+ if reset_n = '0' then
35
+ s <= 2;
36
+ elsif rising_edge(clk) then
37
+ s <= 1;
38
+ end if;
39
+ wait ;
40
+ end process;
41
+ end rtl;
@@ -0,0 +1,25 @@
1
+ library ieee;
2
+ use ieee.std_logic_1164.all;
3
+
4
+ architecture test_var of test is
5
+
6
+
7
+ begin -- test_var
8
+
9
+ test : process
10
+ type TestIt is array(natural range <>) of boolean;
11
+ type Mem is array (natural range <>, natural range <>) of std_logic;
12
+ variable TempCond : boolean := true;
13
+ variable RAM2 : Mem (0 to 7, 0 to 7) :=
14
+ (('0', '0', '0', '0', '0', '0', '0', '0'),
15
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
16
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
17
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
18
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
19
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
20
+ ('0', '0', '0', '0', '0', '0', '0', '0'),
21
+ ('0', '0', '0', '0', '0', '0', '0', '0'));
22
+ begin -- process test
23
+ end process test;
24
+
25
+ end test_var;