include/vta/hw_spec_const.h (73 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #ifndef VTA_HW_SPEC_CONST_H_ #define VTA_HW_SPEC_CONST_H_ /*! Memory bus width */ #define VTA_BUS_WIDTH (1 << VTA_LOG_BUS_WIDTH) /*! log2 of instruction data type width */ #define VTA_LOG_INS_WIDTH 7 /*! Instruction data type width */ #define VTA_INS_WIDTH (1 << VTA_LOG_INS_WIDTH) /*! log2 of micro op data type width */ #define VTA_LOG_UOP_WIDTH 5 /*! Micro Op data type width */ #define VTA_UOP_WIDTH (1 << VTA_LOG_UOP_WIDTH) /*! Weight data type width */ #define VTA_WGT_WIDTH (1 << VTA_LOG_WGT_WIDTH) /*! Input data type width */ #define VTA_INP_WIDTH (1 << VTA_LOG_INP_WIDTH) /*! Output data type width */ #define VTA_OUT_WIDTH (1 << VTA_LOG_OUT_WIDTH) /*! Accumulator data type width */ #define VTA_ACC_WIDTH (1 << VTA_LOG_ACC_WIDTH) /*! Batch size (corresponds to A in (A,B)x(B,C) mat mult)*/ #define VTA_BATCH (1 << VTA_LOG_BATCH) /*! Blocking factor of inner most loop (corresponds to B in (A,B)x(B,C) mat mult) */ #define VTA_BLOCK_IN (1 << VTA_LOG_BLOCK_IN) /*! Blocking factor of the outer loop (corresponds to C in (A,B)x(B,C) mat mult) */ #define VTA_BLOCK_OUT (1 << VTA_LOG_BLOCK_OUT) /*! On-chip micro-op buffer size in B */ #define VTA_UOP_BUFF_SIZE (1 << VTA_LOG_UOP_BUFF_SIZE) /*! On-chip weight buffer size in B */ #define VTA_WGT_BUFF_SIZE (1 << VTA_LOG_WGT_BUFF_SIZE) /*! On-chip activation buffer size in B */ #define VTA_INP_BUFF_SIZE (1 << VTA_LOG_INP_BUFF_SIZE) /*! On-chip accumulator buffer size in B */ #define VTA_ACC_BUFF_SIZE (1 << VTA_LOG_ACC_BUFF_SIZE) /*! Input vector size in bits */ #define VTA_INP_MATRIX_WIDTH (VTA_INP_WIDTH * VTA_BATCH * VTA_BLOCK_IN) /*! Weight vector size in bits */ #define VTA_WGT_MATRIX_WIDTH (VTA_WGT_WIDTH * VTA_BLOCK_OUT * VTA_BLOCK_IN) /*! Accumulator vector size in bits */ #define VTA_ACC_MATRIX_WIDTH (VTA_ACC_WIDTH * VTA_BATCH * VTA_BLOCK_OUT) /*! Output vector size in bits */ #define VTA_OUT_MATRIX_WIDTH (VTA_OUT_WIDTH * VTA_BATCH * VTA_BLOCK_OUT) /*! Ratio between input matrix size and axi width */ #define INP_MAT_AXI_RATIO (VTA_INP_MATRIX_WIDTH / VTA_BUS_WIDTH) /*! Ratio between weight matrix size and axi width */ #define WGT_MAT_AXI_RATIO (VTA_WGT_MATRIX_WIDTH / VTA_BUS_WIDTH) /*! Ratio between accumulator matrix size and axi width */ #define ACC_MAT_AXI_RATIO (VTA_ACC_MATRIX_WIDTH / VTA_BUS_WIDTH) /*! Ratio between output matrix size and axi width */ #define OUT_MAT_AXI_RATIO (VTA_OUT_MATRIX_WIDTH / VTA_BUS_WIDTH) /*! Size of instruction buffer element in B */ #define VTA_INS_ELEM_BYTES (VTA_INS_WIDTH / 8) /*! Size of uop buffer element in B*/ #define VTA_UOP_ELEM_BYTES (VTA_UOP_WIDTH / 8) /*! Size of activation buffer element in B*/ #define VTA_INP_ELEM_BYTES (VTA_INP_MATRIX_WIDTH / 8) /*! Size of weight buffer element in B*/ #define VTA_WGT_ELEM_BYTES (VTA_WGT_MATRIX_WIDTH / 8) /*! Size of accumulator buffer element in B*/ #define VTA_ACC_ELEM_BYTES (VTA_ACC_MATRIX_WIDTH / 8) /*! Size of output buffer element in B*/ #define VTA_OUT_ELEM_BYTES (VTA_OUT_MATRIX_WIDTH / 8) /*! On-chip micro-op buffer depth */ #define VTA_UOP_BUFF_DEPTH (VTA_UOP_BUFF_SIZE / VTA_UOP_ELEM_BYTES) /*! log2 of on-chip micro-op buffer depth */ #define VTA_LOG_UOP_BUFF_DEPTH (VTA_LOG_UOP_BUFF_SIZE - VTA_LOG_UOP_WIDTH + 3) // ! \brief On-chip weight buffer depth #define VTA_WGT_BUFF_DEPTH (VTA_WGT_BUFF_SIZE / VTA_WGT_ELEM_BYTES) /*! log2 of weight micro-op buffer depth */ #define VTA_LOG_WGT_BUFF_DEPTH \ (VTA_LOG_WGT_BUFF_SIZE - VTA_LOG_BLOCK_OUT - VTA_LOG_BLOCK_IN - VTA_LOG_WGT_WIDTH + 3) /*! On-chip activation buffer depth */ #define VTA_INP_BUFF_DEPTH (VTA_INP_BUFF_SIZE / VTA_INP_ELEM_BYTES) /*! log2 of activation micro-op buffer depth */ #define VTA_LOG_INP_BUFF_DEPTH \ (VTA_LOG_INP_BUFF_SIZE - VTA_LOG_BATCH - VTA_LOG_BLOCK_IN - VTA_LOG_INP_WIDTH + 3) /*! On-chip accumulator buffer depth */ #define VTA_ACC_BUFF_DEPTH (VTA_ACC_BUFF_SIZE / VTA_ACC_ELEM_BYTES) /*! log2 of on-chip accumulator buffer depth */ #define VTA_LOG_ACC_BUFF_DEPTH \ (VTA_LOG_ACC_BUFF_SIZE - VTA_LOG_BATCH - VTA_LOG_BLOCK_OUT - VTA_LOG_ACC_WIDTH + 3) /*! Instruction opcode field bitwidth */ #define VTA_OPCODE_BIT_WIDTH 3 /*! ALU opcode field bitwidth */ #define VTA_ALU_OPCODE_BIT_WIDTH 3 /*! Opcode: load encoding */ #define VTA_OPCODE_LOAD 0 /*! Opcode: store encoding */ #define VTA_OPCODE_STORE 1 /*! Opcode: GEMM encoding */ #define VTA_OPCODE_GEMM 2 /*! Opcode: finish encoding */ #define VTA_OPCODE_FINISH 3 /*! Opcode: ALU encoding */ #define VTA_OPCODE_ALU 4 /*! ALU opcode: unary min op */ #define VTA_ALU_OPCODE_MIN 0 /*! ALU opcode: unary max op */ #define VTA_ALU_OPCODE_MAX 1 /*! ALU opcode: binary add op */ #define VTA_ALU_OPCODE_ADD 2 /*! ALU opcode: shift right by immediate op */ #define VTA_ALU_OPCODE_SHR 3 /*! ALU opcode: mul */ #define VTA_ALU_OPCODE_MUL 4 /*! Memory type field bitwidth */ #define VTA_MEMOP_ID_BIT_WIDTH 3 /*! Load/Store Instruction: DRAM address width*/ #define VTA_MEMOP_SRAM_ADDR_BIT_WIDTH 16 /*! Load/Store Instruction: DRAM address width*/ #define VTA_MEMOP_DRAM_ADDR_BIT_WIDTH 32 /*! Load/Store Instruction: transfer size width*/ #define VTA_MEMOP_SIZE_BIT_WIDTH 16 /*! Load/Store Instruction: stride size width*/ #define VTA_MEMOP_STRIDE_BIT_WIDTH 16 /*! Load/Store Instruction: padding width*/ #define VTA_MEMOP_PAD_BIT_WIDTH 4 /*! Load/Store Instruction: padding value encoding width*/ #define VTA_MEMOP_PAD_VAL_BIT_WIDTH 2 /*! GEMM/ALU Instruction: loop max iter bits */ #define VTA_LOOP_ITER_WIDTH 14 /*! ALU Instruction: immediate bitwidth*/ #define VTA_ALUOP_IMM_BIT_WIDTH 16 /*! ALU Instruction: shift arg bitwidth*/ #define VTA_SHR_ARG_BIT_WIDTH (VTA_LOG_ACC_WIDTH) /*! ALU Instruction: multiply arg bitwidth*/ #define VTA_MUL_ARG_BIT_WIDTH 8 /*! Mem ID constant: uop memory */ #define VTA_MEM_ID_UOP 0 /*! Mem ID constant: weight memory */ #define VTA_MEM_ID_WGT 1 /*! Mem ID constant: input memory */ #define VTA_MEM_ID_INP 2 /*! Mem ID constant: accumulator/bias memory */ #define VTA_MEM_ID_ACC 3 /*! Mem ID constant: output store buffer */ #define VTA_MEM_ID_OUT 4 /*! Mem ID constant: accumulator/bias memory (from int_8 buffer) */ #define VTA_MEM_ID_ACC_8BIT 5 #endif // VTA_HW_SPEC_CONST_H_