OpenCores
URL https://opencores.org/ocsvn/hf-risc/hf-risc/trunk

Subversion Repositories hf-risc

[/] [hf-risc/] [trunk/] [hf-risc/] [ucore/] [control.vhd] - Blame information for rev 13

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 13 serginhofr
library ieee;
2
use ieee.std_logic_1164.all;
3
use ieee.std_logic_unsigned.all;
4
 
5
entity control is
6
        port (  opcode:                 in std_logic_vector(5 downto 0);
7
                rtx:                    in std_logic_vector(4 downto 0);
8
                funct:                  in std_logic_vector(5 downto 0);
9
                reg_dst:                out std_logic;
10
                reg_write:              out std_logic;
11
                alu_src:                out std_logic;
12
                alu_op:                 out std_logic_vector(3 downto 0);
13
                jump:                   out std_logic_vector(1 downto 0);
14
                branch:                 out std_logic_vector(2 downto 0);
15
                br_link:                out std_logic;
16
                reg_to_mem:             out std_logic;
17
                mem_to_reg:             out std_logic;
18
                signed_imm:             out std_logic;
19
                mem_write:              out std_logic_vector(1 downto 0);
20
                mem_read:               out std_logic_vector(1 downto 0);
21
                signed_rd:              out std_logic;
22
                shift:                  out std_logic
23
        );
24
end control;
25
 
26
architecture arch_control of control is
27
begin
28
        process(opcode, funct, rtx)
29
        begin
30
                case opcode is
31
                        when "000000" =>                                        -- R type
32
                                case funct is
33
                                        when "000000" =>                        -- SLL
34
                                                reg_dst <= '1';
35
                                                reg_write <= '1';
36
                                                alu_src <= '1';
37
                                                alu_op <= "1001";
38
                                                jump <= "00";
39
                                                branch <= "000";
40
                                                br_link <= '0';
41
                                                reg_to_mem <= '0';
42
                                                mem_to_reg <= '0';
43
                                                signed_imm <= '1';
44
                                                mem_write <= "00";
45
                                                mem_read <= "00";
46
                                                signed_rd <= '0';
47
                                                shift <= '1';
48
                                        when "000010" =>                        -- SRL
49
                                                reg_dst <= '1';
50
                                                reg_write <= '1';
51
                                                alu_src <= '1';
52
                                                alu_op <= "1010";
53
                                                jump <= "00";
54
                                                branch <= "000";
55
                                                br_link <= '0';
56
                                                reg_to_mem <= '0';
57
                                                mem_to_reg <= '0';
58
                                                signed_imm <= '1';
59
                                                mem_write <= "00";
60
                                                mem_read <= "00";
61
                                                signed_rd <= '0';
62
                                                shift <= '1';
63
                                        when "000011" =>                        -- SRA
64
                                                reg_dst <= '1';
65
                                                reg_write <= '1';
66
                                                alu_src <= '1';
67
                                                alu_op <= "1011";
68
                                                jump <= "00";
69
                                                branch <= "000";
70
                                                br_link <= '0';
71
                                                reg_to_mem <= '0';
72
                                                mem_to_reg <= '0';
73
                                                signed_imm <= '1';
74
                                                mem_write <= "00";
75
                                                mem_read <= "00";
76
                                                signed_rd <= '0';
77
                                                shift <= '1';
78
                                        when "000100" =>                        -- SLLV
79
                                                reg_dst <= '1';
80
                                                reg_write <= '1';
81
                                                alu_src <= '0';
82
                                                alu_op <= "1100";
83
                                                jump <= "00";
84
                                                branch <= "000";
85
                                                br_link <= '0';
86
                                                reg_to_mem <= '0';
87
                                                mem_to_reg <= '0';
88
                                                signed_imm <= '1';
89
                                                mem_write <= "00";
90
                                                mem_read <= "00";
91
                                                signed_rd <= '0';
92
                                                shift <= '1';
93
                                        when "000110" =>                        -- SRLV
94
                                                reg_dst <= '1';
95
                                                reg_write <= '1';
96
                                                alu_src <= '0';
