OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [src_processor/] [mor1kx-3.1/] [rtl/] [verilog/] [mor1kx-defines.v] - Blame information for rev 38

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 alirezamon
/* ****************************************************************************
2
  This Source Code Form is subject to the terms of the
3
  Open Hardware Description License, v. 1.0. If a copy
4
  of the OHDL was not distributed with this file, You
5
  can obtain one at http://juliusbaxter.net/ohdl/ohdl.txt
6
 
7
  Description: mor1kx defines
8
 
9
  Copyright (C) 2012 Authors
10
 
11
  Author(s): Julius Baxter <juliusbaxter@gmail.com>
12
 
13
***************************************************************************** */
14
 
15
/* ORBIS32 opcodes - top 6 bits */
16
 
17
`define OR1K_INSN_WIDTH 32
18
 
19
`define OR1K_RD_SELECT 25:21
20
`define OR1K_RA_SELECT 20:16
21
`define OR1K_RB_SELECT 15:11
22
 
23
`define OR1K_IMM_WIDTH 16
24
`define OR1K_IMM_SELECT 15:0
25
 
26
`define OR1K_ALU_OPC_WIDTH 4
27
`define OR1K_ALU_OPC_SELECT 3:0
28
 
29
`define OR1K_ALU_OPC_ADD   `OR1K_ALU_OPC_WIDTH'h0
30
`define OR1K_ALU_OPC_ADDC  `OR1K_ALU_OPC_WIDTH'h1
31
`define OR1K_ALU_OPC_SUB   `OR1K_ALU_OPC_WIDTH'h2
32
`define OR1K_ALU_OPC_AND   `OR1K_ALU_OPC_WIDTH'h3
33
`define OR1K_ALU_OPC_OR    `OR1K_ALU_OPC_WIDTH'h4
34
`define OR1K_ALU_OPC_XOR   `OR1K_ALU_OPC_WIDTH'h5
35
`define OR1K_ALU_OPC_MUL   `OR1K_ALU_OPC_WIDTH'h6
36
`define OR1K_ALU_OPC_RESV  `OR1K_ALU_OPC_WIDTH'h7
37
`define OR1K_ALU_OPC_SHRT  `OR1K_ALU_OPC_WIDTH'h8
38
`define OR1K_ALU_OPC_DIV   `OR1K_ALU_OPC_WIDTH'h9
39
`define OR1K_ALU_OPC_DIVU  `OR1K_ALU_OPC_WIDTH'ha
40
`define OR1K_ALU_OPC_MULU  `OR1K_ALU_OPC_WIDTH'hb
41
`define OR1K_ALU_OPC_EXTBH `OR1K_ALU_OPC_WIDTH'hc
42
`define OR1K_ALU_OPC_EXTW  `OR1K_ALU_OPC_WIDTH'hd
43
`define OR1K_ALU_OPC_CMOV  `OR1K_ALU_OPC_WIDTH'he
44
`define OR1K_ALU_OPC_FFL1  `OR1K_ALU_OPC_WIDTH'hf
45
 
46
`define OR1K_ALU_OPC_SECONDARY_WIDTH 3
47
`define OR1K_ALU_OPC_SECONDARY_SELECT 8:6
48
 
49
`define OR1K_ALU_OPC_SECONDARY_SHRT_SLL `OR1K_ALU_OPC_SECONDARY_WIDTH'h0
50
`define OR1K_ALU_OPC_SECONDARY_SHRT_SRL `OR1K_ALU_OPC_SECONDARY_WIDTH'h1
51
`define OR1K_ALU_OPC_SECONDARY_SHRT_SRA `OR1K_ALU_OPC_SECONDARY_WIDTH'h2
52
`define OR1K_ALU_OPC_SECONDARY_SHRT_ROR `OR1K_ALU_OPC_SECONDARY_WIDTH'h3
53
 
