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.
- checksums.yaml +7 -0
- data/bin/vertigo +7 -0
- data/lib/vertigo.rb +4 -0
- data/lib/vertigo/ast.rb +87 -0
- data/lib/vertigo/ast_vertigo_rkgen.rb +607 -0
- data/lib/vertigo/code.rb +57 -0
- data/lib/vertigo/compiler.rb +61 -0
- data/lib/vertigo/generic_lexer.rb +61 -0
- data/lib/vertigo/generic_parser.rb +44 -0
- data/lib/vertigo/indent.rb +20 -0
- data/lib/vertigo/lexer.rb +172 -0
- data/lib/vertigo/parser.rb +1458 -0
- data/lib/vertigo/pretty_printer.rb +749 -0
- data/lib/vertigo/runner.rb +115 -0
- data/lib/vertigo/tb_generator.rb +81 -0
- data/lib/vertigo/template.tb.vhd +72 -0
- data/lib/vertigo/token.rb +67 -0
- data/lib/vertigo/version.rb +3 -0
- data/lib/vertigo/vertigo.rkg +354 -0
- data/lib/vertigo/visitor_vertigo_rkgen.rb +447 -0
- data/tests/ghdl_tests/fsm.vhd +98 -0
- data/tests/ghdl_tests/fsm_synth.vhd +248 -0
- data/tests/ghdl_tests/test_fsm.vhd +162 -0
- data/tests/parser_tests/else.vhd +64 -0
- data/tests/parser_tests/test_MUST_fail.vhd +1 -0
- data/tests/parser_tests/test_accelerator.vhd +160 -0
- data/tests/parser_tests/test_accelerator_pp.vhd +144 -0
- data/tests/parser_tests/test_aggregate.vhd +17 -0
- data/tests/parser_tests/test_aggregate_pp.vhd +15 -0
- data/tests/parser_tests/test_archi_1.vhd +45 -0
- data/tests/parser_tests/test_archi_1_pp.vhd +41 -0
- data/tests/parser_tests/test_array_array_00.vhd +25 -0
- data/tests/parser_tests/test_array_array_00_pp.vhd +25 -0
- data/tests/parser_tests/test_array_urange.vhd +25 -0
- data/tests/parser_tests/test_array_urange_pp.vhd +25 -0
- data/tests/parser_tests/test_chu-1.vhd +80 -0
- data/tests/parser_tests/test_chu-1_pp.vhd +104 -0
- data/tests/parser_tests/test_concat.vhd +11 -0
- data/tests/parser_tests/test_concat_pp.vhd +14 -0
- data/tests/parser_tests/test_counter.vhd +35 -0
- data/tests/parser_tests/test_counter_pp.vhd +35 -0
- data/tests/parser_tests/test_de2.vhd +358 -0
- data/tests/parser_tests/test_de2_pp.vhd +274 -0
- data/tests/parser_tests/test_encode.vhd +2679 -0
- data/tests/parser_tests/test_encode_pp.vhd +2549 -0
- data/tests/parser_tests/test_fsm.vhd +162 -0
- data/tests/parser_tests/test_fsm_pp.vhd +125 -0
- data/tests/parser_tests/test_fsm_synth.vhd +248 -0
- data/tests/parser_tests/test_fsm_synth_pp.vhd +197 -0
- data/tests/parser_tests/test_function-01.vhd +33 -0
- data/tests/parser_tests/test_function-01_pp.vhd +18 -0
- data/tests/parser_tests/test_lfsr.vhd +75 -0
- data/tests/parser_tests/test_lfsr_pp.vhd +44 -0
- data/tests/parser_tests/test_microwatt_cache_ram.vhd +1 -0
- data/tests/parser_tests/test_microwatt_cache_ram_pp.vhd +68 -0
- data/tests/parser_tests/test_microwatt_common.vhd +1 -0
- data/tests/parser_tests/test_microwatt_common_pp.vhd +336 -0
- data/tests/parser_tests/test_microwatt_control.vhd +1 -0
- data/tests/parser_tests/test_microwatt_control_pp.vhd +187 -0
- data/tests/parser_tests/test_microwatt_core.vhd +1 -0
- data/tests/parser_tests/test_microwatt_core_debug.vhd +1 -0
- data/tests/parser_tests/test_microwatt_core_debug_pp.vhd +104 -0
- data/tests/parser_tests/test_microwatt_core_pp.vhd +231 -0
- data/tests/parser_tests/test_microwatt_core_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_core_tb_pp.vhd +43 -0
- data/tests/parser_tests/test_microwatt_countzero.vhd +1 -0
- data/tests/parser_tests/test_microwatt_countzero_pp.vhd +120 -0
- data/tests/parser_tests/test_microwatt_countzero_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_countzero_tb_pp.vhd +70 -0
- data/tests/parser_tests/test_microwatt_cr_file.vhd +1 -0
- data/tests/parser_tests/test_microwatt_cr_file_pp.vhd +74 -0
- data/tests/parser_tests/test_microwatt_cr_hazard.vhd +1 -0
- data/tests/parser_tests/test_microwatt_cr_hazard_pp.vhd +51 -0
- data/tests/parser_tests/test_microwatt_crhelpers.vhd +1 -0
- data/tests/parser_tests/test_microwatt_crhelpers_pp.vhd +48 -0
- data/tests/parser_tests/test_microwatt_dcache.vhd +1 -0
- data/tests/parser_tests/test_microwatt_dcache_pp.vhd +481 -0
- data/tests/parser_tests/test_microwatt_dcache_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_dcache_tb_pp.vhd +98 -0
- data/tests/parser_tests/test_microwatt_decode1.vhd +1 -0
- data/tests/parser_tests/test_microwatt_decode1_pp.vhd +138 -0
- data/tests/parser_tests/test_microwatt_decode2.vhd +1 -0
- data/tests/parser_tests/test_microwatt_decode2_pp.vhd +300 -0
- data/tests/parser_tests/test_microwatt_decode_types.vhd +1 -0
- data/tests/parser_tests/test_microwatt_decode_types_pp.vhd +67 -0
- data/tests/parser_tests/test_microwatt_divider.vhd +1 -0
- data/tests/parser_tests/test_microwatt_divider_pp.vhd +132 -0
- data/tests/parser_tests/test_microwatt_divider_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_divider_tb_pp.vhd +95 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_dummy.vhd +1 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_dummy_pp.vhd +29 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_tb_pp.vhd +197 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx.vhd +1 -0
- data/tests/parser_tests/test_microwatt_dmi_dtm_xilinx_pp.vhd +139 -0
- data/tests/parser_tests/test_microwatt_execute1.vhd +1 -0
- data/tests/parser_tests/test_microwatt_execute1_pp.vhd +689 -0
- data/tests/parser_tests/test_microwatt_fetch1.vhd +1 -0
- data/tests/parser_tests/test_microwatt_fetch1_pp.vhd +88 -0
- data/tests/parser_tests/test_microwatt_fetch2.vhd +1 -0
- data/tests/parser_tests/test_microwatt_fetch2_pp.vhd +79 -0
- data/tests/parser_tests/test_microwatt_glibc_random.vhd +1 -0
- data/tests/parser_tests/test_microwatt_glibc_random_helpers.vhd +1 -0
- data/tests/parser_tests/test_microwatt_glibc_random_helpers_pp.vhd +25 -0
- data/tests/parser_tests/test_microwatt_glibc_random_pp.vhd +41 -0
- data/tests/parser_tests/test_microwatt_gpr_hazard.vhd +1 -0
- data/tests/parser_tests/test_microwatt_gpr_hazard_pp.vhd +68 -0
- data/tests/parser_tests/test_microwatt_helpers.vhd +1 -0
- data/tests/parser_tests/test_microwatt_helpers_pp.vhd +153 -0
- data/tests/parser_tests/test_microwatt_icache.vhd +1 -0
- data/tests/parser_tests/test_microwatt_icache_pp.vhd +337 -0
- data/tests/parser_tests/test_microwatt_icache_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_icache_tb_pp.vhd +104 -0
- data/tests/parser_tests/test_microwatt_insn_helpers.vhd +1 -0
- data/tests/parser_tests/test_microwatt_insn_helpers_pp.vhd +208 -0
- data/tests/parser_tests/test_microwatt_loadstore1.vhd +1 -0
- data/tests/parser_tests/test_microwatt_loadstore1_pp.vhd +222 -0
- data/tests/parser_tests/test_microwatt_logical.vhd +1 -0
- data/tests/parser_tests/test_microwatt_logical_pp.vhd +87 -0
- data/tests/parser_tests/test_microwatt_multiply.vhd +1 -0
- data/tests/parser_tests/test_microwatt_multiply_pp.vhd +84 -0
- data/tests/parser_tests/test_microwatt_multiply_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_multiply_tb_pp.vhd +75 -0
- data/tests/parser_tests/test_microwatt_plru.vhd +1 -0
- data/tests/parser_tests/test_microwatt_plru_pp.vhd +46 -0
- data/tests/parser_tests/test_microwatt_plru_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_plru_tb_pp.vhd +93 -0
- data/tests/parser_tests/test_microwatt_ppc_fx_insns.vhd +1 -0
- data/tests/parser_tests/test_microwatt_ppc_fx_insns_pp.vhd +665 -0
- data/tests/parser_tests/test_microwatt_register_file.vhd +1 -0
- data/tests/parser_tests/test_microwatt_register_file_pp.vhd +86 -0
- data/tests/parser_tests/test_microwatt_rotator.vhd +1 -0
- data/tests/parser_tests/test_microwatt_rotator_pp.vhd +149 -0
- data/tests/parser_tests/test_microwatt_rotator_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_rotator_tb_pp.vhd +134 -0
- data/tests/parser_tests/test_microwatt_sim_bram.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_bram_helpers.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_bram_helpers_pp.vhd +52 -0
- data/tests/parser_tests/test_microwatt_sim_bram_pp.vhd +53 -0
- data/tests/parser_tests/test_microwatt_sim_console.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_console_pp.vhd +43 -0
- data/tests/parser_tests/test_microwatt_sim_jtag.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_jtag_pp.vhd +64 -0
- data/tests/parser_tests/test_microwatt_sim_jtag_socket.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_jtag_socket_pp.vhd +36 -0
- data/tests/parser_tests/test_microwatt_sim_uart.vhd +1 -0
- data/tests/parser_tests/test_microwatt_sim_uart_pp.vhd +90 -0
- data/tests/parser_tests/test_microwatt_soc.vhd +1 -0
- data/tests/parser_tests/test_microwatt_soc_pp.vhd +195 -0
- data/tests/parser_tests/test_microwatt_utils.vhd +1 -0
- data/tests/parser_tests/test_microwatt_utils_pp.vhd +39 -0
- data/tests/parser_tests/test_microwatt_wishbone_arbiter.vhd +1 -0
- data/tests/parser_tests/test_microwatt_wishbone_arbiter_pp.vhd +54 -0
- data/tests/parser_tests/test_microwatt_wishbone_bram_tb.vhd +1 -0
- data/tests/parser_tests/test_microwatt_wishbone_bram_tb_pp.vhd +157 -0
- data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper.vhd +1 -0
- data/tests/parser_tests/test_microwatt_wishbone_bram_wrapper_pp.vhd +62 -0
- data/tests/parser_tests/test_microwatt_wishbone_debug_master.vhd +1 -0
- data/tests/parser_tests/test_microwatt_wishbone_debug_master_pp.vhd +124 -0
- data/tests/parser_tests/test_microwatt_wishbone_types.vhd +1 -0
- data/tests/parser_tests/test_microwatt_wishbone_types_pp.vhd +38 -0
- data/tests/parser_tests/test_microwatt_writeback.vhd +1 -0
- data/tests/parser_tests/test_microwatt_writeback_pp.vhd +87 -0
- data/tests/parser_tests/test_package-1.vhd +68 -0
- data/tests/parser_tests/test_package-1_pp.vhd +53 -0
- data/tests/parser_tests/test_precedence.vhd +13 -0
- data/tests/parser_tests/test_precedence_pp.vhd +16 -0
- data/tests/parser_tests/test_selected_sig.vhd +14 -0
- data/tests/parser_tests/test_selected_sig_pp.vhd +10 -0
- data/tests/parser_tests/test_slice.vhd +15 -0
- data/tests/parser_tests/test_slice_pp.vhd +16 -0
- data/tests/parser_tests/test_tb-00.vhd +94 -0
- data/tests/parser_tests/test_tb-00_pp.vhd +71 -0
- data/tests/parser_tests/test_type_decl_02.vhd +9 -0
- data/tests/parser_tests/test_type_decl_02_pp.vhd +11 -0
- data/tests/parser_tests/test_use.vhd +7 -0
- data/tests/parser_tests/test_use_pp.vhd +10 -0
- data/tests/parser_tests/test_while_1.vhd +38 -0
- data/tests/parser_tests/test_while_1_pp.vhd +26 -0
- data/tests/parser_tests/test_with-00.vhd +21 -0
- data/tests/parser_tests/test_with-00_pp.vhd +12 -0
- data/tests/tb_gen_tests/test_accelerator.vhd +160 -0
- 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;
|