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 42

Details | Compare with Previous | View Log

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