mirror of
https://github.com/steveicarus/iverilog.git
synced 2026-08-29 17:19:36 +02:00
When looking for a value change on a part select of an array word, the callback handle has to save the current value and test it with the new value to see if there is an actual change. If not, then suppress the callback.
60 lines
2.1 KiB
C++
60 lines
2.1 KiB
C++
#ifndef __array_H
|
|
#define __array_H
|
|
/*
|
|
* Copyright (c) 2007-2010 Stephen Williams ([email protected])
|
|
*
|
|
* This source code is free software; you can redistribute it
|
|
* and/or modify it in source code form under the terms of the GNU
|
|
* General Public License as published by the Free Software
|
|
* Foundation; either version 2 of the License, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program 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 General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
*/
|
|
|
|
#include "vvp_net.h"
|
|
#include "vpi_user.h"
|
|
|
|
typedef struct __vpiArray* vvp_array_t;
|
|
class value_callback;
|
|
|
|
/*
|
|
* This function tries to find the array (by label) in the global
|
|
* table of all the arrays in the design.
|
|
*/
|
|
extern vvp_array_t array_find(const char*label);
|
|
extern unsigned get_array_word_size(vvp_array_t array);
|
|
extern vpiHandle array_index_iterate(int code, vpiHandle ref);
|
|
|
|
extern void array_word_change(vvp_array_t array, unsigned long addr);
|
|
|
|
extern void array_attach_word(vvp_array_t array, unsigned addr, vpiHandle word);
|
|
extern void array_alias_word(vvp_array_t array, unsigned long addr,
|
|
vpiHandle word, int msb, int lsb);
|
|
|
|
extern void array_set_word(vvp_array_t arr, unsigned idx,
|
|
unsigned off, vvp_vector4_t val);
|
|
extern void array_set_word(vvp_array_t arr, unsigned idx,
|
|
double val);
|
|
|
|
extern vvp_vector4_t array_get_word(vvp_array_t array, unsigned address);
|
|
extern double array_get_word_r(vvp_array_t array, unsigned address);
|
|
|
|
/* VPI hooks */
|
|
|
|
extern value_callback* vpip_array_word_change(p_cb_data data);
|
|
extern value_callback* vpip_array_change(p_cb_data data);
|
|
|
|
/* Compile hooks */
|
|
extern void compile_varw_real(char*label, vvp_array_t array,
|
|
unsigned long array_addr,
|
|
int msb, int lsb);
|
|
#endif
|