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

Subversion Repositories hive

[/] [hive/] [trunk/] [v01.10/] [op_encode.h] - Blame information for rev 3

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 3 ericw
//
2
`define nn              3'b000
3
`define eq              3'b001
4
`define lt              3'b010
5
`define le              3'b011
6
`define gt              3'b100
7
`define ge              3'b101
8
`define gl              3'b110
9
`define yy              3'b111
10
//
11
localparam      OP_W = 10;
12
//
13
// immediate read - 32 codes
14
localparam      [OP_W-1:0]       op_rd_i         = { 2'b00, `nn, 1'b0, 4'bxxxx };        // mem(B+I[3:0]) => A  read immediate w/ offset (signed)
15
localparam      [OP_W-1:0]      op_rd_ix                = { 2'b00, `nn, 1'b1, 4'bxxxx };        // {mem(B+I[3:0]), A[lo]} => A  read immediate extended w/ offset
16
// immediate conditional jump - 192 codes
17
localparam      [OP_W-1:0]       op_jmp_iez      = { 2'b00, `eq, 5'bxxxxx };     // (A?0) PC+I[4:0] => PC  jump relative immediate conditional
18
localparam      [OP_W-1:0]       op_jmp_ilz      = { 2'b00, `lt, 5'bxxxxx };
19
localparam      [OP_W-1:0]       op_jmp_ilez     = { 2'b00, `le, 5'bxxxxx };
20
localparam      [OP_W-1:0]       op_jmp_igz      = { 2'b00, `gt, 5'bxxxxx };
21
localparam      [OP_W-1:0]       op_jmp_igez     = { 2'b00, `ge, 5'bxxxxx };
22
localparam      [OP_W-1:0]       op_jmp_iglz     = { 2'b00, `gl, 5'bxxxxx };
23
// immediate unconditional jump - 32 codes
24
localparam      [OP_W-1:0]       op_jmp_i                = { 2'b00, `yy, 5'bxxxxx };
25
// immediate write - 32 codes
26
localparam      [OP_W-1:0]       op_wr_i         = { 2'b01, `nn, 1'b0, 4'bxxxx };        // A[lo] => mem(B+I[3:0])  write immediate w/ offset
27
localparam      [OP_W-1:0]      op_wr_ix                = { 2'b01, `nn, 1'b1, 4'bxxxx };        // A[hi] => mem(B+I[3:0])  write immediate extended w/ offset
28
// immediate conditional jump - 192 codes
29
localparam      [OP_W-1:0]       op_jmp_ie       = { 2'b01, `eq, 5'bxxxxx };     // (A?B) PC+I[4:0] => PC  jump relative immediate conditional
30
localparam      [OP_W-1:0]       op_jmp_il       = { 2'b01, `lt, 5'bxxxxx };
31
localparam      [OP_W-1:0]       op_jmp_ile      = { 2'b01, `le, 5'bxxxxx };
32
localparam      [OP_W-1:0]       op_jmp_iug      = { 2'b01, `gt, 5'bxxxxx };
33
localparam      [OP_W-1:0]       op_jmp_iuge     = { 2'b01, `ge, 5'bxxxxx };
34
localparam      [OP_W-1:0]       op_jmp_igl      = { 2'b01, `gl, 5'bxxxxx };
35
// 32 unused codes //
36
// immediate byte - 256 codes
37
localparam      [OP_W-1:0]       op_byt_i                = { 2'b10, 8'bxxxxxxxx };       // I[7:0] => A  byte immediate (signed)
38
// immediate shift - 128 codes
39
localparam      [OP_W-1:0]       op_shl_i                = { 4'hc, 6'bxxxxxx };  // A<<I => A  shift left A (signed) immediate
40
localparam      [OP_W-1:0]       op_shl_iu       = { 4'hd, 6'bxxxxxx };  // 1<<I | A<<I => A  shift left immediate unsigned
41
// immediate add - 64 codes
42
localparam      [OP_W-1:0]       op_add_i                = { 4'he, 6'bxxxxxx };  // A+I[5:0] => A  add immediate (I signed)
43
// conditional jump - 7 of 8 codes
44
localparam      [OP_W-1:0]       op_jmp_ez       = { 4'hf, 3'b000, `eq };        // (A?0) PC+B[lo] => PC  jump relative conditional
45
localparam      [OP_W-1:0]       op_jmp_lz       = { 4'hf, 3'b000, `lt };
46
localparam      [OP_W-1:0]       op_jmp_lez      = { 4'hf, 3'b000, `le };
47
localparam      [OP_W-1:0]       op_jmp_gz       = { 4'hf, 3'b000, `gt };
48
localparam      [OP_W-1:0]       op_jmp_gez      = { 4'hf, 3'b000, `ge };
49
localparam      [OP_W-1:0]       op_jmp_glz      = { 4'hf, 3'b000, `gl };
50
localparam      [OP_W-1:0]       op_jmp          = { 4'hf, 3'b000, `yy };
51
// conditional goto - 7 of 8 codes
52
localparam      [OP_W-1:0]       op_gto_ez       = { 4'hf, 3'b001, `eq };        // (A?0) B[lo] => PC  jump absolute conditional
53
localparam      [OP_W-1:0]       op_gto_lz       = { 4'hf, 3'b001, `lt };
54
localparam      [OP_W-1:0]       op_gto_lez      = { 4'hf, 3'b001, `le };
55
localparam      [OP_W-1:0]       op_gto_gz       = { 4'hf, 3'b001, `gt };
56
localparam      [OP_W-1:0]       op_gto_gez      = { 4'hf, 3'b001, `ge };
57
localparam      [OP_W-1:0]       op_gto_glz      = { 4'hf, 3'b001, `gl };
58
localparam      [OP_W-1:0]       op_gto          = { 4'hf, 3'b001, `yy };
59
// singles - 48 codes
60
localparam      [OP_W-1:0]       op_add          = { 4'hf, 2'b01, 4'h0 };        // A+B => A  add
61
localparam      [OP_W-1:0]      op_add_x                = { 4'hf, 2'b01, 4'h2 };        // A+B => A  add extended (signed)
62
localparam      [OP_W-1:0]       op_add_ux       = { 4'hf, 2'b01, 4'h3 };        // A+B => A  add extended unsigned
63
localparam      [OP_W-1:0]      op_sub          = { 4'hf, 2'b01, 4'h4 };        // A-B => A  subtract
64
localparam      [OP_W-1:0]       op_sub_x                = { 4'hf, 2'b01, 4'h6 };        // A-B => A  subtract extended (signed)
65
localparam      [OP_W-1:0]      op_sub_ux       = { 4'hf, 2'b01, 4'h7 };        // A-B => A  subtract extended unsigned
66
localparam      [OP_W-1:0]       op_mul          = { 4'hf, 2'b01, 4'h8 };        // A*B => A  multiply
67
localparam      [OP_W-1:0]      op_mul_x                = { 4'hf, 2'b01, 4'ha };        // A*B => A  multiply extended (signed)
68
localparam      [OP_W-1:0]       op_mul_ux       = { 4'hf, 2'b01, 4'hb };        // A*B => A  multiply extended unsigned
69
localparam      [OP_W-1:0]      op_shl          = { 4'hf, 2'b01, 4'hc };        // A<<B => A  shift left A (signed)
70
localparam      [OP_W-1:0]       op_shl_u                = { 4'hf, 2'b01, 4'hd };        // 1<<B | A<<B => A  2^B | shift left A unsigned
71
//
72
localparam      [OP_W-1:0]      op_and          = { 4'hf, 2'b10, 4'h0 };        // A&B => A  logical AND
73
localparam      [OP_W-1:0]       op_or                   = { 4'hf, 2'b10, 4'h1 };        // A|B => A  logical OR
74
localparam      [OP_W-1:0]      op_xor          = { 4'hf, 2'b10, 4'h2 };        // A^B => A  logical XOR
75
localparam      [OP_W-1:0]       op_not          = { 4'hf, 2'b10, 4'h3 };        // ~B => A  logical NOT
76
localparam      [OP_W-1:0]      op_and_b                = { 4'hf, 2'b10, 4'h4 };        // &B => A  logical AND bit reduction
77
localparam      [OP_W-1:0]       op_or_b         = { 4'hf, 2'b10, 4'h5 };        // |B => A  logical OR bit reduction
78
localparam      [OP_W-1:0]      op_xor_b                = { 4'hf, 2'b10, 4'h6 };        // ^B => A  logical XOR bit reduction
79
//
80
localparam      [OP_W-1:0]       op_lit          = { 4'hf, 2'b11, 4'h0 };        // mem(PC) => A  literal low (signed)
81
localparam      [OP_W-1:0]      op_lit_u                = { 4'hf, 2'b11, 4'h1 };        // mem(PC) => A  literal low unsigned
82
localparam      [OP_W-1:0]       op_lit_x                = { 4'hf, 2'b11, 4'h2 };        // {mem(PC),A[lo]} => A  literal extended
83
localparam      [OP_W-1:0]      op_cpy          = { 4'hf, 2'b11, 4'h4 };        // B => A  copy
84
localparam      [OP_W-1:0]       op_pc                   = { 4'hf, 2'b11, 4'h8 };        // PC => A  read PC (unsigned)
85
localparam      [OP_W-1:0]      op_gsb          = { 4'hf, 2'b11, 4'h9 };        // B[lo] => PC, PC => A  subroutine call
86
localparam      [OP_W-1:0]       op_cls          = { 4'hf, 2'b11, 4'hc };        // clear stacks
87
localparam      [OP_W-1:0]      op_pop          = { 4'hf, 2'b11, 4'he };        // do nothing (but allow pops)
88
localparam      [OP_W-1:0]       op_nop          = { 4'hf, 2'b11, 4'hf };        // do nothing (no pops either)

powered by: WebSVN 2.1.0

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