54
`define OR1K_COMP_OPC_WIDTH 4
55
`define OR1K_COMP_OPC_SELECT 24:21
56
`define OR1K_COMP_OPC_EQ  `OR1K_COMP_OPC_WIDTH'h0
57
`define OR1K_COMP_OPC_NE  `OR1K_COMP_OPC_WIDTH'h1
58
`define OR1K_COMP_OPC_GTU `OR1K_COMP_OPC_WIDTH'h2
59
`define OR1K_COMP_OPC_GEU `OR1K_COMP_OPC_WIDTH'h3
60
`define OR1K_COMP_OPC_LTU `OR1K_COMP_OPC_WIDTH'h4
61
`define OR1K_COMP_OPC_LEU `OR1K_COMP_OPC_WIDTH'h5
62
`define OR1K_COMP_OPC_GTS `OR1K_COMP_OPC_WIDTH'ha
63
`define OR1K_COMP_OPC_GES `OR1K_COMP_OPC_WIDTH'hb
64
`define OR1K_COMP_OPC_LTS `OR1K_COMP_OPC_WIDTH'hc
65
`define OR1K_COMP_OPC_LES `OR1K_COMP_OPC_WIDTH'hd
66
 
67
`define OR1K_JUMPBRANCH_IMMEDIATE_SELECT 25:0
68
 
69
`define OR1K_SYSTRAPSYNC_OPC_WIDTH 3
70
`define OR1K_SYSTRAPSYNC_OPC_SELECT 25:23
71
`define OR1K_SYSTRAPSYNC_OPC_SYSCALL `OR1K_SYSTRAPSYNC_OPC_WIDTH'h0
72
`define OR1K_SYSTRAPSYNC_OPC_TRAP `OR1K_SYSTRAPSYNC_OPC_WIDTH'h2
73
`define OR1K_SYSTRAPSYNC_OPC_MSYNC `OR1K_SYSTRAPSYNC_OPC_WIDTH'h4
74
`define OR1K_SYSTRAPSYNC_OPC_PSYNC `OR1K_SYSTRAPSYNC_OPC_WIDTH'h5
75
`define OR1K_SYSTRAPSYNC_OPC_CSYNC `OR1K_SYSTRAPSYNC_OPC_WIDTH'h6
76
 
77
`define OR1K_OPCODE_WIDTH 6
78
`define OR1K_OPCODE_SELECT 31:26
79
 
80
`define OR1K_OPCODE_J       {2'b00, 4'h0}
81
`define OR1K_OPCODE_JAL     {2'b00, 4'h1}
82
`define OR1K_OPCODE_BNF     {2'b00, 4'h3}
83
`define OR1K_OPCODE_BF      {2'b00, 4'h4}
84
`define OR1K_OPCODE_NOP     {2'b00, 4'h5}
85
`define OR1K_OPCODE_MOVHI   {2'b00, 4'h6}
86
`define OR1K_OPCODE_MACRC   {2'b00, 4'h6}
87
 
88
/*
89
`define OR1K_OPCODE_SYS     {2'b00, 4'h8}
90
`define OR1K_OPCODE_TRAP    {2'b00, 4'h8}
91
`define OR1K_OPCODE_MSYNC   {2'b00, 4'h8}
92
`define OR1K_OPCODE_PSYNC   {2'b00, 4'h8}
93
`define OR1K_OPCODE_CSYNC   {2'b00, 4'h8}
94
 */
95
`define OR1K_OPCODE_SYSTRAPSYNC {2'b00, 4'h8}
96
`define OR1K_OPCODE_RFE     {2'b00, 4'h9}
97
 
98
`define OR1K_OPCODE_JR      {2'b01, 4'h1}
99
`define OR1K_OPCODE_JALR    {2'b01, 4'h2}
100
`define OR1K_OPCODE_MACI    {2'b01, 4'h3}
101
`define OR1K_OPCODE_LWA     {2'b01, 4'hB}
102
`define OR1K_OPCODE_CUST1   {2'b01, 4'hC}
103
`define OR1K_OPCODE_CUST2   {2'b01, 4'hD}
104
`define OR1K_OPCODE_CUST3   {2'b01, 4'hE}
105
`define OR1K_OPCODE_CUST4   {2'b01, 4'hF}
106
 