97
                                                alu_op <= "1101";
98
                                                jump <= "00";
99
                                                branch <= "000";
100
                                                br_link <= '0';
101
                                                reg_to_mem <= '0';
102
                                                mem_to_reg <= '0';
103
                                                signed_imm <= '1';
104
                                                mem_write <= "00";
105
                                                mem_read <= "00";
106
                                                signed_rd <= '0';
107
                                                shift <= '1';
108
                                        when "000111" =>                        -- SRAV
109
                                                reg_dst <= '1';
110
                                                reg_write <= '1';
111
                                                alu_src <= '0';
112
                                                alu_op <= "1110";
113
                                                jump <= "00";
114
                                                branch <= "000";
115
                                                br_link <= '0';
116
                                                reg_to_mem <= '0';
117
                                                mem_to_reg <= '0';
118
                                                signed_imm <= '1';
119
                                                mem_write <= "00";
120
                                                mem_read <= "00";
121
                                                signed_rd <= '0';
122
                                                shift <= '1';
123
                                        when "001000" =>                        -- JR
124
                                                reg_dst <= '0';
125
                                                reg_write <= '0';
126
                                                alu_src <= '0';
127
                                                alu_op <= "0100";
128
                                                jump <= "10";
129
                                                branch <= "000";
130
                                                br_link <= '0';
131
                                                reg_to_mem <= '0';
132
                                                mem_to_reg <= '0';
133
                                                signed_imm <= '0';
134
                                                mem_write <= "00";
135
                                                mem_read <= "00";
136
                                                signed_rd <= '0';
137
                                                shift <= '0';
138
                                        when "001001" =>                        -- JALR
139
                                                reg_dst <= '1';
140
                                                reg_write <= '1';
141
                                                alu_src <= '0';
142
                                                alu_op <= "0100";
143
                                                jump <= "10";
144
                                                branch <= "000";
145
                                                br_link <= '1';
146
                                                reg_to_mem <= '0';
147
                                                mem_to_reg <= '0';
148
                                                signed_imm <= '0';
149
                                                mem_write <= "00";
150
                                                mem_read <= "00";
151
                                                signed_rd <= '0';
152
                                                shift <= '0';
153
--                                      when "001100" =>                        -- SYSCALL
154
--                                      when "001101" =>                        -- BREAK
155
--                                      when "010000" =>                        -- MFHI
156
--                                      when "010001" =>                        -- MTHI
157
--                                      when "010010" =>                        -- MFLO
158
--                                      when "010011" =>                        -- MTLO
159
--                                      when "011000" =>                        -- MULT
160
--                                      when "011001" =>                        -- MULTU
161
--                                      when "011010" =>                        -- DIV
162
--                                      when "011011" =>                        -- DIVU
163
--                                      when "100000" =>                        -- ADD
164
                                        when "100001" =>                        -- ADDU
165
                                                reg_dst <= '1';
166
                                                reg_write <= '1';
167
                                                alu_src <= '0';
168
                                                alu_op <= "0100";
169
                                                jump <= "00";
170
                                                branch <= "000";
171
                                                br_link <= '0';
172
                                                reg_to_mem <= '0';
173
                                                mem_to_reg <= '0';
174
                                                signed_imm <= '0';
175
                                                mem_write <= "00";
176
                                                mem_read <= "00";
177
                                                signed_rd <= '0';
178
                                                shift <= '0';
179
--                                      when "100010" =>                        -- SUB
180
                                        when "100011" =>                        -- SUBU
181
                                                reg_dst <= '1';
182
                                                reg_write <= '1';
183
                                                alu_src <= '0';
184
                                                alu_op <= "0101";
185
                                                jump <= "00";
186
                                                branch <= "000";
187
                                                br_link <= '0';
188
                                                reg_to_mem <= '0';
189
                                                mem_to_reg <= '0';
190
                                                signed_imm <= '0';
191
                                                mem_write <= "00";
192
                                                mem_read <= "00";
193
                                                signed_rd <= '0';
194
                                                shift <= '0';
195
                                        when "100100" =>                        -- AND
