2000-09-18 03:24:32 +02:00
|
|
|
/*
|
|
|
|
|
* Copyright (c) 2000 Stephen Williams (steve@icarus.com)
|
|
|
|
|
*
|
|
|
|
|
* 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
|
|
|
|
|
*/
|
|
|
|
|
#if !defined(WINNT) && !defined(macintosh)
|
2001-04-01 08:52:27 +02:00
|
|
|
#ident "$Id: t-dll-api.cc,v 1.30 2001/04/01 06:52:27 steve Exp $"
|
2000-09-18 03:24:32 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
# include "t-dll.h"
|
|
|
|
|
|
|
|
|
|
/* THE FOLLOWING ARE FUNCTIONS THAT ARE CALLED FROM THE TARGET. */
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" const char*ivl_design_flag(ivl_design_t des, const char*key)
|
2000-09-23 07:15:07 +02:00
|
|
|
{
|
2000-10-15 06:46:23 +02:00
|
|
|
return des->self->get_flag(key).c_str();
|
2000-09-23 07:15:07 +02:00
|
|
|
}
|
|
|
|
|
|
2001-01-15 01:05:39 +01:00
|
|
|
extern "C" int ivl_design_process(ivl_design_t des,
|
|
|
|
|
ivl_process_f func,
|
|
|
|
|
void*cd)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-15 06:46:23 +02:00
|
|
|
for (ivl_process_t idx = des->threads_; idx; idx = idx->next_) {
|
2001-01-15 01:05:39 +01:00
|
|
|
int rc = (func)(idx, cd);
|
2000-10-15 06:46:23 +02:00
|
|
|
if (rc != 0)
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_scope_t ivl_design_root(ivl_design_t des)
|
|
|
|
|
{
|
|
|
|
|
return des->root_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" ivl_expr_type_t ivl_expr_type(ivl_expr_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-15 06:46:23 +02:00
|
|
|
if (net == 0)
|
|
|
|
|
return IVL_EX_NONE;
|
|
|
|
|
return net->type_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" const char*ivl_const_bits(ivl_net_const_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
2000-10-07 01:46:50 +02:00
|
|
|
if (net->width_ <= sizeof(char*))
|
|
|
|
|
return net->b.bit_;
|
|
|
|
|
else
|
|
|
|
|
return net->b.bits_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_const_pin(ivl_net_const_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->width_);
|
|
|
|
|
if (net->width_ == 1)
|
|
|
|
|
return net->n.pin_;
|
|
|
|
|
else
|
|
|
|
|
return net->n.pins_[idx];
|
2000-10-05 07:03:01 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_const_pins(ivl_net_const_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->width_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" int ivl_const_signed(ivl_net_const_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->signed_ == 1;
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-28 08:07:39 +02:00
|
|
|
extern "C" const char* ivl_event_name(ivl_event_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" const char* ivl_event_basename(ivl_event_t net)
|
|
|
|
|
{
|
|
|
|
|
const char*nam = net->name;
|
|
|
|
|
nam += strlen(ivl_scope_name(net->scope));
|
|
|
|
|
assert(*nam == '.');
|
|
|
|
|
nam += 1;
|
|
|
|
|
return nam;
|
|
|
|
|
}
|
|
|
|
|
|
2001-04-01 03:48:21 +02:00
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_event_nany(ivl_event_t net)
|
2001-03-28 08:07:39 +02:00
|
|
|
{
|
|
|
|
|
assert(net);
|
2001-04-01 03:48:21 +02:00
|
|
|
return net->nany;
|
2001-03-28 08:07:39 +02:00
|
|
|
}
|
|
|
|
|
|
2001-04-01 03:48:21 +02:00
|
|
|
extern "C" ivl_nexus_t ivl_event_any(ivl_event_t net, unsigned idx)
|
2001-03-28 08:07:39 +02:00
|
|
|
{
|
|
|
|
|
assert(net);
|
2001-04-01 03:48:21 +02:00
|
|
|
assert(idx < net->nany);
|
|
|
|
|
return net->pins[idx];
|
2001-03-28 08:07:39 +02:00
|
|
|
}
|
|
|
|
|
|
2001-04-01 03:48:21 +02:00
|
|
|
extern "C" unsigned ivl_event_nneg(ivl_event_t net)
|
2001-03-28 08:07:39 +02:00
|
|
|
{
|
|
|
|
|
assert(net);
|
2001-04-01 03:48:21 +02:00
|
|
|
return net->nneg;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_event_neg(ivl_event_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nneg);
|
|
|
|
|
return net->pins[net->nany + idx];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_event_npos(ivl_event_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->npos;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_event_pos(ivl_event_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->npos);
|
|
|
|
|
return net->pins[net->nany + net->nneg + idx];
|
2001-03-28 08:07:39 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-26 02:30:07 +02:00
|
|
|
extern "C" const char* ivl_expr_bits(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net && (net->type_ == IVL_EX_NUMBER));
|
|
|
|
|
return net->u_.number_.bits_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-24 04:21:53 +02:00
|
|
|
extern "C" const char* ivl_expr_name(ivl_expr_t net)
|
|
|
|
|
{
|
2000-10-05 07:03:01 +02:00
|
|
|
switch (net->type_) {
|
|
|
|
|
|
|
|
|
|
case IVL_EX_SFUNC:
|
|
|
|
|
return net->u_.sfunc_.name_;
|
|
|
|
|
|
|
|
|
|
case IVL_EX_SIGNAL:
|
|
|
|
|
return net->u_.subsig_.name_;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
2000-09-24 04:21:53 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-30 04:18:15 +02:00
|
|
|
extern "C" char ivl_expr_opcode(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_EX_BINARY:
|
|
|
|
|
return net->u_.binary_.op_;
|
|
|
|
|
|
2001-03-29 04:52:39 +02:00
|
|
|
case IVL_EX_UNARY:
|
|
|
|
|
return net->u_.unary_.op_;
|
|
|
|
|
|
2000-09-30 04:18:15 +02:00
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_expr_t ivl_expr_oper1(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_EX_BINARY:
|
|
|
|
|
return net->u_.binary_.lef_;
|
|
|
|
|
|
2001-03-29 04:52:39 +02:00
|
|
|
case IVL_EX_UNARY:
|
|
|
|
|
return net->u_.unary_.sub_;
|
|
|
|
|
|
2000-09-30 04:18:15 +02:00
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_expr_t ivl_expr_oper2(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_EX_BINARY:
|
|
|
|
|
return net->u_.binary_.rig_;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-17 00:44:54 +02:00
|
|
|
extern "C" ivl_expr_t ivl_expr_oper3(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-29 00:32:34 +02:00
|
|
|
extern "C" ivl_expr_t ivl_expr_parm(ivl_expr_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_EX_CONCAT:
|
|
|
|
|
assert(idx < net->u_.concat_.parms);
|
|
|
|
|
return net->u_.concat_.parm[idx];
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_expr_parms(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_EX_CONCAT:
|
|
|
|
|
return net->u_.concat_.parms;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_expr_repeat(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(net->type_ == IVL_EX_CONCAT);
|
|
|
|
|
return net->u_.concat_.rept;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-26 02:30:07 +02:00
|
|
|
extern "C" int ivl_expr_signed(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->signed_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-23 07:15:07 +02:00
|
|
|
extern "C" const char* ivl_expr_string(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type_ == IVL_EX_STRING);
|
|
|
|
|
return net->u_.string_.value_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-24 04:21:53 +02:00
|
|
|
extern "C" unsigned ivl_expr_width(ivl_expr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->width_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" const char* ivl_logic_name(ivl_net_logic_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->name_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" const char* ivl_logic_basename(ivl_net_logic_t net)
|
|
|
|
|
{
|
|
|
|
|
const char*nam = net->name_;
|
|
|
|
|
nam += strlen(ivl_scope_name(net->scope_));
|
|
|
|
|
assert(*nam == '.');
|
|
|
|
|
nam += 1;
|
|
|
|
|
return nam;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" ivl_logic_t ivl_logic_type(ivl_net_logic_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
return net->type_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" unsigned ivl_logic_pins(ivl_net_logic_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
return net->npins_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" ivl_nexus_t ivl_logic_pin(ivl_net_logic_t net, unsigned pin)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
assert(pin < net->npins_);
|
|
|
|
|
return net->pins_[pin];
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-11-11 01:03:36 +01:00
|
|
|
extern "C" ivl_lpm_ff_t ivl_lpm_ff(ivl_lpm_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type == IVL_LPM_FF);
|
|
|
|
|
return (ivl_lpm_ff_t)net;
|
|
|
|
|
}
|
|
|
|
|
|
2000-11-12 18:47:29 +01:00
|
|
|
extern "C" ivl_nexus_t ivl_lpm_ff_clk(ivl_lpm_ff_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->clk;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_lpm_ff_data(ivl_lpm_ff_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->base.width);
|
|
|
|
|
if (net->base.width == 1)
|
|
|
|
|
return net->d.pin;
|
|
|
|
|
else
|
|
|
|
|
return net->d.pins[idx];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_lpm_ff_q(ivl_lpm_ff_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->base.width);
|
|
|
|
|
if (net->base.width == 1)
|
|
|
|
|
return net->q.pin;
|
|
|
|
|
else
|
|
|
|
|
return net->q.pins[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2000-11-11 01:03:36 +01:00
|
|
|
extern "C" const char* ivl_lpm_name(ivl_lpm_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->name;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_lpm_type_t ivl_lpm_type(ivl_lpm_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->type;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_lpm_width(ivl_lpm_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->width;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-18 22:04:39 +02:00
|
|
|
extern "C" ivl_expr_t ivl_lval_mux(ivl_lval_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->mux;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_lval_pins(ivl_lval_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->width_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_t ivl_lval_pin(ivl_lval_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->width_);
|
|
|
|
|
if (net->width_ == 1)
|
|
|
|
|
return net->n.pin_;
|
|
|
|
|
else
|
|
|
|
|
return net->n.pins_[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" const char* ivl_nexus_name(ivl_nexus_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-08 06:01:54 +02:00
|
|
|
assert(net);
|
|
|
|
|
return net->name_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" unsigned ivl_nexus_ptrs(ivl_nexus_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->nptr_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_nexus_ptr_t ivl_nexus_ptr(ivl_nexus_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nptr_);
|
|
|
|
|
return net->ptrs_ + idx;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-25 07:41:24 +02:00
|
|
|
extern "C" unsigned ivl_nexus_ptr_pin(ivl_nexus_ptr_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->pin_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-12-05 07:29:33 +01:00
|
|
|
extern "C" ivl_net_logic_t ivl_nexus_ptr_log(ivl_nexus_ptr_t net)
|
|
|
|
|
{
|
|
|
|
|
if (net == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
if (net->type_ != __NEXUS_PTR_LOG)
|
|
|
|
|
return 0;
|
|
|
|
|
return net->l.log;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_lpm_t ivl_nexus_ptr_lpm(ivl_nexus_ptr_t net)
|
|
|
|
|
{
|
|
|
|
|
if (net == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
if (net->type_ != __NEXUS_PTR_LPM)
|
|
|
|
|
return 0;
|
|
|
|
|
return net->l.lpm;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-25 07:41:24 +02:00
|
|
|
extern "C" ivl_signal_t ivl_nexus_ptr_sig(ivl_nexus_ptr_t net)
|
|
|
|
|
{
|
|
|
|
|
if (net == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
if (net->type_ != __NEXUS_PTR_SIG)
|
|
|
|
|
return 0;
|
|
|
|
|
return net->l.sig;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" ivl_process_type_t ivl_process_type(ivl_process_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
|
|
|
|
return net->type_;
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-20 02:44:13 +01:00
|
|
|
extern "C" ivl_scope_t ivl_process_scope(ivl_process_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->scope_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-05 07:03:01 +02:00
|
|
|
extern "C" ivl_statement_t ivl_process_stmt(ivl_process_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
|
|
|
|
return net->stmt_;
|
|
|
|
|
}
|
|
|
|
|
|
2001-01-15 01:05:39 +01:00
|
|
|
extern "C" int ivl_scope_children(ivl_scope_t net,
|
|
|
|
|
ivl_scope_f func,
|
|
|
|
|
void*cd)
|
2000-10-15 06:46:23 +02:00
|
|
|
{
|
|
|
|
|
for (ivl_scope_t cur = net->child_; cur; cur = cur->sibling_) {
|
2001-01-15 01:05:39 +01:00
|
|
|
int rc = func(cur, cd);
|
2000-10-15 06:46:23 +02:00
|
|
|
if (rc != 0)
|
|
|
|
|
return rc;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-28 08:07:39 +02:00
|
|
|
extern "C" unsigned ivl_scope_events(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->nevent_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_event_t ivl_scope_event(ivl_scope_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nevent_);
|
|
|
|
|
return net->event_[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" unsigned ivl_scope_logs(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->nlog_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_net_logic_t ivl_scope_log(ivl_scope_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nlog_);
|
|
|
|
|
return net->log_[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2000-11-11 01:03:36 +01:00
|
|
|
extern "C" unsigned ivl_scope_lpms(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->nlpm_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_lpm_t ivl_scope_lpm(ivl_scope_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nlpm_);
|
|
|
|
|
return net->lpm_[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-08 06:01:54 +02:00
|
|
|
extern "C" const char* ivl_scope_name(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->name_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-15 06:46:23 +02:00
|
|
|
extern "C" unsigned ivl_scope_sigs(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->nsigs_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_signal_t ivl_scope_sig(ivl_scope_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->nsigs_);
|
|
|
|
|
return net->sigs_[idx];
|
|
|
|
|
}
|
|
|
|
|
|
2001-01-15 01:47:01 +01:00
|
|
|
extern "C" ivl_scope_type_t ivl_scope_type(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->type_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" const char* ivl_scope_tname(ivl_scope_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
return net->tname_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-12-05 07:29:33 +01:00
|
|
|
extern "C" const char* ivl_signal_attr(ivl_signal_t net, const char*key)
|
|
|
|
|
{
|
|
|
|
|
if (net->nattr_ == 0)
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
|
|
assert(net->akey_);
|
|
|
|
|
assert(net->aval_);
|
|
|
|
|
|
|
|
|
|
for (unsigned idx = 0 ; idx < net->nattr_ ; idx += 1)
|
|
|
|
|
|
|
|
|
|
if (strcmp(key, net->akey_[idx]) == 0)
|
|
|
|
|
return net->aval_[idx];
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-08 06:01:54 +02:00
|
|
|
extern "C" const char* ivl_signal_basename(ivl_signal_t net)
|
|
|
|
|
{
|
|
|
|
|
const char*nam = net->name_;
|
|
|
|
|
nam += strlen(ivl_scope_name(net->scope_));
|
|
|
|
|
assert(*nam == '.');
|
|
|
|
|
nam += 1;
|
|
|
|
|
return nam;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" const char* ivl_signal_name(ivl_signal_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->name_;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-25 07:41:24 +02:00
|
|
|
extern "C" ivl_nexus_t ivl_signal_pin(ivl_signal_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
assert(net);
|
|
|
|
|
assert(idx < net->width_);
|
|
|
|
|
if (net->width_ == 1) {
|
|
|
|
|
return net->n.pin_;
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
return net->n.pins_[idx];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-24 17:46:00 +02:00
|
|
|
extern "C" unsigned ivl_signal_pins(ivl_signal_t net)
|
2000-09-18 03:24:32 +02:00
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
return net->width_;
|
2000-09-18 03:24:32 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-24 17:46:00 +02:00
|
|
|
extern "C" ivl_signal_port_t ivl_signal_port(ivl_signal_t net)
|
|
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
return net->port_;
|
2000-09-24 17:46:00 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_signal_type_t ivl_signal_type(ivl_signal_t net)
|
|
|
|
|
{
|
2000-10-07 01:46:50 +02:00
|
|
|
return net->type_;
|
2000-09-24 17:46:00 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-19 06:15:27 +02:00
|
|
|
extern "C" ivl_statement_type_t ivl_statement_type(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
return net->type_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_stmt_block_count(ivl_statement_t net)
|
|
|
|
|
{
|
2001-03-30 07:49:52 +02:00
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_BLOCK:
|
|
|
|
|
case IVL_ST_FORK:
|
|
|
|
|
return net->u_.block_.nstmt_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-09-19 06:15:27 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_statement_t ivl_stmt_block_stmt(ivl_statement_t net,
|
|
|
|
|
unsigned i)
|
|
|
|
|
{
|
2001-03-30 07:49:52 +02:00
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_BLOCK:
|
|
|
|
|
case IVL_ST_FORK:
|
|
|
|
|
return net->u_.block_.stmt_ + i;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-09-19 06:15:27 +02:00
|
|
|
}
|
|
|
|
|
|
2001-03-31 19:36:38 +02:00
|
|
|
extern "C" unsigned ivl_stmt_case_count(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_CASE:
|
|
|
|
|
case IVL_ST_CASEX:
|
|
|
|
|
case IVL_ST_CASEZ:
|
|
|
|
|
return net->u_.case_.ncase;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_expr_t ivl_stmt_case_expr(ivl_statement_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_CASE:
|
|
|
|
|
case IVL_ST_CASEX:
|
|
|
|
|
case IVL_ST_CASEZ:
|
|
|
|
|
assert(idx < net->u_.case_.ncase);
|
|
|
|
|
return net->u_.case_.case_ex[idx];
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_statement_t ivl_stmt_case_stmt(ivl_statement_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_CASE:
|
|
|
|
|
case IVL_ST_CASEX:
|
|
|
|
|
case IVL_ST_CASEZ:
|
|
|
|
|
assert(idx < net->u_.case_.ncase);
|
|
|
|
|
return net->u_.case_.case_st + idx;
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-30 04:18:15 +02:00
|
|
|
extern "C" ivl_expr_t ivl_stmt_cond_expr(ivl_statement_t net)
|
|
|
|
|
{
|
2001-03-31 19:36:38 +02:00
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_CONDIT:
|
|
|
|
|
return net->u_.condit_.cond_;
|
|
|
|
|
|
|
|
|
|
case IVL_ST_CASE:
|
|
|
|
|
case IVL_ST_CASEX:
|
|
|
|
|
case IVL_ST_CASEZ:
|
|
|
|
|
return net->u_.case_.cond;
|
|
|
|
|
|
2001-04-01 08:52:27 +02:00
|
|
|
case IVL_ST_WHILE:
|
|
|
|
|
return net->u_.while_.cond_;
|
|
|
|
|
|
2001-03-31 19:36:38 +02:00
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
2000-09-30 04:18:15 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-19 06:15:27 +02:00
|
|
|
extern "C" ivl_statement_t ivl_stmt_cond_false(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type_ == IVL_ST_CONDIT);
|
|
|
|
|
if (net->u_.condit_.stmt_[1].type_ == IVL_ST_NONE)
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
|
|
|
|
return net->u_.condit_.stmt_ + 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" ivl_statement_t ivl_stmt_cond_true(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type_ == IVL_ST_CONDIT);
|
|
|
|
|
if (net->u_.condit_.stmt_[0].type_ == IVL_ST_NONE)
|
|
|
|
|
return 0;
|
|
|
|
|
else
|
|
|
|
|
return net->u_.condit_.stmt_ + 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned long ivl_stmt_delay_val(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type_ == IVL_ST_DELAY);
|
|
|
|
|
return net->u_.delay_.delay_;
|
|
|
|
|
}
|
|
|
|
|
|
2001-03-28 08:07:39 +02:00
|
|
|
extern "C" ivl_event_t ivl_stmt_event(ivl_statement_t net)
|
2001-03-27 08:27:40 +02:00
|
|
|
{
|
2001-03-29 05:47:38 +02:00
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_WAIT:
|
|
|
|
|
return net->u_.wait_.event_;
|
|
|
|
|
case IVL_ST_TRIGGER:
|
|
|
|
|
return net->u_.trig_.event_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
2001-03-27 08:27:40 +02:00
|
|
|
}
|
|
|
|
|
|
2000-10-18 22:04:39 +02:00
|
|
|
extern "C" ivl_lval_t ivl_stmt_lval(ivl_statement_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_ASSIGN:
|
|
|
|
|
assert(idx < net->u_.assign_.lvals_);
|
|
|
|
|
return net->u_.assign_.lval_ + idx;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_stmt_lvals(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_ASSIGN:
|
|
|
|
|
return net->u_.assign_.lvals_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-07 01:46:50 +02:00
|
|
|
extern "C" unsigned ivl_stmt_lwidth(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
assert(net->type_ == IVL_ST_ASSIGN);
|
2000-10-18 22:04:39 +02:00
|
|
|
unsigned sum = 0;
|
|
|
|
|
for (unsigned idx = 0 ; idx < net->u_.assign_.lvals_ ; idx += 1) {
|
|
|
|
|
ivl_lval_t cur = net->u_.assign_.lval_ + idx;
|
|
|
|
|
if (cur->mux)
|
|
|
|
|
sum += 1;
|
|
|
|
|
else
|
|
|
|
|
sum += cur->width_;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return sum;
|
2000-10-07 01:46:50 +02:00
|
|
|
}
|
|
|
|
|
|
2000-09-22 05:58:30 +02:00
|
|
|
extern "C" const char* ivl_stmt_name(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_STASK:
|
|
|
|
|
return net->u_.stask_.name_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-23 07:15:07 +02:00
|
|
|
extern "C" ivl_expr_t ivl_stmt_parm(ivl_statement_t net, unsigned idx)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_STASK:
|
|
|
|
|
assert(idx < net->u_.stask_.nparm_);
|
|
|
|
|
return net->u_.stask_.parms_[idx];
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extern "C" unsigned ivl_stmt_parm_count(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_STASK:
|
|
|
|
|
return net->u_.stask_.nparm_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-10-07 01:46:50 +02:00
|
|
|
extern "C" ivl_expr_t ivl_stmt_rval(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_ASSIGN:
|
|
|
|
|
return net->u_.assign_.rval_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-19 06:15:27 +02:00
|
|
|
extern "C" ivl_statement_t ivl_stmt_sub_stmt(ivl_statement_t net)
|
|
|
|
|
{
|
|
|
|
|
switch (net->type_) {
|
|
|
|
|
case IVL_ST_DELAY:
|
|
|
|
|
return net->u_.delay_.stmt_;
|
|
|
|
|
case IVL_ST_WAIT:
|
|
|
|
|
return net->u_.wait_.stmt_;
|
|
|
|
|
case IVL_ST_WHILE:
|
|
|
|
|
return net->u_.while_.stmt_;
|
|
|
|
|
default:
|
|
|
|
|
assert(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
2000-09-18 03:24:32 +02:00
|
|
|
/*
|
|
|
|
|
* $Log: t-dll-api.cc,v $
|
2001-04-01 08:52:27 +02:00
|
|
|
* Revision 1.30 2001/04/01 06:52:27 steve
|
|
|
|
|
* support the NetWhile statement.
|
|
|
|
|
*
|
2001-04-01 03:48:21 +02:00
|
|
|
* Revision 1.29 2001/04/01 01:48:21 steve
|
|
|
|
|
* Redesign event information to support arbitrary edge combining.
|
|
|
|
|
*
|
2001-03-31 19:36:38 +02:00
|
|
|
* Revision 1.28 2001/03/31 17:36:38 steve
|
|
|
|
|
* Generate vvp code for case statements.
|
|
|
|
|
*
|
2001-03-30 07:49:52 +02:00
|
|
|
* Revision 1.27 2001/03/30 05:49:52 steve
|
|
|
|
|
* Generate code for fork/join statements.
|
|
|
|
|
*
|
2001-03-29 05:47:38 +02:00
|
|
|
* Revision 1.26 2001/03/29 03:47:38 steve
|
|
|
|
|
* Behavioral trigger statements.
|
|
|
|
|
*
|
2001-03-29 04:52:39 +02:00
|
|
|
* Revision 1.25 2001/03/29 02:52:39 steve
|
|
|
|
|
* Add unary ~ operator to tgt-vvp.
|
|
|
|
|
*
|
2001-03-28 08:07:39 +02:00
|
|
|
* Revision 1.24 2001/03/28 06:07:39 steve
|
|
|
|
|
* Add the ivl_event_t to ivl_target, and use that to generate
|
|
|
|
|
* .event statements in vvp way ahead of the thread that uses it.
|
|
|
|
|
*
|
2001-03-27 08:27:40 +02:00
|
|
|
* Revision 1.23 2001/03/27 06:27:40 steve
|
|
|
|
|
* Generate code for simple @ statements.
|
|
|
|
|
*
|
2001-03-20 02:44:13 +01:00
|
|
|
* Revision 1.22 2001/03/20 01:44:13 steve
|
|
|
|
|
* Put processes in the proper scope.
|
|
|
|
|
*
|
2001-01-15 01:47:01 +01:00
|
|
|
* Revision 1.21 2001/01/15 00:47:02 steve
|
|
|
|
|
* Pass scope type information to the target module.
|
|
|
|
|
*
|
2001-01-15 01:05:39 +01:00
|
|
|
* Revision 1.20 2001/01/15 00:05:39 steve
|
|
|
|
|
* Add client data pointer for scope and process scanners.
|
|
|
|
|
*
|
2000-12-05 07:29:33 +01:00
|
|
|
* Revision 1.19 2000/12/05 06:29:33 steve
|
|
|
|
|
* Make signal attributes available to ivl_target API.
|
|
|
|
|
*
|
2000-11-12 18:47:29 +01:00
|
|
|
* Revision 1.18 2000/11/12 17:47:29 steve
|
|
|
|
|
* flip-flop pins for ivl_target API.
|
|
|
|
|
*
|
2000-11-11 01:03:36 +01:00
|
|
|
* Revision 1.17 2000/11/11 00:03:36 steve
|
|
|
|
|
* Add support for the t-dll backend grabing flip-flops.
|
|
|
|
|
*
|
2000-10-29 00:32:34 +02:00
|
|
|
* Revision 1.16 2000/10/28 22:32:34 steve
|
|
|
|
|
* API for concatenation expressions.
|
|
|
|
|
*
|
2000-10-25 07:41:24 +02:00
|
|
|
* Revision 1.15 2000/10/25 05:41:24 steve
|
|
|
|
|
* Get target signal from nexus_ptr.
|
|
|
|
|
*
|
2000-10-18 22:04:39 +02:00
|
|
|
* Revision 1.14 2000/10/18 20:04:39 steve
|
|
|
|
|
* Add ivl_lval_t and support for assignment l-values.
|
|
|
|
|
*
|
2000-10-17 00:44:54 +02:00
|
|
|
* Revision 1.13 2000/10/16 22:44:54 steve
|
|
|
|
|
* Stubs so that cygwin port will link ivl.
|
|
|
|
|
*
|
2000-10-15 06:46:23 +02:00
|
|
|
* Revision 1.12 2000/10/15 04:46:23 steve
|
|
|
|
|
* Scopes and processes are accessible randomly from
|
|
|
|
|
* the design, and signals and logic are accessible
|
|
|
|
|
* from scopes. Remove the target calls that are no
|
|
|
|
|
* longer needed.
|
|
|
|
|
*
|
|
|
|
|
* Add the ivl_nexus_ptr_t and the means to get at
|
|
|
|
|
* them from nexus objects.
|
|
|
|
|
*
|
|
|
|
|
* Give names to methods that manipulate the ivl_design_t
|
|
|
|
|
* type more consistent names.
|
|
|
|
|
*
|
2000-10-08 06:01:54 +02:00
|
|
|
* Revision 1.11 2000/10/08 04:01:54 steve
|
|
|
|
|
* Back pointers in the nexus objects into the devices
|
|
|
|
|
* that point to it.
|
|
|
|
|
*
|
|
|
|
|
* Collect threads into a list in the design.
|
|
|
|
|
*
|
2000-10-07 01:46:50 +02:00
|
|
|
* Revision 1.10 2000/10/06 23:46:50 steve
|
|
|
|
|
* ivl_target updates, including more complete
|
|
|
|
|
* handling of ivl_nexus_t objects. Much reduced
|
|
|
|
|
* dependencies on pointers to netlist objects.
|
|
|
|
|
*
|
2000-10-05 07:03:01 +02:00
|
|
|
* Revision 1.9 2000/10/05 05:03:01 steve
|
|
|
|
|
* xor and constant devices.
|
|
|
|
|
*
|
2000-09-30 04:18:15 +02:00
|
|
|
* Revision 1.8 2000/09/30 02:18:15 steve
|
|
|
|
|
* ivl_expr_t support for binary operators,
|
|
|
|
|
* Create a proper ivl_scope_t object.
|
|
|
|
|
*
|
2000-09-26 02:30:07 +02:00
|
|
|
* Revision 1.7 2000/09/26 00:30:07 steve
|
|
|
|
|
* Add EX_NUMBER and ST_TRIGGER to dll-api.
|
|
|
|
|
*
|
2000-09-24 17:46:00 +02:00
|
|
|
* Revision 1.6 2000/09/24 15:46:00 steve
|
|
|
|
|
* API access to signal type and port type.
|
|
|
|
|
*
|
2000-09-24 04:21:53 +02:00
|
|
|
* Revision 1.5 2000/09/24 02:21:53 steve
|
|
|
|
|
* Add support for signal expressions.
|
|
|
|
|
*
|
2000-09-23 07:15:07 +02:00
|
|
|
* Revision 1.4 2000/09/23 05:15:07 steve
|
|
|
|
|
* Add enough tgt-verilog code to support hello world.
|
|
|
|
|
*
|
2000-09-22 05:58:30 +02:00
|
|
|
* Revision 1.3 2000/09/22 03:58:30 steve
|
|
|
|
|
* Access to the name of a system task call.
|
|
|
|
|
*
|
2000-09-19 06:15:27 +02:00
|
|
|
* Revision 1.2 2000/09/19 04:15:27 steve
|
|
|
|
|
* Introduce the means to get statement types.
|
|
|
|
|
*
|
2000-09-18 03:24:32 +02:00
|
|
|
* Revision 1.1 2000/09/18 01:24:32 steve
|
|
|
|
|
* Get the structure for ivl_statement_t worked out.
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
|