107
`define OR1K_OPCODE_LD      {2'b10, 4'h0}
108
`define OR1K_OPCODE_LWZ     {2'b10, 4'h1}
109
`define OR1K_OPCODE_LWS     {2'b10, 4'h2}
110
`define OR1K_OPCODE_LBZ     {2'b10, 4'h3}
111
`define OR1K_OPCODE_LBS     {2'b10, 4'h4}
112
`define OR1K_OPCODE_LHZ     {2'b10, 4'h5}
113
`define OR1K_OPCODE_LHS     {2'b10, 4'h6}
114
 
115
`define OR1K_OPCODE_ADDI    {2'b10, 4'h7}
116
`define OR1K_OPCODE_ADDIC   {2'b10, 4'h8}
117
`define OR1K_OPCODE_ANDI    {2'b10, 4'h9}
118
`define OR1K_OPCODE_ORI     {2'b10, 4'hA}
119
`define OR1K_OPCODE_XORI    {2'b10, 4'hB}
120
`define OR1K_OPCODE_MULI    {2'b10, 4'hC}
121
`define OR1K_OPCODE_MFSPR   {2'b10, 4'hD}
122
/*
123
`define OR1K_OPCODE_SLLI    {2'b10, 4'hE}
124
`define OR1K_OPCODE_SRLI    {2'b10, 4'hE}
125
`define OR1K_OPCODE_SRAI    {2'b10, 4'hE}
126
`define OR1K_OPCODE_RORI    {2'b10, 4'hE}
127
*/
128
`define OR1K_OPCODE_SHRTI    {2'b10, 4'hE}
129
 
130
/*
131
`define OR1K_OPCODE_SFEQI   {2'b10, 4'hF}
132
`define OR1K_OPCODE_SFNEI   {2'b10, 4'hF}
133
`define OR1K_OPCODE_SFGTUI  {2'b10, 4'hF}
134
`define OR1K_OPCODE_SFGEUI  {2'b10, 4'hF}
135
`define OR1K_OPCODE_SFLTUI  {2'b10, 4'hF}
136
`define OR1K_OPCODE_SFLEUI  {2'b10, 4'hF}
137
`define OR1K_OPCODE_SFGTSI  {2'b10, 4'hF}
138
`define OR1K_OPCODE_SFGESI  {2'b10, 4'hF}
139
`define OR1K_OPCODE_SFLTSI  {2'b10, 4'hF}
140
`define OR1K_OPCODE_SFLESI  {2'b10, 4'hF}
141
*/
142
`define OR1K_OPCODE_SFIMM   {2'b10, 4'hF}
143
 
144
`define OR1K_OPCODE_MTSPR   {2'b11, 4'h0}
145
`define OR1K_OPCODE_MAC     {2'b11, 4'h1}
146
`define OR1K_OPCODE_MSB     {2'b11, 4'h1}
147
 
148
`define OR1K_OPCODE_SWA     {2'b11, 4'h3}
149
`define OR1K_OPCODE_SD      {2'b11, 4'h4}
150
`define OR1K_OPCODE_SW      {2'b11, 4'h5}
151
`define OR1K_OPCODE_SB      {2'b11, 4'h6}
152
`define OR1K_OPCODE_SH      {2'b11, 4'h7}
153
 