196
                                                reg_dst <= '1';
197
                                                reg_write <= '1';
198
                                                alu_src <= '0';
199
                                                alu_op <= "0000";
200
                                                jump <= "00";
201
                                                branch <= "000";
202
                                                br_link <= '0';
203
                                                reg_to_mem <= '0';
204
                                                mem_to_reg <= '0';
205
                                                signed_imm <= '0';
206
                                                mem_write <= "00";
207
                                                mem_read <= "00";
208
                                                signed_rd <= '0';
209
                                                shift <= '0';
210
                                        when "100101" =>                        -- OR
211
                                                reg_dst <= '1';
212
                                                reg_write <= '1';
213
                                                alu_src <= '0';
214
                                                alu_op <= "0001";
215
                                                jump <= "00";
216
                                                branch <= "000";
217
                                                br_link <= '0';
218
                                                reg_to_mem <= '0';
219
                                                mem_to_reg <= '0';
220
                                                signed_imm <= '0';
221
                                                mem_write <= "00";
222
                                                mem_read <= "00";
223
                                                signed_rd <= '0';
224
                                                shift <= '0';
225
                                        when "100110" =>                        -- XOR
226
                                                reg_dst <= '1';
227
                                                reg_write <= '1';
228
                                                alu_src <= '0';
229
                                                alu_op <= "0010";
230
                                                jump <= "00";
231
                                                branch <= "000";
232
                                                br_link <= '0';
233
                                                reg_to_mem <= '0';
234
                                                mem_to_reg <= '0';
235
                                                signed_imm <= '0';
236
                                                mem_write <= "00";
237
                                                mem_read <= "00";
238
                                                signed_rd <= '0';
239
                                                shift <= '0';
240
                                        when "100111" =>                        -- NOR
241
                                                reg_dst <= '1';
242
                                                reg_write <= '1';
243
                                                alu_src <= '0';
244
                                                alu_op <= "0011";
245
                                                jump <= "00";
246
                                                branch <= "000";
247
                                                br_link <= '0';
248
                                                reg_to_mem <= '0';
249
                                                mem_to_reg <= '0';
250
                                                signed_imm <= '0';
251
                                                mem_write <= "00";
252
                                                mem_read <= "00";
253
                                                signed_rd <= '0';
254
                                                shift <= '0';
255
                                        when "101010" =>                        -- SLT
256
                                                reg_dst <= '1';
257
                                                reg_write <= '1';
258
                                                alu_src <= '0';
259
                                                alu_op <= "0111";
260
                                                jump <= "00";
261
                                                branch <= "000";
262
                                                br_link <= '0';
263
                                                reg_to_mem <= '0';
264
                                                mem_to_reg <= '0';
265
                                                signed_imm <= '0';
266
                                                mem_write <= "00";
267
                                                mem_read <= "00";
268
                                                signed_rd <= '0';
269
                                                shift <= '0';
270
                                        when "101011" =>                        -- SLTU
271
                                                reg_dst <= '1';
272
                                                reg_write <= '1';
273
                                                alu_src <= '0';
274
                                                alu_op <= "1000";
275
                                                jump <= "00";
276
                                                branch <= "000";
277
                                                br_link <= '0';
278
                                                reg_to_mem <= '0';
279
                                                mem_to_reg <= '0';
280
                                                signed_imm <= '0';
281
                                                mem_write <= "00";
282
                                                mem_read <= "00";
283
                                                signed_rd <= '0';
284
                                                shift <= '0';
285
                                        when others =>                          -- all other R type instructions, generate a NOP
286
                                                reg_dst <= '0';
287
                                                reg_write <= '0';
288
                                                alu_src <= '0';
289
                                                alu_op <= "0000";
290
                                                jump <= "00";
291
                                                branch <= "000";
292
                                                br_link <= '0';
293
                                                reg_to_mem <= '0';
294
                                                mem_to_reg <= '0';
295
                                                signed_imm <= '0';
296
                                                mem_write <= "00";
297
                                                mem_read <= "00";
298
                                                signed_rd <= '0';
