raised STORAGE_ERROR : stack overflow or erroneous memory access
suarezvictor opened this issue · 13 comments
There's a memory error processing VHDL files, it's not clear if this is a GHDL issue or just a plugin issue. It was open at GHDL github here: YosysHQ/yosys#3022
I duplicate it here (files to uncompress are attached). Commands to be run are:
$ cd top
$ ghdl -i `cat ../vhdl_files.txt`
$ ghdl -m top
$ yosys -m ghdl
yosys> ghdl top
Results:
1. Executing GHDL.
Importing module top.
Importing module pmod_jb_0clk_23f04728.
Importing module pmod_jc_0clk_23f04728.
Importing module vga_0clk_83e31706.
Importing module vga_red_debug_output_main_0clk_23f04728.
Importing module vga_green_debug_output_main_0clk_23f04728.
Importing module vga_blue_debug_output_main_0clk_23f04728.
Importing module vsync_debug_output_main_0clk_23f04728.
Importing module hsync_debug_output_main_0clk_23f04728.
Importing module app_0clk_ebdb5920.
raised STORAGE_ERROR : stack overflow or erroneous memory access
@suarezvictor, what version of GHDL, Yosys and ghdl-yosys-plugin are you using?
The following command works for me on MSYS2 (MINGW64) with up to date GHDL and Yosys (ghdl-yosys-plugin is built-in):
# cd top
# yosys -p "ghdl $(cat ../vhdl_files.txt) -e top;"
/----------------------------------------------------------------------------\
| |
| yosys -- Yosys Open SYnthesis Suite |
| |
| Copyright (C) 2012 - 2020 Claire Xenia Wolf <claire@yosyshq.com> |
| |
| Permission to use, copy, modify, and/or distribute this software for any |
| purpose with or without fee is hereby granted, provided that the above |
| copyright notice and this permission notice appear in all copies. |
| |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| |
\----------------------------------------------------------------------------/
Yosys 0.9+4300 (git sha1 551ef85cd, x86_64-w64-mingw32-g++ 10.3.0 -march=x86-64 -mtune=generic -O2 -Os)
-- Running command `ghdl ../c_structs_pkg.pkg.vhd ../clk_cross_entities.vhd ../clk_cross_t_pkg.pkg.vhd ../top/top_5681.vhd ../examples/arty/src/vga/test_pattern.c/vga_blue_DEBUG_OUTPUT_MAIN/vga_blue_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/vga_pmod.c/vga/vga_0CLK_83e31706.vhd ../examples/arty/src/vga/test_pattern.c/vsync_DEBUG_OUTPUT_MAIN/vsync_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/app/app_0CLK_ebdb5920.vhd ../examples/arty/src/vga/../pmod/pmod_jc.c/pmod_jc/pmod_jc_0CLK_23f04728.vhd ../examples/arty/src/vga/../pmod/pmod_jb.c/pmod_jb/pmod_jb_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_red_DEBUG_OUTPUT_MAIN/vga_red_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/hsync_DEBUG_OUTPUT_MAIN/hsync_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_green_DEBUG_OUTPUT_MAIN/vga_green_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../built_in/BIN_OP_EQ_uint1_t_uint1_t_uint1_t/BIN_OP_EQ_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/MUX_uint1_t_uint1_t_uint1_t_uint1_t/MUX_uint1_t_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/CONST_SR_0_uint4_t_uint4_t/CONST_SR_0_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/MUX_uint12_t_uint1_t_uint12_t_uint12_t/MUX_uint12_t_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint13_t_uint12_t_uint1_t/BIN_OP_PLUS_uint13_t_uint12_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_AND_uint1_t_uint1_t_uint1_t/BIN_OP_AND_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint13_t/BIN_OP_LT_uint1_t_uint12_t_uint13_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint10_t/BIN_OP_LT_uint1_t_uint12_t_uint10_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint11_t/BIN_OP_EQ_uint1_t_uint12_t_uint11_t_0CLK_de264c78.vhd ../built_in/BIN_OP_MINUS_uint12_t_uint12_t_uint1_t/BIN_OP_MINUS_uint12_t_uint12_t_uint1_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vsync/vsync_0CLK_23f04728.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint11_t/BIN_OP_LT_uint1_t_uint12_t_uint11_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint12_t/BIN_OP_EQ_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/CONST_SR_3_uint4_t_uint4_t/CONST_SR_3_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/CONST_SR_1_uint4_t_uint4_t/CONST_SR_1_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/BIN_OP_GTE_uint1_t_uint12_t_uint12_t/BIN_OP_GTE_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint2_t/BIN_OP_EQ_uint1_t_uint12_t_uint2_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint9_t/BIN_OP_LT_uint1_t_uint12_t_uint9_t_0CLK_de264c78.vhd ../built_in/UNARY_OP_NOT_uint1_t_uint1_t/UNARY_OP_NOT_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/MUX_uint4_t_uint1_t_uint4_t_uint4_t/MUX_uint4_t_uint1_t_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/CONST_SR_2_uint4_t_uint4_t/CONST_SR_2_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/BIN_OP_OR_uint1_t_uint1_t_uint1_t/BIN_OP_OR_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vga_red/vga_red_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_green/vga_green_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/hsync/hsync_0CLK_23f04728.vhd ../built_in/MUX_uint25_t_uint1_t_uint25_t_uint25_t/MUX_uint25_t_uint1_t_uint25_t_uint25_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vga_blue/vga_blue_0CLK_23f04728.vhd ../built_in/BIN_OP_EQ_uint1_t_uint25_t_uint20_t/BIN_OP_EQ_uint1_t_uint25_t_uint20_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint10_t/BIN_OP_EQ_uint1_t_uint12_t_uint10_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint26_t_uint25_t_uint1_t/BIN_OP_PLUS_uint26_t_uint25_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint13_t_uint12_t_uint4_t/BIN_OP_PLUS_uint13_t_uint12_t_uint4_t_0CLK_de264c78.vhd ../top/top.vhd -e
top;' --
1. Executing GHDL.
Importing module top.
Importing module pmod_jb_0clk_23f04728.
Importing module pmod_jc_0clk_23f04728.
Importing module vga_0clk_83e31706.
Importing module vga_red_debug_output_main_0clk_23f04728.
Importing module vga_green_debug_output_main_0clk_23f04728.
Importing module vga_blue_debug_output_main_0clk_23f04728.
Importing module vsync_debug_output_main_0clk_23f04728.
Importing module hsync_debug_output_main_0clk_23f04728.
Importing module app_0clk_ebdb5920.
However, I can reproduce the crash using a container from hdl.github.io/containers:
# docker run --rm -itv /$(pwd)://wrk -w //wrk gcr.io/hdl-containers/ghdl/yosys bash
root@85b94f5f5387:/wrk# cd top
root@85b94f5f5387:/wrk/top# yosys -m ghdl -p "ghdl $(cat ../vhdl_files.txt) -e top;"
/----------------------------------------------------------------------------\
| |
| yosys -- Yosys Open SYnthesis Suite |
| |
| Copyright (C) 2012 - 2020 Claire Xenia Wolf <claire@yosyshq.com> |
| |
| Permission to use, copy, modify, and/or distribute this software for any |
| purpose with or without fee is hereby granted, provided that the above |
| copyright notice and this permission notice appear in all copies. |
| |
| THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| |
\----------------------------------------------------------------------------/
Yosys 0.9+4309 (git sha1 9432400e, clang 11.0.1-2 -fPIC -Os)
-- Running command `ghdl ../c_structs_pkg.pkg.vhd ../clk_cross_entities.vhd ../clk_cross_t_pkg.pkg.vhd ../top/top_5681.vhd ../examples/arty/src/vga/test_pattern.c/vga_blue_DEBUG_OUTPUT_MAIN/vga_blue_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/vga_pmod.c/vga/vga_0CLK_83e31706.vhd ../examples/arty/src/vga/test_pattern.c/vsync_DEBUG_OUTPUT_MAIN/vsync_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/app/app_0CLK_ebdb5920.vhd ../examples/arty/src/vga/../pmod/pmod_jc.c/pmod_jc/pmod_jc_0CLK_23f04728.vhd ../examples/arty/src/vga/../pmod/pmod_jb.c/pmod_jb/pmod_jb_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_red_DEBUG_OUTPUT_MAIN/vga_red_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/hsync_DEBUG_OUTPUT_MAIN/hsync_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_green_DEBUG_OUTPUT_MAIN/vga_green_DEBUG_OUTPUT_MAIN_0CLK_23f04728.vhd ../built_in/BIN_OP_EQ_uint1_t_uint1_t_uint1_t/BIN_OP_EQ_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/MUX_uint1_t_uint1_t_uint1_t_uint1_t/MUX_uint1_t_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/CONST_SR_0_uint4_t_uint4_t/CONST_SR_0_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/MUX_uint12_t_uint1_t_uint12_t_uint12_t/MUX_uint12_t_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint13_t_uint12_t_uint1_t/BIN_OP_PLUS_uint13_t_uint12_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_AND_uint1_t_uint1_t_uint1_t/BIN_OP_AND_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint13_t/BIN_OP_LT_uint1_t_uint12_t_uint13_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint10_t/BIN_OP_LT_uint1_t_uint12_t_uint10_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint11_t/BIN_OP_EQ_uint1_t_uint12_t_uint11_t_0CLK_de264c78.vhd ../built_in/BIN_OP_MINUS_uint12_t_uint12_t_uint1_t/BIN_OP_MINUS_uint12_t_uint12_t_uint1_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vsync/vsync_0CLK_23f04728.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint11_t/BIN_OP_LT_uint1_t_uint12_t_uint11_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint12_t/BIN_OP_EQ_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/CONST_SR_3_uint4_t_uint4_t/CONST_SR_3_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/CONST_SR_1_uint4_t_uint4_t/CONST_SR_1_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/BIN_OP_GTE_uint1_t_uint12_t_uint12_t/BIN_OP_GTE_uint1_t_uint12_t_uint12_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint2_t/BIN_OP_EQ_uint1_t_uint12_t_uint2_t_0CLK_de264c78.vhd ../built_in/BIN_OP_LT_uint1_t_uint12_t_uint9_t/BIN_OP_LT_uint1_t_uint12_t_uint9_t_0CLK_de264c78.vhd ../built_in/UNARY_OP_NOT_uint1_t_uint1_t/UNARY_OP_NOT_uint1_t_uint1_t_0CLK_de264c78.vhd ../built_in/MUX_uint4_t_uint1_t_uint4_t_uint4_t/MUX_uint4_t_uint1_t_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/CONST_SR_2_uint4_t_uint4_t/CONST_SR_2_uint4_t_uint4_t_0CLK_de264c78.vhd ../built_in/BIN_OP_OR_uint1_t_uint1_t_uint1_t/BIN_OP_OR_uint1_t_uint1_t_uint1_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vga_red/vga_red_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/vga_green/vga_green_0CLK_23f04728.vhd ../examples/arty/src/vga/test_pattern.c/hsync/hsync_0CLK_23f04728.vhd ../built_in/MUX_uint25_t_uint1_t_uint25_t_uint25_t/MUX_uint25_t_uint1_t_uint25_t_uint25_t_0CLK_de264c78.vhd ../examples/arty/src/vga/test_pattern.c/vga_blue/vga_blue_0CLK_23f04728.vhd ../built_in/BIN_OP_EQ_uint1_t_uint25_t_uint20_t/BIN_OP_EQ_uint1_t_uint25_t_uint20_t_0CLK_de264c78.vhd ../built_in/BIN_OP_EQ_uint1_t_uint12_t_uint10_t/BIN_OP_EQ_uint1_t_uint12_t_uint10_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint26_t_uint25_t_uint1_t/BIN_OP_PLUS_uint26_t_uint25_t_uint1_t_0CLK_de264c78.vhd ../built_in/BIN_OP_PLUS_uint13_t_uint12_t_uint4_t/BIN_OP_PLUS_uint13_t_uint12_t_uint4_t_0CLK_de264c78.vhd ../top/top.vhd -e
top;' --
1. Executing GHDL.
Importing module top.
Importing module pmod_jb_0clk_23f04728.
Importing module pmod_jc_0clk_23f04728.
Importing module vga_0clk_83e31706.
Importing module vga_red_debug_output_main_0clk_23f04728.
Importing module vga_green_debug_output_main_0clk_23f04728.
Importing module vga_blue_debug_output_main_0clk_23f04728.
Importing module vsync_debug_output_main_0clk_23f04728.
Importing module hsync_debug_output_main_0clk_23f04728.
Importing module app_0clk_ebdb5920.
raised STORAGE_ERROR : stack overflow or erroneous memory access
This is due to an infinite recursion.
In entity app_0CLK_ebdb5920
, some nets of read_pipe
are assigned in a circular way.
The design is clearly wrong, but a better error message is required.
But synthesizing app_0CLK_ebdb5920
only works. Weird.
@tgingold I can try to poke at the generated app_0CLK
entity see if I can find the circularity you describe. Did you say you see this in the netlist directly?
There are lines like so in the vhdl I could try to remove
-- Some tools dont like if read_pipe is never fully driven, dummy drive
read_pipe := write_pipe;
that look circular but arent really + lots of other variable usage that looks potentially circular but shouldnt be.
This design (VGA test pattern gen) synthesizes and work in hardware fine (without any comb. loop warnings/errors)
Also - this memory error from ghdl/yosys doesnt occur all the time in my testing only certain runs, certain batches of generated code - where the only difference should be like those hex code in names ex. app_0clk _ebdb5920
Hmmm...
Ah yes ok classic - "trying to support some tools
-- Some tools dont like if read_pipe is never fully driven, dummy drive
read_pipe := write_pipe;
And ending up breaking others"
I plan to fix this issue!
A few notes I would want cleared up if possible @tgingold and thanks so much for planning to have some fix on your end 🤙 right on
This one is circular: the process starts with:
write_pipe := read_pipe;
and finishes with:
read_pipe := write_pipe;
This is what I meant with ~looking circular but not actually being. These are variables local to a process using blocking assignments.
Seems like something like
write_pipe := read_pipe;
read_pipe := write_pipe;
should just evaluate to wires if I understand variables correctly - but I'd imagine it gets complicated with logic+other non blocking assignments in between those expressions
Like there is no question the process loops back reevaluating itself as the signals propagate, sensitivity list, etc
And could absolutely form a loop - and in this case I was silly to phrase the issue like above I think.
Because in this case its a question of the record elements of write_pipe
and read_pipe
as you also mentioned - how some are never assigned
You mention Some elements of this record are never assigned, so they are self-assigned.
and so I as you indicated I think you are onto some kind of fix in this regard eh.
Again thanks so much for your time
The version I'm using with the stack overflow issue is a Linux version tool compiled from github sources. Specifically:
$ ghdl --version
GHDL 2.0.0-dev (1.0.0.r794.g67ceca18) [Dunoon edition]
Compiled with GNAT Version: 8.3.0
llvm code generator
Written by Tristan Gingold.
Copyright (C) 2003 - 2021 Tristan Gingold.
GHDL is free software, covered by the GNU General Public License. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
$ yosys --version
Yosys 0.9+4303 (git sha1 c88eaea6, clang 7.0.1-8+deb10u2 -fPIC -Os)
$ uname -a
Linux maguilaptop 3.16.0-4-amd64 #1 SMP Debian 3.16.51-3 (2017-12-13) x86_64 GNU/Linux
Should now be fixed. Thank you for the issue.
Hello @tgingold I might be seeing a related issue.
ERROR: Assert `n.id != 0' failed in frontends/ghdl/ghdl.cc:204.
I was using verilator and seeing some circular logic warnings and thought about the before mentioned very circular looking
write_pipe := read_pipe;
...
-- Some tools dont like if read_pipe is never fully driven, dummy drive
read_pipe := write_pipe;
perhaps ending up with some kind of verilator circular loop too. So I commented it out
-- read_pipe := write_pipe;
Again I saw the GHDL warnings I was trying to avoid - but they are just warnings right?
example:
warning: no assignment for offsets 0:171 of variable "read_pipe"
However, it seems after getting last nights oss cad suite build I now hit that ghdl.cc:204
assertion.
Would you like a new github issue for this assertion hit?
Do you expect it related to 'unassigned variable record elements'? I.e. What does it mean to hit this?
Thanks again for your time.