summaryrefslogtreecommitdiff
path: root/hdl/top.sv
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--hdl/top.sv298
1 files changed, 298 insertions, 0 deletions
diff --git a/hdl/top.sv b/hdl/top.sv
new file mode 100644
index 0000000..7ec57b7
--- /dev/null
+++ b/hdl/top.sv
@@ -0,0 +1,298 @@
1`include "defs.svh"
2
3module top
4 ( input bit clock
5 , input bit resetn
6
7 , inout wire [10:1] gpioa
8 , inout wire [28:13] gpiob
9 , inout wire [40:31] gpioc
10
11 , output bit ram_resetn
12 , output bit ram_csn
13 , output bit ram_clkp
14 , output bit ram_clkn
15 , inout bit ram_rwds
16 , inout bit [7:0] ram_data
17 );
18
19 bit internal_clock;
20 bit internal_reset;
21 pll
22 #( .MULTIPLY_BY(1)
23 , .DIVIDE_BY(1)
24 ) fastpll
25 ( .native_clk(clock)
26 , .reset_n(resetn)
27 , .target_clk(internal_clock)
28 , .reset(internal_reset)
29 );
30
31 bit ram_rx_ready;
32 bit ram_rx_valid;
33 uart_byte_t ram_rx_data;
34
35 bit ram_tx_ready;
36 bit ram_tx_valid;
37 uart_byte_t ram_tx_data;
38
39 bit ram_echo_in0_ready;
40 bit ram_echo_in0_valid;
41 uart_byte_t ram_echo_in0_data;
42
43 bit ram_echo_in1_ready;
44 bit ram_echo_in1_valid;
45 uart_byte_t ram_echo_in1_data;
46
47 bit command_ready;
48 bit command_valid;
49 ram_command_t command_data;
50
51 bit result_ready;
52 bit result_valid;
53 ram_read_response_t result_data;
54
55 bit ram_rwds_oe;
56 bit ram_rwds_out;
57 assign ram_rwds = ram_rwds_oe ? ram_rwds_out : 1'bZ;
58
59 bit ram_data_oe;
60 bit [7:0] ram_data_out;
61 assign ram_data = ram_data_oe ? ram_data_out : 8'bZ;
62
63 alt_jtag_atlantic
64 #( .INSTANCE_ID(0)
65 , .LOG2_RXFIFO_DEPTH(6)
66 , .LOG2_TXFIFO_DEPTH(6)
67 , .SLD_AUTO_INSTANCE_INDEX("NO")
68 ) ram_jtag
69 ( .clk(internal_clock)
70 , .rst_n(!internal_reset)
71
72 , .r_dat(ram_tx_data)
73 , .r_val(ram_tx_valid)
74 , .r_ena(ram_tx_ready)
75
76 , .t_dat(ram_rx_data)
77 , .t_dav(ram_rx_ready)
78 , .t_ena(ram_rx_valid)
79 );
80
81 echo_arbiter arb
82 ( .clock(internal_clock)
83 , .reset(internal_reset)
84
85 , .in0_ready(ram_echo_in0_ready)
86 , .in0_valid(ram_echo_in0_valid)
87 , .in0_data(ram_echo_in0_data)
88
89 , .in1_ready(ram_echo_in1_ready)
90 , .in1_valid(ram_echo_in1_valid)
91 , .in1_data(ram_echo_in1_data)
92
93 , .out_ready(ram_tx_ready)
94 , .out_valid(ram_tx_valid)
95 , .out_data(ram_tx_data)
96 );
97
98 command_parser
99 #( .TAG(0)
100 ) parser
101 ( .clock(internal_clock)
102 , .reset(internal_reset)
103
104 , .uart_ready(ram_rx_ready)
105 , .uart_valid(ram_rx_valid)
106 , .uart_data(ram_rx_data)
107
108 , .echo_ready(ram_echo_in0_ready)
109 , .echo_valid(ram_echo_in0_valid)
110 , .echo_data(ram_echo_in0_data)
111
112 , .command_ready(command_ready)
113 , .command_valid(command_valid)
114 , .command_data(command_data)
115 );
116
117 ram_controller ram
118 ( .clock(internal_clock)
119 , .reset(internal_reset)
120
121 , .command_ready(command_ready)
122 , .command_valid(command_valid)
123 , .command_data(command_data)
124
125 , .result_ready(result_ready)
126 , .result_valid(result_valid)
127 , .result_data(result_data)
128
129 , .ram_resetn(ram_resetn)
130 , .ram_csn(ram_csn)
131 , .ram_clkp(ram_clkp)
132 , .ram_clkn(ram_clkn)
133 , .ram_rwds_oe(ram_rwds_oe)
134 , .ram_rwds_in(ram_rwds)
135 , .ram_rwds_out(ram_rwds_out)
136 , .ram_data_oe(ram_data_oe)
137 , .ram_data_in(ram_data)
138 , .ram_data_out(ram_data_out)
139 );
140
141 result_printer
142 #( .TAG(0)
143 ) print
144 ( .clock(internal_clock)
145 , .reset(internal_reset)
146
147 , .result_ready(result_ready)
148 , .result_valid(result_valid)
149 , .result_data(result_data)
150
151 , .echo_ready(ram_echo_in1_ready)
152 , .echo_valid(ram_echo_in1_valid)
153 , .echo_data(ram_echo_in1_data)
154 );
155
156 bit slow_clock;
157 bit slow_reset;
158 pll
159 #( .MULTIPLY_BY(1)
160 , .DIVIDE_BY(500)
161 ) slowpll
162 ( .native_clk(clock)
163 , .reset_n(resetn)
164 , .target_clk(slow_clock)
165 , .reset(slow_reset)
166 );
167
168 bit [8:1][12:1] led;
169 bit [3:1][12:1] switch;
170
171 front_panel panel
172 ( .clk(slow_clock)
173 , .reset(slow_reset)
174
175 , .led(led)
176 , .switch(switch)
177
178 , .gpioa(gpioa)
179 , .gpiob(gpiob)
180 , .gpioc(gpioc)
181 );
182
183 bit [2:0] switch_df;
184 bit [2:0] switch_if;
185 bit [11:0] switch_sr;
186 bit switch_start;
187 bit switch_load_add;
188 bit switch_dep;
189 bit switch_exam;
190 bit switch_cont;
191 bit switch_stop;
192 bit switch_sing_step;
193 bit switch_sing_inst;
194
195 // Note that we are reversing the order here on a number of aggregates because
196 // the panel model gives us LEDs and switches in schematic-order, which is the
197 // opposite of the bit order
198 assign switch_df = {switch[2][1], switch[2][2], switch[2][3]};
199 assign switch_if = {switch[2][4], switch[2][5], switch[2][6]};
200 assign switch_sr = {switch[1][1], switch[1][2], switch[1][3], switch[1][4], switch[1][5], switch[1][6], switch[1][7], switch[1][8], switch[1][9], switch[1][10], switch[1][11], switch[1][12]};
201 assign switch_start = switch[3][1];
202 assign switch_load_add = switch[3][2];
203 assign switch_dep = switch[3][3];
204 assign switch_exam = switch[3][4];
205 assign switch_cont = switch[3][5];
206 assign switch_stop = switch[3][6];
207 `ifdef HISTORIC_SWITCH_BEHAVIOUR
208 assign switch_sing_step = !switch[3][7];
209 assign switch_sing_inst = !switch[3][8];
210 `else
211 assign switch_sing_step = switch[3][7];
212 assign switch_sing_inst = switch[3][8];
213 `endif
214
215 bit [11:0] led_pc;
216 bit [11:0] led_memaddr;
217 bit [11:0] led_memdata;
218 bit [11:0] led_acc;
219 bit [11:0] led_mq;
220 bit led_and;
221 bit led_tad;
222 bit led_isz;
223 bit led_dca;
224 bit led_jms;
225 bit led_jmp;
226 bit led_iot;
227 bit led_opr;
228 bit led_fetch;
229 bit led_execute;
230 bit led_defer;
231 bit led_word_count;
232 bit led_current_address;
233 bit led_break;
234 bit led_ion;
235 bit led_pause;
236 bit led_run;
237 bit [4:0] led_step_counter;
238 bit [2:0] led_df;
239 bit [2:0] led_if;
240 bit led_link;
241
242 // Note that we are reversing the order here on a number of aggregates because
243 // the panel model gives us LEDs and switches in schematic-order, which is the
244 // opposite of the bit order
245 assign led[1] = {led_pc[0], led_pc[1], led_pc[2], led_pc[3], led_pc[4], led_pc[5], led_pc[6], led_pc[7], led_pc[8], led_pc[9], led_pc[10], led_pc[11]};
246 assign led[2] = {led_memaddr[0], led_memaddr[1], led_memaddr[2], led_memaddr[3], led_memaddr[4], led_memaddr[5], led_memaddr[6], led_memaddr[7], led_memaddr[8], led_memaddr[9], led_memaddr[10], led_memaddr[11]};
247 assign led[3] = {led_memdata[0], led_memdata[1], led_memdata[2], led_memdata[3], led_memdata[4], led_memdata[5], led_memdata[6], led_memdata[7], led_memdata[8], led_memdata[9], led_memdata[10], led_memdata[11]};
248 assign led[4] = {led_acc[0], led_acc[1], led_acc[2], led_acc[3], led_acc[4], led_acc[5], led_acc[6], led_acc[7], led_acc[8], led_acc[9], led_acc[10], led_acc[11]};
249 assign led[5] = {led_mq[0], led_mq[1], led_mq[2], led_mq[3], led_mq[4], led_mq[5], led_mq[6], led_mq[7], led_mq[8], led_mq[9], led_mq[10], led_mq[11]};
250 assign led[6] = {led_word_count, led_defer, led_execute, led_fetch, led_opr, led_iot, led_jmp, led_jms, led_dca, led_isz, led_tad, led_and};
251 assign led[7] = {2'b0, led_step_counter[4], led_step_counter[3], led_step_counter[2], led_step_counter[1], led_step_counter[0], led_run, led_pause, led_ion, led_break, led_current_address};
252 assign led[8] = {5'b0, led_link, led_if[0], led_if[1], led_if[2], led_df[0], led_df[1], led_df[2]};
253
254 core cpu
255 ( .clk(internal_clock)
256 , .reset(internal_reset)
257
258 , .switch_df(switch_df)
259 , .switch_if(switch_if)
260 , .switch_sr(switch_sr)
261 , .switch_start(switch_start)
262 , .switch_load_add(switch_load_add)
263 , .switch_dep(switch_dep)
264 , .switch_exam(switch_exam)
265 , .switch_cont(switch_cont)
266 , .switch_stop(switch_stop)
267 , .switch_sing_step(switch_sing_step)
268 , .switch_sing_inst(switch_sing_inst)
269
270 , .led_pc(led_pc)
271 , .led_memaddr(led_memaddr)
272 , .led_memdata(led_memdata)
273 , .led_acc(led_acc)
274 , .led_mq(led_mq)
275 , .led_and(led_and)
276 , .led_tad(led_tad)
277 , .led_isz(led_isz)
278 , .led_dca(led_dca)
279 , .led_jms(led_jms)
280 , .led_jmp(led_jmp)
281 , .led_iot(led_iot)
282 , .led_opr(led_opr)
283 , .led_fetch(led_fetch)
284 , .led_execute(led_execute)
285 , .led_defer(led_defer)
286 , .led_word_count(led_word_count)
287 , .led_current_address(led_current_address)
288 , .led_break(led_break)
289 , .led_ion(led_ion)
290 , .led_pause(led_pause)
291 , .led_run(led_run)
292 , .led_step_counter(led_step_counter)
293 , .led_df(led_df)
294 , .led_if(led_if)
295 , .led_link(led_link)
296 );
297
298endmodule