299
                                                shift <= '0';
300
                                end case;
301
                        when "000001" =>
302
                                case rtx is
303
                                        when "00000" =>                         -- BLTZ
304
                                                reg_dst <= '0';
305
                                                reg_write <= '0';
306
                                                alu_src <= '0';
307
                                                alu_op <= "0101";
308
                                                jump <= "00";
309
                                                branch <= "101";
310
                                                br_link <= '0';
311
                                                reg_to_mem <= '0';
312
                                                mem_to_reg <= '0';
313
                                                signed_imm <= '1';
314
                                                mem_write <= "00";
315
                                                mem_read <= "00";
316
                                                signed_rd <= '0';
317
                                                shift <= '0';
318
                                        when "00001" =>                         -- BGEZ
319
                                                reg_dst <= '0';
320
                                                reg_write <= '0';
321
                                                alu_src <= '0';
322
                                                alu_op <= "0101";
323
                                                jump <= "00";
324
                                                branch <= "110";
325
                                                br_link <= '0';
326
                                                reg_to_mem <= '0';
327
                                                mem_to_reg <= '0';
328
                                                signed_imm <= '1';
329
                                                mem_write <= "00";
330
                                                mem_read <= "00";
331
                                                signed_rd <= '0';
332
                                                shift <= '0';
333
                                        when "10000" =>                         -- BLTZAL
334
                                                reg_dst <= '1';
335
                                                reg_write <= '1';
336
                                                alu_src <= '0';
337
                                                alu_op <= "0101";
338
                                                jump <= "00";
339
                                                branch <= "101";
340
                                                br_link <= '1';
341
                                                reg_to_mem <= '0';
342
                                                mem_to_reg <= '0';
343
                                                signed_imm <= '1';
344
                                                mem_write <= "00";
345
                                                mem_read <= "00";
346
                                                signed_rd <= '0';
347
                                                shift <= '0';
348
                                        when "10001" =>                         -- BGEZAL
349
                                                reg_dst <= '1';
350
                                                reg_write <= '1';
351
                                                alu_src <= '0';
352
                                                alu_op <= "0101";
353
                                                jump <= "00";
354
                                                branch <= "110";
355
                                                br_link <= '1';
356
                                                reg_to_mem <= '0';
357
                                                mem_to_reg <= '0';
358
                                                signed_imm <= '1';
359
                                                mem_write <= "00";
360
                                                mem_read <= "00";
361
                                                signed_rd <= '0';
362
                                                shift <= '0';
363
                                        when others =>                          -- invalid instruction, generate a NOP
364
                                                reg_dst <= '0';
365
                                                reg_write <= '0';
366
                                                alu_src <= '0';
367
                                                alu_op <= "0100";
368
                                                jump <= "00";
369
                                                branch <= "000";
370
                                                br_link <= '0';
371
                                                reg_to_mem <= '0';
372
                                                mem_to_reg <= '0';
373
                                                signed_imm <= '0';
374
                                                mem_write <= "00";
375
                                                mem_read <= "00";
376
                                                signed_rd <= '0';
377
                                                shift <= '0';
378
                                end case;
379
                        when "000010" =>                                        -- J
380
                                reg_dst <= '0';
381
                                reg_write <= '0';
382
                                alu_src <= '0';
383
                                alu_op <= "0100";
384
                                jump <= "01";
385
                                branch <= "000";
386
                                br_link <= '0';
387
                                reg_to_mem <= '0';
388
                                mem_to_reg <= '0';
389
                                signed_imm <= '0';
390
                                mem_write <= "00";
391
                                mem_read <= "00";
392
                                signed_rd <= '0';
393
                                shift <= '0';
394
                        when "000011" =>                                        -- JAL
395
                                reg_dst <= '1';
396
                                reg_write <= '1';
397
                                alu_src <= '0';
398
                                alu_op <= "0100";
399
                                jump <= "01";
400
                                branch <= "000";
401
                                br_link <= '1';
402
                                reg_to_mem <= '0';
403
                                mem_to_reg <= '0';
404
                                signed_imm <= '0';
