URL
https://opencores.org/ocsvn/qaz_libs/qaz_libs/trunk
Subversion Repositories qaz_libs
[/] [qaz_libs/] [trunk/] [BFM/] [src/] [anf/] [numeric_array.svh] - Rev 49
Compare with Previous | Blame | View Log
////////////////////////////////////////////////////////////////////////// //////// Copyright (C) 2019 Authors and OPENCORES.ORG //////// //////// This source file may be used and distributed without //////// restriction provided that this copyright statement is not //////// removed from the file and that any derivative work contains //////// the original copyright notice and the associated disclaimer. //////// //////// This source file is free software; you can redistribute it //////// and/or modify it under the terms of the GNU Lesser General //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any //////// later version. //////// //////// This source is distributed in the hope that it will be //////// useful, but WITHOUT ANY WARRANTY; without even the implied //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR //////// PURPOSE. See the GNU Lesser General Public License for more //////// details. //////// //////// You should have received a copy of the GNU Lesser General //////// Public License along with this source; if not, download it //////// from http://www.opencores.org/lgpl.shtml //////// //////////////////////////////////////////////////////////////////////////typedef int array_shape_t[]; // same shape convention as numpytypedef int array_index_t[];class numeric_array #(type T = shortreal);array_shape_t shape;int dim;T a_1d[];T a_2d[][];T a_3d[][][];// --------------------------------------------------------------------function void set_entry(array_index_t i, T value);case(dim)1: a_1d[i[0]] = value;2: a_2d[i[0]][i[1]] = value;3: a_3d[i[0]][i[1]][i[2]] = value; //[z][y][x]default: $stop; // not supportedendcaseendfunction// --------------------------------------------------------------------function T get_entry(array_index_t i);case(dim)1: get_entry = a_1d[i[0]];2: get_entry = a_2d[i[0]][i[1]];3: get_entry = a_3d[i[0]][i[1]][i[2]]; //[z][y][x]default: $stop; // not supportedendcaseendfunction// --------------------------------------------------------------------function longint to_bits(array_index_t i);case(type(T))type(shortreal): to_bits = $shortrealtobits(get_entry(i));type(real): to_bits = $realtobits(get_entry(i));default: $stop; // not supportedendcaseendfunction// --------------------------------------------------------------------function int bits;case(type(T))type(shortreal): bits = 32;type(real): bits = 64;default: $stop; // not supportedendcaseendfunction// --------------------------------------------------------------------function void new_2d(array_shape_t shape);a_2d = new[shape[0]];foreach(a_2d[y])a_2d[y] = new[shape[1]];endfunction// --------------------------------------------------------------------function void new_3d(array_shape_t shape);a_3d = new[shape[0]];foreach(a_3d[z])begina_3d[z] = new[shape[1]];foreach(a_3d[z,y])a_3d[z][y] = new[shape[2]];endendfunction// --------------------------------------------------------------------function void make_new;case(dim)1: a_1d = new[shape[0]];2: new_2d(shape);3: new_3d(shape);default: $stop; // not supportedendcaseendfunction// --------------------------------------------------------------------function void make_2d_constant(T value=0.0);$display("### value = %x", $shortrealtobits(value));make_new();foreach(a_2d[y,x])a_2d[y][x] = value;endfunction// --------------------------------------------------------------------function new(array_shape_t shape);this.shape = shape;this.dim = shape.size();make_new();endfunction// --------------------------------------------------------------------endclass
