From b99206ac8e1e2dca2fe1ddece31944525565150a Mon Sep 17 00:00:00 2001 From: Larry Doolittle Date: Wed, 30 Apr 2008 08:44:37 -0700 Subject: [PATCH 1/5] avoid two unnecesary compile-time warnings --- design_dump.cc | 3 ++- vvp/vpi_priv.cc | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/design_dump.cc b/design_dump.cc index 31453ba7d..074bbe25d 100644 --- a/design_dump.cc +++ b/design_dump.cc @@ -112,9 +112,10 @@ void NetDelaySrc::dump(ostream&o, unsigned ind) const o << setw(ind) << "" << "specify delay"; if (posedge_) o << " posedge"; if (negedge_) o << " negedge"; - if (is_condit()) + if (is_condit()) { if (has_condit()) o << " if"; else o << " ifnone"; + } o << " src " << "(" << transition_delays_[IVL_PE_01] << "," << transition_delays_[IVL_PE_10] diff --git a/vvp/vpi_priv.cc b/vvp/vpi_priv.cc index ea3d2a1b5..ec629c0cb 100644 --- a/vvp/vpi_priv.cc +++ b/vvp/vpi_priv.cc @@ -37,7 +37,7 @@ static s_vpi_error_info vpip_last_error = { 0, 0, 0, 0, 0, 0, 0 }; /* * The vpip_string function creates a constant string from the pass - * input. This constant string is permanently allocate from an + * input. This constant string is permanently allocated from an * efficient string buffer store. */ struct vpip_string_chunk { @@ -115,7 +115,7 @@ PLI_INT32 vpi_chk_error(p_vpi_error_info info) info->level = vpip_last_error.level; info->message = vpip_last_error.message; info->product = vpi_vlog_info.product; - info->code = ""; + info->code = (char *) ""; info->file = 0; info->line = 0; From c0d3bb370f06b39ca2d1a36784d72c366df751fd Mon Sep 17 00:00:00 2001 From: Cary R Date: Wed, 30 Apr 2008 15:39:50 -0700 Subject: [PATCH 2/5] Clean up some VPI issues. This patch makes sure that objects either support vpiFile and vpiLineNo or adds dummy code so that a runtime error will not occur when accessing these properties. It also returns 1 for the size of real variables and adds a simplified vpiIndex that matches the Memory interface. --- vvp/array.cc | 7 +++++++ vvp/vpi_real.cc | 12 +++++++++--- vvp/vpi_signal.cc | 9 +++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/vvp/array.cc b/vvp/array.cc index 0248ddcfe..e57bbc375 100644 --- a/vvp/array.cc +++ b/vvp/array.cc @@ -130,6 +130,9 @@ static int vpi_array_get(int code, vpiHandle ref) struct __vpiArray*obj = ARRAY_HANDLE(ref); switch (code) { + case vpiLineNo: + return 0; // Not implemented for now! + case vpiSize: return (int) obj->array_count; @@ -142,6 +145,10 @@ static char*vpi_array_get_str(int code, vpiHandle ref) { struct __vpiArray*obj = ARRAY_HANDLE(ref); + if (code == vpiFile) { // Not implemented for now! + return simple_set_rbuf_str(file_names[0]); + } + return generic_get_str(code, &obj->scope->base, obj->name, NULL); } diff --git a/vvp/vpi_real.cc b/vvp/vpi_real.cc index 8cf030bd2..a6d5f54c6 100644 --- a/vvp/vpi_real.cc +++ b/vvp/vpi_real.cc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2003-2007 Stephen Williams (steve@icarus.com) + * Copyright (c) 2003-2008 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 @@ -34,8 +34,15 @@ static int real_var_get(int code, vpiHandle ref) struct __vpiRealVar*rfp = (struct __vpiRealVar*)ref; - if (code == vpiArray) { + switch (code) { + case vpiArray: return rfp->parent != 0; + + case vpiSize: + return 1; + + case vpiLineNo: + return 0; // Not implemented for now! } return 0; @@ -186,4 +193,3 @@ vpiHandle vpip_make_real_var(const char*name, vvp_net_t*net) return &obj->base; } - diff --git a/vvp/vpi_signal.cc b/vvp/vpi_signal.cc index 933f50fe2..4d0b37971 100644 --- a/vvp/vpi_signal.cc +++ b/vvp/vpi_signal.cc @@ -136,6 +136,15 @@ static int signal_get(int code, vpiHandle ref) case vpiArray: return rfp->parent != 0; + case vpiIndex: // This only works while we have a single index. + if (rfp->parent) { + s_vpi_value vp; + vp.format = vpiIntVal; + vpi_get_value(rfp->id.index, &vp); + return vp.value.integer; + } else + return 0; + case vpiSize: if (rfp->msb >= rfp->lsb) return rfp->msb - rfp->lsb + 1; From cb5260b2ce65efc3216147f0400cadd97958e44a Mon Sep 17 00:00:00 2001 From: Larry Doolittle Date: Wed, 30 Apr 2008 17:06:20 -0700 Subject: [PATCH 3/5] minor improvements to scripts/MAKE_SNAPSHOT.sh could still use more love setting defaults and handling errors --- scripts/MAKE_SNAPSHOT.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/MAKE_SNAPSHOT.sh b/scripts/MAKE_SNAPSHOT.sh index e5557a8c9..b06437b7f 100644 --- a/scripts/MAKE_SNAPSHOT.sh +++ b/scripts/MAKE_SNAPSHOT.sh @@ -45,17 +45,17 @@ if [ -e $destdir/$prefix ]; then fi echo "Exporting $tag to $destdir/$prefix..." -git-archive --prefix="$prefix/" $tag | ( cd "$destdir" ; tar xf - ) +git-archive --prefix="$prefix/" $tag | ( cd "$destdir" && tar xf - ) -versionh="$destdir/verilog-$id/version.h" +versionh="$destdir/$prefix/version.h" echo "Create $versionh ..." echo "#define VERSION_TAG \"$tag\"" > $versionh echo "Running autoconf.sh..." -( cd $destdir/$prefix ; sh autoconf.sh ) +( cd $destdir/$prefix && sh autoconf.sh ) echo "Making bundle $prefix.tar.gz..." -tar czf $prefix.tar.gz -C "$destdir" $prefix +tar czf $prefix.tar.gz --exclude=autom4te.cache -C "$destdir" $prefix echo "Removing temporary $destdir/$prefix..." rm -rf "$destdir/$prefix" From 9db9aa4ccb1b34b8b3f1b24c8232a402bd150923 Mon Sep 17 00:00:00 2001 From: Cary R Date: Wed, 30 Apr 2008 18:48:36 -0700 Subject: [PATCH 4/5] Allow zero width replications only in a concatenation. 1364-2001 does not allow a replication count of zero, but 1364-2005 allows them when the replication is enclosed in a concatenation with other valid bits. This patch adds code to perform these checks for procedural expressions. Because of the NetNet object must have a width greater than zero a replication used in a continuous assignment can never have a count of zero. --- elab_expr.cc | 21 +++++++++++++++++++++ elab_net.cc | 3 +-- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/elab_expr.cc b/elab_expr.cc index 9fef90d7f..564ace5fd 100644 --- a/elab_expr.cc +++ b/elab_expr.cc @@ -680,10 +680,13 @@ NetExpr* PECallFunction::elaborate_expr(Design*des, NetScope*scope, return 0; } +// Keep track of the concatenation/repeat depth. +static int concat_depth = 0; NetExpr* PEConcat::elaborate_expr(Design*des, NetScope*scope, int expr_wid, bool) const { + concat_depth += 1; NetExpr* repeat = 0; if (debug_elaborate) { @@ -712,6 +715,15 @@ NetExpr* PEConcat::elaborate_expr(Design*des, NetScope*scope, << "may not be negative (" << rep->value().as_long() << ")." << endl; des->errors += 1; + concat_depth -= 1; + return 0; + } + + if (rep->value().is_zero() && concat_depth < 2) { + cerr << get_fileline() << ": error: Concatenation repeat " + << "may not be zero in this context." << endl; + des->errors += 1; + concat_depth -= 1; return 0; } @@ -752,6 +764,15 @@ NetExpr* PEConcat::elaborate_expr(Design*des, NetScope*scope, tmp->set_width(wid_sum * tmp->repeat()); + if (wid_sum == 0 && concat_depth < 2) { + cerr << get_fileline() << ": error: Concatenation may not " + << "have zero width in this context." << endl; + des->errors += 1; + concat_depth -= 1; + return 0; + } + + concat_depth -= 1; return tmp; } diff --git a/elab_net.cc b/elab_net.cc index 55496b462..c1b628e5c 100644 --- a/elab_net.cc +++ b/elab_net.cc @@ -1591,7 +1591,7 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope, if (repeat == 0) { cerr << get_fileline() << ": error: Concatenation repeat " - "may not be 0." + "may not be zero." << endl; des->errors += 1; return 0; @@ -1689,7 +1689,6 @@ NetNet* PEConcat::elaborate_net(Design*des, NetScope*scope, } } - osig->local_flag(true); return osig; } From a31993957337375f18c837c0ceefdba0915ebf58 Mon Sep 17 00:00:00 2001 From: GuntherDannoritzer Date: Thu, 1 May 2008 21:54:34 -0700 Subject: [PATCH 5/5] Fix up verilog.spec and root Makefile.in for package managers. Package builders/managers find the DESTDIR variable convenient for installing into a temporary target for building a package. This adds the DESTDIR varilable to the root makefile. Also, clean up the verilog.spec file to reduce redundancy so that maintence for releases is easier. --- Makefile.in | 38 ++++++++++++++--------------- verilog.spec | 69 ++++++++++++++++++++++++++++------------------------ 2 files changed, 56 insertions(+), 51 deletions(-) diff --git a/Makefile.in b/Makefile.in index 6a5e3fd90..a603a5996 100644 --- a/Makefile.in +++ b/Makefile.in @@ -223,40 +223,40 @@ install: all installdirs $(libdir)/ivl/ivl@EXEEXT@ $(libdir)/ivl/include/consta do (cd $$dir ; $(MAKE) $@); done $(bindir)/iverilog-vpi: ./iverilog-vpi - $(INSTALL_SCRIPT) ./iverilog-vpi $(bindir)/iverilog-vpi + $(INSTALL_SCRIPT) ./iverilog-vpi $(DESTDIR)$(bindir)/iverilog-vpi $(libdir)/ivl/ivl@EXEEXT@: ./ivl@EXEEXT@ - $(INSTALL_PROGRAM) ./ivl@EXEEXT@ $(libdir)/ivl/ivl@EXEEXT@ + $(INSTALL_PROGRAM) ./ivl@EXEEXT@ $(DESTDIR)$(libdir)/ivl/ivl@EXEEXT@ $(libdir)/ivl/include/constants.vams: $(srcdir)/constants.vams $(INSTALL_DATA) $(srcdir)/constants.vams $@ $(libdir)/ivl/xnf-s.conf: $(srcdir)/xnf-s.conf - $(INSTALL_DATA) $(srcdir)/xnf-s.conf $(libdir)/ivl/xnf-s.conf + $(INSTALL_DATA) $(srcdir)/xnf-s.conf $(DESTDIR)$(libdir)/ivl/xnf-s.conf $(libdir)/ivl/xnf.conf: $(srcdir)/xnf.conf - $(INSTALL_DATA) $(srcdir)/xnf.conf $(libdir)/ivl/xnf.conf + $(INSTALL_DATA) $(srcdir)/xnf.conf $(DESTDIR)$(libdir)/ivl/xnf.conf $(includedir)/ivl_target.h: $(srcdir)/ivl_target.h - $(INSTALL_DATA) $(srcdir)/ivl_target.h $(includedir)/ivl_target.h + $(INSTALL_DATA) $(srcdir)/ivl_target.h $(DESTDIR)$(includedir)/ivl_target.h $(includedir)/_pli_types.h: _pli_types.h - $(INSTALL_DATA) $< $(includedir)/_pli_types.h + $(INSTALL_DATA) $< $(DESTDIR)$(includedir)/_pli_types.h $(includedir)/vpi_user.h: $(srcdir)/vpi_user.h - $(INSTALL_DATA) $(srcdir)/vpi_user.h $(includedir)/vpi_user.h + $(INSTALL_DATA) $(srcdir)/vpi_user.h $(DESTDIR)$(includedir)/vpi_user.h $(includedir)/acc_user.h: $(srcdir)/acc_user.h - $(INSTALL_DATA) $(srcdir)/acc_user.h $(includedir)/acc_user.h + $(INSTALL_DATA) $(srcdir)/acc_user.h $(DESTDIR)$(includedir)/acc_user.h $(includedir)/veriuser.h: $(srcdir)/veriuser.h - $(INSTALL_DATA) $(srcdir)/veriuser.h $(includedir)/veriuser.h + $(INSTALL_DATA) $(srcdir)/veriuser.h $(DESTDIR)$(includedir)/veriuser.h $(mandir)/man1/iverilog-vpi.1: $(srcdir)/iverilog-vpi.man - $(INSTALL_DATA) $(srcdir)/iverilog-vpi.man $(mandir)/man1/iverilog-vpi.1 + $(INSTALL_DATA) $(srcdir)/iverilog-vpi.man $(DESTDIR)$(mandir)/man1/iverilog-vpi.1 $(prefix)/iverilog-vpi.pdf: iverilog-vpi.pdf - $(INSTALL_DATA) iverilog-vpi.pdf $(prefix)/iverilog-vpi.pdf + $(INSTALL_DATA) iverilog-vpi.pdf $(DESTDIR)$(prefix)/iverilog-vpi.pdf # In windows installations, put a few examples and the quick_start # into the destination directory. @@ -279,22 +279,22 @@ $(prefix)/QUICK_START.txt: $(srcdir)/QUICK_START.txt endif installdirs: mkinstalldirs - $(srcdir)/mkinstalldirs $(bindir) $(includedir) $(libdir)/ivl \ - $(libdir)/ivl/include $(mandir) $(mandir)/man1 + $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) $(DESTDIR)$(includedir) $(DESTDIR)$(libdir)/ivl \ + $(DESTDIR)$(libdir)/ivl/include $(DESTDIR)$(mandir) $(DESTDIR)$(mandir)/man1 uninstall: for dir in $(SUBDIRS); do (cd $$dir ; $(MAKE) $@); done for dir in vpi ivlpp driver; \ do (cd $$dir ; $(MAKE) $@); done for f in xnf.conf xnf-s.conf ivl@EXEEXT@ include/constants.vams; \ - do rm -f $(libdir)/ivl/$$f; done - -rmdir $(libdir)/ivl/include - -rmdir $(libdir)/ivl + do rm -f $(DESTDIR)$(libdir)/ivl/$$f; done + -rmdir $(DESTDIR)$(libdir)/ivl/include + -rmdir $(DESTDIR)$(libdir)/ivl for f in verilog iverilog-vpi gverilog@EXEEXT@; \ - do rm -f $(bindir)/$$f; done + do rm -f $(DESTDIR)$(bindir)/$$f; done for f in ivl_target.h vpi_user.h _pli_types.h acc_user.h veriuser.h; \ - do rm -f $(includedir)/$$f; done - rm -f $(mandir)/man1/iverilog-vpi.1 $(prefix)/iverilog-vpi.pdf + do rm -f $(DESTDIR)$(includedir)/$$f; done + rm -f $(DESTDIR)$(mandir)/man1/iverilog-vpi.1 $(DESTDIR)$(prefix)/iverilog-vpi.pdf -include $(patsubst %.o, dep/%.d, $O) diff --git a/verilog.spec b/verilog.spec index f0f017a29..2676cab14 100644 --- a/verilog.spec +++ b/verilog.spec @@ -1,10 +1,15 @@ +#norootforbuild +# +%define rev_date 20080429 +# +# Summary: Icarus Verilog Name: verilog -Version: 0.9.0.20080429 +Version: 0.9.0.%{rev_date} Release: 0 License: GPL Group: Productivity/Scientific/Electronics -Source: verilog-20080429.tar.gz +Source: verilog-%{rev_date}.tar.gz URL: http://www.icarus.com/eda/verilog/index.html Packager: Stephen Williams @@ -22,14 +27,14 @@ engineering formats, including simulation. It strives to be true to the IEEE-1364 standard. %prep -%setup -n verilog-20080429 +%setup -n verilog-%{rev_date} %build -./configure --prefix=/usr --mandir='$(prefix)/share/man' +%{configure} make CXXFLAGS=-O %install -make prefix=$RPM_BUILD_ROOT/usr install +%{makeinstall} %clean rm -rf $RPM_BUILD_ROOT @@ -39,35 +44,35 @@ rm -rf $RPM_BUILD_ROOT %attr(-,root,root) %doc COPYING README.txt BUGS.txt QUICK_START.txt ieee1364-notes.txt mingw.txt swift.txt netlist.txt t-dll.txt vpi.txt xnf.txt tgt-fpga/fpga.txt cadpli/cadpli.txt xilinx-hint.txt %attr(-,root,root) %doc examples/* -%attr(-,root,root) /usr/share/man/man1/iverilog.1.gz +%attr(-,root,root) %{_mandir}/man1/iverilog.1.gz #%attr(-,root,root) /usr/man/man1/iverilog-fpga.1.gz -%attr(-,root,root) /usr/share/man/man1/iverilog-vpi.1.gz -%attr(-,root,root) /usr/share/man/man1/vvp.1.gz +%attr(-,root,root) %{_mandir}/man1/iverilog-vpi.1.gz +%attr(-,root,root) %{_mandir}/man1/vvp.1.gz -%attr(-,root,root) /usr/bin/iverilog -%attr(-,root,root) /usr/bin/iverilog-vpi -%attr(-,root,root) /usr/bin/vvp -%attr(-,root,root) /usr/lib/ivl/ivl -%attr(-,root,root) /usr/lib/ivl/ivlpp -%attr(-,root,root) /usr/lib/ivl/null.tgt -%attr(-,root,root) /usr/lib/ivl/null.conf -%attr(-,root,root) /usr/lib/ivl/null-s.conf -%attr(-,root,root) /usr/lib/ivl/stub.tgt -%attr(-,root,root) /usr/lib/ivl/stub.conf -%attr(-,root,root) /usr/lib/ivl/stub-s.conf -%attr(-,root,root) /usr/lib/ivl/vvp.tgt -%attr(-,root,root) /usr/lib/ivl/vvp.conf -%attr(-,root,root) /usr/lib/ivl/vvp-s.conf -#%attr(-,root,root) /usr/lib/ivl/fpga.tgt -#%attr(-,root,root) /usr/lib/ivl/fpga.conf -#%attr(-,root,root) /usr/lib/ivl/fpga-s.conf -#%attr(-,root,root) /usr/lib/ivl/xnf.conf -#%attr(-,root,root) /usr/lib/ivl/xnf-s.conf -%attr(-,root,root) /usr/lib/ivl/system.sft -%attr(-,root,root) /usr/lib/ivl/system.vpi -%attr(-,root,root) /usr/lib/ivl/cadpli.vpl -%attr(-,root,root) /usr/lib/libvpi.a -%attr(-,root,root) /usr/lib/libveriuser.a +%attr(-,root,root) %{_bindir}/iverilog +%attr(-,root,root) %{_bindir}/iverilog-vpi +%attr(-,root,root) %{_bindir}/vvp +%attr(-,root,root) %{_libdir}/ivl/ivl +%attr(-,root,root) %{_libdir}/ivl/ivlpp +%attr(-,root,root) %{_libdir}/ivl/null.tgt +%attr(-,root,root) %{_libdir}/ivl/null.conf +%attr(-,root,root) %{_libdir}/ivl/null-s.conf +%attr(-,root,root) %{_libdir}/ivl/stub.tgt +%attr(-,root,root) %{_libdir}/ivl/stub.conf +%attr(-,root,root) %{_libdir}/ivl/stub-s.conf +%attr(-,root,root) %{_libdir}/ivl/vvp.tgt +%attr(-,root,root) %{_libdir}/ivl/vvp.conf +%attr(-,root,root) %{_libdir}/ivl/vvp-s.conf +#%attr(-,root,root) %{_libdir}/ivl/fpga.tgt +#%attr(-,root,root) %{_libdir}/ivl/fpga.conf +#%attr(-,root,root) %{_libdir}/ivl/fpga-s.conf +#%attr(-,root,root) %{_libdir}/ivl/xnf.conf +#%attr(-,root,root) %{_libdir}/ivl/xnf-s.conf +%attr(-,root,root) %{_libdir}/ivl/system.sft +%attr(-,root,root) %{_libdir}/ivl/system.vpi +%attr(-,root,root) %{_libdir}/ivl/cadpli.vpl +%attr(-,root,root) %{_libdir}/libvpi.a +%attr(-,root,root) %{_libdir}/libveriuser.a %attr(-,root,root) /usr/include/ivl_target.h %attr(-,root,root) /usr/include/vpi_user.h %attr(-,root,root) /usr/include/acc_user.h