405
                                mem_write <= "00";
406
                                mem_read <= "00";
407
                                signed_rd <= '0';
408
                                shift <= '0';
409
                        when "000100" =>                                        -- BEQ
410
                                reg_dst <= '0';
411
                                reg_write <= '0';
412
                                alu_src <= '0';
413
                                alu_op <= "0101";
414
                                jump <= "00";
415
                                branch <= "001";
416
                                br_link <= '0';
417
                                reg_to_mem <= '0';
418
                                mem_to_reg <= '0';
419
                                signed_imm <= '1';
420
                                mem_write <= "00";
421
                                mem_read <= "00";
422
                                signed_rd <= '0';
423
                                shift <= '0';
424
                        when "000101" =>                                        -- BNE
425
                                reg_dst <= '0';
426
                                reg_write <= '0';
427
                                alu_src <= '0';
428
                                alu_op <= "0101";
429
                                jump <= "00";
430
                                branch <= "010";
431
                                br_link <= '0';
432
                                reg_to_mem <= '0';
433
                                mem_to_reg <= '0';
434
                                signed_imm <= '1';
435
                                mem_write <= "00";
436
                                mem_read <= "00";
437
                                signed_rd <= '0';
438
                                shift <= '0';
439
                        when "000110" =>                                        -- BLEZ
440
                                reg_dst <= '0';
441
                                reg_write <= '0';
442
                                alu_src <= '0';
443
                                alu_op <= "0101";
444
                                jump <= "00";
445
                                branch <= "011";
446
                                br_link <= '0';
447
                                reg_to_mem <= '0';
448
                                mem_to_reg <= '0';
449
                                signed_imm <= '1';
450
                                mem_write <= "00";
451
                                mem_read <= "00";
452
                                signed_rd <= '0';
453
                                shift <= '0';
454
                        when "000111" =>                                        -- BGTZ
455
                                reg_dst <= '0';
456
                                reg_write <= '0';
457
                                alu_src <= '0';
458
                                alu_op <= "0101";
459
                                jump <= "00";
460
                                branch <= "100";
461
                                br_link <= '0';
462
                                reg_to_mem <= '0';
463
                                mem_to_reg <= '0';
464
                                signed_imm <= '1';
465
                                mem_write <= "00";
466
                                mem_read <= "00";
467
                                signed_rd <= '0';
468
                                shift <= '0';
469
--                      when "001000" =>                                        -- ADDI
470
                        when "001001" =>                                        -- ADDIU
471
                                reg_dst <= '0';
472
                                reg_write <= '1';
473
                                alu_src <= '1';
474
                                alu_op <= "0100";
475
                                jump <= "00";
476
                                branch <= "000";
477
                                br_link <= '0';
478
                                reg_to_mem <= '0';
479
                                mem_to_reg <= '0';
480
                                signed_imm <= '1';
481
                                mem_write <= "00";
482
                                mem_read <= "00";
483
                                signed_rd <= '0';
484
                                shift <= '0';
485
                        when "001010" =>                                        -- SLTI
486
                                reg_dst <= '0';
487
                                reg_write <= '1';
488
                                alu_src <= '1';
489
                                alu_op <= "0111";
490
                                jump <= "00";
491
                                branch <= "000";
492
                                br_link <= '0';
493
                                reg_to_mem <= '0';
494
                                mem_to_reg <= '0';
495
                                signed_imm <= '1';
496
                                mem_write <= "00";
497
                                mem_read <= "00";
498
                                signed_rd <= '0';
499
                                shift <= '0';
500
                        when "001011" =>                                        -- SLTIU
501
                                reg_dst <= '0';
502
                                reg_write <= '1';
503
                                alu_src <= '1';
504
                                alu_op <= "1000";
505
                                jump <= "00";
506
                                branch <= "000";
507
                                br_link <= '0';
508
                                reg_to_mem <= '0';
509
                                mem_to_reg <= '0';
510
                                signed_imm <= '0';
511
                                mem_write <= "00";
512
                                mem_read <= "00";
513
                                signed_rd <= '0';
514
                                shift <= '0';
