OpenCores
URL https://opencores.org/ocsvn/hive/hive/trunk

Subversion Repositories hive

[/] [hive/] [trunk/] [v04.05/] [op_encode.h] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 4 ericw
`include "lg_sel_encode.h"
2
`include "tst_encode.h"
3
 
4
// `ifndef _op_encode_h_
5
// `define _op_encode_h_
6
 
7
// misc - 16 x 16 x 16 = 4096 codes
8
localparam      [MEM_DATA_W-1:0] op_nop          = { 4'h0, 4'h0, 4'hx, 4'hx };   // do nothing (no pops either)
9
localparam      [MEM_DATA_W-1:0] op_pop          = { 4'h0, 4'h1, 4'hx, 4'hx };   // pop [7:0] none/one/some/all stacks
10
localparam      [MEM_DATA_W-1:0] op_pgc          = { 4'h0, 4'h4, 4'hx, 4'hx };   // A=PC  read PC (unsigned)
11
localparam      [MEM_DATA_W-1:0] op_lit_s                = { 4'h0, 4'h8, 4'hx, 4'hx };   // A=mem(PC)  literal data signed
12
localparam      [MEM_DATA_W-1:0] op_lit_h                = { 4'h0, 4'h9, 4'hx, 4'hx };   // A={mem(PC),A[lo]}  literal data high
13
localparam      [MEM_DATA_W-1:0] op_lit_u                = { 4'h0, 4'ha, 4'hx, 4'hx };   // A=mem(PC)  literal data unsigned
14
localparam      [MEM_DATA_W-1:0] op_reg_rs       = { 4'h0, 4'hc, 4'hx, 4'hx };   // A=reg(B)  register read signed
15
localparam      [MEM_DATA_W-1:0] op_reg_rh       = { 4'h0, 4'hd, 4'hx, 4'hx };   // A={reg(B),A[lo]}  register read high
16
localparam      [MEM_DATA_W-1:0] op_reg_w                = { 4'h0, 4'he, 4'hx, 4'hx };   // reg(B)=A[lo]  register write
17
localparam      [MEM_DATA_W-1:0] op_reg_wh       = { 4'h0, 4'hf, 4'hx, 4'hx };   // reg(B)=A[hi]  register write high
18
// logical & other - 16 x 16 x 16 = 4096 codes
19
localparam      [MEM_DATA_W-1:0] op_cpy          = { 4'h1, `lg_cpy, 4'hx, 4'hx };        // A=B  copy
20
localparam      [MEM_DATA_W-1:0]        op_nsg          = { 4'h1, `lg_nsg, 4'hx, 4'hx };        // A[MSB]=~B[MSB]  invert sign
21
localparam      [MEM_DATA_W-1:0] op_not          = { 4'h1, `lg_not, 4'hx, 4'hx };        // A=~B  logical NOT
22
localparam      [MEM_DATA_W-1:0]        op_flp          = { 4'h1, `lg_flp, 4'hx, 4'hx };        // A=flip(B)  flip bits end for end
23
localparam      [MEM_DATA_W-1:0] op_lzc          = { 4'h1, `lg_lzc, 4'hx, 4'hx };        // A=lzc(B)  leading zero count
24
localparam      [MEM_DATA_W-1:0]        op_bra          = { 4'h1, `lg_bra, 4'hx, 4'hx };        // A=&B  logical AND bit reduction
25
localparam      [MEM_DATA_W-1:0] op_bro          = { 4'h1, `lg_bro, 4'hx, 4'hx };        // A=|B  logical OR bit reduction
26
localparam      [MEM_DATA_W-1:0]        op_brx          = { 4'h1, `lg_brx, 4'hx, 4'hx };        // A=^B  logical XOR bit reduction
27
localparam      [MEM_DATA_W-1:0] op_and          = { 4'h1, `lg_and, 4'hx, 4'hx };        // A=A&B  logical AND
28
localparam      [MEM_DATA_W-1:0]        op_orr          = { 4'h1, `lg_orr, 4'hx, 4'hx };        // A=A|B  logical OR
29
localparam      [MEM_DATA_W-1:0] op_xor          = { 4'h1, `lg_xor, 4'hx, 4'hx };        // A=A^B  logical XOR
30
// arithmetic - 16 x 16 x 16 = 4096 codes
31
localparam      [MEM_DATA_W-1:0]        op_add          = { 4'h2, 4'h0, 4'hx, 4'hx };   // A=A+B  add
32
localparam      [MEM_DATA_W-1:0]        op_add_xs       = { 4'h2, 4'h2, 4'hx, 4'hx };   // A=A+B  add extended signed
33
localparam      [MEM_DATA_W-1:0]        op_add_xu       = { 4'h2, 4'h3, 4'hx, 4'hx };   // A=A+B  add extended unsigned
34
localparam      [MEM_DATA_W-1:0]        op_sub          = { 4'h2, 4'h4, 4'hx, 4'hx };   // A=A-B  subtract
35
localparam      [MEM_DATA_W-1:0]        op_sub_xs       = { 4'h2, 4'h6, 4'hx, 4'hx };   // A=A-B  subtract extended signed
36
localparam      [MEM_DATA_W-1:0]        op_sub_xu       = { 4'h2, 4'h7, 4'hx, 4'hx };   // A=A-B  subtract extended unsigned
37
localparam      [MEM_DATA_W-1:0]        op_mul          = { 4'h2, 4'h8, 4'hx, 4'hx };   // A=A*B  multiply
38
localparam      [MEM_DATA_W-1:0]        op_mul_xs       = { 4'h2, 4'ha, 4'hx, 4'hx };   // A=A*B  multiply extended signed
39
localparam      [MEM_DATA_W-1:0]        op_mul_xu       = { 4'h2, 4'hb, 4'hx, 4'hx };   // A=A*B  multiply extended unsigned
40
localparam      [MEM_DATA_W-1:0]        op_shl_s                = { 4'h2, 4'hc, 4'hx, 4'hx };   // A=A<<<B  shift left A signed
41
localparam      [MEM_DATA_W-1:0]        op_shl_u                = { 4'h2, 4'hd, 4'hx, 4'hx };   // A=A<<B  shift left A unsigned
42
localparam      [MEM_DATA_W-1:0]        op_pow          = { 4'h2, 4'he, 4'hx, 4'hx };   // A=1<<B  power of 2
43
// branching - 16 x 16 x 16 = 4096 codes
44
localparam      [MEM_DATA_W-1:0]        op_jmp_z                = { 4'h3, 2'b00, `z,   4'hx, 4'hx };    // PC=(A?0)?PC+B  jump zero conditional
45
localparam      [MEM_DATA_W-1:0]        op_jmp_nz       = { 4'h3, 2'b00, `nz,  4'hx, 4'hx };
46
localparam      [MEM_DATA_W-1:0]        op_jmp_lz       = { 4'h3, 2'b00, `lz,  4'hx, 4'hx };
47
localparam      [MEM_DATA_W-1:0]        op_jmp_nlz      = { 4'h3, 2'b00, `nlz, 4'hx, 4'hx };
48
localparam      [MEM_DATA_W-1:0]        op_jmp          = { 4'h3, 4'hc, 4'hx, 4'hx };   // PC=PC+B  jump unconditional
49
localparam      [MEM_DATA_W-1:0]        op_gto          = { 4'h3, 4'hd, 4'hx, 4'hx };   // PC=B  go to unconditional
50
localparam      [MEM_DATA_W-1:0]        op_gsb          = { 4'h3, 4'he, 4'hx, 4'hx };   // PC=B,A=PC  subroutine call unconditional
51
// immediate memory access - 4 x 16 x 16 x 16 = 16384 codes
52
localparam      [MEM_DATA_W-1:0]        op_mem_irs      = { 4'h4, 4'hx, 4'hx, 4'hx };   // A=mem(B+I)  memory read signed
53
localparam      [MEM_DATA_W-1:0]        op_mem_irh      = { 4'h5, 4'hx, 4'hx, 4'hx };   // A={mem(B+I),A[lo]}  memory read high
54
localparam      [MEM_DATA_W-1:0]        op_mem_iw       = { 4'h6, 4'hx, 4'hx, 4'hx };   // mem(B+I)=A[lo]  memory write
55
localparam      [MEM_DATA_W-1:0]        op_mem_iwh      = { 4'h7, 4'hx, 4'hx, 4'hx };   // mem(B+I)=A[hi]  memory write high
56
// immediate conditional (A?B) jumps - 6 x 16 x 16 x 16 = 24576 codes
57
localparam      [MEM_DATA_W-1:0]        op_jmp_ie       = { `e,   4'hx, 4'hx, 4'hx };   // PC=(A?B)?PC+I  jump immediate conditional
58
localparam      [MEM_DATA_W-1:0] op_jmp_ine      = { `ne,  4'hx, 4'hx, 4'hx };
59
localparam      [MEM_DATA_W-1:0]        op_jmp_ils      = { `ls,  4'hx, 4'hx, 4'hx };
60
localparam      [MEM_DATA_W-1:0] op_jmp_inls     = { `nls, 4'hx, 4'hx, 4'hx };
61
localparam      [MEM_DATA_W-1:0]        op_jmp_ilu      = { `lu,  4'hx, 4'hx, 4'hx };
62
localparam      [MEM_DATA_W-1:0] op_jmp_inlu     = { `nlu, 4'hx, 4'hx, 4'hx };
63
// immediate conditional (A?0) jumps - 4 x 64 x 16 = 4096 codes
64
localparam      [MEM_DATA_W-1:0]        op_jmp_iz       = { 4'he, `z,   6'bxxxxxx, 4'hx };      // PC=(A?0)?PC+I  jump immediate conditional
65
localparam      [MEM_DATA_W-1:0] op_jmp_inz      = { 4'he, `nz,  6'bxxxxxx, 4'hx };
66
localparam      [MEM_DATA_W-1:0]        op_jmp_ilz      = { 4'he, `lz,  6'bxxxxxx, 4'hx };
67
localparam      [MEM_DATA_W-1:0] op_jmp_inlz     = { 4'he, `nlz, 6'bxxxxxx, 4'hx };
68
// immediate data - 1 x 64 x 16 = 1024 codes
69
localparam      [MEM_DATA_W-1:0]        op_dat_is       = { 4'hf, 2'b00, 6'bxxxxxx, 4'hx };     // A=I  data immediate signed
70
// immediate add - 1 x 64 x 16 = 1024 codes
71
localparam      [MEM_DATA_W-1:0]        op_add_is       = { 4'hf, 2'b01, 6'bxxxxxx, 4'hx };     // A=A+I  add immediate signed
72
// immediate shifts - 2 x 64 x 16 = 2048 codes
73
localparam      [MEM_DATA_W-1:0]        op_shl_is       = { 4'hf, 2'b10, 6'bxxxxxx, 4'hx };     // A=A<<<I  shift left A signed
74
localparam      [MEM_DATA_W-1:0]        op_psu_i                = { 4'hf, 2'b11, 6'bxxxxxx, 4'hx };     // A=1<<I  power of 2; A=A<<I  shift A unsigned
75
 
76
// `endif  // _op_encode_h_
77
 

powered by: WebSVN 2.1.0

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