154
/*
155
`define OR1K_OPCODE_ADD     {2'b11, 4'h8}
156
`define OR1K_OPCODE_ADDC    {2'b11, 4'h8}
157
`define OR1K_OPCODE_SUB     {2'b11, 4'h8}
158
`define OR1K_OPCODE_AND     {2'b11, 4'h8}
159
`define OR1K_OPCODE_OR      {2'b11, 4'h8}
160
`define OR1K_OPCODE_XOR     {2'b11, 4'h8}
161
`define OR1K_OPCODE_MUL     {2'b11, 4'h8}
162
 
163
`define OR1K_OPCODE_SLL     {2'b11, 4'h8}
164
`define OR1K_OPCODE_SRL     {2'b11, 4'h8}
165
`define OR1K_OPCODE_SRA     {2'b11, 4'h8}
166
`define OR1K_OPCODE_ROR     {2'b11, 4'h8}
167
`define OR1K_OPCODE_DIV     {2'b11, 4'h8}
168
`define OR1K_OPCODE_DIVU    {2'b11, 4'h8}
169
`define OR1K_OPCODE_MULU    {2'b11, 4'h8}
170
`define OR1K_OPCODE_EXTBS   {2'b11, 4'h8}
171
`define OR1K_OPCODE_EXTHS   {2'b11, 4'h8}
172
`define OR1K_OPCODE_EXTWS   {2'b11, 4'h8}
173
`define OR1K_OPCODE_EXTBZ   {2'b11, 4'h8}
174
`define OR1K_OPCODE_EXTHZ   {2'b11, 4'h8}
175
`define OR1K_OPCODE_EXTWZ   {2'b11, 4'h8}
176
`define OR1K_OPCODE_CMOV    {2'b11, 4'h8}
177
`define OR1K_OPCODE_FF1     {2'b11, 4'h8}
178
`define OR1K_OPCODE_FL1     {2'b11, 4'h8}
179
*/
180
`define OR1K_OPCODE_ALU     {2'b11, 4'h8}
181
 
182
/*
183
`define OR1K_OPCODE_SFEQ    {2'b11, 4'h9}
184
`define OR1K_OPCODE_SFNE    {2'b11, 4'h9}
185
`define OR1K_OPCODE_SFGTU   {2'b11, 4'h9}
186
`define OR1K_OPCODE_SFGEU   {2'b11, 4'h9}
187
`define OR1K_OPCODE_SFLTU   {2'b11, 4'h9}
188
`define OR1K_OPCODE_SFLEU   {2'b11, 4'h9}
189
`define OR1K_OPCODE_SFGTS   {2'b11, 4'h9}
190
`define OR1K_OPCODE_SFGES   {2'b11, 4'h9}
191
`define OR1K_OPCODE_SFLTS   {2'b11, 4'h9}
192
`define OR1K_OPCODE_SFLES   {2'b11, 4'h9}
193
*/
194
`define OR1K_OPCODE_SF      {2'b11, 4'h9}
195
 
196
`define OR1K_OPCODE_CUST5   {2'b11, 4'hC}
197
`define OR1K_OPCODE_CUST6   {2'b11, 4'hD}
198
`define OR1K_OPCODE_CUST7   {2'b11, 4'hE}
199
`define OR1K_OPCODE_CUST8   {2'b11, 4'hF}
200
 
201
//
202
// OR1K SPR defines
203
//
204
`include "mor1kx-sprs.v"
205
 
206
/* Exception addresses */
207
`define OR1K_RESET_VECTOR    5'h01
208
`define OR1K_BERR_VECTOR     5'h02
209
`define OR1K_DPF_VECTOR      5'h03
210
`define OR1K_IPF_VECTOR      5'h04
211
`define OR1K_TT_VECTOR       5'h05
212
`define OR1K_ALIGN_VECTOR    5'h06
213
`define OR1K_ILLEGAL_VECTOR  5'h07
214
`define OR1K_INT_VECTOR      5'h08
215
`define OR1K_DTLB_VECTOR     5'h09
216
`define OR1K_ITLB_VECTOR     5'h0a
217
`define OR1K_RANGE_VECTOR    5'h0b
218
`define OR1K_SYSCALL_VECTOR  5'h0c
219
`define OR1K_FP_VECTOR       5'h0d
220
`define OR1K_TRAP_VECTOR     5'h0e
221
 
222
// Whether we'll allow things using AYNC reset to have it:
223
//`define OR_ASYNC_RST or posedge rst
224
`define OR_ASYNC_RST
225
 
226
// Implementation version defines
227
`define MOR1KX_CPUID 8'h01
228
// mor1kx breaks up the VR2 version register to be 3 8-bit fields
229
// MSB is major version, middle byte is minor version number
230
// and final byte is the pipeline identifier.
231
`define MOR1KX_VERSION_MAJOR 8'd3
232
`define MOR1KX_VERSION_MINOR 8'd1
233
 
234
// mor1kx implementation-specific register definitions
235
`define MOR1KX_PIPEID_CAPPUCCINO 8'd1
236
`define MOR1KX_PIPEID_ESPRESSO   8'd2
237
`define MOR1KX_PIPEID_PRONTOESPRESSO 8'd3

powered by: WebSVN 2.1.0

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