515
                        when "001100" =>                                        -- ANDI
516
                                reg_dst <= '0';
517
                                reg_write <= '1';
518
                                alu_src <= '1';
519
                                alu_op <= "0000";
520
                                jump <= "00";
521
                                branch <= "000";
522
                                br_link <= '0';
523
                                reg_to_mem <= '0';
524
                                mem_to_reg <= '0';
525
                                signed_imm <= '0';
526
                                mem_write <= "00";
527
                                mem_read <= "00";
528
                                signed_rd <= '0';
529
                                shift <= '0';
530
                        when "001101" =>                                        -- ORI
531
                                reg_dst <= '0';
532
                                reg_write <= '1';
533
                                alu_src <= '1';
534
                                alu_op <= "0001";
535
                                jump <= "00";
536
                                branch <= "000";
537
                                br_link <= '0';
538
                                reg_to_mem <= '0';
539
                                mem_to_reg <= '0';
540
                                signed_imm <= '0';
541
                                mem_write <= "00";
542
                                mem_read <= "00";
543
                                signed_rd <= '0';
544
                                shift <= '0';
545
                        when "001110" =>                                        -- XORI
546
                                reg_dst <= '0';
547
                                reg_write <= '1';
548
                                alu_src <= '1';
549
                                alu_op <= "0010";
550
                                jump <= "00";
551
                                branch <= "000";
552
                                br_link <= '0';
553
                                reg_to_mem <= '0';
554
                                mem_to_reg <= '0';
555
                                signed_imm <= '0';
556
                                mem_write <= "00";
557
                                mem_read <= "00";
558
                                signed_rd <= '0';
559
                                shift <= '0';
560
                        when "001111" =>                                        -- LUI
561
                                reg_dst <= '0';
562
                                reg_write <= '1';
563
                                alu_src <= '1';
564
                                alu_op <= "0110";
565
                                jump <= "00";
566
                                branch <= "000";
567
                                br_link <= '0';
568
                                reg_to_mem <= '0';
569
                                mem_to_reg <= '0';
570
                                signed_imm <= '0';
571
                                mem_write <= "00";
572
                                mem_read <= "00";
573
                                signed_rd <= '0';
574
                                shift <= '0';
575
--                      when "010000" =>                                        -- COP0
576
--                      when "010001" =>                                        -- COP1
577
--                      when "010010" =>                                        -- COP2
578
--                      when "010011" =>                                        -- COP3
579
                        when "100000" =>                                        -- LB
580
                                reg_dst <= '0';
581
                                reg_write <= '0';
582
                                alu_src <= '1';
583
                                alu_op <= "0100";
584
                                jump <= "00";
585
                                branch <= "000";
586
                                br_link <= '0';
587
                                reg_to_mem <= '0';
588
                                mem_to_reg <= '1';
589
                                signed_imm <= '1';
590
                                mem_write <= "00";
591
                                mem_read <= "01";
592
                                signed_rd <= '1';
593
                                shift <= '0';
594
                        when "100001" =>                                        -- LH
595
                                reg_dst <= '0';
596
                                reg_write <= '0';
597
                                alu_src <= '1';
598
                                alu_op <= "0100";
599
                                jump <= "00";
600
                                branch <= "000";
601
                                br_link <= '0';
602
                                reg_to_mem <= '0';
603
                                mem_to_reg <= '1';
604
                                signed_imm <= '1';
605
                                mem_write <= "00";
606
                                mem_read <= "10";
607
                                signed_rd <= '1';
608
                                shift <= '0';
609
--                      when "100010" =>                                        -- LWL
610
                        when "100011" =>                                        -- LW
611
                                reg_dst <= '0';
612
                                reg_write <= '0';
613
                                alu_src <= '1';
614
                                alu_op <= "0100";
615
                                jump <= "00";
616
                                branch <= "000";
617
                                br_link <= '0';
618
                                reg_to_mem <= '0';
619
                                mem_to_reg <= '1';
620
                                signed_imm <= '1';
621
                                mem_write <= "00";
622
                                mem_read <= "11";
623
                                signed_rd <= '0';
624
                                shift <= '0';
625
                        when "100100" =>                                        -- LBU
626
                                reg_dst <= '0';
627
                                reg_write <= '0';
628
                                alu_src <= '1';
629
                                alu_op <= "0100";
630
                                jump <= "00";
631
                                branch <= "000";
632
                                br_link <= '0';
633
                                reg_to_mem <= '0';
634
                                mem_to_reg <= '1';
635
                                signed_imm <= '1';
636
                                mem_write <= "00";
637
                                mem_read <= "01";
638
                                signed_rd <= '0';
639
                                shift <= '0';
640
                        when "100101" =>                                        -- LHU
641
                                reg_dst <= '0';
642
                                reg_write <= '0';
643
                                alu_src <= '1';
644
                                alu_op <= "0100";
645
                                jump <= "00";
646
                                branch <= "000";
647
                                br_link <= '0';
648
                                reg_to_mem <= '0';
649
                                mem_to_reg <= '1';
650
                                signed_imm <= '1';
651
                                mem_write <= "00";
652
                                mem_read <= "10";
653
                                signed_rd <= '0';
654
                                shift <= '0';
655
--                      when "100110" =>                                        -- LWR
656
                        when "101000" =>                                        -- SB
657
                                reg_dst <= '0';
658
                                reg_write <= '0';
659
                                alu_src <= '1';
660
                                alu_op <= "0100";
661
                                jump <= "00";
662
                                branch <= "000";
663
                                br_link <= '0';
664
                                reg_to_mem <= '1';
665
                                mem_to_reg <= '0';
666
                                signed_imm <= '1';
667
                                mem_write <= "01";
668
                                mem_read <= "00";
669
                                signed_rd <= '0';
670
                                shift <= '0';
671
                        when "101001" =>                                        -- SH
672
                                reg_dst <= '0';
673
                                reg_write <= '0';
674
                                alu_src <= '1';
675
                                alu_op <= "0100";
676
                                jump <= "00";
677
                                branch <= "000";
678
                                br_link <= '0';
679
                                reg_to_mem <= '1';
680
                                mem_to_reg <= '0';
681
                                signed_imm <= '1';
682
                                mem_write <= "10";
683
                                mem_read <= "00";
684
                                signed_rd <= '0';
685
                                shift <= '0';
686
--                      when "101010" =>                                        -- SWL
687
                        when "101011" =>                                        -- SW
688
                                reg_dst <= '0';
689
                                reg_write <= '0';
690
                                alu_src <= '1';
691
                                alu_op <= "0100";
692
                                jump <= "00";
693
                                branch <= "000";
694
                                br_link <= '0';
695
                                reg_to_mem <= '1';
696
                                mem_to_reg <= '0';
697
                                signed_imm <= '1';
698
                                mem_write <= "11";
699
                                mem_read <= "00";
700
                                signed_rd <= '0';
701
                                shift <= '0';
702
--                      when "101110" =>                                        -- SWR
703
--                      when "110000" =>                                        -- LWC0
704
--                      when "110001" =>                                        -- LWC1
705
--                      when "110010" =>                                        -- LWC2
706
--                      when "110011" =>                                        -- LWC3
707
--                      when "111000" =>                                        -- SWC0
708
--                      when "111001" =>                                        -- SWC1
709
--                      when "111010" =>                                        -- SWC2
710
--                      when "111011" =>                                        -- SWC3
711
                        when others =>                                          -- invalid instruction, generate a NOP
712
                                reg_dst <= '0';
713
                                reg_write <= '0';
714
                                alu_src <= '0';
715
                                alu_op <= "0100";
716
                                jump <= "00";
717
                                branch <= "000";
718
                                br_link <= '0';
719
                                reg_to_mem <= '0';
720
                                mem_to_reg <= '0';
721
                                signed_imm <= '0';
722
                                mem_write <= "00";
723
                                mem_read <= "00";
724
                                signed_rd <= '0';
725
                                shift <= '0';
726
                end case;
727
        end process;
728
 
729
end arch_control;
730
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.