DuneNvme: First import of file set.
authorTerry Barnaby <terry.barnaby@beam.beam.ltd.uk>
Sun, 26 Apr 2020 10:08:38 +0000 (11:08 +0100)
committerTerry Barnaby <terry.barnaby@beam.beam.ltd.uk>
Sun, 26 Apr 2020 10:08:38 +0000 (11:08 +0100)
82 files changed:
source/DuneNvme/Config.mk [new file with mode: 0644]
source/DuneNvme/Makefile [new file with mode: 0644]
source/DuneNvme/doc/Readme.pdf [new file with mode: 0644]
source/DuneNvme/docsrc/Makefile [new file with mode: 0644]
source/DuneNvme/docsrc/Readme.odt [new file with mode: 0644]
source/DuneNvme/docsrc/fpga_doxygen.dox [new file with mode: 0644]
source/DuneNvme/docsrc/fpga_overview.dox [new file with mode: 0644]
source/DuneNvme/docsrc/host_doxygen.dox [new file with mode: 0644]
source/DuneNvme/docsrc/host_overview.dox [new file with mode: 0644]
source/DuneNvme/license.txt [new file with mode: 0644]
source/DuneNvme/sim/Makefile [new file with mode: 0644]
source/DuneNvme/sim/testbench/TestPkg.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/genData.cpp [new file with mode: 0644]
source/DuneNvme/sim/testbench/test001-leds.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test001-leds.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test002-axil.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test002-axil.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test003-regs.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test003-regs.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test004-nvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test004-nvme.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test005-nvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test005-nvme.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test006-testdata.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test006-testdata.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test007-hostnvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test007-hostnvme.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test008-nvmeconfig.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test008-nvmeconfig.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test009-packets.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test009-packets.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test010-queueram.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test010-queueram.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test011-switch.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test011-switch.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test012-hostnvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test012-hostnvme.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test013-hostnvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test013-hostnvme.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test014-queueram.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test014-queueram.vhd [new file with mode: 0644]
source/DuneNvme/sim/testbench/test015-hostnvme.sav [new file with mode: 0644]
source/DuneNvme/sim/testbench/test015-hostnvme.vhd [new file with mode: 0644]
source/DuneNvme/src/AxilClockConverter.vhd [new file with mode: 0644]
source/DuneNvme/src/AxisClockConverter.vhd [new file with mode: 0644]
source/DuneNvme/src/DataFifo.vhd [new file with mode: 0644]
source/DuneNvme/src/DuneNvmeTestTop.vhd [new file with mode: 0644]
source/DuneNvme/src/DuneNvmeTestTop.xdc [new file with mode: 0644]
source/DuneNvme/src/NvmeConfig.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeQueues.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeSim.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeStorage.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeStorageIntPkg.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeStoragePkg.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeStorageUnit.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeStreamMux.vhd [new file with mode: 0644]
source/DuneNvme/src/NvmeWrite.vhd [new file with mode: 0644]
source/DuneNvme/src/StreamSwitch.vhd [new file with mode: 0644]
source/DuneNvme/src/TestData.vhd [new file with mode: 0644]
source/DuneNvme/src/ip/Axil_clock_converter.xci [new file with mode: 0644]
source/DuneNvme/src/ip/Axis_clock_converter.xci [new file with mode: 0644]
source/DuneNvme/src/ip/Clk_core.xci [new file with mode: 0644]
source/DuneNvme/src/ip/Pcie_host.xci [new file with mode: 0644]
source/DuneNvme/src/ip/Pcie_nvme0.xci [new file with mode: 0644]
source/DuneNvme/src/ip/blk_mem_gen_0.xci [new file with mode: 0644]
source/DuneNvme/test/BeamLibBasic.cpp [new file with mode: 0644]
source/DuneNvme/test/BeamLibBasic.h [new file with mode: 0644]
source/DuneNvme/test/Makefile [new file with mode: 0644]
source/DuneNvme/test/NvmeAccess.cpp [new file with mode: 0644]
source/DuneNvme/test/NvmeAccess.h [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/Makefile [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/bfpga.c [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/bfpga.h [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/bfpga.rules [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/dtest1.c [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/dtest2.c [new file with mode: 0644]
source/DuneNvme/test/bfpga_driver/dtest3.c [new file with mode: 0644]
source/DuneNvme/test/test_nvme.cpp [new file with mode: 0644]
source/DuneNvme/tools/pciRescan [new file with mode: 0755]
source/DuneNvme/tools/pciReset [new file with mode: 0755]
source/DuneNvme/vivado/Makefile [new file with mode: 0644]
source/DuneNvme/vivado/Vivado.mk [new file with mode: 0644]

diff --git a/source/DuneNvme/Config.mk b/source/DuneNvme/Config.mk
new file mode 100644 (file)
index 0000000..3f16918
--- /dev/null
@@ -0,0 +1,8 @@
+################################################################################
+#      Config.mk       Makefile build system settings
+#      T.Barnaby,      Beam Ltd,       2020-02-18
+################################################################################
+#
+PROJECT                = DuneNvme
+VERSION                = 0.1.1
+DOCDIR         ?= ${TOP}/doc/${PROJECT}
diff --git a/source/DuneNvme/Makefile b/source/DuneNvme/Makefile
new file mode 100644 (file)
index 0000000..15493c5
--- /dev/null
@@ -0,0 +1,35 @@
+################################################################################
+#      Makefile to build Dune NvmeStorage system
+#      T.Barnaby,      Beam Ltd,       2020-02-18
+################################################################################
+#
+TOP    = ../..
+include Config.mk
+
+.PHONY:        release
+
+all:
+       
+
+install:
+
+clean:
+       make -C vivado clean
+       make -C sim clean
+       make -C test clean
+       make -C docsrc clean
+
+distclean: clean
+       make -C vivado distclean
+       make -C docsrc distclean
+       make -C test distclean
+       
+release:
+       mkdir -p release
+       cp vivado/*.runs/impl_1/*.bit release/${PROJECT}-${VERSION}.bit
+
+docs:
+       make -C docsrc
+
+packages:
+       dnf install texlive-scheme-medium texlive-hanging texlive-stackengine texlive-etoc texlive-newunicodechar
diff --git a/source/DuneNvme/doc/Readme.pdf b/source/DuneNvme/doc/Readme.pdf
new file mode 100644 (file)
index 0000000..2633073
Binary files /dev/null and b/source/DuneNvme/doc/Readme.pdf differ
diff --git a/source/DuneNvme/docsrc/Makefile b/source/DuneNvme/docsrc/Makefile
new file mode 100644 (file)
index 0000000..f6952cf
--- /dev/null
@@ -0,0 +1,45 @@
+################################################################################
+#      Makefile to build Dune NvmeStorage documents
+#      T.Barnaby,      Beam Ltd,       2020-02-18
+################################################################################
+#
+TOP    = ../../..
+include ../Config.mk
+
+.PHONY:        config release
+
+all:   config docs
+
+config: .configured
+
+.configured: ../Config.mk
+       sed -i "s/PROJECT_NUMBER.*/PROJECT_NUMBER\t\t= ${VERSION}/g" fpga_doxygen.dox
+       sed -i "s/PROJECT_NUMBER.*/PROJECT_NUMBER\t\t= ${VERSION}/g" host_doxygen.dox
+       sed -i "s/\\\version.*/\\\version ${VERSION}/g" fpga_overview.dox
+       sed -i "s/\\\version.*/\\\version ${VERSION}/g" host_overview.dox
+       touch .configured
+
+install:
+       mkdir -p ${DOCDIR}/host ${DOCDIR}/fpga
+       cp -a ../doc/host/html ${DOCDIR}/host
+       cp -a ../doc/fpga/html ${DOCDIR}/fpga
+       cp -a ../doc/*.pdf ${DOCDIR}
+
+clean:
+
+distclean: clean
+       rm -fr ../doc/host ../doc/fpga
+       rm -f .configured
+       
+release:
+
+docs:
+       doxygen host_doxygen.dox
+       doxygen fpga_doxygen.dox
+       soffice --headless --convert-to pdf --outdir ../doc Readme.odt
+
+docspdf: docs
+       (cd ../doc/host/latex; make)
+       cp ../doc/host/latex/refman.pdf ../doc/${PROJECT}_host.pdf
+       (cd ../doc/fpga/latex; make)
+       cp ../doc/fpga/latex/refman.pdf ../doc/${PROJECT}_fpga.pdf
diff --git a/source/DuneNvme/docsrc/Readme.odt b/source/DuneNvme/docsrc/Readme.odt
new file mode 100644 (file)
index 0000000..2b0e237
Binary files /dev/null and b/source/DuneNvme/docsrc/Readme.odt differ
diff --git a/source/DuneNvme/docsrc/fpga_doxygen.dox b/source/DuneNvme/docsrc/fpga_doxygen.dox
new file mode 100644 (file)
index 0000000..386771b
--- /dev/null
@@ -0,0 +1,396 @@
+# Doxyfile 1.8.15
+
+PROJECT_NAME           = "DuneNvme"
+PROJECT_NUMBER         = 0.1.1
+PROJECT_BRIEF          = "This is a simple NVMe test environment that allows experimentation with the low level PCIe NVMe interfaces as available on a Xilinx FPGA environment."
+PROJECT_LOGO           =
+INPUT                  = fpga_overview.dox ../src
+OUTPUT_DIRECTORY       = ../doc/fpga
+OPTIMIZE_OUTPUT_VHDL   = YES
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+CREATE_SUBDIRS         = NO
+ALLOW_UNICODE_NAMES    = NO
+OUTPUT_LANGUAGE        = English
+OUTPUT_TEXT_DIRECTION  = None
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        =
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 4
+ALIASES                =
+TCL_SUBST              =
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+#OPTIMIZE_OUTPUT_VHDL   = NO
+OPTIMIZE_OUTPUT_SLICE  = NO
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+TOC_INCLUDE_HEADINGS   = 0
+AUTOLINK_SUPPORT       = YES
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING            = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
+TYPEDEF_HIDES_STRUCT   = NO
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_PACKAGE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES     = YES
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_AS_ERROR          = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+#INPUT                  = ../src
+NPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf \
+                         *.ice
+
+RECURSIVE              = YES
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXCLUDE_SYMBOLS        =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = NO
+HTML_DYNAMIC_MENUS     = YES
+HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+GENERATE_TREEVIEW      = NO
+ENUM_VALUES_PER_LINE   = 4
+TREEVIEW_WIDTH         = 250
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = YES
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         =
+MAKEINDEX_CMD_NAME     = makeindex
+LATEX_MAKEINDEX_CMD    = \makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES      =
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
+LATEX_TIMESTAMP        = NO
+LATEX_EMOJI_DIRECTORY  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_SUBDIR             =
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_PROGRAMLISTING     = YES
+XML_NS_MEMB_FILE_SCOPE = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             =
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES               =
+GENERATE_TAGFILE       =
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+EXTERNAL_PAGES         = YES
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            =
+DIA_PATH               =
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
+DOT_PATH               =
+DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+PLANTUML_JAR_PATH      =
+PLANTUML_CFG_FILE      =
+PLANTUML_INCLUDE_PATH  =
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
diff --git a/source/DuneNvme/docsrc/fpga_overview.dox b/source/DuneNvme/docsrc/fpga_overview.dox
new file mode 100644 (file)
index 0000000..b7d25b5
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ *     fpga_overview.doc       Main overview page for code
+ *******************************************************************************
+ */
+/**
+\author Dr Terry Barnaby
+\version 0.1.1
+\date 2020-04-26
+
+\mainpage
+
+\section Introduction
+This directory contains the DuneNvme storage system that provides data storage to NVMe devices as available on a Xilinx FPGA.
+The directory contains the source code, simulation environment, build environment and test software for the NVME test FPGA firmware as well as the nvme_test host software.
+
+See the Readme.pdf file for more information.
+
+\section Directories
+<table>
+<tr><td>src</td><td>The main VHDL source code</td></tr>
+<tr><td>ip-core</td><td>IP cores generated with Vivado</td></tr>
+<tr><td>sim</td><td>The simulation environment</td></tr>
+<tr><td>vivado</td><td>The build environment</td></tr>
+<tr><td>test</td><td>Host test programs accessing the FPGA firmware</td></tr>
+<tr><td>docsrc</td><td>Source for the documentation</td></tr>
+<tr><td>doc</td><td>Output for the documentation</td></tr>
+</table>
+
+\section The Test Program
+The test Linux host program is in the test directory and is called nvme_test. This program communicates with an NVMe device through the FPGA connected to the host machines PCIe
+bus. This program allows experimentation with the NVMe low level PCIe interface.
+
+\section Building the FPGA bit file and programming
+<ol>
+<li>cd vivado </li>
+<li><make clean/li>
+<li><make all/li>
+<li>make program</li>
+</ol>
+
+\section To Simulate FPGA
+
+<ol>
+<li>cd sim</li>
+<li>Edit Makefile and testbench files for simulation required</li>
+<li>make</li>
+<li>make view</li>
+</ol>
+
+*/
diff --git a/source/DuneNvme/docsrc/host_doxygen.dox b/source/DuneNvme/docsrc/host_doxygen.dox
new file mode 100644 (file)
index 0000000..49dd418
--- /dev/null
@@ -0,0 +1,396 @@
+# Doxyfile 1.8.15
+
+PROJECT_NAME           = "DuneNvme"
+PROJECT_NUMBER         = 0.1.1
+PROJECT_BRIEF          = "This is a simple NVMe test environment that allows experimentation with the low level PCIe NVMe interfaces as available on a Xilinx FPGA environment."
+PROJECT_LOGO           =
+INPUT                  = host_overview.dox ../test
+OUTPUT_DIRECTORY       = ../doc/host
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+CREATE_SUBDIRS         = NO
+ALLOW_UNICODE_NAMES    = NO
+OUTPUT_LANGUAGE        = English
+OUTPUT_TEXT_DIRECTION  = None
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        =
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 4
+ALIASES                =
+TCL_SUBST              =
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+#OPTIMIZE_OUTPUT_VHDL   = NO
+OPTIMIZE_OUTPUT_SLICE  = NO
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+TOC_INCLUDE_HEADINGS   = 0
+AUTOLINK_SUPPORT       = YES
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING            = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
+TYPEDEF_HIDES_STRUCT   = NO
+LOOKUP_CACHE_SIZE      = 0
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_PACKAGE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = NO
+HIDE_FRIEND_COMPOUNDS  = NO
+HIDE_IN_BODY_DOCS      = NO
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES     = YES
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = NO
+SORT_GROUP_NAMES       = NO
+SORT_BY_SCOPE_NAME     = NO
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_FILES             = YES
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
+QUIET                  = NO
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_AS_ERROR          = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+#INPUT                  = ../src
+NPUT_ENCODING         = UTF-8
+FILE_PATTERNS          = *.c \
+                         *.cc \
+                         *.cxx \
+                         *.cpp \
+                         *.c++ \
+                         *.java \
+                         *.ii \
+                         *.ixx \
+                         *.ipp \
+                         *.i++ \
+                         *.inl \
+                         *.idl \
+                         *.ddl \
+                         *.odl \
+                         *.h \
+                         *.hh \
+                         *.hxx \
+                         *.hpp \
+                         *.h++ \
+                         *.cs \
+                         *.d \
+                         *.php \
+                         *.php4 \
+                         *.php5 \
+                         *.phtml \
+                         *.inc \
+                         *.m \
+                         *.markdown \
+                         *.md \
+                         *.mm \
+                         *.dox \
+                         *.py \
+                         *.pyw \
+                         *.f90 \
+                         *.f95 \
+                         *.f03 \
+                         *.f08 \
+                         *.f \
+                         *.for \
+                         *.tcl \
+                         *.vhd \
+                         *.vhdl \
+                         *.ucf \
+                         *.qsf \
+                         *.ice
+
+RECURSIVE              = YES
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXCLUDE_SYMBOLS        =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       = *
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_EXTRA_STYLESHEET  =
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = NO
+HTML_DYNAMIC_MENUS     = YES
+HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          = org.doxygen.Project
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+GENERATE_TREEVIEW      = NO
+ENUM_VALUES_PER_LINE   = 4
+TREEVIEW_WIDTH         = 250
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = YES
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = YES
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         =
+MAKEINDEX_CMD_NAME     = makeindex
+LATEX_MAKEINDEX_CMD    = \makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES      =
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
+LATEX_TIMESTAMP        = NO
+LATEX_EMOJI_DIRECTORY  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+RTF_SOURCE_CODE        = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_SUBDIR             =
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_PROGRAMLISTING     = YES
+XML_NS_MEMB_FILE_SCOPE = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = NO
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             =
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES               =
+GENERATE_TAGFILE       =
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+EXTERNAL_PAGES         = YES
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+MSCGEN_PATH            =
+DIA_PATH               =
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = NO
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Helvetica
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
+DOT_PATH               =
+DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+PLANTUML_JAR_PATH      =
+PLANTUML_CFG_FILE      =
+PLANTUML_INCLUDE_PATH  =
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
diff --git a/source/DuneNvme/docsrc/host_overview.dox b/source/DuneNvme/docsrc/host_overview.dox
new file mode 100644 (file)
index 0000000..d108e2b
--- /dev/null
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ *     host_overview.doc       Main overview page for code
+ *******************************************************************************
+ */
+/**
+\author Dr Terry Barnaby
+\version 0.1.1
+\date 2020-04-26
+
+\mainpage
+
+\section Introduction
+This directory contains a simple NVMe test environment that allows experimentation with the low level PCIe NVMe interfaces as available on a Xilinx FPGA environment.
+The directory contains the source code, simulation environment and build environment for the NVME test FPGA firmware as well as the nvme_test host software.
+
+See the Readme.pdf file for more information.
+
+\section Directories
+<table>
+<tr><td>src</td><td>The main VHDL source code</td></tr>
+<tr><td>ip-core</td><td>IP cores generated with Vivado</td></tr>
+<tr><td>sim</td><td>The simulation environment</td></tr>
+<tr><td>vivado</td><td>The build environment</td></tr>
+<tr><td>test</td><td>Host test programs accessing the FPGA firmware</td></tr>
+<tr><td>docsrc</td><td>Source for the documentation</td></tr>
+<tr><td>doc</td><td>Output for the documentation</td></tr>
+</table>
+
+\section The Test Program
+The test Linux host program is in the test directory and is called nvme_test. This program communicates with an NVMe device through the FPGA connected to the host machines PCIe
+bus. This program allows experimentation with the NVMe low level PCIe interface.
+
+\section Building the FPGA bit file and programming
+<ol>
+<li>cd vivado </li>
+<li><make clean/li>
+<li><make all/li>
+<li>make program</li>
+</ol>
+
+\section To Simulate FPGA
+
+<ol>
+<li>cd sim</li>
+<li>Edit Makefile and testbench files for simulation required</li>
+<li>make</li>
+<li>make view</li>
+</ol>
+
+*/
diff --git a/source/DuneNvme/license.txt b/source/DuneNvme/license.txt
new file mode 100644 (file)
index 0000000..f288702
--- /dev/null
@@ -0,0 +1,674 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.  We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors.  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights.  Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received.  You must make sure that they, too, receive
+or can get the source code.  And you must show them these terms so they
+know their rights.
+
+  Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+  For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software.  For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+  Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so.  This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software.  The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable.  Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products.  If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+  Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary.  To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Use with the GNU Affero General Public License.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 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, see <https://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+    <program>  Copyright (C) <year>  <name of author>
+    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<https://www.gnu.org/licenses/>.
+
+  The GNU General Public License does not permit incorporating your program
+into proprietary programs.  If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.  But first, please read
+<https://www.gnu.org/licenses/why-not-lgpl.html>.
diff --git a/source/DuneNvme/sim/Makefile b/source/DuneNvme/sim/Makefile
new file mode 100644 (file)
index 0000000..9ba196d
--- /dev/null
@@ -0,0 +1,98 @@
+################################################################################
+#      Makefile        VHDL simulation
+#                      T. Barnaby,     Beam Ltd,       2011-07-17
+################################################################################
+#
+
+# The Test
+#TEST  = test001-leds
+#TEST  = test002-axil
+#TEST  = test003-regs
+#TEST  = test004-nvme
+#TEST  = test005-nvme
+#TEST  = test006-testdata
+#TEST  = test007-hostnvme
+#TEST  = test008-nvmeconfig
+#TEST  = test009-packets
+
+#TEST  = test010-queueram
+#TEST  = test011-switch
+#TEST  = test012-hostnvme
+#TEST  = test013-hostnvme
+#TEST  = test014-queueram
+TEST   = test015-hostnvme
+
+# VHDL source files
+FILES_BASE     += testbench/TestPkg.vhd ../src/NvmeStoragePkg.vhd ../src/NvmeStorageIntPkg.vhd ../src/AxilClockConverter.vhd ../src/AxisClockConverter.vhd 
+FILES_BASE     += ../src/NvmeStreamMux.vhd
+FILES_SYSTEM   = ../src/NvmeStorageUnit.vhd ../src/NvmeSim.vhd ../src/NvmeConfig.vhd ../src/StreamSwitch.vhd ../src/NvmeQueues.vhd
+
+# Test files
+FILES_test001-leds += testbench/${TEST}.vhd ${FILES_BASE} ../src/LedCount.vhd
+FILES_test002-axil += testbench/${TEST}.vhd ${FILES_BASE} ../src/AxilToCfg.vhd
+FILES_test003-regs += testbench/${TEST}.vhd ${FILES_BASE} ../src/NvmeStorage.vhd
+FILES_test004-nvme += testbench/${TEST}.vhd ${FILES_BASE} ../src/NvmeSim.vhd
+FILES_test005-nvme += testbench/${TEST}.vhd ${FILES_BASE} ../src/NvmeSim.vhd
+FILES_test006-testdata += testbench/${TEST}.vhd ${FILES_BASE} ../src/TestData.vhd
+FILES_test007-hostnvme += testbench/${TEST}.vhd ${FILES_BASE}  ../src/NvmeStorage.vhd ../src/NvmeSim.vhd
+FILES_test008-nvmeconfig += testbench/${TEST}.vhd ${FILES_BASE}  ../src/NvmeStorage.vhd ../src/NvmeSim.vhd ../src/NvmeConfig.vhd
+FILES_test009-packets += testbench/${TEST}.vhd ${FILES_BASE}  ../src/NvmeStorageUnit.vhd ../src/NvmeSim.vhd ../src/NvmeConfig.vhd
+FILES_test010-queueram += testbench/${TEST}.vhd ${FILES_BASE}  ../src/NvmeQueues.vhd ../src/NvmeConfig.vhd
+FILES_test011-switch += testbench/${TEST}.vhd ${FILES_BASE} ../src/StreamSwitch.vhd
+FILES_test012-hostnvme += testbench/${TEST}.vhd ${FILES_BASE} ${FILES_SYSTEM}
+FILES_test013-hostnvme += testbench/${TEST}.vhd ${FILES_BASE} ${FILES_SYSTEM}
+FILES_test014-queueram += testbench/${TEST}.vhd ${FILES_BASE}  ../src/NvmeQueues.vhd
+FILES_test015-hostnvme += testbench/${TEST}.vhd ${FILES_BASE} ${FILES_SYSTEM}
+
+# VHDL testbench files
+STOP   = test
+SVIEW  = testbench/${TEST}.sav
+
+FILES  = ${FILES_${TEST}}
+
+# Options
+#GFLAGS        = --ieee=synopsys --warn-no-vital-generic
+GFLAGS = --ieee=synopsys --warn-no-unused
+GFLAGS += -fexplicit
+GFLAGS += -Psimu
+SFLAGS = --assert-level=error
+#SFLAGS += --stop-time=300ns
+SFLAGS += --stop-time=30us
+
+#GFLAGS        += --std=08
+
+.PHONY: isim
+
+all:   compile run
+
+compile: unisim
+       ghdl -i $(GFLAGS) --workdir=simu --work=work $(FILES)
+       ghdl -m $(GFLAGS) --workdir=simu --work=work $(STOP)
+       @mv $(STOP) simu/$(STOP)
+
+run:
+       #@simu/$(STOP) $(SFLAGS) --vcd=simu/$(STOP).vcd
+       @simu/$(STOP) $(SFLAGS) --wave=simu/$(STOP).ghw
+
+view:
+       #gtkwave --vcd -f simu/$(STOP).vcd -a ${SVIEW}
+       #gtkwave simu/$(STOP).vcd -a ${SVIEW}
+       gtkwave -f simu/$(STOP).ghw -a ${SVIEW}
+
+clean:
+       rm -f simu/* e~test.o
+
+unisim: simu/unisim-obj93.cf
+
+simu/unisim-obj93.cf:
+       ghdl -i $(GFLAGS) --workdir=simu --work=unisim /opt/Xilinx/Vivado/2019.2/data/vhdl/src/unisims/*.vhd
+       ghdl -i $(GFLAGS) --workdir=simu --work=unisim /opt/Xilinx/Vivado/2019.2/data/vhdl/src/unisims/primitive/*.vhd
+       #ghdl -i $(GFLAGS) --workdir=simu --work=xilinxcorelib /opt/Xilinx/13.4/ISE_DS/ISE/vhdl/src/XilinxCoreLib/*.vhd
+
+setup:
+       mkdir -p bin simu src testbench work unisim
+
+isim:
+       rm -f ${TEST}.prj
+       (for f in $(SFILES) ${FILES}; do echo vhdl work "$$f" >> ${TEST}.prj; done)
+       fuse -prj ${TEST}.prj work.test -o ${TEST} && ./${TEST} -gui
diff --git a/source/DuneNvme/sim/testbench/TestPkg.vhd b/source/DuneNvme/sim/testbench/TestPkg.vhd
new file mode 100644 (file)
index 0000000..2898c63
--- /dev/null
@@ -0,0 +1,160 @@
+--------------------------------------------------------------------------------
+--     TestPkg.vhd, Common bits for test harnesses
+--     T.Barnaby, Beam Ltd. 2020-03-18
+-------------------------------------------------------------------------------
+--!
+--! @class     TestPkg
+--! @author    Terry Barnaby (terry.barnaby@beam.ltd.uk)
+--! @date      2020-04-21
+--! @version   0.0.1
+--!
+--! @brief
+--! This package provides definitions for the NvmeStorage system internals.
+--!
+--! @details
+--!
+--! @copyright GNU GPL License
+--! Copyright (c) Beam Ltd, All rights reserved. <br>
+--! This code is free software: you can redistribute it and/or modify
+--! it under the terms of the GNU General Public License as published by
+--! the Free Software Foundation, either version 3 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. <br>
+--! You should have received a copy of the GNU General Public License
+--! along with this code. If not, see <https://www.gnu.org/licenses/>.
+--!
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+library work;
+use work.NvmeStoragePkg.all;
+use work.NvmeStorageIntPkg.all;
+
+package TestPkg is
+       procedure pcieRequestWrite(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; request: in integer; address: in integer; tag: in integer; count: in integer; data: in integer);
+       procedure pcieRequestRead(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; request: in integer; address: in integer; tag: in integer; count: in integer);
+       procedure pcieReply(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; status: in integer; address: in integer; tag: in integer; count: in integer; data: in integer);
+       procedure busWrite(signal clk: std_logic; signal toSlave: out AxilToSlaveType; signal toMaster: in AxilToMasterType; address: in integer; data: in integer);
+end;
+
+package body TestPkg is
+       procedure pcieRequestWrite(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; request: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+       variable packetHead     : PcieRequestHeadType;
+       variable c              : integer;
+       variable d              : integer;
+       begin
+               packetHead.address := to_unsigned(address, packetHead.address'length);
+               packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+               packetHead.count := to_unsigned(count, packetHead.count'length);
+               packetHead.request := to_unsigned(request, packetHead.request'length);
+               packetHead.requesterId := to_unsigned(requesterId, packetHead.requesterId'length);
+
+               c := count;
+               d := data;
+
+               -- Send Header
+               wait until rising_edge(clk);
+               stream.data <= to_stl(packetHead);
+               stream.keep <= concat('1', 16);
+               stream.valid <= '1';
+
+               while(c > 0) loop
+                       wait until rising_edge(clk) and (stream.ready = '1');
+                       
+                       -- Note enclodes requester ID for queue write entry
+                       stream.data <=  to_stl(d + 3, 32) & to_stl(d + 2, 32) & to_stl(d + 1, 32) & to_stl(requesterId, 8) & to_stl(d, 24);
+
+                       stream.keep <= keepBits(c);
+                       stream.valid <= '1';
+                       d := d + 4;
+                       c := c - 4;
+               end loop;
+               stream.last <= '1';
+
+               wait until rising_edge(clk) and (stream.ready = '1');
+               stream.valid <= '0';
+               stream.last <= '0';
+       end procedure;
+
+       procedure pcieRequestRead(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; request: in integer; address: in integer; tag: in integer; count: in integer) is
+       variable packetHead     : PcieRequestHeadType;
+       variable c              : integer;
+       variable d              : integer;
+       begin
+               packetHead.address := to_unsigned(address, packetHead.address'length);
+               packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+               packetHead.count := to_unsigned(count, packetHead.count'length);
+               packetHead.request := to_unsigned(request, packetHead.request'length);
+               packetHead.requesterId := to_unsigned(requesterId, packetHead.requesterId'length);
+
+               -- Write address
+               wait until rising_edge(clk);
+               stream.data <= to_stl(packetHead);
+               stream.keep <= concat('1', 16);
+               stream.valid <= '1';
+               stream.last <= '1';
+
+               wait until rising_edge(clk) and (stream.ready = '1');
+               stream.valid <= '0';
+               stream.last <= '0';
+       end procedure;
+
+       procedure pcieReply(signal clk: std_logic; signal stream: inout AxisStreamType; requesterId: in integer; status: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+       variable packetHead     : PcieReplyHeadType;
+       variable c              : integer;
+       variable d              : integer;
+       begin
+               packetHead.byteCount := to_unsigned(count * 4, packetHead.byteCount'length);
+               packetHead.error := to_unsigned(0, packetHead.error'length);
+               packetHead.address := to_unsigned(address, packetHead.address'length);
+               packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+               packetHead.count := to_unsigned(count, packetHead.count'length);
+               packetHead.status := to_unsigned(status, packetHead.status'length);
+               packetHead.requesterId := to_unsigned(requesterId, packetHead.requesterId'length);
+               c := (count + 3) / 4;
+               d := data;
+
+               -- Write address
+               wait until rising_edge(clk);
+               stream.data <= to_stl(d, 32) &to_stl(packetHead);
+               stream.keep <= concat('1', 16);
+               stream.valid <= '1';
+               d := d + 1;
+
+               while(c > 0) loop
+                       wait until rising_edge(clk) and (stream.ready = '1');
+                       stream.data <= to_stl(d + 3, 32) & to_stl(d + 2, 32) & to_stl(d + 1, 32) & to_stl(d, 32);
+                       stream.valid <= '1';
+                       d := d + 4;
+                       c := c - 1;
+               end loop;
+               stream.last <= '1';
+               stream.keep <= concat('0', 4) & concat('1', 12);                -- Hard coded for multiple of 4 data words
+
+               wait until rising_edge(clk) and (stream.ready = '1');
+               stream.valid <= '0';
+               stream.last <= '0';
+       end procedure;
+       
+       procedure busWrite(signal clk: std_logic; signal toSlave: out AxilToSlaveType; signal toMaster: in AxilToMasterType; address: in integer; data: in integer) is
+       begin
+               -- Write address
+               wait until rising_edge(clk);
+               toSlave.awaddr <= to_AxilAddress(address);
+               toSlave.awvalid <= '1';
+
+               wait until rising_edge(clk) and (toMaster.awready = '1');
+               toSlave.awvalid <= '0';
+
+               -- Write data
+               toSlave.wvalid <= '1';
+               toSlave.wdata <= to_AxilData(data);
+
+               wait until rising_edge(clk) and (toMaster.wready = '1');
+               toSlave.wvalid <= '0';
+       end procedure;
+end;
diff --git a/source/DuneNvme/sim/testbench/genData.cpp b/source/DuneNvme/sim/testbench/genData.cpp
new file mode 100644 (file)
index 0000000..5df1792
--- /dev/null
@@ -0,0 +1,94 @@
+#include <stdio.h>
+
+void outputBinary(FILE* file, unsigned int v){
+       int     b;
+       
+       for(b = 31; b >= 0; b--){
+               if(v & (1 << b))
+                       fprintf(file, "1");
+               else
+                       fprintf(file, "0");
+       }
+       fprintf(file, "\n");
+}
+
+int output(FILE* file, unsigned int r, unsigned int i){
+       static int              state = 0;
+       static unsigned int     data[3];
+       
+//     printf("Output: %x, %x\n", r, i);
+       switch(state){
+       case 0:
+               data[0] = (r << 8) | (i >> 16);
+               data[1] = (i << 16);
+               state++;
+               break;
+       case 1:
+               data[1] |= (r >> 8);
+               data[2] = (r << 24) | i;
+
+#ifdef ZAP
+               printf("%8.8x\n", data[0]);
+               printf("%8.8x\n", data[1]);
+               printf("%8.8x\n", data[2]);
+#endif
+               fprintf(file, "%d\n", data[0]);
+               fprintf(file, "%d\n", data[1]);
+               fprintf(file, "%d\n", data[2]);
+
+//             outputBinary(file, data[0]);
+//             outputBinary(file, data[1]);
+//             outputBinary(file, data[2]);
+               state = 0;
+               break;
+       }
+       return 0;
+}
+
+void test1(FILE* file){
+       int             c;
+       unsigned int    r;
+       unsigned int    i;
+       
+       for(c = 0; c < 4096; c++){
+               r = c;
+               i = 0x10000 | c;
+               output(file, r, i);
+       }
+}
+
+void test2(FILE* file){
+       int             s;
+       int             sample = 0;;
+       int             subband;
+       int             numSamples = 8;
+       unsigned int    r;
+       unsigned int    i;
+       int             n;
+       
+       for(n = 0; n < 8; n++){
+               for(subband = 0; subband < 4; subband++){
+                       for(s = 0; s < numSamples; s++){
+//                             r = (0xF << 20) | (subband << 16) | s;
+//                             i = (0xE << 20) | (subband << 16) | s;
+                               r = (0x3 << 22) | (subband << 20) | ((sample + s) << 6);
+                               i = (0x2 << 22) | (subband << 20) | ((sample + s) << 6);
+                               output(file, r, i);
+                       }
+               }
+               sample += numSamples;
+       }
+}
+
+int main(){
+       FILE*           file;
+       
+       file = fopen("data.txt", "w");
+       
+//     test1(file);
+       test2(file);
+       
+       fclose(file);
+       
+       return 0;
+}
diff --git a/source/DuneNvme/sim/testbench/test001-leds.sav b/source/DuneNvme/sim/testbench/test001-leds.sav
new file mode 100644 (file)
index 0000000..b692cd6
--- /dev/null
@@ -0,0 +1,27 @@
+[*]
+[*] GTKWave Analyzer v3.3.102 (w)1999-2019 BSI
+[*] Tue Feb 18 14:23:01 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test002-leds/sim/simu/test.ghw"
+[dumpfile_mtime] "Tue Feb 18 14:22:44 2020"
+[dumpfile_size] 79311
+[savefile] "/src/dune/FpgaPlay/test002-leds/sim/testbench/test001-leds.sav"
+[timestart] 0
+[size] 1920 1019
+[pos] 3 0
+*-25.929588 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.ledcount0.
+[treeopen] top.vcomponents.
+[sst_width] 230
+[signals_width] 174
+[sst_expanded] 1
+[sst_vpaned_height] 290
+@28
+top.test.ledcount0.clk_i
+top.test.ledcount0.reset_i
+@22
+#{top.test.leds[7:0]} top.test.leds[7] top.test.leds[6] top.test.leds[5] top.test.leds[4] top.test.leds[3] top.test.leds[2] top.test.leds[1] top.test.leds[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test001-leds.vhd b/source/DuneNvme/sim/testbench/test001-leds.vhd
new file mode 100644 (file)
index 0000000..75cdf03
--- /dev/null
@@ -0,0 +1,75 @@
+--------------------------------------------------------------------------------
+--     Test001.vhd     Simple Leds
+--                     T.Barnaby,      Beam Ltd.       2020-02-18
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+use ieee.std_logic_arith.all;
+use ieee.std_logic_misc.all;
+use ieee.std_logic_textio.all;
+use std.textio.all; 
+
+--library work;
+--use work.PacketLink.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component LedCount is
+generic (
+       Simulate        : boolean       := True;
+       Divider         : integer       := 4
+);
+port (
+       clk_p   : in std_logic;
+       clk_n   : in std_logic;
+       reset   : in std_logic;
+       leds    : out std_logic_vector(7 downto 0)
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+
+signal clk_p           : std_logic := '1';
+signal clk_n           : std_logic := '0';
+signal reset           : std_logic := '0';
+signal leds            : std_logic_vector(7 downto 0);
+
+begin
+       ledCount0 : LedCount port map (
+               clk_p           => clk_p,
+               clk_n           => clk_n,
+               reset           => reset,
+               leds            => leds
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk_p  <= not clk_p;
+       end process clock;
+
+       clk_n <= not clk_p;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 50 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               --assert false report "simulation ended" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test002-axil.sav b/source/DuneNvme/sim/testbench/test002-axil.sav
new file mode 100644 (file)
index 0000000..291f19b
--- /dev/null
@@ -0,0 +1,40 @@
+[*]
+[*] GTKWave Analyzer v3.3.102 (w)1999-2019 BSI
+[*] Fri Feb 28 13:14:29 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test007-axi/sim/simu/test.ghw"
+[dumpfile_mtime] "Fri Feb 28 12:49:20 2020"
+[dumpfile_size] 3404
+[savefile] "/src/dune/FpgaPlay/test007-axi/sim/testbench/test002-axil.sav"
+[timestart] 0
+[size] 1730 871
+[pos] -1 -1
+*-26.000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.axil.
+[treeopen] top.test.axil.tomaster.
+[treeopen] top.test.axil.toslave.
+[sst_width] 299
+[signals_width] 230
+[sst_expanded] 1
+[sst_vpaned_height] 339
+@28
+top.test.clk
+top.test.reset
+top.test.axil.toslave.awvalid
+top.test.axil.tomaster.awready
+@22
+#{top.test.axil.toslave.awaddr[31:0]} top.test.axil.toslave.awaddr[31] top.test.axil.toslave.awaddr[30] top.test.axil.toslave.awaddr[29] top.test.axil.toslave.awaddr[28] top.test.axil.toslave.awaddr[27] top.test.axil.toslave.awaddr[26] top.test.axil.toslave.awaddr[25] top.test.axil.toslave.awaddr[24] top.test.axil.toslave.awaddr[23] top.test.axil.toslave.awaddr[22] top.test.axil.toslave.awaddr[21] top.test.axil.toslave.awaddr[20] top.test.axil.toslave.awaddr[19] top.test.axil.toslave.awaddr[18] top.test.axil.toslave.awaddr[17] top.test.axil.toslave.awaddr[16] top.test.axil.toslave.awaddr[15] top.test.axil.toslave.awaddr[14] top.test.axil.toslave.awaddr[13] top.test.axil.toslave.awaddr[12] top.test.axil.toslave.awaddr[11] top.test.axil.toslave.awaddr[10] top.test.axil.toslave.awaddr[9] top.test.axil.toslave.awaddr[8] top.test.axil.toslave.awaddr[7] top.test.axil.toslave.awaddr[6] top.test.axil.toslave.awaddr[5] top.test.axil.toslave.awaddr[4] top.test.axil.toslave.awaddr[3] top.test.axil.toslave.awaddr[2] top.test.axil.toslave.awaddr[1] top.test.axil.toslave.awaddr[0]
+@29
+top.test.axil.toslave.wvalid
+@28
+top.test.axil.tomaster.wready
+top.test.axiltocfg0.cfg_mgmt_write
+@22
+#{top.test.cfg_mgmt_addr[18:0]} top.test.cfg_mgmt_addr[18] top.test.cfg_mgmt_addr[17] top.test.cfg_mgmt_addr[16] top.test.cfg_mgmt_addr[15] top.test.cfg_mgmt_addr[14] top.test.cfg_mgmt_addr[13] top.test.cfg_mgmt_addr[12] top.test.cfg_mgmt_addr[11] top.test.cfg_mgmt_addr[10] top.test.cfg_mgmt_addr[9] top.test.cfg_mgmt_addr[8] top.test.cfg_mgmt_addr[7] top.test.cfg_mgmt_addr[6] top.test.cfg_mgmt_addr[5] top.test.cfg_mgmt_addr[4] top.test.cfg_mgmt_addr[3] top.test.cfg_mgmt_addr[2] top.test.cfg_mgmt_addr[1] top.test.cfg_mgmt_addr[0]
+#{top.test.cfg_mgmt_write_data[31:0]} top.test.cfg_mgmt_write_data[31] top.test.cfg_mgmt_write_data[30] top.test.cfg_mgmt_write_data[29] top.test.cfg_mgmt_write_data[28] top.test.cfg_mgmt_write_data[27] top.test.cfg_mgmt_write_data[26] top.test.cfg_mgmt_write_data[25] top.test.cfg_mgmt_write_data[24] top.test.cfg_mgmt_write_data[23] top.test.cfg_mgmt_write_data[22] top.test.cfg_mgmt_write_data[21] top.test.cfg_mgmt_write_data[20] top.test.cfg_mgmt_write_data[19] top.test.cfg_mgmt_write_data[18] top.test.cfg_mgmt_write_data[17] top.test.cfg_mgmt_write_data[16] top.test.cfg_mgmt_write_data[15] top.test.cfg_mgmt_write_data[14] top.test.cfg_mgmt_write_data[13] top.test.cfg_mgmt_write_data[12] top.test.cfg_mgmt_write_data[11] top.test.cfg_mgmt_write_data[10] top.test.cfg_mgmt_write_data[9] top.test.cfg_mgmt_write_data[8] top.test.cfg_mgmt_write_data[7] top.test.cfg_mgmt_write_data[6] top.test.cfg_mgmt_write_data[5] top.test.cfg_mgmt_write_data[4] top.test.cfg_mgmt_write_data[3] top.test.cfg_mgmt_write_data[2] top.test.cfg_mgmt_write_data[1] top.test.cfg_mgmt_write_data[0]
+@28
+top.test.axiltocfg0.cfg_mgmt_read
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test002-axil.vhd b/source/DuneNvme/sim/testbench/test002-axil.vhd
new file mode 100644 (file)
index 0000000..827de77
--- /dev/null
@@ -0,0 +1,133 @@
+--------------------------------------------------------------------------------
+--     Test002-axil.vhd        Simple AXI lite interface tests
+--     T.Barnaby,      Beam Ltd.       2020-02-18
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+--use ieee.std_logic_unsigned.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.Axil.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component AxilToCfg is
+generic(
+       Simulate        : boolean       := False
+);
+port (
+       clk                             : in std_logic;
+       reset                           : in std_logic;
+
+       axilIn                          : in AxilToSlave;
+       axilOut                         : out AxilToMaster;
+       
+       cfg_mgmt_addr                   : out std_logic_vector(18 downto 0);
+       cfg_mgmt_write                  : out std_logic;
+       cfg_mgmt_write_data             : out std_logic_vector(31 downto 0);
+       cfg_mgmt_byte_enable            : out std_logic_vector(3 downto 0);
+       cfg_mgmt_read                   : out std_logic;
+       cfg_mgmt_read_data              : in std_logic_vector(31 downto 0);
+       cfg_mgmt_read_write_done        : in std_logic;
+       cfg_mgmt_type1_cfg_reg_access   : out std_logic
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+signal axil            : AxilInterface;
+
+signal cfg_mgmt_addr                   : std_logic_vector(18 downto 0);
+signal cfg_mgmt_write                  : std_logic;
+signal cfg_mgmt_write_data             : std_logic_vector(31 downto 0);
+signal cfg_mgmt_byte_enable            : std_logic_vector(3 downto 0);
+signal cfg_mgmt_read                   : std_logic;
+signal cfg_mgmt_read_data              : std_logic_vector(31 downto 0);
+signal cfg_mgmt_read_write_done                : std_logic;
+signal cfg_mgmt_type1_cfg_reg_access   : std_logic;
+
+function toAxilAddress(v: integer)     return std_logic_vector is
+begin
+       return std_logic_vector(to_unsigned(v, AxilAddressWidth));
+end function;
+
+procedure busWrite(signal toSlave: out AxilToSlave; signal toMaster: in AxilToMaster; address: in integer; data: in integer) is
+begin
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.awaddr <= toAxilAddress(address) after TCQ;
+       toSlave.awvalid <= '1' after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.awready = '1');
+       toSlave.awvalid <= '0' after TCQ;
+
+       -- Write data
+       toSlave.wvalid <= '1' after TCQ;
+       toSlave.wdata <= toAxilAddress(data) after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.wready = '1');
+       toSlave.wvalid <= '0' after TCQ;
+               
+end procedure;
+
+       
+begin
+       axilToCfg0 : AxilToCfg port map (
+               clk                             => clk,
+               reset                           => reset,
+
+               axilIn                          => axil.toSlave,
+               axilOut                         => axil.toMaster,
+
+               cfg_mgmt_addr                   => cfg_mgmt_addr,
+               cfg_mgmt_write                  => cfg_mgmt_write,
+               cfg_mgmt_write_data             => cfg_mgmt_write_data,
+               cfg_mgmt_byte_enable            => cfg_mgmt_byte_enable,
+               cfg_mgmt_read                   => cfg_mgmt_read,
+               cfg_mgmt_read_data              => cfg_mgmt_read_data,
+               cfg_mgmt_read_write_done        => cfg_mgmt_read_write_done,
+               cfg_mgmt_type1_cfg_reg_access   => cfg_mgmt_type1_cfg_reg_access
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 50 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+
+               axil.toSlave.awvalid <= '0';
+               axil.toSlave.wvalid <= '0';
+               axil.toSlave.arvalid <= '0';
+               
+               wait until reset = '0';
+               busWrite(axil.toSlave, axil.toMaster, 1, 2);
+               wait;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test003-regs.sav b/source/DuneNvme/sim/testbench/test003-regs.sav
new file mode 100644 (file)
index 0000000..7fc1412
--- /dev/null
@@ -0,0 +1,41 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Mon Mar  2 07:56:01 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test008-nvme/sim/simu/test.ghw"
+[dumpfile_mtime] "Mon Mar  2 07:17:55 2020"
+[dumpfile_size] 11669
+[savefile] "/src/dune/FpgaPlay/test008-nvme/sim/testbench/test003-regs.sav"
+[timestart] 0
+[size] 1907 820
+[pos] 1923 0
+*-26.000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.axil.
+[treeopen] top.test.axil.tomaster.
+[treeopen] top.test.axil.toslave.
+[treeopen] top.test.nvmestorage0.
+[sst_width] 322
+[signals_width] 184
+[sst_expanded] 1
+[sst_vpaned_height] 342
+@28
+top.test.clk
+top.test.reset
+top.test.axil.toslave.awvalid
+top.test.axil.tomaster.awready
+top.test.axil.toslave.wvalid
+top.test.axil.tomaster.wready
+top.test.axil.toslave.arvalid
+top.test.axil.tomaster.arready
+top.test.axil.tomaster.rvalid
+top.test.axil.toslave.rready
+@22
+#{top.test.axil.toslave.araddr[31:0]} top.test.axil.toslave.araddr[31] top.test.axil.toslave.araddr[30] top.test.axil.toslave.araddr[29] top.test.axil.toslave.araddr[28] top.test.axil.toslave.araddr[27] top.test.axil.toslave.araddr[26] top.test.axil.toslave.araddr[25] top.test.axil.toslave.araddr[24] top.test.axil.toslave.araddr[23] top.test.axil.toslave.araddr[22] top.test.axil.toslave.araddr[21] top.test.axil.toslave.araddr[20] top.test.axil.toslave.araddr[19] top.test.axil.toslave.araddr[18] top.test.axil.toslave.araddr[17] top.test.axil.toslave.araddr[16] top.test.axil.toslave.araddr[15] top.test.axil.toslave.araddr[14] top.test.axil.toslave.araddr[13] top.test.axil.toslave.araddr[12] top.test.axil.toslave.araddr[11] top.test.axil.toslave.araddr[10] top.test.axil.toslave.araddr[9] top.test.axil.toslave.araddr[8] top.test.axil.toslave.araddr[7] top.test.axil.toslave.araddr[6] top.test.axil.toslave.araddr[5] top.test.axil.toslave.araddr[4] top.test.axil.toslave.araddr[3] top.test.axil.toslave.araddr[2] top.test.axil.toslave.araddr[1] top.test.axil.toslave.araddr[0]
+#{top.test.axil.tomaster.rdata[31:0]} top.test.axil.tomaster.rdata[31] top.test.axil.tomaster.rdata[30] top.test.axil.tomaster.rdata[29] top.test.axil.tomaster.rdata[28] top.test.axil.tomaster.rdata[27] top.test.axil.tomaster.rdata[26] top.test.axil.tomaster.rdata[25] top.test.axil.tomaster.rdata[24] top.test.axil.tomaster.rdata[23] top.test.axil.tomaster.rdata[22] top.test.axil.tomaster.rdata[21] top.test.axil.tomaster.rdata[20] top.test.axil.tomaster.rdata[19] top.test.axil.tomaster.rdata[18] top.test.axil.tomaster.rdata[17] top.test.axil.tomaster.rdata[16] top.test.axil.tomaster.rdata[15] top.test.axil.tomaster.rdata[14] top.test.axil.tomaster.rdata[13] top.test.axil.tomaster.rdata[12] top.test.axil.tomaster.rdata[11] top.test.axil.tomaster.rdata[10] top.test.axil.tomaster.rdata[9] top.test.axil.tomaster.rdata[8] top.test.axil.tomaster.rdata[7] top.test.axil.tomaster.rdata[6] top.test.axil.tomaster.rdata[5] top.test.axil.tomaster.rdata[4] top.test.axil.tomaster.rdata[3] top.test.axil.tomaster.rdata[2] top.test.axil.tomaster.rdata[1] top.test.axil.tomaster.rdata[0]
+#{top.test.nvmestorage0.reg_control[31:0]} top.test.nvmestorage0.reg_control[31] top.test.nvmestorage0.reg_control[30] top.test.nvmestorage0.reg_control[29] top.test.nvmestorage0.reg_control[28] top.test.nvmestorage0.reg_control[27] top.test.nvmestorage0.reg_control[26] top.test.nvmestorage0.reg_control[25] top.test.nvmestorage0.reg_control[24] top.test.nvmestorage0.reg_control[23] top.test.nvmestorage0.reg_control[22] top.test.nvmestorage0.reg_control[21] top.test.nvmestorage0.reg_control[20] top.test.nvmestorage0.reg_control[19] top.test.nvmestorage0.reg_control[18] top.test.nvmestorage0.reg_control[17] top.test.nvmestorage0.reg_control[16] top.test.nvmestorage0.reg_control[15] top.test.nvmestorage0.reg_control[14] top.test.nvmestorage0.reg_control[13] top.test.nvmestorage0.reg_control[12] top.test.nvmestorage0.reg_control[11] top.test.nvmestorage0.reg_control[10] top.test.nvmestorage0.reg_control[9] top.test.nvmestorage0.reg_control[8] top.test.nvmestorage0.reg_control[7] top.test.nvmestorage0.reg_control[6] top.test.nvmestorage0.reg_control[5] top.test.nvmestorage0.reg_control[4] top.test.nvmestorage0.reg_control[3] top.test.nvmestorage0.reg_control[2] top.test.nvmestorage0.reg_control[1] top.test.nvmestorage0.reg_control[0]
+@420
+top.test.nvmestorage0.state
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test003-regs.vhd b/source/DuneNvme/sim/testbench/test003-regs.vhd
new file mode 100644 (file)
index 0000000..bba8998
--- /dev/null
@@ -0,0 +1,162 @@
+--------------------------------------------------------------------------------
+--     Test003-regs.vhd        Simple AXI lite interface tests
+--     T.Barnaby,      Beam Ltd.       2020-02-18
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.Axi.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeStorage is
+generic(
+       Simulate        : boolean       := True
+);
+port (
+       clk             : in std_logic;
+       reset           : in std_logic;
+
+       -- Control and status interface
+       axilIn          : in AxilToSlave;
+       axilOut         : out AxilToMaster;
+
+       -- AXIS Interface to PCIE
+       hostReq         : inout AxisStream      := AxisInput;
+       hostReply       : inout AxisStream      := AxisOutput;                        
+       
+       -- From Nvme reqeuest and reply stream
+       nvmeReq         : inout AxisStream      := AxisOutput;
+       nvmeReply       : inout AxisStream      := AxisInput;                        
+       
+       -- AXIS data stream input
+       --dataRx        : inout AxisStream      := AxisInput;
+       
+       -- NVMe interface
+       nvme_clk_p      : in std_logic;
+       nvme_clk_n      : in std_logic;
+       nvme0_exp_txp   : out std_logic_vector(0 downto 0);
+       nvme0_exp_txn   : out std_logic_vector(0 downto 0);
+       nvme0_exp_rxp   : in std_logic_vector(0 downto 0);
+       nvme0_exp_rxn   : in std_logic_vector(0 downto 0);
+
+       -- Debug
+       leds            : out std_logic_vector(3 downto 0)
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal axil            : AxilBus;
+signal hostReply               : AxisStream;
+signal hostReq         : AxisStream;
+signal leds            : std_logic_vector(3 downto 0);
+
+procedure busWrite(signal toSlave: out AxilToSlave; signal toMaster: in AxilToMaster; address: in integer; data: in integer) is
+begin
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.awaddr <= toAxilAddress(address) after TCQ;
+       toSlave.awvalid <= '1' after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.awready = '1');
+       toSlave.awvalid <= '0' after TCQ;
+
+       -- Write data
+       toSlave.wvalid <= '1' after TCQ;
+       toSlave.wdata <= toAxilData(data) after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.wready = '1');
+       toSlave.wvalid <= '0' after TCQ;
+end procedure;
+
+procedure busRead(signal toSlave: out AxilToSlave; signal toMaster: in AxilToMaster; address: in integer) is
+begin
+       -- Read address
+       wait until rising_edge(clk);
+       toSlave.araddr <= toAxilAddress(address) after TCQ;
+       toSlave.arvalid <= '1' after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.arready = '1');
+       toSlave.arvalid <= '0' after TCQ;
+
+       -- Read data
+       wait until rising_edge(clk) and (axil.toMaster.rvalid = '1');
+       toSlave.rready <= '1' after TCQ;
+
+       wait until rising_edge(clk) and (axil.toMaster.rvalid = '1');
+       toSlave.rready <= '0' after TCQ;
+end procedure;
+
+       
+begin
+       nvmeStorage0 : NvmeStorage
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               axilIn          => axil.toSlave,
+               axilOut         => axil.toMaster,
+
+               hostReply               => hostReply,
+               hostReq => hostReq,
+
+               -- NVMe interface
+               nvme_clk_p      => '0',
+               nvme_clk_n      => '0',
+               --nvme0_exp_txp : out std_logic_vector(0 downto 0);
+               --nvme0_exp_txn : out std_logic_vector(0 downto 0);
+               nvme0_exp_rxp   => "0",
+               nvme0_exp_rxn   => "0",
+
+               leds            => leds
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+
+               axil.toSlave.awvalid <= '0';
+               axil.toSlave.wvalid <= '0';
+               axil.toSlave.arvalid <= '0';
+               axil.toSlave.rready <= '0';
+               
+               wait until reset = '0';
+               busWrite(axil.toSlave, axil.toMaster, 4, 2);
+               busRead(axil.toSlave, axil.toMaster, 0);
+               busRead(axil.toSlave, axil.toMaster, 4);
+               wait;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test004-nvme.sav b/source/DuneNvme/sim/testbench/test004-nvme.sav
new file mode 100644 (file)
index 0000000..e8c6fa9
--- /dev/null
@@ -0,0 +1,49 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Sun Mar 15 08:00:57 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/hack/test005-nvme-queues/sim/simu/test.ghw"
+[dumpfile_mtime] "Sun Mar 15 07:50:34 2020"
+[dumpfile_size] 6179
+[savefile] "/src/dune/FpgaPlay/hack/test005-nvme-queues/sim/testbench/test004-nvme.sav"
+[timestart] 0
+[size] 1795 882
+[pos] -1 -1
+*-26.000000 31800000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.nvmesim0.
+[treeopen] top.test.nvmesim0.hostreq.
+[treeopen] top.test.nvmesim0.packethead.
+[sst_width] 230
+[signals_width] 534
+[sst_expanded] 1
+[sst_vpaned_height] 242
+@28
+top.test.clk
+top.test.reset
+@420
+top.test.nvmesim0.state
+@28
+top.test.nvmesim0.hostreq.ready
+top.test.nvmesim0.hostreq.valid
+top.test.nvmesim0.hostreq.last
+@22
+#{top.test.nvmesim0.hostreq.data[127:0]} top.test.nvmesim0.hostreq.data[127] top.test.nvmesim0.hostreq.data[126] top.test.nvmesim0.hostreq.data[125] top.test.nvmesim0.hostreq.data[124] top.test.nvmesim0.hostreq.data[123] top.test.nvmesim0.hostreq.data[122] top.test.nvmesim0.hostreq.data[121] top.test.nvmesim0.hostreq.data[120] top.test.nvmesim0.hostreq.data[119] top.test.nvmesim0.hostreq.data[118] top.test.nvmesim0.hostreq.data[117] top.test.nvmesim0.hostreq.data[116] top.test.nvmesim0.hostreq.data[115] top.test.nvmesim0.hostreq.data[114] top.test.nvmesim0.hostreq.data[113] top.test.nvmesim0.hostreq.data[112] top.test.nvmesim0.hostreq.data[111] top.test.nvmesim0.hostreq.data[110] top.test.nvmesim0.hostreq.data[109] top.test.nvmesim0.hostreq.data[108] top.test.nvmesim0.hostreq.data[107] top.test.nvmesim0.hostreq.data[106] top.test.nvmesim0.hostreq.data[105] top.test.nvmesim0.hostreq.data[104] top.test.nvmesim0.hostreq.data[103] top.test.nvmesim0.hostreq.data[102] top.test.nvmesim0.hostreq.data[101] top.test.nvmesim0.hostreq.data[100] top.test.nvmesim0.hostreq.data[99] top.test.nvmesim0.hostreq.data[98] top.test.nvmesim0.hostreq.data[97] top.test.nvmesim0.hostreq.data[96] top.test.nvmesim0.hostreq.data[95] top.test.nvmesim0.hostreq.data[94] top.test.nvmesim0.hostreq.data[93] top.test.nvmesim0.hostreq.data[92] top.test.nvmesim0.hostreq.data[91] top.test.nvmesim0.hostreq.data[90] top.test.nvmesim0.hostreq.data[89] top.test.nvmesim0.hostreq.data[88] top.test.nvmesim0.hostreq.data[87] top.test.nvmesim0.hostreq.data[86] top.test.nvmesim0.hostreq.data[85] top.test.nvmesim0.hostreq.data[84] top.test.nvmesim0.hostreq.data[83] top.test.nvmesim0.hostreq.data[82] top.test.nvmesim0.hostreq.data[81] top.test.nvmesim0.hostreq.data[80] top.test.nvmesim0.hostreq.data[79] top.test.nvmesim0.hostreq.data[78] top.test.nvmesim0.hostreq.data[77] top.test.nvmesim0.hostreq.data[76] top.test.nvmesim0.hostreq.data[75] top.test.nvmesim0.hostreq.data[74] top.test.nvmesim0.hostreq.data[73] top.test.nvmesim0.hostreq.data[72] top.test.nvmesim0.hostreq.data[71] top.test.nvmesim0.hostreq.data[70] top.test.nvmesim0.hostreq.data[69] top.test.nvmesim0.hostreq.data[68] top.test.nvmesim0.hostreq.data[67] top.test.nvmesim0.hostreq.data[66] top.test.nvmesim0.hostreq.data[65] top.test.nvmesim0.hostreq.data[64] top.test.nvmesim0.hostreq.data[63] top.test.nvmesim0.hostreq.data[62] top.test.nvmesim0.hostreq.data[61] top.test.nvmesim0.hostreq.data[60] top.test.nvmesim0.hostreq.data[59] top.test.nvmesim0.hostreq.data[58] top.test.nvmesim0.hostreq.data[57] top.test.nvmesim0.hostreq.data[56] top.test.nvmesim0.hostreq.data[55] top.test.nvmesim0.hostreq.data[54] top.test.nvmesim0.hostreq.data[53] top.test.nvmesim0.hostreq.data[52] top.test.nvmesim0.hostreq.data[51] top.test.nvmesim0.hostreq.data[50] top.test.nvmesim0.hostreq.data[49] top.test.nvmesim0.hostreq.data[48] top.test.nvmesim0.hostreq.data[47] top.test.nvmesim0.hostreq.data[46] top.test.nvmesim0.hostreq.data[45] top.test.nvmesim0.hostreq.data[44] top.test.nvmesim0.hostreq.data[43] top.test.nvmesim0.hostreq.data[42] top.test.nvmesim0.hostreq.data[41] top.test.nvmesim0.hostreq.data[40] top.test.nvmesim0.hostreq.data[39] top.test.nvmesim0.hostreq.data[38] top.test.nvmesim0.hostreq.data[37] top.test.nvmesim0.hostreq.data[36] top.test.nvmesim0.hostreq.data[35] top.test.nvmesim0.hostreq.data[34] top.test.nvmesim0.hostreq.data[33] top.test.nvmesim0.hostreq.data[32] top.test.nvmesim0.hostreq.data[31] top.test.nvmesim0.hostreq.data[30] top.test.nvmesim0.hostreq.data[29] top.test.nvmesim0.hostreq.data[28] top.test.nvmesim0.hostreq.data[27] top.test.nvmesim0.hostreq.data[26] top.test.nvmesim0.hostreq.data[25] top.test.nvmesim0.hostreq.data[24] top.test.nvmesim0.hostreq.data[23] top.test.nvmesim0.hostreq.data[22] top.test.nvmesim0.hostreq.data[21] top.test.nvmesim0.hostreq.data[20] top.test.nvmesim0.hostreq.data[19] top.test.nvmesim0.hostreq.data[18] top.test.nvmesim0.hostreq.data[17] top.test.nvmesim0.hostreq.data[16] top.test.nvmesim0.hostreq.data[15] top.test.nvmesim0.hostreq.data[14] top.test.nvmesim0.hostreq.data[13] top.test.nvmesim0.hostreq.data[12] top.test.nvmesim0.hostreq.data[11] top.test.nvmesim0.hostreq.data[10] top.test.nvmesim0.hostreq.data[9] top.test.nvmesim0.hostreq.data[8] top.test.nvmesim0.hostreq.data[7] top.test.nvmesim0.hostreq.data[6] top.test.nvmesim0.hostreq.data[5] top.test.nvmesim0.hostreq.data[4] top.test.nvmesim0.hostreq.data[3] top.test.nvmesim0.hostreq.data[2] top.test.nvmesim0.hostreq.data[1] top.test.nvmesim0.hostreq.data[0]
+@23
+#{top.test.nvmesim0.reg_pci_command[31:0]} top.test.nvmesim0.reg_pci_command[31] top.test.nvmesim0.reg_pci_command[30] top.test.nvmesim0.reg_pci_command[29] top.test.nvmesim0.reg_pci_command[28] top.test.nvmesim0.reg_pci_command[27] top.test.nvmesim0.reg_pci_command[26] top.test.nvmesim0.reg_pci_command[25] top.test.nvmesim0.reg_pci_command[24] top.test.nvmesim0.reg_pci_command[23] top.test.nvmesim0.reg_pci_command[22] top.test.nvmesim0.reg_pci_command[21] top.test.nvmesim0.reg_pci_command[20] top.test.nvmesim0.reg_pci_command[19] top.test.nvmesim0.reg_pci_command[18] top.test.nvmesim0.reg_pci_command[17] top.test.nvmesim0.reg_pci_command[16] top.test.nvmesim0.reg_pci_command[15] top.test.nvmesim0.reg_pci_command[14] top.test.nvmesim0.reg_pci_command[13] top.test.nvmesim0.reg_pci_command[12] top.test.nvmesim0.reg_pci_command[11] top.test.nvmesim0.reg_pci_command[10] top.test.nvmesim0.reg_pci_command[9] top.test.nvmesim0.reg_pci_command[8] top.test.nvmesim0.reg_pci_command[7] top.test.nvmesim0.reg_pci_command[6] top.test.nvmesim0.reg_pci_command[5] top.test.nvmesim0.reg_pci_command[4] top.test.nvmesim0.reg_pci_command[3] top.test.nvmesim0.reg_pci_command[2] top.test.nvmesim0.reg_pci_command[1] top.test.nvmesim0.reg_pci_command[0]
+@22
+#{top.test.nvmesim0.packethead.address[23:0]} top.test.nvmesim0.packethead.address[23] top.test.nvmesim0.packethead.address[22] top.test.nvmesim0.packethead.address[21] top.test.nvmesim0.packethead.address[20] top.test.nvmesim0.packethead.address[19] top.test.nvmesim0.packethead.address[18] top.test.nvmesim0.packethead.address[17] top.test.nvmesim0.packethead.address[16] top.test.nvmesim0.packethead.address[15] top.test.nvmesim0.packethead.address[14] top.test.nvmesim0.packethead.address[13] top.test.nvmesim0.packethead.address[12] top.test.nvmesim0.packethead.address[11] top.test.nvmesim0.packethead.address[10] top.test.nvmesim0.packethead.address[9] top.test.nvmesim0.packethead.address[8] top.test.nvmesim0.packethead.address[7] top.test.nvmesim0.packethead.address[6] top.test.nvmesim0.packethead.address[5] top.test.nvmesim0.packethead.address[4] top.test.nvmesim0.packethead.address[3] top.test.nvmesim0.packethead.address[2] top.test.nvmesim0.packethead.address[1] top.test.nvmesim0.packethead.address[0]
+#{top.test.nvmesim0.packethead.count[7:0]} top.test.nvmesim0.packethead.count[7] top.test.nvmesim0.packethead.count[6] top.test.nvmesim0.packethead.count[5] top.test.nvmesim0.packethead.count[4] top.test.nvmesim0.packethead.count[3] top.test.nvmesim0.packethead.count[2] top.test.nvmesim0.packethead.count[1] top.test.nvmesim0.packethead.count[0]
+#{top.test.nvmesim0.packethead.data0[31:0]} top.test.nvmesim0.packethead.data0[31] top.test.nvmesim0.packethead.data0[30] top.test.nvmesim0.packethead.data0[29] top.test.nvmesim0.packethead.data0[28] top.test.nvmesim0.packethead.data0[27] top.test.nvmesim0.packethead.data0[26] top.test.nvmesim0.packethead.data0[25] top.test.nvmesim0.packethead.data0[24] top.test.nvmesim0.packethead.data0[23] top.test.nvmesim0.packethead.data0[22] top.test.nvmesim0.packethead.data0[21] top.test.nvmesim0.packethead.data0[20] top.test.nvmesim0.packethead.data0[19] top.test.nvmesim0.packethead.data0[18] top.test.nvmesim0.packethead.data0[17] top.test.nvmesim0.packethead.data0[16] top.test.nvmesim0.packethead.data0[15] top.test.nvmesim0.packethead.data0[14] top.test.nvmesim0.packethead.data0[13] top.test.nvmesim0.packethead.data0[12] top.test.nvmesim0.packethead.data0[11] top.test.nvmesim0.packethead.data0[10] top.test.nvmesim0.packethead.data0[9] top.test.nvmesim0.packethead.data0[8] top.test.nvmesim0.packethead.data0[7] top.test.nvmesim0.packethead.data0[6] top.test.nvmesim0.packethead.data0[5] top.test.nvmesim0.packethead.data0[4] top.test.nvmesim0.packethead.data0[3] top.test.nvmesim0.packethead.data0[2] top.test.nvmesim0.packethead.data0[1] top.test.nvmesim0.packethead.data0[0]
+#{top.test.nvmesim0.packethead.data1[31:0]} top.test.nvmesim0.packethead.data1[31] top.test.nvmesim0.packethead.data1[30] top.test.nvmesim0.packethead.data1[29] top.test.nvmesim0.packethead.data1[28] top.test.nvmesim0.packethead.data1[27] top.test.nvmesim0.packethead.data1[26] top.test.nvmesim0.packethead.data1[25] top.test.nvmesim0.packethead.data1[24] top.test.nvmesim0.packethead.data1[23] top.test.nvmesim0.packethead.data1[22] top.test.nvmesim0.packethead.data1[21] top.test.nvmesim0.packethead.data1[20] top.test.nvmesim0.packethead.data1[19] top.test.nvmesim0.packethead.data1[18] top.test.nvmesim0.packethead.data1[17] top.test.nvmesim0.packethead.data1[16] top.test.nvmesim0.packethead.data1[15] top.test.nvmesim0.packethead.data1[14] top.test.nvmesim0.packethead.data1[13] top.test.nvmesim0.packethead.data1[12] top.test.nvmesim0.packethead.data1[11] top.test.nvmesim0.packethead.data1[10] top.test.nvmesim0.packethead.data1[9] top.test.nvmesim0.packethead.data1[8] top.test.nvmesim0.packethead.data1[7] top.test.nvmesim0.packethead.data1[6] top.test.nvmesim0.packethead.data1[5] top.test.nvmesim0.packethead.data1[4] top.test.nvmesim0.packethead.data1[3] top.test.nvmesim0.packethead.data1[2] top.test.nvmesim0.packethead.data1[1] top.test.nvmesim0.packethead.data1[0]
+@28
+#{top.test.nvmesim0.packethead.nvme[2:0]} top.test.nvmesim0.packethead.nvme[2] top.test.nvmesim0.packethead.nvme[1] top.test.nvmesim0.packethead.nvme[0]
+top.test.nvmesim0.packethead.reply
+@22
+#{top.test.nvmesim0.packethead.request[3:0]} top.test.nvmesim0.packethead.request[3] top.test.nvmesim0.packethead.request[2] top.test.nvmesim0.packethead.request[1] top.test.nvmesim0.packethead.request[0]
+#{top.test.nvmesim0.packethead.spare0[11:0]} top.test.nvmesim0.packethead.spare0[11] top.test.nvmesim0.packethead.spare0[10] top.test.nvmesim0.packethead.spare0[9] top.test.nvmesim0.packethead.spare0[8] top.test.nvmesim0.packethead.spare0[7] top.test.nvmesim0.packethead.spare0[6] top.test.nvmesim0.packethead.spare0[5] top.test.nvmesim0.packethead.spare0[4] top.test.nvmesim0.packethead.spare0[3] top.test.nvmesim0.packethead.spare0[2] top.test.nvmesim0.packethead.spare0[1] top.test.nvmesim0.packethead.spare0[0]
+#{top.test.nvmesim0.packethead.stream[3:0]} top.test.nvmesim0.packethead.stream[3] top.test.nvmesim0.packethead.stream[2] top.test.nvmesim0.packethead.stream[1] top.test.nvmesim0.packethead.stream[0]
+#{top.test.nvmesim0.packethead.tag[7:0]} top.test.nvmesim0.packethead.tag[7] top.test.nvmesim0.packethead.tag[6] top.test.nvmesim0.packethead.tag[5] top.test.nvmesim0.packethead.tag[4] top.test.nvmesim0.packethead.tag[3] top.test.nvmesim0.packethead.tag[2] top.test.nvmesim0.packethead.tag[1] top.test.nvmesim0.packethead.tag[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test004-nvme.vhd b/source/DuneNvme/sim/testbench/test004-nvme.vhd
new file mode 100644 (file)
index 0000000..f9a66f3
--- /dev/null
@@ -0,0 +1,122 @@
+--------------------------------------------------------------------------------
+--     Test004-nvme.vhd        Simple AXI lite interface tests
+--     T.Barnaby,      Beam Ltd.       2020-03-13
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.Axi.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeSim is
+generic(
+       Simulate        : boolean       := True
+);
+port (
+       clk             : in std_logic;
+       reset           : in std_logic;
+
+       -- AXIS Interface to PCIE
+       hostReq         : inout AxisStream      := AxisInput;
+       hostReply       : inout AxisStream      := AxisOutput;                        
+       
+       -- From Nvme reqeuest and reply stream
+       nvmeReq         : inout AxisStream      := AxisOutput;
+       nvmeReply       : inout AxisStream      := AxisInput
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal hostReply       : AxisStream    := AxisInput;
+signal hostReq         : AxisStream    := AxisOutput;
+signal nvmeReq         : AxisStream    := AxisOutput;
+signal nvmeReply       : AxisStream    := AxisInput;
+
+function toStdLogicVector(v: integer; b: integer) return std_logic_vector is
+begin
+       return std_logic_vector(to_unsigned(v, b));
+end function;
+
+procedure streamWrite(signal toSlave: inout AxisStream; address: in integer; tag: in integer; data: in integer) is
+variable packet        : NvmePacket;
+begin
+       packet.reply := '0';
+       packet.nvme := toStdLogicVector(0, packet.nvme'length);
+       packet.stream := toStdLogicVector(0, packet.stream'length);
+       packet.address := toStdLogicVector(address, packet.address'length);
+       packet.tag := toStdLogicVector(tag, packet.tag'length);
+       packet.request := toStdLogicVector(1, packet.request'length);
+       packet.spare0 := toStdLogicVector(0, packet.spare0'length);
+       packet.count := toStdLogicVector(1, packet.count'length);
+       packet.data0 := toStdLogicVector(data, packet.data0'length);
+       packet.data1 := toStdLogicVector(0, packet.data1'length);
+       
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= toStdLogicVector(packet);
+       --toSlave.data <= x"000000" & toStdLogicVector(tag, 8) & x"00000000" & toStdLogicVector(address, 64) after TCQ;
+       toSlave.valid <= '1' after TCQ;
+
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.data <= x"00000000" & x"00000000" & x"00000000" & toStdLogicVector(data, 32) after TCQ;
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0' after TCQ;
+end procedure;
+
+begin
+       nvmeSim0 : NvmeSim
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               hostReply       => hostReply,
+               hostReq         => hostReq,
+
+               nvmeReq         => nvmeReq,
+               nvmeReply       =>nvmeReply
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               streamWrite(hostReq, 4, 1, 6);
+               streamWrite(hostReq, 4, 2, 6);
+               wait;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test005-nvme.sav b/source/DuneNvme/sim/testbench/test005-nvme.sav
new file mode 100644 (file)
index 0000000..28b309f
--- /dev/null
@@ -0,0 +1,72 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Mon Mar 30 17:14:52 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/hack/test007-nvme-queues/sim/simu/test.ghw"
+[dumpfile_mtime] "Mon Mar 30 14:27:21 2020"
+[dumpfile_size] 9992
+[savefile] "/src/dune/FpgaPlay/hack/test007-nvme-queues/sim/testbench/test005-nvme.sav"
+[timestart] 46000000
+[size] 1920 1051
+[pos] -1 -1
+*-25.925068 330000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.nvmesim0.
+[treeopen] top.test.nvmesim0.nvmereply.
+[treeopen] top.test.nvmesim0.nvmereplyhead.
+[sst_width] 295
+[signals_width] 586
+[sst_expanded] 1
+[sst_vpaned_height] 614
+@29
+top.test.clk
+@28
+top.test.reset
+top.test.nvmesim0.hostreq.ready
+top.test.nvmesim0.hostreq.valid
+@420
+top.test.nvmesim0.state
+@22
+#{top.test.nvmesim0.reg_pci_command[31:0]} top.test.nvmesim0.reg_pci_command[31] top.test.nvmesim0.reg_pci_command[30] top.test.nvmesim0.reg_pci_command[29] top.test.nvmesim0.reg_pci_command[28] top.test.nvmesim0.reg_pci_command[27] top.test.nvmesim0.reg_pci_command[26] top.test.nvmesim0.reg_pci_command[25] top.test.nvmesim0.reg_pci_command[24] top.test.nvmesim0.reg_pci_command[23] top.test.nvmesim0.reg_pci_command[22] top.test.nvmesim0.reg_pci_command[21] top.test.nvmesim0.reg_pci_command[20] top.test.nvmesim0.reg_pci_command[19] top.test.nvmesim0.reg_pci_command[18] top.test.nvmesim0.reg_pci_command[17] top.test.nvmesim0.reg_pci_command[16] top.test.nvmesim0.reg_pci_command[15] top.test.nvmesim0.reg_pci_command[14] top.test.nvmesim0.reg_pci_command[13] top.test.nvmesim0.reg_pci_command[12] top.test.nvmesim0.reg_pci_command[11] top.test.nvmesim0.reg_pci_command[10] top.test.nvmesim0.reg_pci_command[9] top.test.nvmesim0.reg_pci_command[8] top.test.nvmesim0.reg_pci_command[7] top.test.nvmesim0.reg_pci_command[6] top.test.nvmesim0.reg_pci_command[5] top.test.nvmesim0.reg_pci_command[4] top.test.nvmesim0.reg_pci_command[3] top.test.nvmesim0.reg_pci_command[2] top.test.nvmesim0.reg_pci_command[1] top.test.nvmesim0.reg_pci_command[0]
+#{top.test.nvmesim0.reg_admin_queue[31:0]} top.test.nvmesim0.reg_admin_queue[31] top.test.nvmesim0.reg_admin_queue[30] top.test.nvmesim0.reg_admin_queue[29] top.test.nvmesim0.reg_admin_queue[28] top.test.nvmesim0.reg_admin_queue[27] top.test.nvmesim0.reg_admin_queue[26] top.test.nvmesim0.reg_admin_queue[25] top.test.nvmesim0.reg_admin_queue[24] top.test.nvmesim0.reg_admin_queue[23] top.test.nvmesim0.reg_admin_queue[22] top.test.nvmesim0.reg_admin_queue[21] top.test.nvmesim0.reg_admin_queue[20] top.test.nvmesim0.reg_admin_queue[19] top.test.nvmesim0.reg_admin_queue[18] top.test.nvmesim0.reg_admin_queue[17] top.test.nvmesim0.reg_admin_queue[16] top.test.nvmesim0.reg_admin_queue[15] top.test.nvmesim0.reg_admin_queue[14] top.test.nvmesim0.reg_admin_queue[13] top.test.nvmesim0.reg_admin_queue[12] top.test.nvmesim0.reg_admin_queue[11] top.test.nvmesim0.reg_admin_queue[10] top.test.nvmesim0.reg_admin_queue[9] top.test.nvmesim0.reg_admin_queue[8] top.test.nvmesim0.reg_admin_queue[7] top.test.nvmesim0.reg_admin_queue[6] top.test.nvmesim0.reg_admin_queue[5] top.test.nvmesim0.reg_admin_queue[4] top.test.nvmesim0.reg_admin_queue[3] top.test.nvmesim0.reg_admin_queue[2] top.test.nvmesim0.reg_admin_queue[1] top.test.nvmesim0.reg_admin_queue[0]
+#{top.test.nvmesim0.reg_io1_queue[31:0]} top.test.nvmesim0.reg_io1_queue[31] top.test.nvmesim0.reg_io1_queue[30] top.test.nvmesim0.reg_io1_queue[29] top.test.nvmesim0.reg_io1_queue[28] top.test.nvmesim0.reg_io1_queue[27] top.test.nvmesim0.reg_io1_queue[26] top.test.nvmesim0.reg_io1_queue[25] top.test.nvmesim0.reg_io1_queue[24] top.test.nvmesim0.reg_io1_queue[23] top.test.nvmesim0.reg_io1_queue[22] top.test.nvmesim0.reg_io1_queue[21] top.test.nvmesim0.reg_io1_queue[20] top.test.nvmesim0.reg_io1_queue[19] top.test.nvmesim0.reg_io1_queue[18] top.test.nvmesim0.reg_io1_queue[17] top.test.nvmesim0.reg_io1_queue[16] top.test.nvmesim0.reg_io1_queue[15] top.test.nvmesim0.reg_io1_queue[14] top.test.nvmesim0.reg_io1_queue[13] top.test.nvmesim0.reg_io1_queue[12] top.test.nvmesim0.reg_io1_queue[11] top.test.nvmesim0.reg_io1_queue[10] top.test.nvmesim0.reg_io1_queue[9] top.test.nvmesim0.reg_io1_queue[8] top.test.nvmesim0.reg_io1_queue[7] top.test.nvmesim0.reg_io1_queue[6] top.test.nvmesim0.reg_io1_queue[5] top.test.nvmesim0.reg_io1_queue[4] top.test.nvmesim0.reg_io1_queue[3] top.test.nvmesim0.reg_io1_queue[2] top.test.nvmesim0.reg_io1_queue[1] top.test.nvmesim0.reg_io1_queue[0]
+#{top.test.nvmesim0.reg_io2_queue[31:0]} top.test.nvmesim0.reg_io2_queue[31] top.test.nvmesim0.reg_io2_queue[30] top.test.nvmesim0.reg_io2_queue[29] top.test.nvmesim0.reg_io2_queue[28] top.test.nvmesim0.reg_io2_queue[27] top.test.nvmesim0.reg_io2_queue[26] top.test.nvmesim0.reg_io2_queue[25] top.test.nvmesim0.reg_io2_queue[24] top.test.nvmesim0.reg_io2_queue[23] top.test.nvmesim0.reg_io2_queue[22] top.test.nvmesim0.reg_io2_queue[21] top.test.nvmesim0.reg_io2_queue[20] top.test.nvmesim0.reg_io2_queue[19] top.test.nvmesim0.reg_io2_queue[18] top.test.nvmesim0.reg_io2_queue[17] top.test.nvmesim0.reg_io2_queue[16] top.test.nvmesim0.reg_io2_queue[15] top.test.nvmesim0.reg_io2_queue[14] top.test.nvmesim0.reg_io2_queue[13] top.test.nvmesim0.reg_io2_queue[12] top.test.nvmesim0.reg_io2_queue[11] top.test.nvmesim0.reg_io2_queue[10] top.test.nvmesim0.reg_io2_queue[9] top.test.nvmesim0.reg_io2_queue[8] top.test.nvmesim0.reg_io2_queue[7] top.test.nvmesim0.reg_io2_queue[6] top.test.nvmesim0.reg_io2_queue[5] top.test.nvmesim0.reg_io2_queue[4] top.test.nvmesim0.reg_io2_queue[3] top.test.nvmesim0.reg_io2_queue[2] top.test.nvmesim0.reg_io2_queue[1] top.test.nvmesim0.reg_io2_queue[0]
+@28
+top.test.nvmesim0.nvmereq.ready
+top.test.nvmesim0.nvmereq.valid
+@22
+#{top.test.nvmesim0.nvmerequest.address[23:0]} top.test.nvmesim0.nvmerequest.address[23] top.test.nvmesim0.nvmerequest.address[22] top.test.nvmesim0.nvmerequest.address[21] top.test.nvmesim0.nvmerequest.address[20] top.test.nvmesim0.nvmerequest.address[19] top.test.nvmesim0.nvmerequest.address[18] top.test.nvmesim0.nvmerequest.address[17] top.test.nvmesim0.nvmerequest.address[16] top.test.nvmesim0.nvmerequest.address[15] top.test.nvmesim0.nvmerequest.address[14] top.test.nvmesim0.nvmerequest.address[13] top.test.nvmesim0.nvmerequest.address[12] top.test.nvmesim0.nvmerequest.address[11] top.test.nvmesim0.nvmerequest.address[10] top.test.nvmesim0.nvmerequest.address[9] top.test.nvmesim0.nvmerequest.address[8] top.test.nvmesim0.nvmerequest.address[7] top.test.nvmesim0.nvmerequest.address[6] top.test.nvmesim0.nvmerequest.address[5] top.test.nvmesim0.nvmerequest.address[4] top.test.nvmesim0.nvmerequest.address[3] top.test.nvmesim0.nvmerequest.address[2] top.test.nvmesim0.nvmerequest.address[1] top.test.nvmesim0.nvmerequest.address[0]
+#{top.test.nvmesim0.nvmerequest.count[10:0]} top.test.nvmesim0.nvmerequest.count[10] top.test.nvmesim0.nvmerequest.count[9] top.test.nvmesim0.nvmerequest.count[8] top.test.nvmesim0.nvmerequest.count[7] top.test.nvmesim0.nvmerequest.count[6] top.test.nvmesim0.nvmerequest.count[5] top.test.nvmesim0.nvmerequest.count[4] top.test.nvmesim0.nvmerequest.count[3] top.test.nvmesim0.nvmerequest.count[2] top.test.nvmesim0.nvmerequest.count[1] top.test.nvmesim0.nvmerequest.count[0]
+#{top.test.nvmesim0.nvmerequest.nvme[3:0]} top.test.nvmesim0.nvmerequest.nvme[3] top.test.nvmesim0.nvmerequest.nvme[2] top.test.nvmesim0.nvmerequest.nvme[1] top.test.nvmesim0.nvmerequest.nvme[0]
+#{top.test.nvmesim0.nvmerequest.request[3:0]} top.test.nvmesim0.nvmerequest.request[3] top.test.nvmesim0.nvmerequest.request[2] top.test.nvmesim0.nvmerequest.request[1] top.test.nvmesim0.nvmerequest.request[0]
+#{top.test.nvmesim0.nvmerequest.stream[3:0]} top.test.nvmesim0.nvmerequest.stream[3] top.test.nvmesim0.nvmerequest.stream[2] top.test.nvmesim0.nvmerequest.stream[1] top.test.nvmesim0.nvmerequest.stream[0]
+#{top.test.nvmesim0.nvmerequest.tag[7:0]} top.test.nvmesim0.nvmerequest.tag[7] top.test.nvmesim0.nvmerequest.tag[6] top.test.nvmesim0.nvmerequest.tag[5] top.test.nvmesim0.nvmerequest.tag[4] top.test.nvmesim0.nvmerequest.tag[3] top.test.nvmesim0.nvmerequest.tag[2] top.test.nvmesim0.nvmerequest.tag[1] top.test.nvmesim0.nvmerequest.tag[0]
+@28
+top.test.nvmesim0.nvmereply.ready
+top.test.nvmesim0.nvmereply.valid
+@22
+#{top.test.nvmereplyhead.address[11:0]} top.test.nvmereplyhead.address[11] top.test.nvmereplyhead.address[10] top.test.nvmereplyhead.address[9] top.test.nvmereplyhead.address[8] top.test.nvmereplyhead.address[7] top.test.nvmereplyhead.address[6] top.test.nvmereplyhead.address[5] top.test.nvmereplyhead.address[4] top.test.nvmereplyhead.address[3] top.test.nvmereplyhead.address[2] top.test.nvmereplyhead.address[1] top.test.nvmereplyhead.address[0]
+#{top.test.nvmereplyhead.bytecount[12:0]} top.test.nvmereplyhead.bytecount[12] top.test.nvmereplyhead.bytecount[11] top.test.nvmereplyhead.bytecount[10] top.test.nvmereplyhead.bytecount[9] top.test.nvmereplyhead.bytecount[8] top.test.nvmereplyhead.bytecount[7] top.test.nvmereplyhead.bytecount[6] top.test.nvmereplyhead.bytecount[5] top.test.nvmereplyhead.bytecount[4] top.test.nvmereplyhead.bytecount[3] top.test.nvmereplyhead.bytecount[2] top.test.nvmereplyhead.bytecount[1] top.test.nvmereplyhead.bytecount[0]
+#{top.test.nvmereplyhead.count[10:0]} top.test.nvmereplyhead.count[10] top.test.nvmereplyhead.count[9] top.test.nvmereplyhead.count[8] top.test.nvmereplyhead.count[7] top.test.nvmereplyhead.count[6] top.test.nvmereplyhead.count[5] top.test.nvmereplyhead.count[4] top.test.nvmereplyhead.count[3] top.test.nvmereplyhead.count[2] top.test.nvmereplyhead.count[1] top.test.nvmereplyhead.count[0]
+#{top.test.nvmereplyhead.error[3:0]} top.test.nvmereplyhead.error[3] top.test.nvmereplyhead.error[2] top.test.nvmereplyhead.error[1] top.test.nvmereplyhead.error[0]
+@28
+#{top.test.nvmereplyhead.status[2:0]} top.test.nvmereplyhead.status[2] top.test.nvmereplyhead.status[1] top.test.nvmereplyhead.status[0]
+@22
+#{top.test.nvmereplyhead.tag[7:0]} top.test.nvmereplyhead.tag[7] top.test.nvmereplyhead.tag[6] top.test.nvmereplyhead.tag[5] top.test.nvmereplyhead.tag[4] top.test.nvmereplyhead.tag[3] top.test.nvmereplyhead.tag[2] top.test.nvmereplyhead.tag[1] top.test.nvmereplyhead.tag[0]
+@420
+top.test.nvmesim0.state
+@22
+#{top.test.nvmesim0.nvmereplyhead.count[10:0]} top.test.nvmesim0.nvmereplyhead.count[10] top.test.nvmesim0.nvmereplyhead.count[9] top.test.nvmesim0.nvmereplyhead.count[8] top.test.nvmesim0.nvmereplyhead.count[7] top.test.nvmesim0.nvmereplyhead.count[6] top.test.nvmesim0.nvmereplyhead.count[5] top.test.nvmesim0.nvmereplyhead.count[4] top.test.nvmesim0.nvmereplyhead.count[3] top.test.nvmesim0.nvmereplyhead.count[2] top.test.nvmesim0.nvmereplyhead.count[1] top.test.nvmesim0.nvmereplyhead.count[0]
+#{top.test.nvmesim0.count[10:0]} top.test.nvmesim0.count[10] top.test.nvmesim0.count[9] top.test.nvmesim0.count[8] top.test.nvmesim0.count[7] top.test.nvmesim0.count[6] top.test.nvmesim0.count[5] top.test.nvmesim0.count[4] top.test.nvmesim0.count[3] top.test.nvmesim0.count[2] top.test.nvmesim0.count[1] top.test.nvmesim0.count[0]
+#{top.test.nvmecount[10:0]} top.test.nvmecount[10] top.test.nvmecount[9] top.test.nvmecount[8] top.test.nvmecount[7] top.test.nvmecount[6] top.test.nvmecount[5] top.test.nvmecount[4] top.test.nvmecount[3] top.test.nvmecount[2] top.test.nvmecount[1] top.test.nvmecount[0]
+#{top.test.nvmechunkcount[10:0]} top.test.nvmechunkcount[10] top.test.nvmechunkcount[9] top.test.nvmechunkcount[8] top.test.nvmechunkcount[7] top.test.nvmechunkcount[6] top.test.nvmechunkcount[5] top.test.nvmechunkcount[4] top.test.nvmechunkcount[3] top.test.nvmechunkcount[2] top.test.nvmechunkcount[1] top.test.nvmechunkcount[0]
+@420
+top.test.nvmestate
+@22
+#{top.test.nvmesim0.nvmereply.data[127:0]} top.test.nvmesim0.nvmereply.data[127] top.test.nvmesim0.nvmereply.data[126] top.test.nvmesim0.nvmereply.data[125] top.test.nvmesim0.nvmereply.data[124] top.test.nvmesim0.nvmereply.data[123] top.test.nvmesim0.nvmereply.data[122] top.test.nvmesim0.nvmereply.data[121] top.test.nvmesim0.nvmereply.data[120] top.test.nvmesim0.nvmereply.data[119] top.test.nvmesim0.nvmereply.data[118] top.test.nvmesim0.nvmereply.data[117] top.test.nvmesim0.nvmereply.data[116] top.test.nvmesim0.nvmereply.data[115] top.test.nvmesim0.nvmereply.data[114] top.test.nvmesim0.nvmereply.data[113] top.test.nvmesim0.nvmereply.data[112] top.test.nvmesim0.nvmereply.data[111] top.test.nvmesim0.nvmereply.data[110] top.test.nvmesim0.nvmereply.data[109] top.test.nvmesim0.nvmereply.data[108] top.test.nvmesim0.nvmereply.data[107] top.test.nvmesim0.nvmereply.data[106] top.test.nvmesim0.nvmereply.data[105] top.test.nvmesim0.nvmereply.data[104] top.test.nvmesim0.nvmereply.data[103] top.test.nvmesim0.nvmereply.data[102] top.test.nvmesim0.nvmereply.data[101] top.test.nvmesim0.nvmereply.data[100] top.test.nvmesim0.nvmereply.data[99] top.test.nvmesim0.nvmereply.data[98] top.test.nvmesim0.nvmereply.data[97] top.test.nvmesim0.nvmereply.data[96] top.test.nvmesim0.nvmereply.data[95] top.test.nvmesim0.nvmereply.data[94] top.test.nvmesim0.nvmereply.data[93] top.test.nvmesim0.nvmereply.data[92] top.test.nvmesim0.nvmereply.data[91] top.test.nvmesim0.nvmereply.data[90] top.test.nvmesim0.nvmereply.data[89] top.test.nvmesim0.nvmereply.data[88] top.test.nvmesim0.nvmereply.data[87] top.test.nvmesim0.nvmereply.data[86] top.test.nvmesim0.nvmereply.data[85] top.test.nvmesim0.nvmereply.data[84] top.test.nvmesim0.nvmereply.data[83] top.test.nvmesim0.nvmereply.data[82] top.test.nvmesim0.nvmereply.data[81] top.test.nvmesim0.nvmereply.data[80] top.test.nvmesim0.nvmereply.data[79] top.test.nvmesim0.nvmereply.data[78] top.test.nvmesim0.nvmereply.data[77] top.test.nvmesim0.nvmereply.data[76] top.test.nvmesim0.nvmereply.data[75] top.test.nvmesim0.nvmereply.data[74] top.test.nvmesim0.nvmereply.data[73] top.test.nvmesim0.nvmereply.data[72] top.test.nvmesim0.nvmereply.data[71] top.test.nvmesim0.nvmereply.data[70] top.test.nvmesim0.nvmereply.data[69] top.test.nvmesim0.nvmereply.data[68] top.test.nvmesim0.nvmereply.data[67] top.test.nvmesim0.nvmereply.data[66] top.test.nvmesim0.nvmereply.data[65] top.test.nvmesim0.nvmereply.data[64] top.test.nvmesim0.nvmereply.data[63] top.test.nvmesim0.nvmereply.data[62] top.test.nvmesim0.nvmereply.data[61] top.test.nvmesim0.nvmereply.data[60] top.test.nvmesim0.nvmereply.data[59] top.test.nvmesim0.nvmereply.data[58] top.test.nvmesim0.nvmereply.data[57] top.test.nvmesim0.nvmereply.data[56] top.test.nvmesim0.nvmereply.data[55] top.test.nvmesim0.nvmereply.data[54] top.test.nvmesim0.nvmereply.data[53] top.test.nvmesim0.nvmereply.data[52] top.test.nvmesim0.nvmereply.data[51] top.test.nvmesim0.nvmereply.data[50] top.test.nvmesim0.nvmereply.data[49] top.test.nvmesim0.nvmereply.data[48] top.test.nvmesim0.nvmereply.data[47] top.test.nvmesim0.nvmereply.data[46] top.test.nvmesim0.nvmereply.data[45] top.test.nvmesim0.nvmereply.data[44] top.test.nvmesim0.nvmereply.data[43] top.test.nvmesim0.nvmereply.data[42] top.test.nvmesim0.nvmereply.data[41] top.test.nvmesim0.nvmereply.data[40] top.test.nvmesim0.nvmereply.data[39] top.test.nvmesim0.nvmereply.data[38] top.test.nvmesim0.nvmereply.data[37] top.test.nvmesim0.nvmereply.data[36] top.test.nvmesim0.nvmereply.data[35] top.test.nvmesim0.nvmereply.data[34] top.test.nvmesim0.nvmereply.data[33] top.test.nvmesim0.nvmereply.data[32] top.test.nvmesim0.nvmereply.data[31] top.test.nvmesim0.nvmereply.data[30] top.test.nvmesim0.nvmereply.data[29] top.test.nvmesim0.nvmereply.data[28] top.test.nvmesim0.nvmereply.data[27] top.test.nvmesim0.nvmereply.data[26] top.test.nvmesim0.nvmereply.data[25] top.test.nvmesim0.nvmereply.data[24] top.test.nvmesim0.nvmereply.data[23] top.test.nvmesim0.nvmereply.data[22] top.test.nvmesim0.nvmereply.data[21] top.test.nvmesim0.nvmereply.data[20] top.test.nvmesim0.nvmereply.data[19] top.test.nvmesim0.nvmereply.data[18] top.test.nvmesim0.nvmereply.data[17] top.test.nvmesim0.nvmereply.data[16] top.test.nvmesim0.nvmereply.data[15] top.test.nvmesim0.nvmereply.data[14] top.test.nvmesim0.nvmereply.data[13] top.test.nvmesim0.nvmereply.data[12] top.test.nvmesim0.nvmereply.data[11] top.test.nvmesim0.nvmereply.data[10] top.test.nvmesim0.nvmereply.data[9] top.test.nvmesim0.nvmereply.data[8] top.test.nvmesim0.nvmereply.data[7] top.test.nvmesim0.nvmereply.data[6] top.test.nvmesim0.nvmereply.data[5] top.test.nvmesim0.nvmereply.data[4] top.test.nvmesim0.nvmereply.data[3] top.test.nvmesim0.nvmereply.data[2] top.test.nvmesim0.nvmereply.data[1] top.test.nvmesim0.nvmereply.data[0]
+#{top.test.nvmedata[127:0]} top.test.nvmedata[127] top.test.nvmedata[126] top.test.nvmedata[125] top.test.nvmedata[124] top.test.nvmedata[123] top.test.nvmedata[122] top.test.nvmedata[121] top.test.nvmedata[120] top.test.nvmedata[119] top.test.nvmedata[118] top.test.nvmedata[117] top.test.nvmedata[116] top.test.nvmedata[115] top.test.nvmedata[114] top.test.nvmedata[113] top.test.nvmedata[112] top.test.nvmedata[111] top.test.nvmedata[110] top.test.nvmedata[109] top.test.nvmedata[108] top.test.nvmedata[107] top.test.nvmedata[106] top.test.nvmedata[105] top.test.nvmedata[104] top.test.nvmedata[103] top.test.nvmedata[102] top.test.nvmedata[101] top.test.nvmedata[100] top.test.nvmedata[99] top.test.nvmedata[98] top.test.nvmedata[97] top.test.nvmedata[96] top.test.nvmedata[95] top.test.nvmedata[94] top.test.nvmedata[93] top.test.nvmedata[92] top.test.nvmedata[91] top.test.nvmedata[90] top.test.nvmedata[89] top.test.nvmedata[88] top.test.nvmedata[87] top.test.nvmedata[86] top.test.nvmedata[85] top.test.nvmedata[84] top.test.nvmedata[83] top.test.nvmedata[82] top.test.nvmedata[81] top.test.nvmedata[80] top.test.nvmedata[79] top.test.nvmedata[78] top.test.nvmedata[77] top.test.nvmedata[76] top.test.nvmedata[75] top.test.nvmedata[74] top.test.nvmedata[73] top.test.nvmedata[72] top.test.nvmedata[71] top.test.nvmedata[70] top.test.nvmedata[69] top.test.nvmedata[68] top.test.nvmedata[67] top.test.nvmedata[66] top.test.nvmedata[65] top.test.nvmedata[64] top.test.nvmedata[63] top.test.nvmedata[62] top.test.nvmedata[61] top.test.nvmedata[60] top.test.nvmedata[59] top.test.nvmedata[58] top.test.nvmedata[57] top.test.nvmedata[56] top.test.nvmedata[55] top.test.nvmedata[54] top.test.nvmedata[53] top.test.nvmedata[52] top.test.nvmedata[51] top.test.nvmedata[50] top.test.nvmedata[49] top.test.nvmedata[48] top.test.nvmedata[47] top.test.nvmedata[46] top.test.nvmedata[45] top.test.nvmedata[44] top.test.nvmedata[43] top.test.nvmedata[42] top.test.nvmedata[41] top.test.nvmedata[40] top.test.nvmedata[39] top.test.nvmedata[38] top.test.nvmedata[37] top.test.nvmedata[36] top.test.nvmedata[35] top.test.nvmedata[34] top.test.nvmedata[33] top.test.nvmedata[32] top.test.nvmedata[31] top.test.nvmedata[30] top.test.nvmedata[29] top.test.nvmedata[28] top.test.nvmedata[27] top.test.nvmedata[26] top.test.nvmedata[25] top.test.nvmedata[24] top.test.nvmedata[23] top.test.nvmedata[22] top.test.nvmedata[21] top.test.nvmedata[20] top.test.nvmedata[19] top.test.nvmedata[18] top.test.nvmedata[17] top.test.nvmedata[16] top.test.nvmedata[15] top.test.nvmedata[14] top.test.nvmedata[13] top.test.nvmedata[12] top.test.nvmedata[11] top.test.nvmedata[10] top.test.nvmedata[9] top.test.nvmedata[8] top.test.nvmedata[7] top.test.nvmedata[6] top.test.nvmedata[5] top.test.nvmedata[4] top.test.nvmedata[3] top.test.nvmedata[2] top.test.nvmedata[1] top.test.nvmedata[0]
+#{top.test.nvmesim0.count[10:0]} top.test.nvmesim0.count[10] top.test.nvmesim0.count[9] top.test.nvmesim0.count[8] top.test.nvmesim0.count[7] top.test.nvmesim0.count[6] top.test.nvmesim0.count[5] top.test.nvmesim0.count[4] top.test.nvmesim0.count[3] top.test.nvmesim0.count[2] top.test.nvmesim0.count[1] top.test.nvmesim0.count[0]
+#{top.test.nvmesim0.chunkcount[10:0]} top.test.nvmesim0.chunkcount[10] top.test.nvmesim0.chunkcount[9] top.test.nvmesim0.chunkcount[8] top.test.nvmesim0.chunkcount[7] top.test.nvmesim0.chunkcount[6] top.test.nvmesim0.chunkcount[5] top.test.nvmesim0.chunkcount[4] top.test.nvmesim0.chunkcount[3] top.test.nvmesim0.chunkcount[2] top.test.nvmesim0.chunkcount[1] top.test.nvmesim0.chunkcount[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test005-nvme.vhd b/source/DuneNvme/sim/testbench/test005-nvme.vhd
new file mode 100644 (file)
index 0000000..48c1d78
--- /dev/null
@@ -0,0 +1,204 @@
+--------------------------------------------------------------------------------
+--     Test005-nvme.vhd        Simple AXI lite interface tests
+--     T.Barnaby,      Beam Ltd.       2020-03-13
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeSim is
+generic(
+       Simulate        : boolean       := True
+);
+port (
+       clk             : in std_logic;
+       reset           : in std_logic;
+
+       -- AXIS Interface to PCIE
+       hostReq         : inout AxisStream      := AxisInput;
+       hostReply       : inout AxisStream      := AxisOutput;                        
+       
+       -- From Nvme reqeuest and reply stream
+       nvmeReq         : inout AxisStream      := AxisOutput;
+       nvmeReply       : inout AxisStream      := AxisInput
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal hostReply       : AxisStream    := AxisInput;
+signal hostReq         : AxisStream    := AxisOutput;
+signal nvmeReq         : AxisStream    := AxisOutput;
+signal nvmeReply       : AxisStream    := AxisInput;
+
+type NvmeStateType is (NVME_STATE_IDLE, NVME_STATE_WRITEDATA_START, NVME_STATE_WRITEDATA);
+signal nvmeState       : NvmeStateType := NVME_STATE_IDLE;
+signal nvmeRequestHead : PcieRequestHead;
+signal nvmeRequestHead1        : PcieRequestHead;
+signal nvmeReplyHead   : PcieReplyHead;
+signal nvmeCount       : unsigned(10 downto 0);                        -- DWord data send count
+signal nvmeChunkCount  : unsigned(10 downto 0);                        -- DWord data send within a chunk count
+signal nvmeByteCount   : integer;
+signal nvmeData                : std_logic_vector(127 downto 0);
+
+signal sendData                : std_logic := '0';
+
+procedure pcieWrite(signal toSlave: inout AxisStream; config: in integer; address: in integer; tag: in integer; data: in integer) is
+variable packetHead    : PcieRequestHead;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(0, packetHead.stream'length);
+       packetHead.address := to_stl(address, packetHead.address'length);
+       packetHead.tag := to_stl(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(0, packetHead.count'length);
+       
+       if(config = 1) then
+               packetHead.request := to_unsigned(10, packetHead.request'length);
+       else
+               packetHead.request := to_unsigned(1, packetHead.request'length);
+       end if;
+
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= to_stl(packetHead);
+       toSlave.valid <= '1';
+
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.data <= to_stl(0, 96) & to_stl(data, 32);
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0';
+end procedure;
+
+begin
+       nvmeSim0 : NvmeSim
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               hostReply       => hostReply,
+               hostReq         => hostReq,
+
+               nvmeReq         => nvmeReq,
+               nvmeReply       => nvmeReply
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Set PCIe configuration command register to 0x06
+               --pcieWrite(hostReq, 1, 4, 1, 6);
+               
+               -- Write to AdminQueue doorbell register
+               --pcieWrite(hostReq, 0, 16#1000#, 16#22#, 16#40#);
+
+               -- Perfoem NVMe wdata write
+               -- Write to DataWriteQueue doorbell register
+               pcieWrite(hostReq, 0, 16#1008#, 16#23#, 16#40#);
+               wait;
+       end process;
+
+       nvmeRequestHead <= to_PcieRequestHead(nvmeReq.data);
+       nvmeReply.data <= nvmeData when(nvmeState = NVME_STATE_WRITEDATA) else to_stl(nvmeReplyHead);
+       
+       requests : process(clk)
+       begin
+               if(rising_edge(clk)) then
+                       if(reset = '1') then
+                               nvmeReq.ready   <= '0';
+                               nvmeReply.valid <= '0';
+                               nvmeData        <= (others => '0');
+                               nvmeState       <= NVME_STATE_IDLE;
+                       else
+                               case (nvmeState) is
+                               when NVME_STATE_IDLE =>
+                                       if(nvmeReq.ready = '1' and nvmeReq.valid = '1') then
+                                               nvmeRequestHead1        <= nvmeRequestHead;
+                                               nvmeCount               <= nvmeRequestHead.count + 1;
+                                               nvmeState               <= NVME_STATE_WRITEDATA_START;
+                                               nvmeReq.ready           <= '0';
+                                       else
+                                               nvmeReq.ready           <= '1';
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA_START =>
+                                       nvmeReplyHead.byteCount <= (nvmeRequestHead1.count + 1) & "00";
+                                       nvmeReplyHead.address   <= nvmeRequestHead1.address(nvmeReplyHead.address'length - 1 downto 0);
+                                       nvmeReplyHead.error     <= (others => '0');
+                                       nvmeReplyHead.status    <= (others => '0');
+                                       nvmeReplyHead.tag       <= nvmeRequestHead1.tag;
+
+                                       if(nvmeCount > CHUNK_SIZE) then
+                                               nvmeReplyHead.count     <= to_unsigned(CHUNK_SIZE-1, nvmeReplyHead.count'length);
+                                               nvmeChunkCount          <= to_unsigned(CHUNK_SIZE, nvmeReplyHead.count'length);
+                                       else
+                                               nvmeReplyHead.count     <= nvmeCount - 1;
+                                               nvmeChunkCount          <= nvmeCount;
+                                       end if;
+
+                                       nvmeByteCount           <= (to_integer(nvmeRequestHead1.count) + 1) * 4;
+                                       nvmeReply.valid         <= '1';
+
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               nvmeState       <= NVME_STATE_WRITEDATA;
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA =>
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               if(nvmeChunkCount = 4) then
+                                                       if(nvmeCount = 4) then
+                                                               nvmeReply.valid <= '0';
+                                                               nvmeState       <= NVME_STATE_IDLE;
+                                                       else
+                                                               nvmeState       <= NVME_STATE_WRITEDATA_START;
+                                                       end if;
+                                               end if;
+                                               nvmeChunkCount  <= nvmeChunkCount - 4;
+                                               nvmeCount       <= nvmeCount - 4;
+                                       end if;
+                               end case;
+                       end if;
+               end if;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test006-testdata.sav b/source/DuneNvme/sim/testbench/test006-testdata.sav
new file mode 100644 (file)
index 0000000..d6a0f1a
--- /dev/null
@@ -0,0 +1,32 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Tue Apr  7 13:19:42 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test010-nvme/sim/simu/test.ghw"
+[dumpfile_mtime] "Tue Apr  7 13:15:00 2020"
+[dumpfile_size] 3024
+[savefile] "/src/dune/FpgaPlay/test010-nvme/sim/testbench/test006-testdata.sav"
+[timestart] 0
+[size] 1920 1051
+[pos] -1 -1
+*-25.922155 131300000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.datastream.
+[treeopen] top.test.testdata0.
+[treeopen] top.test.testdata0.datastream.
+[sst_width] 230
+[signals_width] 391
+[sst_expanded] 1
+[sst_vpaned_height] 314
+@28
+top.test.clk
+top.test.reset
+top.test.enable
+top.test.testdata0.datastream.valid
+top.test.testdata0.datastream.last
+top.test.testdata0.datastream.ready
+@22
+#{top.test.testdata0.datastream.data[127:0]} top.test.testdata0.datastream.data[127] top.test.testdata0.datastream.data[126] top.test.testdata0.datastream.data[125] top.test.testdata0.datastream.data[124] top.test.testdata0.datastream.data[123] top.test.testdata0.datastream.data[122] top.test.testdata0.datastream.data[121] top.test.testdata0.datastream.data[120] top.test.testdata0.datastream.data[119] top.test.testdata0.datastream.data[118] top.test.testdata0.datastream.data[117] top.test.testdata0.datastream.data[116] top.test.testdata0.datastream.data[115] top.test.testdata0.datastream.data[114] top.test.testdata0.datastream.data[113] top.test.testdata0.datastream.data[112] top.test.testdata0.datastream.data[111] top.test.testdata0.datastream.data[110] top.test.testdata0.datastream.data[109] top.test.testdata0.datastream.data[108] top.test.testdata0.datastream.data[107] top.test.testdata0.datastream.data[106] top.test.testdata0.datastream.data[105] top.test.testdata0.datastream.data[104] top.test.testdata0.datastream.data[103] top.test.testdata0.datastream.data[102] top.test.testdata0.datastream.data[101] top.test.testdata0.datastream.data[100] top.test.testdata0.datastream.data[99] top.test.testdata0.datastream.data[98] top.test.testdata0.datastream.data[97] top.test.testdata0.datastream.data[96] top.test.testdata0.datastream.data[95] top.test.testdata0.datastream.data[94] top.test.testdata0.datastream.data[93] top.test.testdata0.datastream.data[92] top.test.testdata0.datastream.data[91] top.test.testdata0.datastream.data[90] top.test.testdata0.datastream.data[89] top.test.testdata0.datastream.data[88] top.test.testdata0.datastream.data[87] top.test.testdata0.datastream.data[86] top.test.testdata0.datastream.data[85] top.test.testdata0.datastream.data[84] top.test.testdata0.datastream.data[83] top.test.testdata0.datastream.data[82] top.test.testdata0.datastream.data[81] top.test.testdata0.datastream.data[80] top.test.testdata0.datastream.data[79] top.test.testdata0.datastream.data[78] top.test.testdata0.datastream.data[77] top.test.testdata0.datastream.data[76] top.test.testdata0.datastream.data[75] top.test.testdata0.datastream.data[74] top.test.testdata0.datastream.data[73] top.test.testdata0.datastream.data[72] top.test.testdata0.datastream.data[71] top.test.testdata0.datastream.data[70] top.test.testdata0.datastream.data[69] top.test.testdata0.datastream.data[68] top.test.testdata0.datastream.data[67] top.test.testdata0.datastream.data[66] top.test.testdata0.datastream.data[65] top.test.testdata0.datastream.data[64] top.test.testdata0.datastream.data[63] top.test.testdata0.datastream.data[62] top.test.testdata0.datastream.data[61] top.test.testdata0.datastream.data[60] top.test.testdata0.datastream.data[59] top.test.testdata0.datastream.data[58] top.test.testdata0.datastream.data[57] top.test.testdata0.datastream.data[56] top.test.testdata0.datastream.data[55] top.test.testdata0.datastream.data[54] top.test.testdata0.datastream.data[53] top.test.testdata0.datastream.data[52] top.test.testdata0.datastream.data[51] top.test.testdata0.datastream.data[50] top.test.testdata0.datastream.data[49] top.test.testdata0.datastream.data[48] top.test.testdata0.datastream.data[47] top.test.testdata0.datastream.data[46] top.test.testdata0.datastream.data[45] top.test.testdata0.datastream.data[44] top.test.testdata0.datastream.data[43] top.test.testdata0.datastream.data[42] top.test.testdata0.datastream.data[41] top.test.testdata0.datastream.data[40] top.test.testdata0.datastream.data[39] top.test.testdata0.datastream.data[38] top.test.testdata0.datastream.data[37] top.test.testdata0.datastream.data[36] top.test.testdata0.datastream.data[35] top.test.testdata0.datastream.data[34] top.test.testdata0.datastream.data[33] top.test.testdata0.datastream.data[32] top.test.testdata0.datastream.data[31] top.test.testdata0.datastream.data[30] top.test.testdata0.datastream.data[29] top.test.testdata0.datastream.data[28] top.test.testdata0.datastream.data[27] top.test.testdata0.datastream.data[26] top.test.testdata0.datastream.data[25] top.test.testdata0.datastream.data[24] top.test.testdata0.datastream.data[23] top.test.testdata0.datastream.data[22] top.test.testdata0.datastream.data[21] top.test.testdata0.datastream.data[20] top.test.testdata0.datastream.data[19] top.test.testdata0.datastream.data[18] top.test.testdata0.datastream.data[17] top.test.testdata0.datastream.data[16] top.test.testdata0.datastream.data[15] top.test.testdata0.datastream.data[14] top.test.testdata0.datastream.data[13] top.test.testdata0.datastream.data[12] top.test.testdata0.datastream.data[11] top.test.testdata0.datastream.data[10] top.test.testdata0.datastream.data[9] top.test.testdata0.datastream.data[8] top.test.testdata0.datastream.data[7] top.test.testdata0.datastream.data[6] top.test.testdata0.datastream.data[5] top.test.testdata0.datastream.data[4] top.test.testdata0.datastream.data[3] top.test.testdata0.datastream.data[2] top.test.testdata0.datastream.data[1] top.test.testdata0.datastream.data[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test006-testdata.vhd b/source/DuneNvme/sim/testbench/test006-testdata.vhd
new file mode 100644 (file)
index 0000000..30b67ef
--- /dev/null
@@ -0,0 +1,99 @@
+--------------------------------------------------------------------------------
+--     Test006-testdata.vhd    Test of TestData module
+--     T.Barnaby,      Beam Ltd.       2020-04-07
+--------------------------------------------------------------------------------
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component TestData is
+generic(
+       BlockSize       : integer := 64                         --! The block size in Bytes.
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+
+       -- Control and status interface
+       enable          : in std_logic;                         --! Enable production of data
+
+       -- AXIS data output
+       dataStream      : inout AxisStream := AxisOutput        --! Output data stream
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal enable          : std_logic := '0';
+signal dataStream      : AxisStream    := AxisInput;
+
+begin
+       testData0 : TestData
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               enable          => enable,
+
+               dataStream      => dataStream
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               wait until rising_edge(clk);
+               enable <= '1';
+               dataStream.ready <= '1';
+               
+               -- Watch data comming in
+               wait for 100 ns;
+               
+               -- Pause data
+               wait until rising_edge(clk);
+               dataStream.ready <= '0';
+               wait until rising_edge(clk);
+               dataStream.ready <= '1';
+
+               -- Disable
+               wait for 200 ns;
+               enable <= '0';
+               wait;
+       end process;
+
+       stop : process
+       begin
+               wait for 500 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test007-hostnvme.sav b/source/DuneNvme/sim/testbench/test007-hostnvme.sav
new file mode 100644 (file)
index 0000000..ca5f114
--- /dev/null
@@ -0,0 +1,106 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Wed Apr  8 15:20:09 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test011-databuffer/sim/simu/test.ghw"
+[dumpfile_mtime] "Wed Apr  8 13:41:34 2020"
+[dumpfile_size] 26097
+[savefile] "/src/dune/FpgaPlay/test011-databuffer/sim/testbench/test007-hostnvme.sav"
+[timestart] 0
+[size] 1920 1051
+[pos] -1 -1
+*-25.922155 370100000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.hostrecv.
+[treeopen] top.test.hostreq.
+[treeopen] top.test.hostsend.
+[treeopen] top.test.nvmereply.
+[treeopen] top.test.nvmereq.
+[treeopen] top.test.nvmestorage0.
+[treeopen] top.test.nvmestorage0.hostreq.
+[treeopen] top.test.nvmestorage0.hostsend1.
+[treeopen] top.test.nvmestorage0.nvmereq.
+[treeopen] top.test.nvmestorage0.sim.
+[treeopen] top.test.nvmestorage0.sim.nvmesim0.
+[treeopen] top.test.nvmestorage0.sim.nvmesim0.hostreq.
+[treeopen] top.test.nvmestorage0.sim.nvmesim0.nvmereply.
+[treeopen] top.test.nvmestorage0.sim.nvmesim0.nvmereq.
+[sst_width] 302
+[signals_width] 744
+[sst_expanded] 1
+[sst_vpaned_height] 522
+@28
+top.test.clk
+top.test.reset
+top.test.hostreq.ready
+top.test.hostreq.valid
+top.test.hostreq.last
+@22
+#{top.test.hostreq.data[127:0]} top.test.hostreq.data[127] top.test.hostreq.data[126] top.test.hostreq.data[125] top.test.hostreq.data[124] top.test.hostreq.data[123] top.test.hostreq.data[122] top.test.hostreq.data[121] top.test.hostreq.data[120] top.test.hostreq.data[119] top.test.hostreq.data[118] top.test.hostreq.data[117] top.test.hostreq.data[116] top.test.hostreq.data[115] top.test.hostreq.data[114] top.test.hostreq.data[113] top.test.hostreq.data[112] top.test.hostreq.data[111] top.test.hostreq.data[110] top.test.hostreq.data[109] top.test.hostreq.data[108] top.test.hostreq.data[107] top.test.hostreq.data[106] top.test.hostreq.data[105] top.test.hostreq.data[104] top.test.hostreq.data[103] top.test.hostreq.data[102] top.test.hostreq.data[101] top.test.hostreq.data[100] top.test.hostreq.data[99] top.test.hostreq.data[98] top.test.hostreq.data[97] top.test.hostreq.data[96] top.test.hostreq.data[95] top.test.hostreq.data[94] top.test.hostreq.data[93] top.test.hostreq.data[92] top.test.hostreq.data[91] top.test.hostreq.data[90] top.test.hostreq.data[89] top.test.hostreq.data[88] top.test.hostreq.data[87] top.test.hostreq.data[86] top.test.hostreq.data[85] top.test.hostreq.data[84] top.test.hostreq.data[83] top.test.hostreq.data[82] top.test.hostreq.data[81] top.test.hostreq.data[80] top.test.hostreq.data[79] top.test.hostreq.data[78] top.test.hostreq.data[77] top.test.hostreq.data[76] top.test.hostreq.data[75] top.test.hostreq.data[74] top.test.hostreq.data[73] top.test.hostreq.data[72] top.test.hostreq.data[71] top.test.hostreq.data[70] top.test.hostreq.data[69] top.test.hostreq.data[68] top.test.hostreq.data[67] top.test.hostreq.data[66] top.test.hostreq.data[65] top.test.hostreq.data[64] top.test.hostreq.data[63] top.test.hostreq.data[62] top.test.hostreq.data[61] top.test.hostreq.data[60] top.test.hostreq.data[59] top.test.hostreq.data[58] top.test.hostreq.data[57] top.test.hostreq.data[56] top.test.hostreq.data[55] top.test.hostreq.data[54] top.test.hostreq.data[53] top.test.hostreq.data[52] top.test.hostreq.data[51] top.test.hostreq.data[50] top.test.hostreq.data[49] top.test.hostreq.data[48] top.test.hostreq.data[47] top.test.hostreq.data[46] top.test.hostreq.data[45] top.test.hostreq.data[44] top.test.hostreq.data[43] top.test.hostreq.data[42] top.test.hostreq.data[41] top.test.hostreq.data[40] top.test.hostreq.data[39] top.test.hostreq.data[38] top.test.hostreq.data[37] top.test.hostreq.data[36] top.test.hostreq.data[35] top.test.hostreq.data[34] top.test.hostreq.data[33] top.test.hostreq.data[32] top.test.hostreq.data[31] top.test.hostreq.data[30] top.test.hostreq.data[29] top.test.hostreq.data[28] top.test.hostreq.data[27] top.test.hostreq.data[26] top.test.hostreq.data[25] top.test.hostreq.data[24] top.test.hostreq.data[23] top.test.hostreq.data[22] top.test.hostreq.data[21] top.test.hostreq.data[20] top.test.hostreq.data[19] top.test.hostreq.data[18] top.test.hostreq.data[17] top.test.hostreq.data[16] top.test.hostreq.data[15] top.test.hostreq.data[14] top.test.hostreq.data[13] top.test.hostreq.data[12] top.test.hostreq.data[11] top.test.hostreq.data[10] top.test.hostreq.data[9] top.test.hostreq.data[8] top.test.hostreq.data[7] top.test.hostreq.data[6] top.test.hostreq.data[5] top.test.hostreq.data[4] top.test.hostreq.data[3] top.test.hostreq.data[2] top.test.hostreq.data[1] top.test.hostreq.data[0]
+@28
+top.test.hostsend.ready
+top.test.hostsend.valid
+top.test.hostsend.last
+@22
+#{top.test.hostsend.data[127:0]} top.test.hostsend.data[127] top.test.hostsend.data[126] top.test.hostsend.data[125] top.test.hostsend.data[124] top.test.hostsend.data[123] top.test.hostsend.data[122] top.test.hostsend.data[121] top.test.hostsend.data[120] top.test.hostsend.data[119] top.test.hostsend.data[118] top.test.hostsend.data[117] top.test.hostsend.data[116] top.test.hostsend.data[115] top.test.hostsend.data[114] top.test.hostsend.data[113] top.test.hostsend.data[112] top.test.hostsend.data[111] top.test.hostsend.data[110] top.test.hostsend.data[109] top.test.hostsend.data[108] top.test.hostsend.data[107] top.test.hostsend.data[106] top.test.hostsend.data[105] top.test.hostsend.data[104] top.test.hostsend.data[103] top.test.hostsend.data[102] top.test.hostsend.data[101] top.test.hostsend.data[100] top.test.hostsend.data[99] top.test.hostsend.data[98] top.test.hostsend.data[97] top.test.hostsend.data[96] top.test.hostsend.data[95] top.test.hostsend.data[94] top.test.hostsend.data[93] top.test.hostsend.data[92] top.test.hostsend.data[91] top.test.hostsend.data[90] top.test.hostsend.data[89] top.test.hostsend.data[88] top.test.hostsend.data[87] top.test.hostsend.data[86] top.test.hostsend.data[85] top.test.hostsend.data[84] top.test.hostsend.data[83] top.test.hostsend.data[82] top.test.hostsend.data[81] top.test.hostsend.data[80] top.test.hostsend.data[79] top.test.hostsend.data[78] top.test.hostsend.data[77] top.test.hostsend.data[76] top.test.hostsend.data[75] top.test.hostsend.data[74] top.test.hostsend.data[73] top.test.hostsend.data[72] top.test.hostsend.data[71] top.test.hostsend.data[70] top.test.hostsend.data[69] top.test.hostsend.data[68] top.test.hostsend.data[67] top.test.hostsend.data[66] top.test.hostsend.data[65] top.test.hostsend.data[64] top.test.hostsend.data[63] top.test.hostsend.data[62] top.test.hostsend.data[61] top.test.hostsend.data[60] top.test.hostsend.data[59] top.test.hostsend.data[58] top.test.hostsend.data[57] top.test.hostsend.data[56] top.test.hostsend.data[55] top.test.hostsend.data[54] top.test.hostsend.data[53] top.test.hostsend.data[52] top.test.hostsend.data[51] top.test.hostsend.data[50] top.test.hostsend.data[49] top.test.hostsend.data[48] top.test.hostsend.data[47] top.test.hostsend.data[46] top.test.hostsend.data[45] top.test.hostsend.data[44] top.test.hostsend.data[43] top.test.hostsend.data[42] top.test.hostsend.data[41] top.test.hostsend.data[40] top.test.hostsend.data[39] top.test.hostsend.data[38] top.test.hostsend.data[37] top.test.hostsend.data[36] top.test.hostsend.data[35] top.test.hostsend.data[34] top.test.hostsend.data[33] top.test.hostsend.data[32] top.test.hostsend.data[31] top.test.hostsend.data[30] top.test.hostsend.data[29] top.test.hostsend.data[28] top.test.hostsend.data[27] top.test.hostsend.data[26] top.test.hostsend.data[25] top.test.hostsend.data[24] top.test.hostsend.data[23] top.test.hostsend.data[22] top.test.hostsend.data[21] top.test.hostsend.data[20] top.test.hostsend.data[19] top.test.hostsend.data[18] top.test.hostsend.data[17] top.test.hostsend.data[16] top.test.hostsend.data[15] top.test.hostsend.data[14] top.test.hostsend.data[13] top.test.hostsend.data[12] top.test.hostsend.data[11] top.test.hostsend.data[10] top.test.hostsend.data[9] top.test.hostsend.data[8] top.test.hostsend.data[7] top.test.hostsend.data[6] top.test.hostsend.data[5] top.test.hostsend.data[4] top.test.hostsend.data[3] top.test.hostsend.data[2] top.test.hostsend.data[1] top.test.hostsend.data[0]
+@28
+top.test.nvmestorage0.hostreq.ready
+top.test.nvmestorage0.hostreq.valid
+top.test.nvmestorage0.hostreq.last
+@22
+#{top.test.nvmestorage0.hostreq.data[127:0]} top.test.nvmestorage0.hostreq.data[127] top.test.nvmestorage0.hostreq.data[126] top.test.nvmestorage0.hostreq.data[125] top.test.nvmestorage0.hostreq.data[124] top.test.nvmestorage0.hostreq.data[123] top.test.nvmestorage0.hostreq.data[122] top.test.nvmestorage0.hostreq.data[121] top.test.nvmestorage0.hostreq.data[120] top.test.nvmestorage0.hostreq.data[119] top.test.nvmestorage0.hostreq.data[118] top.test.nvmestorage0.hostreq.data[117] top.test.nvmestorage0.hostreq.data[116] top.test.nvmestorage0.hostreq.data[115] top.test.nvmestorage0.hostreq.data[114] top.test.nvmestorage0.hostreq.data[113] top.test.nvmestorage0.hostreq.data[112] top.test.nvmestorage0.hostreq.data[111] top.test.nvmestorage0.hostreq.data[110] top.test.nvmestorage0.hostreq.data[109] top.test.nvmestorage0.hostreq.data[108] top.test.nvmestorage0.hostreq.data[107] top.test.nvmestorage0.hostreq.data[106] top.test.nvmestorage0.hostreq.data[105] top.test.nvmestorage0.hostreq.data[104] top.test.nvmestorage0.hostreq.data[103] top.test.nvmestorage0.hostreq.data[102] top.test.nvmestorage0.hostreq.data[101] top.test.nvmestorage0.hostreq.data[100] top.test.nvmestorage0.hostreq.data[99] top.test.nvmestorage0.hostreq.data[98] top.test.nvmestorage0.hostreq.data[97] top.test.nvmestorage0.hostreq.data[96] top.test.nvmestorage0.hostreq.data[95] top.test.nvmestorage0.hostreq.data[94] top.test.nvmestorage0.hostreq.data[93] top.test.nvmestorage0.hostreq.data[92] top.test.nvmestorage0.hostreq.data[91] top.test.nvmestorage0.hostreq.data[90] top.test.nvmestorage0.hostreq.data[89] top.test.nvmestorage0.hostreq.data[88] top.test.nvmestorage0.hostreq.data[87] top.test.nvmestorage0.hostreq.data[86] top.test.nvmestorage0.hostreq.data[85] top.test.nvmestorage0.hostreq.data[84] top.test.nvmestorage0.hostreq.data[83] top.test.nvmestorage0.hostreq.data[82] top.test.nvmestorage0.hostreq.data[81] top.test.nvmestorage0.hostreq.data[80] top.test.nvmestorage0.hostreq.data[79] top.test.nvmestorage0.hostreq.data[78] top.test.nvmestorage0.hostreq.data[77] top.test.nvmestorage0.hostreq.data[76] top.test.nvmestorage0.hostreq.data[75] top.test.nvmestorage0.hostreq.data[74] top.test.nvmestorage0.hostreq.data[73] top.test.nvmestorage0.hostreq.data[72] top.test.nvmestorage0.hostreq.data[71] top.test.nvmestorage0.hostreq.data[70] top.test.nvmestorage0.hostreq.data[69] top.test.nvmestorage0.hostreq.data[68] top.test.nvmestorage0.hostreq.data[67] top.test.nvmestorage0.hostreq.data[66] top.test.nvmestorage0.hostreq.data[65] top.test.nvmestorage0.hostreq.data[64] top.test.nvmestorage0.hostreq.data[63] top.test.nvmestorage0.hostreq.data[62] top.test.nvmestorage0.hostreq.data[61] top.test.nvmestorage0.hostreq.data[60] top.test.nvmestorage0.hostreq.data[59] top.test.nvmestorage0.hostreq.data[58] top.test.nvmestorage0.hostreq.data[57] top.test.nvmestorage0.hostreq.data[56] top.test.nvmestorage0.hostreq.data[55] top.test.nvmestorage0.hostreq.data[54] top.test.nvmestorage0.hostreq.data[53] top.test.nvmestorage0.hostreq.data[52] top.test.nvmestorage0.hostreq.data[51] top.test.nvmestorage0.hostreq.data[50] top.test.nvmestorage0.hostreq.data[49] top.test.nvmestorage0.hostreq.data[48] top.test.nvmestorage0.hostreq.data[47] top.test.nvmestorage0.hostreq.data[46] top.test.nvmestorage0.hostreq.data[45] top.test.nvmestorage0.hostreq.data[44] top.test.nvmestorage0.hostreq.data[43] top.test.nvmestorage0.hostreq.data[42] top.test.nvmestorage0.hostreq.data[41] top.test.nvmestorage0.hostreq.data[40] top.test.nvmestorage0.hostreq.data[39] top.test.nvmestorage0.hostreq.data[38] top.test.nvmestorage0.hostreq.data[37] top.test.nvmestorage0.hostreq.data[36] top.test.nvmestorage0.hostreq.data[35] top.test.nvmestorage0.hostreq.data[34] top.test.nvmestorage0.hostreq.data[33] top.test.nvmestorage0.hostreq.data[32] top.test.nvmestorage0.hostreq.data[31] top.test.nvmestorage0.hostreq.data[30] top.test.nvmestorage0.hostreq.data[29] top.test.nvmestorage0.hostreq.data[28] top.test.nvmestorage0.hostreq.data[27] top.test.nvmestorage0.hostreq.data[26] top.test.nvmestorage0.hostreq.data[25] top.test.nvmestorage0.hostreq.data[24] top.test.nvmestorage0.hostreq.data[23] top.test.nvmestorage0.hostreq.data[22] top.test.nvmestorage0.hostreq.data[21] top.test.nvmestorage0.hostreq.data[20] top.test.nvmestorage0.hostreq.data[19] top.test.nvmestorage0.hostreq.data[18] top.test.nvmestorage0.hostreq.data[17] top.test.nvmestorage0.hostreq.data[16] top.test.nvmestorage0.hostreq.data[15] top.test.nvmestorage0.hostreq.data[14] top.test.nvmestorage0.hostreq.data[13] top.test.nvmestorage0.hostreq.data[12] top.test.nvmestorage0.hostreq.data[11] top.test.nvmestorage0.hostreq.data[10] top.test.nvmestorage0.hostreq.data[9] top.test.nvmestorage0.hostreq.data[8] top.test.nvmestorage0.hostreq.data[7] top.test.nvmestorage0.hostreq.data[6] top.test.nvmestorage0.hostreq.data[5] top.test.nvmestorage0.hostreq.data[4] top.test.nvmestorage0.hostreq.data[3] top.test.nvmestorage0.hostreq.data[2] top.test.nvmestorage0.hostreq.data[1] top.test.nvmestorage0.hostreq.data[0]
+#{top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[31:0]} top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[31] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[30] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[29] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[28] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[27] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[26] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[25] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[24] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[23] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[22] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[21] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[20] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[19] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[18] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[17] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[16] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[15] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[14] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[13] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[12] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[11] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[10] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[9] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[8] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[7] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[6] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[5] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[4] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[3] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[2] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[1] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[0]
+@28
+top.test.hostrecv.ready
+top.test.hostrecv.valid
+top.test.hostrecv.last
+@22
+#{top.test.hostrecv.data[127:0]} top.test.hostrecv.data[127] top.test.hostrecv.data[126] top.test.hostrecv.data[125] top.test.hostrecv.data[124] top.test.hostrecv.data[123] top.test.hostrecv.data[122] top.test.hostrecv.data[121] top.test.hostrecv.data[120] top.test.hostrecv.data[119] top.test.hostrecv.data[118] top.test.hostrecv.data[117] top.test.hostrecv.data[116] top.test.hostrecv.data[115] top.test.hostrecv.data[114] top.test.hostrecv.data[113] top.test.hostrecv.data[112] top.test.hostrecv.data[111] top.test.hostrecv.data[110] top.test.hostrecv.data[109] top.test.hostrecv.data[108] top.test.hostrecv.data[107] top.test.hostrecv.data[106] top.test.hostrecv.data[105] top.test.hostrecv.data[104] top.test.hostrecv.data[103] top.test.hostrecv.data[102] top.test.hostrecv.data[101] top.test.hostrecv.data[100] top.test.hostrecv.data[99] top.test.hostrecv.data[98] top.test.hostrecv.data[97] top.test.hostrecv.data[96] top.test.hostrecv.data[95] top.test.hostrecv.data[94] top.test.hostrecv.data[93] top.test.hostrecv.data[92] top.test.hostrecv.data[91] top.test.hostrecv.data[90] top.test.hostrecv.data[89] top.test.hostrecv.data[88] top.test.hostrecv.data[87] top.test.hostrecv.data[86] top.test.hostrecv.data[85] top.test.hostrecv.data[84] top.test.hostrecv.data[83] top.test.hostrecv.data[82] top.test.hostrecv.data[81] top.test.hostrecv.data[80] top.test.hostrecv.data[79] top.test.hostrecv.data[78] top.test.hostrecv.data[77] top.test.hostrecv.data[76] top.test.hostrecv.data[75] top.test.hostrecv.data[74] top.test.hostrecv.data[73] top.test.hostrecv.data[72] top.test.hostrecv.data[71] top.test.hostrecv.data[70] top.test.hostrecv.data[69] top.test.hostrecv.data[68] top.test.hostrecv.data[67] top.test.hostrecv.data[66] top.test.hostrecv.data[65] top.test.hostrecv.data[64] top.test.hostrecv.data[63] top.test.hostrecv.data[62] top.test.hostrecv.data[61] top.test.hostrecv.data[60] top.test.hostrecv.data[59] top.test.hostrecv.data[58] top.test.hostrecv.data[57] top.test.hostrecv.data[56] top.test.hostrecv.data[55] top.test.hostrecv.data[54] top.test.hostrecv.data[53] top.test.hostrecv.data[52] top.test.hostrecv.data[51] top.test.hostrecv.data[50] top.test.hostrecv.data[49] top.test.hostrecv.data[48] top.test.hostrecv.data[47] top.test.hostrecv.data[46] top.test.hostrecv.data[45] top.test.hostrecv.data[44] top.test.hostrecv.data[43] top.test.hostrecv.data[42] top.test.hostrecv.data[41] top.test.hostrecv.data[40] top.test.hostrecv.data[39] top.test.hostrecv.data[38] top.test.hostrecv.data[37] top.test.hostrecv.data[36] top.test.hostrecv.data[35] top.test.hostrecv.data[34] top.test.hostrecv.data[33] top.test.hostrecv.data[32] top.test.hostrecv.data[31] top.test.hostrecv.data[30] top.test.hostrecv.data[29] top.test.hostrecv.data[28] top.test.hostrecv.data[27] top.test.hostrecv.data[26] top.test.hostrecv.data[25] top.test.hostrecv.data[24] top.test.hostrecv.data[23] top.test.hostrecv.data[22] top.test.hostrecv.data[21] top.test.hostrecv.data[20] top.test.hostrecv.data[19] top.test.hostrecv.data[18] top.test.hostrecv.data[17] top.test.hostrecv.data[16] top.test.hostrecv.data[15] top.test.hostrecv.data[14] top.test.hostrecv.data[13] top.test.hostrecv.data[12] top.test.hostrecv.data[11] top.test.hostrecv.data[10] top.test.hostrecv.data[9] top.test.hostrecv.data[8] top.test.hostrecv.data[7] top.test.hostrecv.data[6] top.test.hostrecv.data[5] top.test.hostrecv.data[4] top.test.hostrecv.data[3] top.test.hostrecv.data[2] top.test.hostrecv.data[1] top.test.hostrecv.data[0]
+@420
+top.test.nvmestate
+@28
+top.test.nvmestorage0.nvmereq.ready
+top.test.nvmestorage0.nvmereq.valid
+top.test.nvmestorage0.nvmereq.last
+@22
+#{top.test.nvmestorage0.nvmereq.data[127:0]} top.test.nvmestorage0.nvmereq.data[127] top.test.nvmestorage0.nvmereq.data[126] top.test.nvmestorage0.nvmereq.data[125] top.test.nvmestorage0.nvmereq.data[124] top.test.nvmestorage0.nvmereq.data[123] top.test.nvmestorage0.nvmereq.data[122] top.test.nvmestorage0.nvmereq.data[121] top.test.nvmestorage0.nvmereq.data[120] top.test.nvmestorage0.nvmereq.data[119] top.test.nvmestorage0.nvmereq.data[118] top.test.nvmestorage0.nvmereq.data[117] top.test.nvmestorage0.nvmereq.data[116] top.test.nvmestorage0.nvmereq.data[115] top.test.nvmestorage0.nvmereq.data[114] top.test.nvmestorage0.nvmereq.data[113] top.test.nvmestorage0.nvmereq.data[112] top.test.nvmestorage0.nvmereq.data[111] top.test.nvmestorage0.nvmereq.data[110] top.test.nvmestorage0.nvmereq.data[109] top.test.nvmestorage0.nvmereq.data[108] top.test.nvmestorage0.nvmereq.data[107] top.test.nvmestorage0.nvmereq.data[106] top.test.nvmestorage0.nvmereq.data[105] top.test.nvmestorage0.nvmereq.data[104] top.test.nvmestorage0.nvmereq.data[103] top.test.nvmestorage0.nvmereq.data[102] top.test.nvmestorage0.nvmereq.data[101] top.test.nvmestorage0.nvmereq.data[100] top.test.nvmestorage0.nvmereq.data[99] top.test.nvmestorage0.nvmereq.data[98] top.test.nvmestorage0.nvmereq.data[97] top.test.nvmestorage0.nvmereq.data[96] top.test.nvmestorage0.nvmereq.data[95] top.test.nvmestorage0.nvmereq.data[94] top.test.nvmestorage0.nvmereq.data[93] top.test.nvmestorage0.nvmereq.data[92] top.test.nvmestorage0.nvmereq.data[91] top.test.nvmestorage0.nvmereq.data[90] top.test.nvmestorage0.nvmereq.data[89] top.test.nvmestorage0.nvmereq.data[88] top.test.nvmestorage0.nvmereq.data[87] top.test.nvmestorage0.nvmereq.data[86] top.test.nvmestorage0.nvmereq.data[85] top.test.nvmestorage0.nvmereq.data[84] top.test.nvmestorage0.nvmereq.data[83] top.test.nvmestorage0.nvmereq.data[82] top.test.nvmestorage0.nvmereq.data[81] top.test.nvmestorage0.nvmereq.data[80] top.test.nvmestorage0.nvmereq.data[79] top.test.nvmestorage0.nvmereq.data[78] top.test.nvmestorage0.nvmereq.data[77] top.test.nvmestorage0.nvmereq.data[76] top.test.nvmestorage0.nvmereq.data[75] top.test.nvmestorage0.nvmereq.data[74] top.test.nvmestorage0.nvmereq.data[73] top.test.nvmestorage0.nvmereq.data[72] top.test.nvmestorage0.nvmereq.data[71] top.test.nvmestorage0.nvmereq.data[70] top.test.nvmestorage0.nvmereq.data[69] top.test.nvmestorage0.nvmereq.data[68] top.test.nvmestorage0.nvmereq.data[67] top.test.nvmestorage0.nvmereq.data[66] top.test.nvmestorage0.nvmereq.data[65] top.test.nvmestorage0.nvmereq.data[64] top.test.nvmestorage0.nvmereq.data[63] top.test.nvmestorage0.nvmereq.data[62] top.test.nvmestorage0.nvmereq.data[61] top.test.nvmestorage0.nvmereq.data[60] top.test.nvmestorage0.nvmereq.data[59] top.test.nvmestorage0.nvmereq.data[58] top.test.nvmestorage0.nvmereq.data[57] top.test.nvmestorage0.nvmereq.data[56] top.test.nvmestorage0.nvmereq.data[55] top.test.nvmestorage0.nvmereq.data[54] top.test.nvmestorage0.nvmereq.data[53] top.test.nvmestorage0.nvmereq.data[52] top.test.nvmestorage0.nvmereq.data[51] top.test.nvmestorage0.nvmereq.data[50] top.test.nvmestorage0.nvmereq.data[49] top.test.nvmestorage0.nvmereq.data[48] top.test.nvmestorage0.nvmereq.data[47] top.test.nvmestorage0.nvmereq.data[46] top.test.nvmestorage0.nvmereq.data[45] top.test.nvmestorage0.nvmereq.data[44] top.test.nvmestorage0.nvmereq.data[43] top.test.nvmestorage0.nvmereq.data[42] top.test.nvmestorage0.nvmereq.data[41] top.test.nvmestorage0.nvmereq.data[40] top.test.nvmestorage0.nvmereq.data[39] top.test.nvmestorage0.nvmereq.data[38] top.test.nvmestorage0.nvmereq.data[37] top.test.nvmestorage0.nvmereq.data[36] top.test.nvmestorage0.nvmereq.data[35] top.test.nvmestorage0.nvmereq.data[34] top.test.nvmestorage0.nvmereq.data[33] top.test.nvmestorage0.nvmereq.data[32] top.test.nvmestorage0.nvmereq.data[31] top.test.nvmestorage0.nvmereq.data[30] top.test.nvmestorage0.nvmereq.data[29] top.test.nvmestorage0.nvmereq.data[28] top.test.nvmestorage0.nvmereq.data[27] top.test.nvmestorage0.nvmereq.data[26] top.test.nvmestorage0.nvmereq.data[25] top.test.nvmestorage0.nvmereq.data[24] top.test.nvmestorage0.nvmereq.data[23] top.test.nvmestorage0.nvmereq.data[22] top.test.nvmestorage0.nvmereq.data[21] top.test.nvmestorage0.nvmereq.data[20] top.test.nvmestorage0.nvmereq.data[19] top.test.nvmestorage0.nvmereq.data[18] top.test.nvmestorage0.nvmereq.data[17] top.test.nvmestorage0.nvmereq.data[16] top.test.nvmestorage0.nvmereq.data[15] top.test.nvmestorage0.nvmereq.data[14] top.test.nvmestorage0.nvmereq.data[13] top.test.nvmestorage0.nvmereq.data[12] top.test.nvmestorage0.nvmereq.data[11] top.test.nvmestorage0.nvmereq.data[10] top.test.nvmestorage0.nvmereq.data[9] top.test.nvmestorage0.nvmereq.data[8] top.test.nvmestorage0.nvmereq.data[7] top.test.nvmestorage0.nvmereq.data[6] top.test.nvmestorage0.nvmereq.data[5] top.test.nvmestorage0.nvmereq.data[4] top.test.nvmestorage0.nvmereq.data[3] top.test.nvmestorage0.nvmereq.data[2] top.test.nvmestorage0.nvmereq.data[1] top.test.nvmestorage0.nvmereq.data[0]
+@28
+top.test.nvmereq.ready
+top.test.nvmereq.valid
+top.test.nvmereq.last
+@22
+#{top.test.nvmereq.data[127:0]} top.test.nvmereq.data[127] top.test.nvmereq.data[126] top.test.nvmereq.data[125] top.test.nvmereq.data[124] top.test.nvmereq.data[123] top.test.nvmereq.data[122] top.test.nvmereq.data[121] top.test.nvmereq.data[120] top.test.nvmereq.data[119] top.test.nvmereq.data[118] top.test.nvmereq.data[117] top.test.nvmereq.data[116] top.test.nvmereq.data[115] top.test.nvmereq.data[114] top.test.nvmereq.data[113] top.test.nvmereq.data[112] top.test.nvmereq.data[111] top.test.nvmereq.data[110] top.test.nvmereq.data[109] top.test.nvmereq.data[108] top.test.nvmereq.data[107] top.test.nvmereq.data[106] top.test.nvmereq.data[105] top.test.nvmereq.data[104] top.test.nvmereq.data[103] top.test.nvmereq.data[102] top.test.nvmereq.data[101] top.test.nvmereq.data[100] top.test.nvmereq.data[99] top.test.nvmereq.data[98] top.test.nvmereq.data[97] top.test.nvmereq.data[96] top.test.nvmereq.data[95] top.test.nvmereq.data[94] top.test.nvmereq.data[93] top.test.nvmereq.data[92] top.test.nvmereq.data[91] top.test.nvmereq.data[90] top.test.nvmereq.data[89] top.test.nvmereq.data[88] top.test.nvmereq.data[87] top.test.nvmereq.data[86] top.test.nvmereq.data[85] top.test.nvmereq.data[84] top.test.nvmereq.data[83] top.test.nvmereq.data[82] top.test.nvmereq.data[81] top.test.nvmereq.data[80] top.test.nvmereq.data[79] top.test.nvmereq.data[78] top.test.nvmereq.data[77] top.test.nvmereq.data[76] top.test.nvmereq.data[75] top.test.nvmereq.data[74] top.test.nvmereq.data[73] top.test.nvmereq.data[72] top.test.nvmereq.data[71] top.test.nvmereq.data[70] top.test.nvmereq.data[69] top.test.nvmereq.data[68] top.test.nvmereq.data[67] top.test.nvmereq.data[66] top.test.nvmereq.data[65] top.test.nvmereq.data[64] top.test.nvmereq.data[63] top.test.nvmereq.data[62] top.test.nvmereq.data[61] top.test.nvmereq.data[60] top.test.nvmereq.data[59] top.test.nvmereq.data[58] top.test.nvmereq.data[57] top.test.nvmereq.data[56] top.test.nvmereq.data[55] top.test.nvmereq.data[54] top.test.nvmereq.data[53] top.test.nvmereq.data[52] top.test.nvmereq.data[51] top.test.nvmereq.data[50] top.test.nvmereq.data[49] top.test.nvmereq.data[48] top.test.nvmereq.data[47] top.test.nvmereq.data[46] top.test.nvmereq.data[45] top.test.nvmereq.data[44] top.test.nvmereq.data[43] top.test.nvmereq.data[42] top.test.nvmereq.data[41] top.test.nvmereq.data[40] top.test.nvmereq.data[39] top.test.nvmereq.data[38] top.test.nvmereq.data[37] top.test.nvmereq.data[36] top.test.nvmereq.data[35] top.test.nvmereq.data[34] top.test.nvmereq.data[33] top.test.nvmereq.data[32] top.test.nvmereq.data[31] top.test.nvmereq.data[30] top.test.nvmereq.data[29] top.test.nvmereq.data[28] top.test.nvmereq.data[27] top.test.nvmereq.data[26] top.test.nvmereq.data[25] top.test.nvmereq.data[24] top.test.nvmereq.data[23] top.test.nvmereq.data[22] top.test.nvmereq.data[21] top.test.nvmereq.data[20] top.test.nvmereq.data[19] top.test.nvmereq.data[18] top.test.nvmereq.data[17] top.test.nvmereq.data[16] top.test.nvmereq.data[15] top.test.nvmereq.data[14] top.test.nvmereq.data[13] top.test.nvmereq.data[12] top.test.nvmereq.data[11] top.test.nvmereq.data[10] top.test.nvmereq.data[9] top.test.nvmereq.data[8] top.test.nvmereq.data[7] top.test.nvmereq.data[6] top.test.nvmereq.data[5] top.test.nvmereq.data[4] top.test.nvmereq.data[3] top.test.nvmereq.data[2] top.test.nvmereq.data[1] top.test.nvmereq.data[0]
+@28
+top.test.nvmestorage0.hostsend1.ready
+top.test.nvmestorage0.hostsend1.valid
+top.test.nvmestorage0.hostsend1.last
+@22
+#{top.test.nvmestorage0.hostsend1.data[127:0]} top.test.nvmestorage0.hostsend1.data[127] top.test.nvmestorage0.hostsend1.data[126] top.test.nvmestorage0.hostsend1.data[125] top.test.nvmestorage0.hostsend1.data[124] top.test.nvmestorage0.hostsend1.data[123] top.test.nvmestorage0.hostsend1.data[122] top.test.nvmestorage0.hostsend1.data[121] top.test.nvmestorage0.hostsend1.data[120] top.test.nvmestorage0.hostsend1.data[119] top.test.nvmestorage0.hostsend1.data[118] top.test.nvmestorage0.hostsend1.data[117] top.test.nvmestorage0.hostsend1.data[116] top.test.nvmestorage0.hostsend1.data[115] top.test.nvmestorage0.hostsend1.data[114] top.test.nvmestorage0.hostsend1.data[113] top.test.nvmestorage0.hostsend1.data[112] top.test.nvmestorage0.hostsend1.data[111] top.test.nvmestorage0.hostsend1.data[110] top.test.nvmestorage0.hostsend1.data[109] top.test.nvmestorage0.hostsend1.data[108] top.test.nvmestorage0.hostsend1.data[107] top.test.nvmestorage0.hostsend1.data[106] top.test.nvmestorage0.hostsend1.data[105] top.test.nvmestorage0.hostsend1.data[104] top.test.nvmestorage0.hostsend1.data[103] top.test.nvmestorage0.hostsend1.data[102] top.test.nvmestorage0.hostsend1.data[101] top.test.nvmestorage0.hostsend1.data[100] top.test.nvmestorage0.hostsend1.data[99] top.test.nvmestorage0.hostsend1.data[98] top.test.nvmestorage0.hostsend1.data[97] top.test.nvmestorage0.hostsend1.data[96] top.test.nvmestorage0.hostsend1.data[95] top.test.nvmestorage0.hostsend1.data[94] top.test.nvmestorage0.hostsend1.data[93] top.test.nvmestorage0.hostsend1.data[92] top.test.nvmestorage0.hostsend1.data[91] top.test.nvmestorage0.hostsend1.data[90] top.test.nvmestorage0.hostsend1.data[89] top.test.nvmestorage0.hostsend1.data[88] top.test.nvmestorage0.hostsend1.data[87] top.test.nvmestorage0.hostsend1.data[86] top.test.nvmestorage0.hostsend1.data[85] top.test.nvmestorage0.hostsend1.data[84] top.test.nvmestorage0.hostsend1.data[83] top.test.nvmestorage0.hostsend1.data[82] top.test.nvmestorage0.hostsend1.data[81] top.test.nvmestorage0.hostsend1.data[80] top.test.nvmestorage0.hostsend1.data[79] top.test.nvmestorage0.hostsend1.data[78] top.test.nvmestorage0.hostsend1.data[77] top.test.nvmestorage0.hostsend1.data[76] top.test.nvmestorage0.hostsend1.data[75] top.test.nvmestorage0.hostsend1.data[74] top.test.nvmestorage0.hostsend1.data[73] top.test.nvmestorage0.hostsend1.data[72] top.test.nvmestorage0.hostsend1.data[71] top.test.nvmestorage0.hostsend1.data[70] top.test.nvmestorage0.hostsend1.data[69] top.test.nvmestorage0.hostsend1.data[68] top.test.nvmestorage0.hostsend1.data[67] top.test.nvmestorage0.hostsend1.data[66] top.test.nvmestorage0.hostsend1.data[65] top.test.nvmestorage0.hostsend1.data[64] top.test.nvmestorage0.hostsend1.data[63] top.test.nvmestorage0.hostsend1.data[62] top.test.nvmestorage0.hostsend1.data[61] top.test.nvmestorage0.hostsend1.data[60] top.test.nvmestorage0.hostsend1.data[59] top.test.nvmestorage0.hostsend1.data[58] top.test.nvmestorage0.hostsend1.data[57] top.test.nvmestorage0.hostsend1.data[56] top.test.nvmestorage0.hostsend1.data[55] top.test.nvmestorage0.hostsend1.data[54] top.test.nvmestorage0.hostsend1.data[53] top.test.nvmestorage0.hostsend1.data[52] top.test.nvmestorage0.hostsend1.data[51] top.test.nvmestorage0.hostsend1.data[50] top.test.nvmestorage0.hostsend1.data[49] top.test.nvmestorage0.hostsend1.data[48] top.test.nvmestorage0.hostsend1.data[47] top.test.nvmestorage0.hostsend1.data[46] top.test.nvmestorage0.hostsend1.data[45] top.test.nvmestorage0.hostsend1.data[44] top.test.nvmestorage0.hostsend1.data[43] top.test.nvmestorage0.hostsend1.data[42] top.test.nvmestorage0.hostsend1.data[41] top.test.nvmestorage0.hostsend1.data[40] top.test.nvmestorage0.hostsend1.data[39] top.test.nvmestorage0.hostsend1.data[38] top.test.nvmestorage0.hostsend1.data[37] top.test.nvmestorage0.hostsend1.data[36] top.test.nvmestorage0.hostsend1.data[35] top.test.nvmestorage0.hostsend1.data[34] top.test.nvmestorage0.hostsend1.data[33] top.test.nvmestorage0.hostsend1.data[32] top.test.nvmestorage0.hostsend1.data[31] top.test.nvmestorage0.hostsend1.data[30] top.test.nvmestorage0.hostsend1.data[29] top.test.nvmestorage0.hostsend1.data[28] top.test.nvmestorage0.hostsend1.data[27] top.test.nvmestorage0.hostsend1.data[26] top.test.nvmestorage0.hostsend1.data[25] top.test.nvmestorage0.hostsend1.data[24] top.test.nvmestorage0.hostsend1.data[23] top.test.nvmestorage0.hostsend1.data[22] top.test.nvmestorage0.hostsend1.data[21] top.test.nvmestorage0.hostsend1.data[20] top.test.nvmestorage0.hostsend1.data[19] top.test.nvmestorage0.hostsend1.data[18] top.test.nvmestorage0.hostsend1.data[17] top.test.nvmestorage0.hostsend1.data[16] top.test.nvmestorage0.hostsend1.data[15] top.test.nvmestorage0.hostsend1.data[14] top.test.nvmestorage0.hostsend1.data[13] top.test.nvmestorage0.hostsend1.data[12] top.test.nvmestorage0.hostsend1.data[11] top.test.nvmestorage0.hostsend1.data[10] top.test.nvmestorage0.hostsend1.data[9] top.test.nvmestorage0.hostsend1.data[8] top.test.nvmestorage0.hostsend1.data[7] top.test.nvmestorage0.hostsend1.data[6] top.test.nvmestorage0.hostsend1.data[5] top.test.nvmestorage0.hostsend1.data[4] top.test.nvmestorage0.hostsend1.data[3] top.test.nvmestorage0.hostsend1.data[2] top.test.nvmestorage0.hostsend1.data[1] top.test.nvmestorage0.hostsend1.data[0]
+@28
+top.test.nvmestorage0.hostreq.ready
+top.test.nvmestorage0.hostreq.valid
+top.test.nvmestorage0.hostreq.last
+top.test.nvmereply.ready
+@29
+top.test.nvmereply.valid
+@28
+top.test.nvmereply.last
+@22
+#{top.test.nvmereply.data[127:0]} top.test.nvmereply.data[127] top.test.nvmereply.data[126] top.test.nvmereply.data[125] top.test.nvmereply.data[124] top.test.nvmereply.data[123] top.test.nvmereply.data[122] top.test.nvmereply.data[121] top.test.nvmereply.data[120] top.test.nvmereply.data[119] top.test.nvmereply.data[118] top.test.nvmereply.data[117] top.test.nvmereply.data[116] top.test.nvmereply.data[115] top.test.nvmereply.data[114] top.test.nvmereply.data[113] top.test.nvmereply.data[112] top.test.nvmereply.data[111] top.test.nvmereply.data[110] top.test.nvmereply.data[109] top.test.nvmereply.data[108] top.test.nvmereply.data[107] top.test.nvmereply.data[106] top.test.nvmereply.data[105] top.test.nvmereply.data[104] top.test.nvmereply.data[103] top.test.nvmereply.data[102] top.test.nvmereply.data[101] top.test.nvmereply.data[100] top.test.nvmereply.data[99] top.test.nvmereply.data[98] top.test.nvmereply.data[97] top.test.nvmereply.data[96] top.test.nvmereply.data[95] top.test.nvmereply.data[94] top.test.nvmereply.data[93] top.test.nvmereply.data[92] top.test.nvmereply.data[91] top.test.nvmereply.data[90] top.test.nvmereply.data[89] top.test.nvmereply.data[88] top.test.nvmereply.data[87] top.test.nvmereply.data[86] top.test.nvmereply.data[85] top.test.nvmereply.data[84] top.test.nvmereply.data[83] top.test.nvmereply.data[82] top.test.nvmereply.data[81] top.test.nvmereply.data[80] top.test.nvmereply.data[79] top.test.nvmereply.data[78] top.test.nvmereply.data[77] top.test.nvmereply.data[76] top.test.nvmereply.data[75] top.test.nvmereply.data[74] top.test.nvmereply.data[73] top.test.nvmereply.data[72] top.test.nvmereply.data[71] top.test.nvmereply.data[70] top.test.nvmereply.data[69] top.test.nvmereply.data[68] top.test.nvmereply.data[67] top.test.nvmereply.data[66] top.test.nvmereply.data[65] top.test.nvmereply.data[64] top.test.nvmereply.data[63] top.test.nvmereply.data[62] top.test.nvmereply.data[61] top.test.nvmereply.data[60] top.test.nvmereply.data[59] top.test.nvmereply.data[58] top.test.nvmereply.data[57] top.test.nvmereply.data[56] top.test.nvmereply.data[55] top.test.nvmereply.data[54] top.test.nvmereply.data[53] top.test.nvmereply.data[52] top.test.nvmereply.data[51] top.test.nvmereply.data[50] top.test.nvmereply.data[49] top.test.nvmereply.data[48] top.test.nvmereply.data[47] top.test.nvmereply.data[46] top.test.nvmereply.data[45] top.test.nvmereply.data[44] top.test.nvmereply.data[43] top.test.nvmereply.data[42] top.test.nvmereply.data[41] top.test.nvmereply.data[40] top.test.nvmereply.data[39] top.test.nvmereply.data[38] top.test.nvmereply.data[37] top.test.nvmereply.data[36] top.test.nvmereply.data[35] top.test.nvmereply.data[34] top.test.nvmereply.data[33] top.test.nvmereply.data[32] top.test.nvmereply.data[31] top.test.nvmereply.data[30] top.test.nvmereply.data[29] top.test.nvmereply.data[28] top.test.nvmereply.data[27] top.test.nvmereply.data[26] top.test.nvmereply.data[25] top.test.nvmereply.data[24] top.test.nvmereply.data[23] top.test.nvmereply.data[22] top.test.nvmereply.data[21] top.test.nvmereply.data[20] top.test.nvmereply.data[19] top.test.nvmereply.data[18] top.test.nvmereply.data[17] top.test.nvmereply.data[16] top.test.nvmereply.data[15] top.test.nvmereply.data[14] top.test.nvmereply.data[13] top.test.nvmereply.data[12] top.test.nvmereply.data[11] top.test.nvmereply.data[10] top.test.nvmereply.data[9] top.test.nvmereply.data[8] top.test.nvmereply.data[7] top.test.nvmereply.data[6] top.test.nvmereply.data[5] top.test.nvmereply.data[4] top.test.nvmereply.data[3] top.test.nvmereply.data[2] top.test.nvmereply.data[1] top.test.nvmereply.data[0]
+@28
+top.test.nvmestorage0.sim.nvmesim0.nvmereq.ready
+top.test.nvmestorage0.sim.nvmesim0.nvmereq.valid
+top.test.nvmestorage0.sim.nvmesim0.nvmereq.last
+@22
+#{top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[127:0]} top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[127] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[126] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[125] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[124] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[123] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[122] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[121] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[120] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[119] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[118] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[117] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[116] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[115] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[114] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[113] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[112] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[111] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[110] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[109] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[108] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[107] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[106] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[105] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[104] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[103] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[102] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[101] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[100] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[99] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[98] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[97] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[96] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[95] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[94] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[93] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[92] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[91] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[90] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[89] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[88] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[87] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[86] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[85] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[84] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[83] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[82] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[81] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[80] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[79] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[78] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[77] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[76] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[75] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[74] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[73] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[72] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[71] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[70] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[69] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[68] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[67] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[66] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[65] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[64] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[63] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[62] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[61] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[60] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[59] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[58] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[57] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[56] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[55] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[54] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[53] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[52] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[51] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[50] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[49] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[48] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[47] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[46] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[45] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[44] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[43] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[42] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[41] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[40] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[39] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[38] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[37] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[36] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[35] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[34] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[33] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[32] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[31] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[30] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[29] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[28] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[27] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[26] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[25] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[24] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[23] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[22] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[21] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[20] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[19] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[18] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[17] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[16] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[15] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[14] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[13] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[12] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[11] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[10] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[9] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[8] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[7] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[6] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[5] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[4] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[3] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[2] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[1] top.test.nvmestorage0.sim.nvmesim0.nvmereq.data[0]
+@28
+top.test.nvmestorage0.sim.nvmesim0.nvmereply.ready
+top.test.nvmestorage0.sim.nvmesim0.nvmereply.valid
+top.test.nvmestorage0.sim.nvmesim0.nvmereply.last
+@22
+#{top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[127:0]} top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[127] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[126] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[125] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[124] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[123] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[122] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[121] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[120] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[119] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[118] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[117] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[116] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[115] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[114] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[113] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[112] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[111] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[110] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[109] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[108] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[107] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[106] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[105] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[104] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[103] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[102] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[101] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[100] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[99] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[98] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[97] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[96] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[95] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[94] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[93] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[92] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[91] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[90] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[89] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[88] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[87] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[86] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[85] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[84] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[83] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[82] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[81] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[80] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[79] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[78] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[77] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[76] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[75] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[74] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[73] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[72] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[71] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[70] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[69] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[68] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[67] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[66] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[65] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[64] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[63] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[62] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[61] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[60] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[59] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[58] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[57] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[56] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[55] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[54] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[53] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[52] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[51] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[50] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[49] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[48] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[47] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[46] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[45] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[44] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[43] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[42] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[41] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[40] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[39] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[38] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[37] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[36] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[35] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[34] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[33] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[32] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[31] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[30] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[29] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[28] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[27] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[26] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[25] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[24] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[23] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[22] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[21] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[20] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[19] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[18] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[17] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[16] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[15] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[14] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[13] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[12] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[11] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[10] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[9] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[8] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[7] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[6] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[5] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[4] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[3] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[2] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[1] top.test.nvmestorage0.sim.nvmesim0.nvmereply.data[0]
+@420
+top.test.nvmestorage0.sim.nvmesim0.state
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test007-hostnvme.vhd b/source/DuneNvme/sim/testbench/test007-hostnvme.vhd
new file mode 100644 (file)
index 0000000..5c54bb4
--- /dev/null
@@ -0,0 +1,296 @@
+--------------------------------------------------------------------------------
+--     Test007-hostnvme.vhd    Simple host-nvme interface tests
+--     T.Barnaby,      Beam Ltd.       2020-03-13
+--------------------------------------------------------------------------------
+--
+--
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeStorage is
+generic(
+       Simulate        : boolean       := True;
+       Divider         : integer       := 5000000
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+
+       -- Control and status interface
+       axilIn          : in AxilToSlave;                       --! Axil bus input signals
+       axilOut         : out AxilToMaster;                     --! Axil bus output signals
+
+       -- From host to NVMe request/reply streams
+       hostSend        : inout AxisStream := AxisInput;        --! Host request stream
+       hostRecv        : inout AxisStream := AxisOutput;       --! Host reply stream
+
+       -- AXIS data stream input
+       --dataRx        : inout AxisStream      := AxisInput;   --! Raw data to save stream
+
+       -- NVMe interface
+       nvme_clk_p      : in std_logic;                         --! Nvme external clock +ve
+       nvme_clk_n      : in std_logic;                         --! Nvme external clock -ve
+       nvme_reset_n    : out std_logic;                        --! Nvme reset output to reset NVMe devices
+       nvme0_exp_txp   : out std_logic_vector(3 downto 0);     --! Nvme0 PCIe TX plus lanes
+       nvme0_exp_txn   : out std_logic_vector(3 downto 0);     --! Nvme0 PCIe TX minus lanes
+       nvme0_exp_rxp   : in std_logic_vector(3 downto 0);      --! Nvme0 PCIe RX plus lanes
+       nvme0_exp_rxn   : in std_logic_vector(3 downto 0);      --! Nvme0 PCIe RX minus lanes
+
+       -- Debug
+       leds            : out std_logic_vector(3 downto 0)
+);
+end component;
+
+component AxisStreamMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn1       : inout AxisStream := AxisInput;        --! Input data stream
+       streamIn2       : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut       : inout AxisStream := AxisOutput        --! Output data stream
+);
+end component;
+
+component AxisStreamDeMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn        : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut1      : inout AxisStream := AxisOutput;       --! Output data stream1
+       streamOut2      : inout AxisStream := AxisOutput        --! Output data stream2
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal axil            : AxilBus;
+signal hostSend                : AxisStream    := AxisOutput;
+signal hostRecv                : AxisStream    := AxisInput;
+
+signal leds            : std_logic_vector(3 downto 0);
+
+signal hostReply       : AxisStream    := AxisInput;
+signal hostReq         : AxisStream    := AxisOutput;
+signal nvmeReq         : AxisStream    := AxisOutput;
+signal nvmeReply       : AxisStream    := AxisInput;
+
+type NvmeStateType is (NVME_STATE_IDLE, NVME_STATE_WRITEDATA_START, NVME_STATE_WRITEDATA);
+signal nvmeState       : NvmeStateType := NVME_STATE_IDLE;
+signal nvmeRequestHead : PcieRequestHead;
+signal nvmeRequestHead1        : PcieRequestHead;
+signal nvmeReplyHead   : PcieReplyHead;
+signal nvmeCount       : unsigned(10 downto 0);                        -- DWord data send count
+signal nvmeChunkCount  : unsigned(10 downto 0);                        -- DWord data send within a chunk count
+signal nvmeByteCount   : integer;
+signal nvmeData                : std_logic_vector(127 downto 0);
+
+signal sendData                : std_logic := '0';
+
+procedure pcieWrite(signal toSlave: inout AxisStream; config: in integer; address: in integer; tag: in integer; data: in integer) is
+variable packetHead    : PcieRequestHead;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(0, packetHead.stream'length);
+       packetHead.address := to_stl(address, packetHead.address'length);
+       packetHead.tag := to_stl(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(0, packetHead.count'length);
+       
+       if(config = 1) then
+               packetHead.request := to_unsigned(10, packetHead.request'length);
+       else
+               packetHead.request := to_unsigned(1, packetHead.request'length);
+       end if;
+
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= to_stl(packetHead);
+       toSlave.valid <= '1';
+
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.data <= to_stl(0, 96) & to_stl(data, 32);
+       toSlave.valid <= '1';
+       toSlave.last <= '1';
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0';
+       toSlave.last <= '0';
+end procedure;
+
+begin
+       nvmeStorage0 : NvmeStorage
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               axilIn          => axil.toSlave,
+               axilOut         => axil.toMaster,
+
+               hostSend        => hostSend,
+               hostRecv        => hostRecv,
+
+               -- NVMe interface
+               nvme_clk_p      => '0',
+               nvme_clk_n      => '0',
+               --nvme0_exp_txp : out std_logic_vector(0 downto 0);
+               --nvme0_exp_txn : out std_logic_vector(0 downto 0);
+               nvme0_exp_rxp   => "0000",
+               nvme0_exp_rxn   => "0000",
+
+               leds            => leds
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Set PCIe configuration command register to 0x06
+               --pcieWrite(hostReq, 1, 4, 1, 6);
+               
+               -- Write to AdminQueue doorbell register
+               pcieWrite(hostReq, 0, 16#1000#, 16#22#, 16#40#);
+
+               -- Perfoem NVMe wdata write
+               -- Write to DataWriteQueue doorbell register
+               --pcieWrite(hostReq, 0, 16#1008#, 16#23#, 16#40#);
+               wait;
+       end process;
+       
+       -- Host to Nvme stream Mux
+       axisMux0 : AxisStreamMux
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               streamIn1       => hostReq,
+               streamIn2       => nvmeReply,
+
+               streamOut       => hostSend
+       );
+
+       -- Nvme to Host stream DeMux
+       axisDeMux0 : AxisStreamDeMux
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               streamIn        => hostRecv,
+
+               streamOut1      => hostReply,
+               streamOut2      => nvmeReq
+       );
+       
+       nvmeRequestHead <= to_PcieRequestHead(nvmeReq.data);
+       nvmeReply.data <= nvmeData when(nvmeState = NVME_STATE_WRITEDATA) else to_stl(nvmeReplyHead);
+       
+       requests : process(clk)
+       begin
+               if(rising_edge(clk)) then
+                       if(reset = '1') then
+                               nvmeReq.ready   <= '0';
+                               nvmeReply.valid <= '0';
+                               nvmeReply.last  <= '0';
+                               nvmeData        <= (others => '0');
+                               nvmeState       <= NVME_STATE_IDLE;
+                       else
+                               case (nvmeState) is
+                               when NVME_STATE_IDLE =>
+                                       if(nvmeReq.ready = '1' and nvmeReq.valid = '1') then
+                                               nvmeRequestHead1        <= nvmeRequestHead;
+                                               nvmeCount               <= nvmeRequestHead.count + 1;
+                                               nvmeState               <= NVME_STATE_WRITEDATA_START;
+                                               nvmeReq.ready           <= '0';
+                                       else
+                                               nvmeReq.ready           <= '1';
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA_START =>
+                                       nvmeReplyHead.byteCount <= (nvmeRequestHead1.count + 1) & "00";
+                                       nvmeReplyHead.address   <= nvmeRequestHead1.address(nvmeReplyHead.address'length - 1 downto 0);
+                                       nvmeReplyHead.error     <= (others => '0');
+                                       nvmeReplyHead.status    <= (others => '0');
+                                       nvmeReplyHead.tag       <= nvmeRequestHead1.tag;
+
+                                       if(nvmeCount > CHUNK_SIZE) then
+                                               nvmeReplyHead.count     <= to_unsigned(CHUNK_SIZE-1, nvmeReplyHead.count'length);
+                                               nvmeChunkCount          <= to_unsigned(CHUNK_SIZE, nvmeReplyHead.count'length);
+                                       else
+                                               nvmeReplyHead.count     <= nvmeCount - 1;
+                                               nvmeChunkCount          <= nvmeCount;
+                                       end if;
+
+                                       nvmeByteCount           <= (to_integer(nvmeRequestHead1.count) + 1) * 4;
+                                       nvmeReply.valid         <= '1';
+
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               nvmeState       <= NVME_STATE_WRITEDATA;
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA =>
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               if(nvmeChunkCount = 4) then
+                                                       if(nvmeCount = 4) then
+                                                               nvmeReply.valid <= '0';
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_IDLE;
+                                                       else
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_WRITEDATA_START;
+                                                       end if;
+                                               elsif(nvmeChunkCount = 8) then
+                                                       nvmeReply.last <= '1';
+                                               else
+                                                       nvmeReply.last <= '0';
+                                               end if;
+                                               nvmeChunkCount  <= nvmeChunkCount - 4;
+                                               nvmeCount       <= nvmeCount - 4;
+                                       end if;
+                               end case;
+                       end if;
+               end if;
+       end process;
+
+       stop : process
+       begin
+               wait for 700 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test008-nvmeconfig.sav b/source/DuneNvme/sim/testbench/test008-nvmeconfig.sav
new file mode 100644 (file)
index 0000000..2d9ff80
--- /dev/null
@@ -0,0 +1,49 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Tue Apr 14 09:00:12 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test012-hostnvme/sim/simu/test.ghw"
+[dumpfile_mtime] "Tue Apr 14 08:52:08 2020"
+[dumpfile_size] 26370
+[savefile] "/src/dune/FpgaPlay/test012-hostnvme/sim/testbench/test008-nvmeconfig.sav"
+[timestart] 74200000
+[size] 1920 1051
+[pos] -1 -1
+*-25.411741 168800000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.nvmestorage0.
+[treeopen] top.test.nvmestorage0.gen02.
+[treeopen] top.test.nvmestorage0.gen02.nvmeconfig0.
+[treeopen] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.
+[treeopen] top.test.nvmestorage0.sim.
+[treeopen] top.test.nvmestorage0.sim.nvmesim0.
+[sst_width] 349
+[signals_width] 471
+[sst_expanded] 1
+[sst_vpaned_height] 515
+@28
+top.test.clk
+top.test.reset
+top.test.nvmestorage0.gen02.nvmeconfig0.configstart
+top.test.nvmestorage0.gen02.nvmeconfig0.configcomplete
+@420
+top.test.nvmestorage0.gen02.nvmeconfig0.state
+@28
+top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.ready
+top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.valid
+top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.last
+@23
+#{top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[15:0]} top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[15] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[14] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[13] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[12] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[11] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[10] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[9] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[8] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[7] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[6] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[5] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[4] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[3] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[2] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[1] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.keep[0]
+@22
+#{top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[127:0]} top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[127] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[126] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[125] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[124] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[123] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[122] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[121] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[120] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[119] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[118] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[117] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[116] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[115] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[114] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[113] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[112] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[111] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[110] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[109] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[108] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[107] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[106] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[105] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[104] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[103] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[102] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[101] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[100] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[99] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[98] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[97] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[96] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[95] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[94] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[93] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[92] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[91] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[90] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[89] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[88] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[87] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[86] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[85] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[84] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[83] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[82] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[81] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[80] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[79] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[78] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[77] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[76] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[75] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[74] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[73] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[72] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[71] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[70] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[69] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[68] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[67] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[66] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[65] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[64] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[63] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[62] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[61] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[60] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[59] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[58] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[57] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[56] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[55] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[54] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[53] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[52] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[51] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[50] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[49] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[48] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[47] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[46] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[45] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[44] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[43] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[42] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[41] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[40] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[39] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[38] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[37] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[36] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[35] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[34] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[33] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[32] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[31] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[30] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[29] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[28] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[27] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[26] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[25] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[24] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[23] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[22] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[21] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[20] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[19] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[18] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[17] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[16] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[15] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[14] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[13] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[12] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[11] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[10] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[9] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[8] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[7] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[6] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[5] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[4] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[3] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[2] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[1] top.test.nvmestorage0.gen02.nvmeconfig0.nvmesend.data[0]
+@420
+top.test.nvmestorage0.sim.nvmesim0.state
+@22
+#{top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[31:0]} top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[31] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[30] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[29] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[28] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[27] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[26] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[25] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[24] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[23] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[22] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[21] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[20] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[19] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[18] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[17] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[16] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[15] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[14] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[13] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[12] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[11] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[10] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[9] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[8] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[7] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[6] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[5] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[4] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[3] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[2] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[1] top.test.nvmestorage0.sim.nvmesim0.reg_pci_command[0]
+@420
+top.test.nvmestorage0.gen02.nvmeconfig0.count
+@22
+#{top.test.nvmestorage0.gen02.nvmeconfig0.numwords[10:0]} top.test.nvmestorage0.gen02.nvmeconfig0.numwords[10] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[9] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[8] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[7] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[6] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[5] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[4] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[3] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[2] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[1] top.test.nvmestorage0.gen02.nvmeconfig0.numwords[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test008-nvmeconfig.vhd b/source/DuneNvme/sim/testbench/test008-nvmeconfig.vhd
new file mode 100644 (file)
index 0000000..2a40c71
--- /dev/null
@@ -0,0 +1,296 @@
+--------------------------------------------------------------------------------
+--     Test008-nvmeconfig.vhd  Simple nvme interface tests
+--     T.Barnaby,      Beam Ltd.       2020-04-14
+--------------------------------------------------------------------------------
+--
+--
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeStorage is
+generic(
+       Simulate        : boolean       := True;
+       Divider         : integer       := 5000000
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+
+       -- Control and status interface
+       axilIn          : in AxilToSlave;                       --! Axil bus input signals
+       axilOut         : out AxilToMaster;                     --! Axil bus output signals
+
+       -- From host to NVMe request/reply streams
+       hostSend        : inout AxisStream := AxisInput;        --! Host request stream
+       hostRecv        : inout AxisStream := AxisOutput;       --! Host reply stream
+
+       -- AXIS data stream input
+       --dataRx        : inout AxisStream      := AxisInput;   --! Raw data to save stream
+
+       -- NVMe interface
+       nvme_clk_p      : in std_logic;                         --! Nvme external clock +ve
+       nvme_clk_n      : in std_logic;                         --! Nvme external clock -ve
+       nvme_reset_n    : out std_logic;                        --! Nvme reset output to reset NVMe devices
+       nvme0_exp_txp   : out std_logic_vector(3 downto 0);     --! Nvme0 PCIe TX plus lanes
+       nvme0_exp_txn   : out std_logic_vector(3 downto 0);     --! Nvme0 PCIe TX minus lanes
+       nvme0_exp_rxp   : in std_logic_vector(3 downto 0);      --! Nvme0 PCIe RX plus lanes
+       nvme0_exp_rxn   : in std_logic_vector(3 downto 0);      --! Nvme0 PCIe RX minus lanes
+
+       -- Debug
+       leds            : out std_logic_vector(3 downto 0)
+);
+end component;
+
+component AxisStreamMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn1       : inout AxisStream := AxisInput;        --! Input data stream
+       streamIn2       : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut       : inout AxisStream := AxisOutput        --! Output data stream
+);
+end component;
+
+component AxisStreamDeMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn        : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut1      : inout AxisStream := AxisOutput;       --! Output data stream1
+       streamOut2      : inout AxisStream := AxisOutput        --! Output data stream2
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal axil            : AxilBus;
+signal hostSend                : AxisStream    := AxisOutput;
+signal hostRecv                : AxisStream    := AxisInput;
+
+signal leds            : std_logic_vector(3 downto 0);
+
+signal hostReply       : AxisStream    := AxisInput;
+signal hostReq         : AxisStream    := AxisOutput;
+signal nvmeReq         : AxisStream    := AxisOutput;
+signal nvmeReply       : AxisStream    := AxisInput;
+
+type NvmeStateType is (NVME_STATE_IDLE, NVME_STATE_WRITEDATA_START, NVME_STATE_WRITEDATA);
+signal nvmeState       : NvmeStateType := NVME_STATE_IDLE;
+signal nvmeRequestHead : PcieRequestHead;
+signal nvmeRequestHead1        : PcieRequestHead;
+signal nvmeReplyHead   : PcieReplyHead;
+signal nvmeCount       : unsigned(10 downto 0);                        -- DWord data send count
+signal nvmeChunkCount  : unsigned(10 downto 0);                        -- DWord data send within a chunk count
+signal nvmeByteCount   : integer;
+signal nvmeData                : std_logic_vector(127 downto 0);
+
+signal sendData                : std_logic := '0';
+
+procedure pcieWrite(signal toSlave: inout AxisStream; config: in integer; address: in integer; tag: in integer; data: in integer) is
+variable packetHead    : PcieRequestHead;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(0, packetHead.stream'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(0, packetHead.count'length);
+       
+       if(config = 1) then
+               packetHead.request := to_unsigned(10, packetHead.request'length);
+       else
+               packetHead.request := to_unsigned(1, packetHead.request'length);
+       end if;
+
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= to_stl(packetHead);
+       toSlave.valid <= '1';
+
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.data <= to_stl(0, 96) & to_stl(data, 32);
+       toSlave.valid <= '1';
+       toSlave.last <= '1';
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0';
+       toSlave.last <= '0';
+end procedure;
+
+begin
+       nvmeStorage0 : NvmeStorage
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               axilIn          => axil.toSlave,
+               axilOut         => axil.toMaster,
+
+               hostSend        => hostSend,
+               hostRecv        => hostRecv,
+
+               -- NVMe interface
+               nvme_clk_p      => '0',
+               nvme_clk_n      => '0',
+               --nvme0_exp_txp : out std_logic_vector(0 downto 0);
+               --nvme0_exp_txn : out std_logic_vector(0 downto 0);
+               nvme0_exp_rxp   => "0000",
+               nvme0_exp_rxn   => "0000",
+
+               leds            => leds
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Set PCIe configuration command register to 0x06
+               --pcieWrite(hostReq, 1, 4, 1, 6);
+               
+               -- Write to AdminQueue doorbell register
+               --pcieWrite(hostReq, 0, 16#1000#, 16#22#, 16#40#);
+
+               -- Perfoem NVMe wdata write
+               -- Write to DataWriteQueue doorbell register
+               --pcieWrite(hostReq, 0, 16#1008#, 16#23#, 16#40#);
+               wait;
+       end process;
+       
+       -- Host to Nvme stream Mux
+       axisMux0 : AxisStreamMux
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               streamIn1       => hostReq,
+               streamIn2       => nvmeReply,
+
+               streamOut       => hostSend
+       );
+
+       -- Nvme to Host stream DeMux
+       axisDeMux0 : AxisStreamDeMux
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               streamIn        => hostRecv,
+
+               streamOut1      => hostReply,
+               streamOut2      => nvmeReq
+       );
+       
+       nvmeRequestHead <= to_PcieRequestHead(nvmeReq.data);
+       nvmeReply.data <= nvmeData when(nvmeState = NVME_STATE_WRITEDATA) else to_stl(nvmeReplyHead);
+       
+       requests : process(clk)
+       begin
+               if(rising_edge(clk)) then
+                       if(reset = '1') then
+                               nvmeReq.ready   <= '0';
+                               nvmeReply.valid <= '0';
+                               nvmeReply.last  <= '0';
+                               nvmeData        <= (others => '0');
+                               nvmeState       <= NVME_STATE_IDLE;
+                       else
+                               case (nvmeState) is
+                               when NVME_STATE_IDLE =>
+                                       if(nvmeReq.ready = '1' and nvmeReq.valid = '1') then
+                                               nvmeRequestHead1        <= nvmeRequestHead;
+                                               nvmeCount               <= nvmeRequestHead.count + 1;
+                                               nvmeState               <= NVME_STATE_WRITEDATA_START;
+                                               nvmeReq.ready           <= '0';
+                                       else
+                                               nvmeReq.ready           <= '1';
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA_START =>
+                                       nvmeReplyHead.byteCount <= (nvmeRequestHead1.count + 1) & "00";
+                                       nvmeReplyHead.address   <= nvmeRequestHead1.address(nvmeReplyHead.address'length - 1 downto 0);
+                                       nvmeReplyHead.error     <= (others => '0');
+                                       nvmeReplyHead.status    <= (others => '0');
+                                       nvmeReplyHead.tag       <= nvmeRequestHead1.tag;
+
+                                       if(nvmeCount > CHUNK_SIZE) then
+                                               nvmeReplyHead.count     <= to_unsigned(CHUNK_SIZE-1, nvmeReplyHead.count'length);
+                                               nvmeChunkCount          <= to_unsigned(CHUNK_SIZE, nvmeReplyHead.count'length);
+                                       else
+                                               nvmeReplyHead.count     <= nvmeCount - 1;
+                                               nvmeChunkCount          <= nvmeCount;
+                                       end if;
+
+                                       nvmeByteCount           <= (to_integer(nvmeRequestHead1.count) + 1) * 4;
+                                       nvmeReply.valid         <= '1';
+
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               nvmeState       <= NVME_STATE_WRITEDATA;
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA =>
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               if(nvmeChunkCount = 4) then
+                                                       if(nvmeCount = 4) then
+                                                               nvmeReply.valid <= '0';
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_IDLE;
+                                                       else
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_WRITEDATA_START;
+                                                       end if;
+                                               elsif(nvmeChunkCount = 8) then
+                                                       nvmeReply.last <= '1';
+                                               else
+                                                       nvmeReply.last <= '0';
+                                               end if;
+                                               nvmeChunkCount  <= nvmeChunkCount - 4;
+                                               nvmeCount       <= nvmeCount - 4;
+                                       end if;
+                               end case;
+                       end if;
+               end if;
+       end process;
+
+       stop : process
+       begin
+               wait for 700 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test009-packets.sav b/source/DuneNvme/sim/testbench/test009-packets.sav
new file mode 100644 (file)
index 0000000..e61c226
--- /dev/null
@@ -0,0 +1,113 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Fri Apr 17 15:36:18 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test015-nvmeprocess/sim/simu/test.ghw"
+[dumpfile_mtime] "Fri Apr 17 12:59:21 2020"
+[dumpfile_size] 30159
+[savefile] "/src/dune/FpgaPlay/test015-nvmeprocess/sim/testbench/test009-packets.sav"
+[timestart] 39000000
+[size] 1920 1051
+[pos] -1 -1
+*-24.411741 80200000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.hostreply.
+[treeopen] top.test.hostreq.
+[treeopen] top.test.nvmereply.
+[treeopen] top.test.nvmereq.
+[treeopen] top.test.nvmestorageunit0.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream1in.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream1out.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream2in.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream2out.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream3in.
+[treeopen] top.test.nvmestorageunit0.nvmestreammux0.stream3out.
+[treeopen] top.test.nvmestorageunit0.hostrecv.
+[treeopen] top.test.nvmestorageunit0.hostsend.
+[treeopen] top.test.nvmestorageunit0.sim.nvmesim0.
+[treeopen] top.test.nvmestorageunit0.sim.nvmesim0.nvmereq.
+[treeopen] top.test.nvmestreammux0.
+[sst_width] 321
+[signals_width] 818
+[sst_expanded] 1
+[sst_vpaned_height] 589
+@28
+top.test.clk
+top.test.reset
+top.test.nvmestorageunit0.hostsend.ready
+top.test.nvmestorageunit0.hostsend.valid
+top.test.nvmestorageunit0.hostsend.last
+@22
+#{top.test.nvmestorageunit0.hostsend.data[127:0]} top.test.nvmestorageunit0.hostsend.data[127] top.test.nvmestorageunit0.hostsend.data[126] top.test.nvmestorageunit0.hostsend.data[125] top.test.nvmestorageunit0.hostsend.data[124] top.test.nvmestorageunit0.hostsend.data[123] top.test.nvmestorageunit0.hostsend.data[122] top.test.nvmestorageunit0.hostsend.data[121] top.test.nvmestorageunit0.hostsend.data[120] top.test.nvmestorageunit0.hostsend.data[119] top.test.nvmestorageunit0.hostsend.data[118] top.test.nvmestorageunit0.hostsend.data[117] top.test.nvmestorageunit0.hostsend.data[116] top.test.nvmestorageunit0.hostsend.data[115] top.test.nvmestorageunit0.hostsend.data[114] top.test.nvmestorageunit0.hostsend.data[113] top.test.nvmestorageunit0.hostsend.data[112] top.test.nvmestorageunit0.hostsend.data[111] top.test.nvmestorageunit0.hostsend.data[110] top.test.nvmestorageunit0.hostsend.data[109] top.test.nvmestorageunit0.hostsend.data[108] top.test.nvmestorageunit0.hostsend.data[107] top.test.nvmestorageunit0.hostsend.data[106] top.test.nvmestorageunit0.hostsend.data[105] top.test.nvmestorageunit0.hostsend.data[104] top.test.nvmestorageunit0.hostsend.data[103] top.test.nvmestorageunit0.hostsend.data[102] top.test.nvmestorageunit0.hostsend.data[101] top.test.nvmestorageunit0.hostsend.data[100] top.test.nvmestorageunit0.hostsend.data[99] top.test.nvmestorageunit0.hostsend.data[98] top.test.nvmestorageunit0.hostsend.data[97] top.test.nvmestorageunit0.hostsend.data[96] top.test.nvmestorageunit0.hostsend.data[95] top.test.nvmestorageunit0.hostsend.data[94] top.test.nvmestorageunit0.hostsend.data[93] top.test.nvmestorageunit0.hostsend.data[92] top.test.nvmestorageunit0.hostsend.data[91] top.test.nvmestorageunit0.hostsend.data[90] top.test.nvmestorageunit0.hostsend.data[89] top.test.nvmestorageunit0.hostsend.data[88] top.test.nvmestorageunit0.hostsend.data[87] top.test.nvmestorageunit0.hostsend.data[86] top.test.nvmestorageunit0.hostsend.data[85] top.test.nvmestorageunit0.hostsend.data[84] top.test.nvmestorageunit0.hostsend.data[83] top.test.nvmestorageunit0.hostsend.data[82] top.test.nvmestorageunit0.hostsend.data[81] top.test.nvmestorageunit0.hostsend.data[80] top.test.nvmestorageunit0.hostsend.data[79] top.test.nvmestorageunit0.hostsend.data[78] top.test.nvmestorageunit0.hostsend.data[77] top.test.nvmestorageunit0.hostsend.data[76] top.test.nvmestorageunit0.hostsend.data[75] top.test.nvmestorageunit0.hostsend.data[74] top.test.nvmestorageunit0.hostsend.data[73] top.test.nvmestorageunit0.hostsend.data[72] top.test.nvmestorageunit0.hostsend.data[71] top.test.nvmestorageunit0.hostsend.data[70] top.test.nvmestorageunit0.hostsend.data[69] top.test.nvmestorageunit0.hostsend.data[68] top.test.nvmestorageunit0.hostsend.data[67] top.test.nvmestorageunit0.hostsend.data[66] top.test.nvmestorageunit0.hostsend.data[65] top.test.nvmestorageunit0.hostsend.data[64] top.test.nvmestorageunit0.hostsend.data[63] top.test.nvmestorageunit0.hostsend.data[62] top.test.nvmestorageunit0.hostsend.data[61] top.test.nvmestorageunit0.hostsend.data[60] top.test.nvmestorageunit0.hostsend.data[59] top.test.nvmestorageunit0.hostsend.data[58] top.test.nvmestorageunit0.hostsend.data[57] top.test.nvmestorageunit0.hostsend.data[56] top.test.nvmestorageunit0.hostsend.data[55] top.test.nvmestorageunit0.hostsend.data[54] top.test.nvmestorageunit0.hostsend.data[53] top.test.nvmestorageunit0.hostsend.data[52] top.test.nvmestorageunit0.hostsend.data[51] top.test.nvmestorageunit0.hostsend.data[50] top.test.nvmestorageunit0.hostsend.data[49] top.test.nvmestorageunit0.hostsend.data[48] top.test.nvmestorageunit0.hostsend.data[47] top.test.nvmestorageunit0.hostsend.data[46] top.test.nvmestorageunit0.hostsend.data[45] top.test.nvmestorageunit0.hostsend.data[44] top.test.nvmestorageunit0.hostsend.data[43] top.test.nvmestorageunit0.hostsend.data[42] top.test.nvmestorageunit0.hostsend.data[41] top.test.nvmestorageunit0.hostsend.data[40] top.test.nvmestorageunit0.hostsend.data[39] top.test.nvmestorageunit0.hostsend.data[38] top.test.nvmestorageunit0.hostsend.data[37] top.test.nvmestorageunit0.hostsend.data[36] top.test.nvmestorageunit0.hostsend.data[35] top.test.nvmestorageunit0.hostsend.data[34] top.test.nvmestorageunit0.hostsend.data[33] top.test.nvmestorageunit0.hostsend.data[32] top.test.nvmestorageunit0.hostsend.data[31] top.test.nvmestorageunit0.hostsend.data[30] top.test.nvmestorageunit0.hostsend.data[29] top.test.nvmestorageunit0.hostsend.data[28] top.test.nvmestorageunit0.hostsend.data[27] top.test.nvmestorageunit0.hostsend.data[26] top.test.nvmestorageunit0.hostsend.data[25] top.test.nvmestorageunit0.hostsend.data[24] top.test.nvmestorageunit0.hostsend.data[23] top.test.nvmestorageunit0.hostsend.data[22] top.test.nvmestorageunit0.hostsend.data[21] top.test.nvmestorageunit0.hostsend.data[20] top.test.nvmestorageunit0.hostsend.data[19] top.test.nvmestorageunit0.hostsend.data[18] top.test.nvmestorageunit0.hostsend.data[17] top.test.nvmestorageunit0.hostsend.data[16] top.test.nvmestorageunit0.hostsend.data[15] top.test.nvmestorageunit0.hostsend.data[14] top.test.nvmestorageunit0.hostsend.data[13] top.test.nvmestorageunit0.hostsend.data[12] top.test.nvmestorageunit0.hostsend.data[11] top.test.nvmestorageunit0.hostsend.data[10] top.test.nvmestorageunit0.hostsend.data[9] top.test.nvmestorageunit0.hostsend.data[8] top.test.nvmestorageunit0.hostsend.data[7] top.test.nvmestorageunit0.hostsend.data[6] top.test.nvmestorageunit0.hostsend.data[5] top.test.nvmestorageunit0.hostsend.data[4] top.test.nvmestorageunit0.hostsend.data[3] top.test.nvmestorageunit0.hostsend.data[2] top.test.nvmestorageunit0.hostsend.data[1] top.test.nvmestorageunit0.hostsend.data[0]
+@28
+top.test.nvmestorageunit0.hostrecv.ready
+top.test.nvmestorageunit0.hostrecv.valid
+top.test.nvmestorageunit0.hostrecv.last
+@22
+#{top.test.nvmestorageunit0.hostrecv.data[127:0]} top.test.nvmestorageunit0.hostrecv.data[127] top.test.nvmestorageunit0.hostrecv.data[126] top.test.nvmestorageunit0.hostrecv.data[125] top.test.nvmestorageunit0.hostrecv.data[124] top.test.nvmestorageunit0.hostrecv.data[123] top.test.nvmestorageunit0.hostrecv.data[122] top.test.nvmestorageunit0.hostrecv.data[121] top.test.nvmestorageunit0.hostrecv.data[120] top.test.nvmestorageunit0.hostrecv.data[119] top.test.nvmestorageunit0.hostrecv.data[118] top.test.nvmestorageunit0.hostrecv.data[117] top.test.nvmestorageunit0.hostrecv.data[116] top.test.nvmestorageunit0.hostrecv.data[115] top.test.nvmestorageunit0.hostrecv.data[114] top.test.nvmestorageunit0.hostrecv.data[113] top.test.nvmestorageunit0.hostrecv.data[112] top.test.nvmestorageunit0.hostrecv.data[111] top.test.nvmestorageunit0.hostrecv.data[110] top.test.nvmestorageunit0.hostrecv.data[109] top.test.nvmestorageunit0.hostrecv.data[108] top.test.nvmestorageunit0.hostrecv.data[107] top.test.nvmestorageunit0.hostrecv.data[106] top.test.nvmestorageunit0.hostrecv.data[105] top.test.nvmestorageunit0.hostrecv.data[104] top.test.nvmestorageunit0.hostrecv.data[103] top.test.nvmestorageunit0.hostrecv.data[102] top.test.nvmestorageunit0.hostrecv.data[101] top.test.nvmestorageunit0.hostrecv.data[100] top.test.nvmestorageunit0.hostrecv.data[99] top.test.nvmestorageunit0.hostrecv.data[98] top.test.nvmestorageunit0.hostrecv.data[97] top.test.nvmestorageunit0.hostrecv.data[96] top.test.nvmestorageunit0.hostrecv.data[95] top.test.nvmestorageunit0.hostrecv.data[94] top.test.nvmestorageunit0.hostrecv.data[93] top.test.nvmestorageunit0.hostrecv.data[92] top.test.nvmestorageunit0.hostrecv.data[91] top.test.nvmestorageunit0.hostrecv.data[90] top.test.nvmestorageunit0.hostrecv.data[89] top.test.nvmestorageunit0.hostrecv.data[88] top.test.nvmestorageunit0.hostrecv.data[87] top.test.nvmestorageunit0.hostrecv.data[86] top.test.nvmestorageunit0.hostrecv.data[85] top.test.nvmestorageunit0.hostrecv.data[84] top.test.nvmestorageunit0.hostrecv.data[83] top.test.nvmestorageunit0.hostrecv.data[82] top.test.nvmestorageunit0.hostrecv.data[81] top.test.nvmestorageunit0.hostrecv.data[80] top.test.nvmestorageunit0.hostrecv.data[79] top.test.nvmestorageunit0.hostrecv.data[78] top.test.nvmestorageunit0.hostrecv.data[77] top.test.nvmestorageunit0.hostrecv.data[76] top.test.nvmestorageunit0.hostrecv.data[75] top.test.nvmestorageunit0.hostrecv.data[74] top.test.nvmestorageunit0.hostrecv.data[73] top.test.nvmestorageunit0.hostrecv.data[72] top.test.nvmestorageunit0.hostrecv.data[71] top.test.nvmestorageunit0.hostrecv.data[70] top.test.nvmestorageunit0.hostrecv.data[69] top.test.nvmestorageunit0.hostrecv.data[68] top.test.nvmestorageunit0.hostrecv.data[67] top.test.nvmestorageunit0.hostrecv.data[66] top.test.nvmestorageunit0.hostrecv.data[65] top.test.nvmestorageunit0.hostrecv.data[64] top.test.nvmestorageunit0.hostrecv.data[63] top.test.nvmestorageunit0.hostrecv.data[62] top.test.nvmestorageunit0.hostrecv.data[61] top.test.nvmestorageunit0.hostrecv.data[60] top.test.nvmestorageunit0.hostrecv.data[59] top.test.nvmestorageunit0.hostrecv.data[58] top.test.nvmestorageunit0.hostrecv.data[57] top.test.nvmestorageunit0.hostrecv.data[56] top.test.nvmestorageunit0.hostrecv.data[55] top.test.nvmestorageunit0.hostrecv.data[54] top.test.nvmestorageunit0.hostrecv.data[53] top.test.nvmestorageunit0.hostrecv.data[52] top.test.nvmestorageunit0.hostrecv.data[51] top.test.nvmestorageunit0.hostrecv.data[50] top.test.nvmestorageunit0.hostrecv.data[49] top.test.nvmestorageunit0.hostrecv.data[48] top.test.nvmestorageunit0.hostrecv.data[47] top.test.nvmestorageunit0.hostrecv.data[46] top.test.nvmestorageunit0.hostrecv.data[45] top.test.nvmestorageunit0.hostrecv.data[44] top.test.nvmestorageunit0.hostrecv.data[43] top.test.nvmestorageunit0.hostrecv.data[42] top.test.nvmestorageunit0.hostrecv.data[41] top.test.nvmestorageunit0.hostrecv.data[40] top.test.nvmestorageunit0.hostrecv.data[39] top.test.nvmestorageunit0.hostrecv.data[38] top.test.nvmestorageunit0.hostrecv.data[37] top.test.nvmestorageunit0.hostrecv.data[36] top.test.nvmestorageunit0.hostrecv.data[35] top.test.nvmestorageunit0.hostrecv.data[34] top.test.nvmestorageunit0.hostrecv.data[33] top.test.nvmestorageunit0.hostrecv.data[32] top.test.nvmestorageunit0.hostrecv.data[31] top.test.nvmestorageunit0.hostrecv.data[30] top.test.nvmestorageunit0.hostrecv.data[29] top.test.nvmestorageunit0.hostrecv.data[28] top.test.nvmestorageunit0.hostrecv.data[27] top.test.nvmestorageunit0.hostrecv.data[26] top.test.nvmestorageunit0.hostrecv.data[25] top.test.nvmestorageunit0.hostrecv.data[24] top.test.nvmestorageunit0.hostrecv.data[23] top.test.nvmestorageunit0.hostrecv.data[22] top.test.nvmestorageunit0.hostrecv.data[21] top.test.nvmestorageunit0.hostrecv.data[20] top.test.nvmestorageunit0.hostrecv.data[19] top.test.nvmestorageunit0.hostrecv.data[18] top.test.nvmestorageunit0.hostrecv.data[17] top.test.nvmestorageunit0.hostrecv.data[16] top.test.nvmestorageunit0.hostrecv.data[15] top.test.nvmestorageunit0.hostrecv.data[14] top.test.nvmestorageunit0.hostrecv.data[13] top.test.nvmestorageunit0.hostrecv.data[12] top.test.nvmestorageunit0.hostrecv.data[11] top.test.nvmestorageunit0.hostrecv.data[10] top.test.nvmestorageunit0.hostrecv.data[9] top.test.nvmestorageunit0.hostrecv.data[8] top.test.nvmestorageunit0.hostrecv.data[7] top.test.nvmestorageunit0.hostrecv.data[6] top.test.nvmestorageunit0.hostrecv.data[5] top.test.nvmestorageunit0.hostrecv.data[4] top.test.nvmestorageunit0.hostrecv.data[3] top.test.nvmestorageunit0.hostrecv.data[2] top.test.nvmestorageunit0.hostrecv.data[1] top.test.nvmestorageunit0.hostrecv.data[0]
+@28
+top.test.hostreq.ready
+top.test.hostreq.valid
+top.test.hostreply.ready
+top.test.hostreply.valid
+top.test.nvmereq.ready
+top.test.nvmereq.valid
+top.test.nvmereq.last
+@22
+#{top.test.nvmereq.data[127:0]} top.test.nvmereq.data[127] top.test.nvmereq.data[126] top.test.nvmereq.data[125] top.test.nvmereq.data[124] top.test.nvmereq.data[123] top.test.nvmereq.data[122] top.test.nvmereq.data[121] top.test.nvmereq.data[120] top.test.nvmereq.data[119] top.test.nvmereq.data[118] top.test.nvmereq.data[117] top.test.nvmereq.data[116] top.test.nvmereq.data[115] top.test.nvmereq.data[114] top.test.nvmereq.data[113] top.test.nvmereq.data[112] top.test.nvmereq.data[111] top.test.nvmereq.data[110] top.test.nvmereq.data[109] top.test.nvmereq.data[108] top.test.nvmereq.data[107] top.test.nvmereq.data[106] top.test.nvmereq.data[105] top.test.nvmereq.data[104] top.test.nvmereq.data[103] top.test.nvmereq.data[102] top.test.nvmereq.data[101] top.test.nvmereq.data[100] top.test.nvmereq.data[99] top.test.nvmereq.data[98] top.test.nvmereq.data[97] top.test.nvmereq.data[96] top.test.nvmereq.data[95] top.test.nvmereq.data[94] top.test.nvmereq.data[93] top.test.nvmereq.data[92] top.test.nvmereq.data[91] top.test.nvmereq.data[90] top.test.nvmereq.data[89] top.test.nvmereq.data[88] top.test.nvmereq.data[87] top.test.nvmereq.data[86] top.test.nvmereq.data[85] top.test.nvmereq.data[84] top.test.nvmereq.data[83] top.test.nvmereq.data[82] top.test.nvmereq.data[81] top.test.nvmereq.data[80] top.test.nvmereq.data[79] top.test.nvmereq.data[78] top.test.nvmereq.data[77] top.test.nvmereq.data[76] top.test.nvmereq.data[75] top.test.nvmereq.data[74] top.test.nvmereq.data[73] top.test.nvmereq.data[72] top.test.nvmereq.data[71] top.test.nvmereq.data[70] top.test.nvmereq.data[69] top.test.nvmereq.data[68] top.test.nvmereq.data[67] top.test.nvmereq.data[66] top.test.nvmereq.data[65] top.test.nvmereq.data[64] top.test.nvmereq.data[63] top.test.nvmereq.data[62] top.test.nvmereq.data[61] top.test.nvmereq.data[60] top.test.nvmereq.data[59] top.test.nvmereq.data[58] top.test.nvmereq.data[57] top.test.nvmereq.data[56] top.test.nvmereq.data[55] top.test.nvmereq.data[54] top.test.nvmereq.data[53] top.test.nvmereq.data[52] top.test.nvmereq.data[51] top.test.nvmereq.data[50] top.test.nvmereq.data[49] top.test.nvmereq.data[48] top.test.nvmereq.data[47] top.test.nvmereq.data[46] top.test.nvmereq.data[45] top.test.nvmereq.data[44] top.test.nvmereq.data[43] top.test.nvmereq.data[42] top.test.nvmereq.data[41] top.test.nvmereq.data[40] top.test.nvmereq.data[39] top.test.nvmereq.data[38] top.test.nvmereq.data[37] top.test.nvmereq.data[36] top.test.nvmereq.data[35] top.test.nvmereq.data[34] top.test.nvmereq.data[33] top.test.nvmereq.data[32] top.test.nvmereq.data[31] top.test.nvmereq.data[30] top.test.nvmereq.data[29] top.test.nvmereq.data[28] top.test.nvmereq.data[27] top.test.nvmereq.data[26] top.test.nvmereq.data[25] top.test.nvmereq.data[24] top.test.nvmereq.data[23] top.test.nvmereq.data[22] top.test.nvmereq.data[21] top.test.nvmereq.data[20] top.test.nvmereq.data[19] top.test.nvmereq.data[18] top.test.nvmereq.data[17] top.test.nvmereq.data[16] top.test.nvmereq.data[15] top.test.nvmereq.data[14] top.test.nvmereq.data[13] top.test.nvmereq.data[12] top.test.nvmereq.data[11] top.test.nvmereq.data[10] top.test.nvmereq.data[9] top.test.nvmereq.data[8] top.test.nvmereq.data[7] top.test.nvmereq.data[6] top.test.nvmereq.data[5] top.test.nvmereq.data[4] top.test.nvmereq.data[3] top.test.nvmereq.data[2] top.test.nvmereq.data[1] top.test.nvmereq.data[0]
+@28
+top.test.nvmereply.ready
+top.test.nvmereply.valid
+top.test.nvmereply.last
+@22
+#{top.test.nvmereply.data[127:0]} top.test.nvmereply.data[127] top.test.nvmereply.data[126] top.test.nvmereply.data[125] top.test.nvmereply.data[124] top.test.nvmereply.data[123] top.test.nvmereply.data[122] top.test.nvmereply.data[121] top.test.nvmereply.data[120] top.test.nvmereply.data[119] top.test.nvmereply.data[118] top.test.nvmereply.data[117] top.test.nvmereply.data[116] top.test.nvmereply.data[115] top.test.nvmereply.data[114] top.test.nvmereply.data[113] top.test.nvmereply.data[112] top.test.nvmereply.data[111] top.test.nvmereply.data[110] top.test.nvmereply.data[109] top.test.nvmereply.data[108] top.test.nvmereply.data[107] top.test.nvmereply.data[106] top.test.nvmereply.data[105] top.test.nvmereply.data[104] top.test.nvmereply.data[103] top.test.nvmereply.data[102] top.test.nvmereply.data[101] top.test.nvmereply.data[100] top.test.nvmereply.data[99] top.test.nvmereply.data[98] top.test.nvmereply.data[97] top.test.nvmereply.data[96] top.test.nvmereply.data[95] top.test.nvmereply.data[94] top.test.nvmereply.data[93] top.test.nvmereply.data[92] top.test.nvmereply.data[91] top.test.nvmereply.data[90] top.test.nvmereply.data[89] top.test.nvmereply.data[88] top.test.nvmereply.data[87] top.test.nvmereply.data[86] top.test.nvmereply.data[85] top.test.nvmereply.data[84] top.test.nvmereply.data[83] top.test.nvmereply.data[82] top.test.nvmereply.data[81] top.test.nvmereply.data[80] top.test.nvmereply.data[79] top.test.nvmereply.data[78] top.test.nvmereply.data[77] top.test.nvmereply.data[76] top.test.nvmereply.data[75] top.test.nvmereply.data[74] top.test.nvmereply.data[73] top.test.nvmereply.data[72] top.test.nvmereply.data[71] top.test.nvmereply.data[70] top.test.nvmereply.data[69] top.test.nvmereply.data[68] top.test.nvmereply.data[67] top.test.nvmereply.data[66] top.test.nvmereply.data[65] top.test.nvmereply.data[64] top.test.nvmereply.data[63] top.test.nvmereply.data[62] top.test.nvmereply.data[61] top.test.nvmereply.data[60] top.test.nvmereply.data[59] top.test.nvmereply.data[58] top.test.nvmereply.data[57] top.test.nvmereply.data[56] top.test.nvmereply.data[55] top.test.nvmereply.data[54] top.test.nvmereply.data[53] top.test.nvmereply.data[52] top.test.nvmereply.data[51] top.test.nvmereply.data[50] top.test.nvmereply.data[49] top.test.nvmereply.data[48] top.test.nvmereply.data[47] top.test.nvmereply.data[46] top.test.nvmereply.data[45] top.test.nvmereply.data[44] top.test.nvmereply.data[43] top.test.nvmereply.data[42] top.test.nvmereply.data[41] top.test.nvmereply.data[40] top.test.nvmereply.data[39] top.test.nvmereply.data[38] top.test.nvmereply.data[37] top.test.nvmereply.data[36] top.test.nvmereply.data[35] top.test.nvmereply.data[34] top.test.nvmereply.data[33] top.test.nvmereply.data[32] top.test.nvmereply.data[31] top.test.nvmereply.data[30] top.test.nvmereply.data[29] top.test.nvmereply.data[28] top.test.nvmereply.data[27] top.test.nvmereply.data[26] top.test.nvmereply.data[25] top.test.nvmereply.data[24] top.test.nvmereply.data[23] top.test.nvmereply.data[22] top.test.nvmereply.data[21] top.test.nvmereply.data[20] top.test.nvmereply.data[19] top.test.nvmereply.data[18] top.test.nvmereply.data[17] top.test.nvmereply.data[16] top.test.nvmereply.data[15] top.test.nvmereply.data[14] top.test.nvmereply.data[13] top.test.nvmereply.data[12] top.test.nvmereply.data[11] top.test.nvmereply.data[10] top.test.nvmereply.data[9] top.test.nvmereply.data[8] top.test.nvmereply.data[7] top.test.nvmereply.data[6] top.test.nvmereply.data[5] top.test.nvmereply.data[4] top.test.nvmereply.data[3] top.test.nvmereply.data[2] top.test.nvmereply.data[1] top.test.nvmereply.data[0]
+@421
+top.test.nvmestorageunit0.nvmestreammux0.demuxstate
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream1in.ready
+top.test.nvmestorageunit0.nvmestreammux0.stream1in.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream1in.last
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream1in.data[0]
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream1out.ready
+top.test.nvmestorageunit0.nvmestreammux0.stream1out.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream1out.last
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream1out.data[0]
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream2out.ready
+top.test.nvmestorageunit0.nvmestreammux0.stream2out.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream2out.last
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream2out.data[0]
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream2in.ready
+top.test.nvmestorageunit0.nvmestreammux0.stream2in.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream2in.last
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream2in.data[0]
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream3in.ready
+top.test.nvmestorageunit0.nvmestreammux0.stream3in.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream3in.last
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream3in.data[0]
+@29
+top.test.nvmestorageunit0.nvmestreammux0.stream3out.ready
+@23
+#{top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[127:0]} top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[127] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[126] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[125] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[124] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[123] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[122] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[121] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[120] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[119] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[118] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[117] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[116] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[115] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[114] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[113] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[112] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[111] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[110] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[109] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[108] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[107] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[106] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[105] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[104] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[103] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[102] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[101] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[100] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[99] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[98] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[97] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[96] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[95] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[94] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[93] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[92] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[91] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[90] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[89] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[88] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[87] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[86] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[85] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[84] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[83] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[82] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[81] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[80] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[79] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[78] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[77] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[76] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[75] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[74] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[73] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[72] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[71] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[70] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[69] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[68] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[67] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[66] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[65] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[64] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[63] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[62] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[61] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[60] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[59] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[58] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[57] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[56] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[55] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[54] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[53] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[52] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[51] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[50] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[49] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[48] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[47] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[46] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[45] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[44] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[43] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[42] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[41] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[40] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[39] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[38] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[37] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[36] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[35] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[34] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[33] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[32] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[31] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[30] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[29] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[28] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[27] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[26] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[25] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[24] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[23] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[22] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[21] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[20] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[19] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[18] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[17] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[16] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[15] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[14] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[13] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[12] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[11] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[10] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[9] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[8] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[7] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[6] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[5] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[4] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[3] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[2] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[1] top.test.nvmestorageunit0.nvmestreammux0.stream3out.data[0]
+@420
+top.test.nvmestorageunit0.nvmestreammux0.demuxstate
+@28
+top.test.nvmestorageunit0.nvmestreammux0.demuxreply
+@420
+top.test.nvmestorageunit0.nvmestreammux0.muxstate
+@28
+top.test.nvmestorageunit0.nvmestreammux0.muxstream2
+top.test.nvmestorageunit0.nvmestreammux0.stream3out.valid
+top.test.nvmestorageunit0.nvmestreammux0.stream3out.last
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test009-packets.vhd b/source/DuneNvme/sim/testbench/test009-packets.vhd
new file mode 100644 (file)
index 0000000..e924f6f
--- /dev/null
@@ -0,0 +1,342 @@
+--------------------------------------------------------------------------------
+--     Test009-packets.vhd     Simple nvme interface tests
+--     T.Barnaby,      Beam Ltd.       2020-04-14
+--------------------------------------------------------------------------------
+--
+--
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+component NvmeStorageUnit is
+generic(
+       Simulate        : boolean       := True
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+
+       -- Control and status interface
+       axilIn          : in AxilToSlave;                       --! Axil bus input signals
+       axilOut         : out AxilToMaster;                     --! Axil bus output signals
+
+       -- From host to NVMe request/reply streams
+       hostSend        : inout AxisStream := AxisInput;        --! Host request stream
+       hostRecv        : inout AxisStream := AxisOutput;       --! Host reply stream
+
+       -- AXIS data stream input
+       --dataRx        : inout AxisStream      := AxisInput;   --! Raw data to save stream
+
+       -- NVMe interface
+       nvme_clk_p      : in std_logic;                         --! Nvme external clock +ve
+       nvme_clk_n      : in std_logic;                         --! Nvme external clock -ve
+       nvme_reset_n    : out std_logic;                        --! Nvme reset output to reset NVMe devices
+       nvme_exp_txp    : out std_logic_vector(3 downto 0);     --! Nvme PCIe TX plus lanes
+       nvme_exp_txn    : out std_logic_vector(3 downto 0);     --! Nvme PCIe TX minus lanes
+       nvme_exp_rxp    : in std_logic_vector(3 downto 0);      --! Nvme PCIe RX plus lanes
+       nvme_exp_rxn    : in std_logic_vector(3 downto 0);      --! Nvme PCIe RX minus lanes
+
+       -- Debug
+       leds            : out std_logic_vector(3 downto 0)
+);
+end component;
+
+component AxisStreamMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn1       : inout AxisStream := AxisInput;        --! Input data stream
+       streamIn2       : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut       : inout AxisStream := AxisOutput        --! Output data stream
+);
+end component;
+
+component AxisStreamDeMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn        : inout AxisStream := AxisInput;        --! Input data stream
+
+       streamOut1      : inout AxisStream := AxisOutput;       --! Output data stream1
+       streamOut2      : inout AxisStream := AxisOutput        --! Output data stream2
+);
+end component;
+
+component NvmeStreamMux is
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       stream1In       : inout AxisStream := AxisInput;        --! Single multiplexed Input stream
+       stream1Out      : inout AxisStream := AxisOutput;       --! Single multiplexed Ouput stream
+
+       stream2In       : inout AxisStream := AxisInput;        --! Host Replies input stream
+       stream2Out      : inout AxisStream := AxisOutput;       --! Host Requests output stream
+
+       stream3In       : inout AxisStream := AxisInput;        --! Nvme Requests input stream
+       stream3Out      : inout AxisStream := AxisOutput        --! Nvme replies output stream
+);
+end component;
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal axil            : AxilBus;
+signal hostSend                : AxisStream    := AxisOutput;
+signal hostRecv                : AxisStream    := AxisInput;
+
+signal leds            : std_logic_vector(3 downto 0);
+
+signal hostReply       : AxisStream    := AxisInput;
+signal hostReq         : AxisStream    := AxisOutput;
+signal nvmeReq         : AxisStream    := AxisInput;
+signal nvmeReply       : AxisStream    := AxisOutput;
+
+type NvmeStateType is (NVME_STATE_IDLE, NVME_STATE_WRITEDATA_START, NVME_STATE_WRITEDATA);
+signal nvmeState       : NvmeStateType := NVME_STATE_IDLE;
+signal nvmeRequestHead : PcieRequestHead;
+signal nvmeRequestHead1        : PcieRequestHead;
+signal nvmeReplyHead   : PcieReplyHead;
+signal nvmeCount       : unsigned(10 downto 0);                        -- DWord data send count
+signal nvmeChunkCount  : unsigned(10 downto 0);                        -- DWord data send within a chunk count
+signal nvmeByteCount   : integer;
+signal nvmeData                : std_logic_vector(127 downto 0);
+
+signal sendData                : std_logic := '0';
+
+procedure pcieSendRequest(signal toSlave: inout AxisStream; request: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+variable packetHead    : PcieRequestHead;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(0, packetHead.stream'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(0, packetHead.count'length);
+       packetHead.request := to_unsigned(request, packetHead.request'length);
+
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= to_stl(packetHead);
+       toSlave.valid <= '1';
+
+       if(count > 0) then
+               wait until rising_edge(clk) and (toSlave.ready = '1');
+               toSlave.data <= to_stl(0, 96) & to_stl(data, 32);
+               toSlave.valid <= '1';
+               toSlave.last <= '1';
+       else
+               toSlave.last <= '1';
+       end if;
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0';
+       toSlave.last <= '0';
+end procedure;
+
+procedure pcieSendReply(signal toSlave: inout AxisStream; status: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+variable packetHead    : PcieReplyHead;
+begin
+       packetHead.byteCount := to_unsigned(0, packetHead.byteCount'length);
+       packetHead.error := to_unsigned(0, packetHead.error'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.count := to_unsigned(count, packetHead.count'length);
+       packetHead.status := to_unsigned(status, packetHead.status'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       
+       -- Write address
+       wait until rising_edge(clk);
+       toSlave.data <= to_stl(packetHead);
+       toSlave.valid <= '1';
+
+       if(count > 0) then
+               wait until rising_edge(clk) and (toSlave.ready = '1');
+               toSlave.data <= to_stl(0, 96) & to_stl(data, 32);
+               toSlave.valid <= '1';
+               toSlave.last <= '1';
+       else
+               toSlave.last <= '1';
+       end if;
+       
+       wait until rising_edge(clk) and (toSlave.ready = '1');
+       toSlave.valid <= '0';
+       toSlave.last <= '0';
+end procedure;
+
+begin
+       hostReply.ready <= '1';
+       
+       NvmeStorageUnit0 : NvmeStorageUnit
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               axilIn          => axil.toSlave,
+               axilOut         => axil.toMaster,
+
+               hostSend        => hostSend,
+               hostRecv        => hostRecv,
+
+               -- NVMe interface
+               nvme_clk_p      => '0',
+               nvme_clk_n      => '0',
+               --nvme_exp_txp  : out std_logic_vector(0 downto 0);
+               --nvme_exp_txn  : out std_logic_vector(0 downto 0);
+               nvme_exp_rxp    => "0000",
+               nvme_exp_rxn    => "0000",
+
+               leds            => leds
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Set PCIe configuration command register to 0x06
+               pcieSendRequest(hostReq, 10, 4, 16#44#, 1, 16#00100006#);
+               
+               -- Read PCIe configuration command register
+               pcieSendRequest(hostReq, 8, 4, 16#55#, 0, 0);
+               
+               -- Test Mux with Write to Nvmeregister 0
+               --pcieSendRequest(hostReq, 1, 16#0000#, 16#22#, 1, 16#40#);
+               --wait until rising_edge(clk);
+               --pcieSendReply(nvmeReply, 1, 16#1000#, 16#22#, 0, 0);
+
+               -- Write to AdminQueue doorbell register
+               --pcieSendRequest(hostReq, 1, 16#1000#, 16#22#, 1, 16#40#);
+
+               -- Perform NVMe data write
+               -- Write to DataWriteQueue doorbell register
+               --pcieSendRequest(hostReq, 1, 16#1008#, 16#23#, 1, 16#40#);
+               wait;
+       end process;
+       
+       -- Host to Nvme stream Mux/DeMux
+       nvmeStreamMux0 : NvmeStreamMux
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               stream1In       => hostRecv,
+               stream1Out      => hostSend,
+               
+               stream2In       => nvmeReply,
+               stream2Out      => nvmeReq,
+
+               stream3In       => hostReq,
+               stream3Out      => hostReply
+       );
+
+
+       nvmeRequestHead <= to_PcieRequestHead(nvmeReq.data);
+       nvmeReply.data <= nvmeData when(nvmeState = NVME_STATE_WRITEDATA) else to_stl(nvmeReplyHead);
+       
+       requests : process(clk)
+       begin
+               if(rising_edge(clk)) then
+                       if(reset = '1') then
+                               nvmeReq.ready   <= '0';
+                               nvmeReply.valid <= '0';
+                               nvmeReply.last  <= '0';
+                               nvmeData        <= (others => '0');
+                               nvmeState       <= NVME_STATE_IDLE;
+                       else
+                               case (nvmeState) is
+                               when NVME_STATE_IDLE =>
+                                       if(nvmeReq.ready = '1' and nvmeReq.valid = '1') then
+                                               nvmeRequestHead1        <= nvmeRequestHead;
+                                               nvmeCount               <= nvmeRequestHead.count + 1;
+                                               nvmeState               <= NVME_STATE_WRITEDATA_START;
+                                               nvmeReq.ready           <= '0';
+                                       else
+                                               nvmeReq.ready           <= '1';
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA_START =>
+                                       nvmeReplyHead.byteCount <= (nvmeRequestHead1.count + 1) & "00";
+                                       nvmeReplyHead.address   <= nvmeRequestHead1.address(nvmeReplyHead.address'length - 1 downto 0);
+                                       nvmeReplyHead.error     <= (others => '0');
+                                       nvmeReplyHead.status    <= (others => '0');
+                                       nvmeReplyHead.tag       <= nvmeRequestHead1.tag;
+
+                                       if(nvmeCount > CHUNK_SIZE) then
+                                               nvmeReplyHead.count     <= to_unsigned(CHUNK_SIZE-1, nvmeReplyHead.count'length);
+                                               nvmeChunkCount          <= to_unsigned(CHUNK_SIZE, nvmeReplyHead.count'length);
+                                       else
+                                               nvmeReplyHead.count     <= nvmeCount - 1;
+                                               nvmeChunkCount          <= nvmeCount;
+                                       end if;
+
+                                       nvmeByteCount           <= (to_integer(nvmeRequestHead1.count) + 1) * 4;
+                                       nvmeReply.valid         <= '1';
+
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               nvmeState       <= NVME_STATE_WRITEDATA;
+                                       end if;
+
+                               when NVME_STATE_WRITEDATA =>
+                                       if(nvmeReply.ready = '1' and nvmeReply.valid = '1') then
+                                               nvmeData        <= std_logic_vector(unsigned(nvmeData) + 1);
+                                               if(nvmeChunkCount = 4) then
+                                                       if(nvmeCount = 4) then
+                                                               nvmeReply.valid <= '0';
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_IDLE;
+                                                       else
+                                                               nvmeReply.last  <= '0';
+                                                               nvmeState       <= NVME_STATE_WRITEDATA_START;
+                                                       end if;
+                                               elsif(nvmeChunkCount = 8) then
+                                                       nvmeReply.last <= '1';
+                                               else
+                                                       nvmeReply.last <= '0';
+                                               end if;
+                                               nvmeChunkCount  <= nvmeChunkCount - 4;
+                                               nvmeCount       <= nvmeCount - 4;
+                                       end if;
+                               end case;
+                       end if;
+               end if;
+       end process;
+
+       stop : process
+       begin
+               wait for 700 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test010-queueram.sav b/source/DuneNvme/sim/testbench/test010-queueram.sav
new file mode 100644 (file)
index 0000000..22ab465
--- /dev/null
@@ -0,0 +1,74 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Tue Apr 21 11:05:16 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test017-nvmeprocess/sim/simu/test.ghw"
+[dumpfile_mtime] "Tue Apr 21 11:04:48 2020"
+[dumpfile_size] 22405
+[savefile] "/src/dune/FpgaPlay/test017-nvmeprocess/sim/testbench/test010-queueram.sav"
+[timestart] 0
+[size] 1920 1119
+[pos] -1 -1
+*-26.422903 29600000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.hostreq.
+[treeopen] top.test.nvmequeues0.
+[treeopen] top.test.nvmequeues0.nvmequeueinpos.
+[treeopen] top.test.nvmequeues0.nvmereplyout.
+[sst_width] 256
+[signals_width] 502
+[sst_expanded] 1
+[sst_vpaned_height] 513
+@28
+top.test.clk
+top.test.reset
+top.test.hostreq.ready
+top.test.hostreq.valid
+top.test.hostreq.last
+@22
+#{top.test.hostreq.data[127:0]} top.test.hostreq.data[127] top.test.hostreq.data[126] top.test.hostreq.data[125] top.test.hostreq.data[124] top.test.hostreq.data[123] top.test.hostreq.data[122] top.test.hostreq.data[121] top.test.hostreq.data[120] top.test.hostreq.data[119] top.test.hostreq.data[118] top.test.hostreq.data[117] top.test.hostreq.data[116] top.test.hostreq.data[115] top.test.hostreq.data[114] top.test.hostreq.data[113] top.test.hostreq.data[112] top.test.hostreq.data[111] top.test.hostreq.data[110] top.test.hostreq.data[109] top.test.hostreq.data[108] top.test.hostreq.data[107] top.test.hostreq.data[106] top.test.hostreq.data[105] top.test.hostreq.data[104] top.test.hostreq.data[103] top.test.hostreq.data[102] top.test.hostreq.data[101] top.test.hostreq.data[100] top.test.hostreq.data[99] top.test.hostreq.data[98] top.test.hostreq.data[97] top.test.hostreq.data[96] top.test.hostreq.data[95] top.test.hostreq.data[94] top.test.hostreq.data[93] top.test.hostreq.data[92] top.test.hostreq.data[91] top.test.hostreq.data[90] top.test.hostreq.data[89] top.test.hostreq.data[88] top.test.hostreq.data[87] top.test.hostreq.data[86] top.test.hostreq.data[85] top.test.hostreq.data[84] top.test.hostreq.data[83] top.test.hostreq.data[82] top.test.hostreq.data[81] top.test.hostreq.data[80] top.test.hostreq.data[79] top.test.hostreq.data[78] top.test.hostreq.data[77] top.test.hostreq.data[76] top.test.hostreq.data[75] top.test.hostreq.data[74] top.test.hostreq.data[73] top.test.hostreq.data[72] top.test.hostreq.data[71] top.test.hostreq.data[70] top.test.hostreq.data[69] top.test.hostreq.data[68] top.test.hostreq.data[67] top.test.hostreq.data[66] top.test.hostreq.data[65] top.test.hostreq.data[64] top.test.hostreq.data[63] top.test.hostreq.data[62] top.test.hostreq.data[61] top.test.hostreq.data[60] top.test.hostreq.data[59] top.test.hostreq.data[58] top.test.hostreq.data[57] top.test.hostreq.data[56] top.test.hostreq.data[55] top.test.hostreq.data[54] top.test.hostreq.data[53] top.test.hostreq.data[52] top.test.hostreq.data[51] top.test.hostreq.data[50] top.test.hostreq.data[49] top.test.hostreq.data[48] top.test.hostreq.data[47] top.test.hostreq.data[46] top.test.hostreq.data[45] top.test.hostreq.data[44] top.test.hostreq.data[43] top.test.hostreq.data[42] top.test.hostreq.data[41] top.test.hostreq.data[40] top.test.hostreq.data[39] top.test.hostreq.data[38] top.test.hostreq.data[37] top.test.hostreq.data[36] top.test.hostreq.data[35] top.test.hostreq.data[34] top.test.hostreq.data[33] top.test.hostreq.data[32] top.test.hostreq.data[31] top.test.hostreq.data[30] top.test.hostreq.data[29] top.test.hostreq.data[28] top.test.hostreq.data[27] top.test.hostreq.data[26] top.test.hostreq.data[25] top.test.hostreq.data[24] top.test.hostreq.data[23] top.test.hostreq.data[22] top.test.hostreq.data[21] top.test.hostreq.data[20] top.test.hostreq.data[19] top.test.hostreq.data[18] top.test.hostreq.data[17] top.test.hostreq.data[16] top.test.hostreq.data[15] top.test.hostreq.data[14] top.test.hostreq.data[13] top.test.hostreq.data[12] top.test.hostreq.data[11] top.test.hostreq.data[10] top.test.hostreq.data[9] top.test.hostreq.data[8] top.test.hostreq.data[7] top.test.hostreq.data[6] top.test.hostreq.data[5] top.test.hostreq.data[4] top.test.hostreq.data[3] top.test.hostreq.data[2] top.test.hostreq.data[1] top.test.hostreq.data[0]
+@28
+#{top.test.hostreqpos[2:0]} top.test.hostreqpos[0]
+@22
+#{top.test.nvmequeues0.ram[0][127:0]} top.test.nvmequeues0.ram[0][127] top.test.nvmequeues0.ram[0][126] top.test.nvmequeues0.ram[0][125] top.test.nvmequeues0.ram[0][124] top.test.nvmequeues0.ram[0][123] top.test.nvmequeues0.ram[0][122] top.test.nvmequeues0.ram[0][121] top.test.nvmequeues0.ram[0][120] top.test.nvmequeues0.ram[0][119] top.test.nvmequeues0.ram[0][118] top.test.nvmequeues0.ram[0][117] top.test.nvmequeues0.ram[0][116] top.test.nvmequeues0.ram[0][115] top.test.nvmequeues0.ram[0][114] top.test.nvmequeues0.ram[0][113] top.test.nvmequeues0.ram[0][112] top.test.nvmequeues0.ram[0][111] top.test.nvmequeues0.ram[0][110] top.test.nvmequeues0.ram[0][109] top.test.nvmequeues0.ram[0][108] top.test.nvmequeues0.ram[0][107] top.test.nvmequeues0.ram[0][106] top.test.nvmequeues0.ram[0][105] top.test.nvmequeues0.ram[0][104] top.test.nvmequeues0.ram[0][103] top.test.nvmequeues0.ram[0][102] top.test.nvmequeues0.ram[0][101] top.test.nvmequeues0.ram[0][100] top.test.nvmequeues0.ram[0][99] top.test.nvmequeues0.ram[0][98] top.test.nvmequeues0.ram[0][97] top.test.nvmequeues0.ram[0][96] top.test.nvmequeues0.ram[0][95] top.test.nvmequeues0.ram[0][94] top.test.nvmequeues0.ram[0][93] top.test.nvmequeues0.ram[0][92] top.test.nvmequeues0.ram[0][91] top.test.nvmequeues0.ram[0][90] top.test.nvmequeues0.ram[0][89] top.test.nvmequeues0.ram[0][88] top.test.nvmequeues0.ram[0][87] top.test.nvmequeues0.ram[0][86] top.test.nvmequeues0.ram[0][85] top.test.nvmequeues0.ram[0][84] top.test.nvmequeues0.ram[0][83] top.test.nvmequeues0.ram[0][82] top.test.nvmequeues0.ram[0][81] top.test.nvmequeues0.ram[0][80] top.test.nvmequeues0.ram[0][79] top.test.nvmequeues0.ram[0][78] top.test.nvmequeues0.ram[0][77] top.test.nvmequeues0.ram[0][76] top.test.nvmequeues0.ram[0][75] top.test.nvmequeues0.ram[0][74] top.test.nvmequeues0.ram[0][73] top.test.nvmequeues0.ram[0][72] top.test.nvmequeues0.ram[0][71] top.test.nvmequeues0.ram[0][70] top.test.nvmequeues0.ram[0][69] top.test.nvmequeues0.ram[0][68] top.test.nvmequeues0.ram[0][67] top.test.nvmequeues0.ram[0][66] top.test.nvmequeues0.ram[0][65] top.test.nvmequeues0.ram[0][64] top.test.nvmequeues0.ram[0][63] top.test.nvmequeues0.ram[0][62] top.test.nvmequeues0.ram[0][61] top.test.nvmequeues0.ram[0][60] top.test.nvmequeues0.ram[0][59] top.test.nvmequeues0.ram[0][58] top.test.nvmequeues0.ram[0][57] top.test.nvmequeues0.ram[0][56] top.test.nvmequeues0.ram[0][55] top.test.nvmequeues0.ram[0][54] top.test.nvmequeues0.ram[0][53] top.test.nvmequeues0.ram[0][52] top.test.nvmequeues0.ram[0][51] top.test.nvmequeues0.ram[0][50] top.test.nvmequeues0.ram[0][49] top.test.nvmequeues0.ram[0][48] top.test.nvmequeues0.ram[0][47] top.test.nvmequeues0.ram[0][46] top.test.nvmequeues0.ram[0][45] top.test.nvmequeues0.ram[0][44] top.test.nvmequeues0.ram[0][43] top.test.nvmequeues0.ram[0][42] top.test.nvmequeues0.ram[0][41] top.test.nvmequeues0.ram[0][40] top.test.nvmequeues0.ram[0][39] top.test.nvmequeues0.ram[0][38] top.test.nvmequeues0.ram[0][37] top.test.nvmequeues0.ram[0][36] top.test.nvmequeues0.ram[0][35] top.test.nvmequeues0.ram[0][34] top.test.nvmequeues0.ram[0][33] top.test.nvmequeues0.ram[0][32] top.test.nvmequeues0.ram[0][31] top.test.nvmequeues0.ram[0][30] top.test.nvmequeues0.ram[0][29] top.test.nvmequeues0.ram[0][28] top.test.nvmequeues0.ram[0][27] top.test.nvmequeues0.ram[0][26] top.test.nvmequeues0.ram[0][25] top.test.nvmequeues0.ram[0][24] top.test.nvmequeues0.ram[0][23] top.test.nvmequeues0.ram[0][22] top.test.nvmequeues0.ram[0][21] top.test.nvmequeues0.ram[0][20] top.test.nvmequeues0.ram[0][19] top.test.nvmequeues0.ram[0][18] top.test.nvmequeues0.ram[0][17] top.test.nvmequeues0.ram[0][16] top.test.nvmequeues0.ram[0][15] top.test.nvmequeues0.ram[0][14] top.test.nvmequeues0.ram[0][13] top.test.nvmequeues0.ram[0][12] top.test.nvmequeues0.ram[0][11] top.test.nvmequeues0.ram[0][10] top.test.nvmequeues0.ram[0][9] top.test.nvmequeues0.ram[0][8] top.test.nvmequeues0.ram[0][7] top.test.nvmequeues0.ram[0][6] top.test.nvmequeues0.ram[0][5] top.test.nvmequeues0.ram[0][4] top.test.nvmequeues0.ram[0][3] top.test.nvmequeues0.ram[0][2] top.test.nvmequeues0.ram[0][1] top.test.nvmequeues0.ram[0][0]
+#{top.test.nvmequeues0.ram[1][127:0]} top.test.nvmequeues0.ram[1][127] top.test.nvmequeues0.ram[1][126] top.test.nvmequeues0.ram[1][125] top.test.nvmequeues0.ram[1][124] top.test.nvmequeues0.ram[1][123] top.test.nvmequeues0.ram[1][122] top.test.nvmequeues0.ram[1][121] top.test.nvmequeues0.ram[1][120] top.test.nvmequeues0.ram[1][119] top.test.nvmequeues0.ram[1][118] top.test.nvmequeues0.ram[1][117] top.test.nvmequeues0.ram[1][116] top.test.nvmequeues0.ram[1][115] top.test.nvmequeues0.ram[1][114] top.test.nvmequeues0.ram[1][113] top.test.nvmequeues0.ram[1][112] top.test.nvmequeues0.ram[1][111] top.test.nvmequeues0.ram[1][110] top.test.nvmequeues0.ram[1][109] top.test.nvmequeues0.ram[1][108] top.test.nvmequeues0.ram[1][107] top.test.nvmequeues0.ram[1][106] top.test.nvmequeues0.ram[1][105] top.test.nvmequeues0.ram[1][104] top.test.nvmequeues0.ram[1][103] top.test.nvmequeues0.ram[1][102] top.test.nvmequeues0.ram[1][101] top.test.nvmequeues0.ram[1][100] top.test.nvmequeues0.ram[1][99] top.test.nvmequeues0.ram[1][98] top.test.nvmequeues0.ram[1][97] top.test.nvmequeues0.ram[1][96] top.test.nvmequeues0.ram[1][95] top.test.nvmequeues0.ram[1][94] top.test.nvmequeues0.ram[1][93] top.test.nvmequeues0.ram[1][92] top.test.nvmequeues0.ram[1][91] top.test.nvmequeues0.ram[1][90] top.test.nvmequeues0.ram[1][89] top.test.nvmequeues0.ram[1][88] top.test.nvmequeues0.ram[1][87] top.test.nvmequeues0.ram[1][86] top.test.nvmequeues0.ram[1][85] top.test.nvmequeues0.ram[1][84] top.test.nvmequeues0.ram[1][83] top.test.nvmequeues0.ram[1][82] top.test.nvmequeues0.ram[1][81] top.test.nvmequeues0.ram[1][80] top.test.nvmequeues0.ram[1][79] top.test.nvmequeues0.ram[1][78] top.test.nvmequeues0.ram[1][77] top.test.nvmequeues0.ram[1][76] top.test.nvmequeues0.ram[1][75] top.test.nvmequeues0.ram[1][74] top.test.nvmequeues0.ram[1][73] top.test.nvmequeues0.ram[1][72] top.test.nvmequeues0.ram[1][71] top.test.nvmequeues0.ram[1][70] top.test.nvmequeues0.ram[1][69] top.test.nvmequeues0.ram[1][68] top.test.nvmequeues0.ram[1][67] top.test.nvmequeues0.ram[1][66] top.test.nvmequeues0.ram[1][65] top.test.nvmequeues0.ram[1][64] top.test.nvmequeues0.ram[1][63] top.test.nvmequeues0.ram[1][62] top.test.nvmequeues0.ram[1][61] top.test.nvmequeues0.ram[1][60] top.test.nvmequeues0.ram[1][59] top.test.nvmequeues0.ram[1][58] top.test.nvmequeues0.ram[1][57] top.test.nvmequeues0.ram[1][56] top.test.nvmequeues0.ram[1][55] top.test.nvmequeues0.ram[1][54] top.test.nvmequeues0.ram[1][53] top.test.nvmequeues0.ram[1][52] top.test.nvmequeues0.ram[1][51] top.test.nvmequeues0.ram[1][50] top.test.nvmequeues0.ram[1][49] top.test.nvmequeues0.ram[1][48] top.test.nvmequeues0.ram[1][47] top.test.nvmequeues0.ram[1][46] top.test.nvmequeues0.ram[1][45] top.test.nvmequeues0.ram[1][44] top.test.nvmequeues0.ram[1][43] top.test.nvmequeues0.ram[1][42] top.test.nvmequeues0.ram[1][41] top.test.nvmequeues0.ram[1][40] top.test.nvmequeues0.ram[1][39] top.test.nvmequeues0.ram[1][38] top.test.nvmequeues0.ram[1][37] top.test.nvmequeues0.ram[1][36] top.test.nvmequeues0.ram[1][35] top.test.nvmequeues0.ram[1][34] top.test.nvmequeues0.ram[1][33] top.test.nvmequeues0.ram[1][32] top.test.nvmequeues0.ram[1][31] top.test.nvmequeues0.ram[1][30] top.test.nvmequeues0.ram[1][29] top.test.nvmequeues0.ram[1][28] top.test.nvmequeues0.ram[1][27] top.test.nvmequeues0.ram[1][26] top.test.nvmequeues0.ram[1][25] top.test.nvmequeues0.ram[1][24] top.test.nvmequeues0.ram[1][23] top.test.nvmequeues0.ram[1][22] top.test.nvmequeues0.ram[1][21] top.test.nvmequeues0.ram[1][20] top.test.nvmequeues0.ram[1][19] top.test.nvmequeues0.ram[1][18] top.test.nvmequeues0.ram[1][17] top.test.nvmequeues0.ram[1][16] top.test.nvmequeues0.ram[1][15] top.test.nvmequeues0.ram[1][14] top.test.nvmequeues0.ram[1][13] top.test.nvmequeues0.ram[1][12] top.test.nvmequeues0.ram[1][11] top.test.nvmequeues0.ram[1][10] top.test.nvmequeues0.ram[1][9] top.test.nvmequeues0.ram[1][8] top.test.nvmequeues0.ram[1][7] top.test.nvmequeues0.ram[1][6] top.test.nvmequeues0.ram[1][5] top.test.nvmequeues0.ram[1][4] top.test.nvmequeues0.ram[1][3] top.test.nvmequeues0.ram[1][2] top.test.nvmequeues0.ram[1][1] top.test.nvmequeues0.ram[1][0]
+#{top.test.nvmequeues0.ram[2][127:0]} top.test.nvmequeues0.ram[2][127] top.test.nvmequeues0.ram[2][126] top.test.nvmequeues0.ram[2][125] top.test.nvmequeues0.ram[2][124] top.test.nvmequeues0.ram[2][123] top.test.nvmequeues0.ram[2][122] top.test.nvmequeues0.ram[2][121] top.test.nvmequeues0.ram[2][120] top.test.nvmequeues0.ram[2][119] top.test.nvmequeues0.ram[2][118] top.test.nvmequeues0.ram[2][117] top.test.nvmequeues0.ram[2][116] top.test.nvmequeues0.ram[2][115] top.test.nvmequeues0.ram[2][114] top.test.nvmequeues0.ram[2][113] top.test.nvmequeues0.ram[2][112] top.test.nvmequeues0.ram[2][111] top.test.nvmequeues0.ram[2][110] top.test.nvmequeues0.ram[2][109] top.test.nvmequeues0.ram[2][108] top.test.nvmequeues0.ram[2][107] top.test.nvmequeues0.ram[2][106] top.test.nvmequeues0.ram[2][105] top.test.nvmequeues0.ram[2][104] top.test.nvmequeues0.ram[2][103] top.test.nvmequeues0.ram[2][102] top.test.nvmequeues0.ram[2][101] top.test.nvmequeues0.ram[2][100] top.test.nvmequeues0.ram[2][99] top.test.nvmequeues0.ram[2][98] top.test.nvmequeues0.ram[2][97] top.test.nvmequeues0.ram[2][96] top.test.nvmequeues0.ram[2][95] top.test.nvmequeues0.ram[2][94] top.test.nvmequeues0.ram[2][93] top.test.nvmequeues0.ram[2][92] top.test.nvmequeues0.ram[2][91] top.test.nvmequeues0.ram[2][90] top.test.nvmequeues0.ram[2][89] top.test.nvmequeues0.ram[2][88] top.test.nvmequeues0.ram[2][87] top.test.nvmequeues0.ram[2][86] top.test.nvmequeues0.ram[2][85] top.test.nvmequeues0.ram[2][84] top.test.nvmequeues0.ram[2][83] top.test.nvmequeues0.ram[2][82] top.test.nvmequeues0.ram[2][81] top.test.nvmequeues0.ram[2][80] top.test.nvmequeues0.ram[2][79] top.test.nvmequeues0.ram[2][78] top.test.nvmequeues0.ram[2][77] top.test.nvmequeues0.ram[2][76] top.test.nvmequeues0.ram[2][75] top.test.nvmequeues0.ram[2][74] top.test.nvmequeues0.ram[2][73] top.test.nvmequeues0.ram[2][72] top.test.nvmequeues0.ram[2][71] top.test.nvmequeues0.ram[2][70] top.test.nvmequeues0.ram[2][69] top.test.nvmequeues0.ram[2][68] top.test.nvmequeues0.ram[2][67] top.test.nvmequeues0.ram[2][66] top.test.nvmequeues0.ram[2][65] top.test.nvmequeues0.ram[2][64] top.test.nvmequeues0.ram[2][63] top.test.nvmequeues0.ram[2][62] top.test.nvmequeues0.ram[2][61] top.test.nvmequeues0.ram[2][60] top.test.nvmequeues0.ram[2][59] top.test.nvmequeues0.ram[2][58] top.test.nvmequeues0.ram[2][57] top.test.nvmequeues0.ram[2][56] top.test.nvmequeues0.ram[2][55] top.test.nvmequeues0.ram[2][54] top.test.nvmequeues0.ram[2][53] top.test.nvmequeues0.ram[2][52] top.test.nvmequeues0.ram[2][51] top.test.nvmequeues0.ram[2][50] top.test.nvmequeues0.ram[2][49] top.test.nvmequeues0.ram[2][48] top.test.nvmequeues0.ram[2][47] top.test.nvmequeues0.ram[2][46] top.test.nvmequeues0.ram[2][45] top.test.nvmequeues0.ram[2][44] top.test.nvmequeues0.ram[2][43] top.test.nvmequeues0.ram[2][42] top.test.nvmequeues0.ram[2][41] top.test.nvmequeues0.ram[2][40] top.test.nvmequeues0.ram[2][39] top.test.nvmequeues0.ram[2][38] top.test.nvmequeues0.ram[2][37] top.test.nvmequeues0.ram[2][36] top.test.nvmequeues0.ram[2][35] top.test.nvmequeues0.ram[2][34] top.test.nvmequeues0.ram[2][33] top.test.nvmequeues0.ram[2][32] top.test.nvmequeues0.ram[2][31] top.test.nvmequeues0.ram[2][30] top.test.nvmequeues0.ram[2][29] top.test.nvmequeues0.ram[2][28] top.test.nvmequeues0.ram[2][27] top.test.nvmequeues0.ram[2][26] top.test.nvmequeues0.ram[2][25] top.test.nvmequeues0.ram[2][24] top.test.nvmequeues0.ram[2][23] top.test.nvmequeues0.ram[2][22] top.test.nvmequeues0.ram[2][21] top.test.nvmequeues0.ram[2][20] top.test.nvmequeues0.ram[2][19] top.test.nvmequeues0.ram[2][18] top.test.nvmequeues0.ram[2][17] top.test.nvmequeues0.ram[2][16] top.test.nvmequeues0.ram[2][15] top.test.nvmequeues0.ram[2][14] top.test.nvmequeues0.ram[2][13] top.test.nvmequeues0.ram[2][12] top.test.nvmequeues0.ram[2][11] top.test.nvmequeues0.ram[2][10] top.test.nvmequeues0.ram[2][9] top.test.nvmequeues0.ram[2][8] top.test.nvmequeues0.ram[2][7] top.test.nvmequeues0.ram[2][6] top.test.nvmequeues0.ram[2][5] top.test.nvmequeues0.ram[2][4] top.test.nvmequeues0.ram[2][3] top.test.nvmequeues0.ram[2][2] top.test.nvmequeues0.ram[2][1] top.test.nvmequeues0.ram[2][0]
+#{top.test.nvmequeues0.ram[3][127:0]} top.test.nvmequeues0.ram[3][127] top.test.nvmequeues0.ram[3][126] top.test.nvmequeues0.ram[3][125] top.test.nvmequeues0.ram[3][124] top.test.nvmequeues0.ram[3][123] top.test.nvmequeues0.ram[3][122] top.test.nvmequeues0.ram[3][121] top.test.nvmequeues0.ram[3][120] top.test.nvmequeues0.ram[3][119] top.test.nvmequeues0.ram[3][118] top.test.nvmequeues0.ram[3][117] top.test.nvmequeues0.ram[3][116] top.test.nvmequeues0.ram[3][115] top.test.nvmequeues0.ram[3][114] top.test.nvmequeues0.ram[3][113] top.test.nvmequeues0.ram[3][112] top.test.nvmequeues0.ram[3][111] top.test.nvmequeues0.ram[3][110] top.test.nvmequeues0.ram[3][109] top.test.nvmequeues0.ram[3][108] top.test.nvmequeues0.ram[3][107] top.test.nvmequeues0.ram[3][106] top.test.nvmequeues0.ram[3][105] top.test.nvmequeues0.ram[3][104] top.test.nvmequeues0.ram[3][103] top.test.nvmequeues0.ram[3][102] top.test.nvmequeues0.ram[3][101] top.test.nvmequeues0.ram[3][100] top.test.nvmequeues0.ram[3][99] top.test.nvmequeues0.ram[3][98] top.test.nvmequeues0.ram[3][97] top.test.nvmequeues0.ram[3][96] top.test.nvmequeues0.ram[3][95] top.test.nvmequeues0.ram[3][94] top.test.nvmequeues0.ram[3][93] top.test.nvmequeues0.ram[3][92] top.test.nvmequeues0.ram[3][91] top.test.nvmequeues0.ram[3][90] top.test.nvmequeues0.ram[3][89] top.test.nvmequeues0.ram[3][88] top.test.nvmequeues0.ram[3][87] top.test.nvmequeues0.ram[3][86] top.test.nvmequeues0.ram[3][85] top.test.nvmequeues0.ram[3][84] top.test.nvmequeues0.ram[3][83] top.test.nvmequeues0.ram[3][82] top.test.nvmequeues0.ram[3][81] top.test.nvmequeues0.ram[3][80] top.test.nvmequeues0.ram[3][79] top.test.nvmequeues0.ram[3][78] top.test.nvmequeues0.ram[3][77] top.test.nvmequeues0.ram[3][76] top.test.nvmequeues0.ram[3][75] top.test.nvmequeues0.ram[3][74] top.test.nvmequeues0.ram[3][73] top.test.nvmequeues0.ram[3][72] top.test.nvmequeues0.ram[3][71] top.test.nvmequeues0.ram[3][70] top.test.nvmequeues0.ram[3][69] top.test.nvmequeues0.ram[3][68] top.test.nvmequeues0.ram[3][67] top.test.nvmequeues0.ram[3][66] top.test.nvmequeues0.ram[3][65] top.test.nvmequeues0.ram[3][64] top.test.nvmequeues0.ram[3][63] top.test.nvmequeues0.ram[3][62] top.test.nvmequeues0.ram[3][61] top.test.nvmequeues0.ram[3][60] top.test.nvmequeues0.ram[3][59] top.test.nvmequeues0.ram[3][58] top.test.nvmequeues0.ram[3][57] top.test.nvmequeues0.ram[3][56] top.test.nvmequeues0.ram[3][55] top.test.nvmequeues0.ram[3][54] top.test.nvmequeues0.ram[3][53] top.test.nvmequeues0.ram[3][52] top.test.nvmequeues0.ram[3][51] top.test.nvmequeues0.ram[3][50] top.test.nvmequeues0.ram[3][49] top.test.nvmequeues0.ram[3][48] top.test.nvmequeues0.ram[3][47] top.test.nvmequeues0.ram[3][46] top.test.nvmequeues0.ram[3][45] top.test.nvmequeues0.ram[3][44] top.test.nvmequeues0.ram[3][43] top.test.nvmequeues0.ram[3][42] top.test.nvmequeues0.ram[3][41] top.test.nvmequeues0.ram[3][40] top.test.nvmequeues0.ram[3][39] top.test.nvmequeues0.ram[3][38] top.test.nvmequeues0.ram[3][37] top.test.nvmequeues0.ram[3][36] top.test.nvmequeues0.ram[3][35] top.test.nvmequeues0.ram[3][34] top.test.nvmequeues0.ram[3][33] top.test.nvmequeues0.ram[3][32] top.test.nvmequeues0.ram[3][31] top.test.nvmequeues0.ram[3][30] top.test.nvmequeues0.ram[3][29] top.test.nvmequeues0.ram[3][28] top.test.nvmequeues0.ram[3][27] top.test.nvmequeues0.ram[3][26] top.test.nvmequeues0.ram[3][25] top.test.nvmequeues0.ram[3][24] top.test.nvmequeues0.ram[3][23] top.test.nvmequeues0.ram[3][22] top.test.nvmequeues0.ram[3][21] top.test.nvmequeues0.ram[3][20] top.test.nvmequeues0.ram[3][19] top.test.nvmequeues0.ram[3][18] top.test.nvmequeues0.ram[3][17] top.test.nvmequeues0.ram[3][16] top.test.nvmequeues0.ram[3][15] top.test.nvmequeues0.ram[3][14] top.test.nvmequeues0.ram[3][13] top.test.nvmequeues0.ram[3][12] top.test.nvmequeues0.ram[3][11] top.test.nvmequeues0.ram[3][10] top.test.nvmequeues0.ram[3][9] top.test.nvmequeues0.ram[3][8] top.test.nvmequeues0.ram[3][7] top.test.nvmequeues0.ram[3][6] top.test.nvmequeues0.ram[3][5] top.test.nvmequeues0.ram[3][4] top.test.nvmequeues0.ram[3][3] top.test.nvmequeues0.ram[3][2] top.test.nvmequeues0.ram[3][1] top.test.nvmequeues0.ram[3][0]
+#{top.test.nvmequeues0.ram[4][127:0]} top.test.nvmequeues0.ram[4][127] top.test.nvmequeues0.ram[4][126] top.test.nvmequeues0.ram[4][125] top.test.nvmequeues0.ram[4][124] top.test.nvmequeues0.ram[4][123] top.test.nvmequeues0.ram[4][122] top.test.nvmequeues0.ram[4][121] top.test.nvmequeues0.ram[4][120] top.test.nvmequeues0.ram[4][119] top.test.nvmequeues0.ram[4][118] top.test.nvmequeues0.ram[4][117] top.test.nvmequeues0.ram[4][116] top.test.nvmequeues0.ram[4][115] top.test.nvmequeues0.ram[4][114] top.test.nvmequeues0.ram[4][113] top.test.nvmequeues0.ram[4][112] top.test.nvmequeues0.ram[4][111] top.test.nvmequeues0.ram[4][110] top.test.nvmequeues0.ram[4][109] top.test.nvmequeues0.ram[4][108] top.test.nvmequeues0.ram[4][107] top.test.nvmequeues0.ram[4][106] top.test.nvmequeues0.ram[4][105] top.test.nvmequeues0.ram[4][104] top.test.nvmequeues0.ram[4][103] top.test.nvmequeues0.ram[4][102] top.test.nvmequeues0.ram[4][101] top.test.nvmequeues0.ram[4][100] top.test.nvmequeues0.ram[4][99] top.test.nvmequeues0.ram[4][98] top.test.nvmequeues0.ram[4][97] top.test.nvmequeues0.ram[4][96] top.test.nvmequeues0.ram[4][95] top.test.nvmequeues0.ram[4][94] top.test.nvmequeues0.ram[4][93] top.test.nvmequeues0.ram[4][92] top.test.nvmequeues0.ram[4][91] top.test.nvmequeues0.ram[4][90] top.test.nvmequeues0.ram[4][89] top.test.nvmequeues0.ram[4][88] top.test.nvmequeues0.ram[4][87] top.test.nvmequeues0.ram[4][86] top.test.nvmequeues0.ram[4][85] top.test.nvmequeues0.ram[4][84] top.test.nvmequeues0.ram[4][83] top.test.nvmequeues0.ram[4][82] top.test.nvmequeues0.ram[4][81] top.test.nvmequeues0.ram[4][80] top.test.nvmequeues0.ram[4][79] top.test.nvmequeues0.ram[4][78] top.test.nvmequeues0.ram[4][77] top.test.nvmequeues0.ram[4][76] top.test.nvmequeues0.ram[4][75] top.test.nvmequeues0.ram[4][74] top.test.nvmequeues0.ram[4][73] top.test.nvmequeues0.ram[4][72] top.test.nvmequeues0.ram[4][71] top.test.nvmequeues0.ram[4][70] top.test.nvmequeues0.ram[4][69] top.test.nvmequeues0.ram[4][68] top.test.nvmequeues0.ram[4][67] top.test.nvmequeues0.ram[4][66] top.test.nvmequeues0.ram[4][65] top.test.nvmequeues0.ram[4][64] top.test.nvmequeues0.ram[4][63] top.test.nvmequeues0.ram[4][62] top.test.nvmequeues0.ram[4][61] top.test.nvmequeues0.ram[4][60] top.test.nvmequeues0.ram[4][59] top.test.nvmequeues0.ram[4][58] top.test.nvmequeues0.ram[4][57] top.test.nvmequeues0.ram[4][56] top.test.nvmequeues0.ram[4][55] top.test.nvmequeues0.ram[4][54] top.test.nvmequeues0.ram[4][53] top.test.nvmequeues0.ram[4][52] top.test.nvmequeues0.ram[4][51] top.test.nvmequeues0.ram[4][50] top.test.nvmequeues0.ram[4][49] top.test.nvmequeues0.ram[4][48] top.test.nvmequeues0.ram[4][47] top.test.nvmequeues0.ram[4][46] top.test.nvmequeues0.ram[4][45] top.test.nvmequeues0.ram[4][44] top.test.nvmequeues0.ram[4][43] top.test.nvmequeues0.ram[4][42] top.test.nvmequeues0.ram[4][41] top.test.nvmequeues0.ram[4][40] top.test.nvmequeues0.ram[4][39] top.test.nvmequeues0.ram[4][38] top.test.nvmequeues0.ram[4][37] top.test.nvmequeues0.ram[4][36] top.test.nvmequeues0.ram[4][35] top.test.nvmequeues0.ram[4][34] top.test.nvmequeues0.ram[4][33] top.test.nvmequeues0.ram[4][32] top.test.nvmequeues0.ram[4][31] top.test.nvmequeues0.ram[4][30] top.test.nvmequeues0.ram[4][29] top.test.nvmequeues0.ram[4][28] top.test.nvmequeues0.ram[4][27] top.test.nvmequeues0.ram[4][26] top.test.nvmequeues0.ram[4][25] top.test.nvmequeues0.ram[4][24] top.test.nvmequeues0.ram[4][23] top.test.nvmequeues0.ram[4][22] top.test.nvmequeues0.ram[4][21] top.test.nvmequeues0.ram[4][20] top.test.nvmequeues0.ram[4][19] top.test.nvmequeues0.ram[4][18] top.test.nvmequeues0.ram[4][17] top.test.nvmequeues0.ram[4][16] top.test.nvmequeues0.ram[4][15] top.test.nvmequeues0.ram[4][14] top.test.nvmequeues0.ram[4][13] top.test.nvmequeues0.ram[4][12] top.test.nvmequeues0.ram[4][11] top.test.nvmequeues0.ram[4][10] top.test.nvmequeues0.ram[4][9] top.test.nvmequeues0.ram[4][8] top.test.nvmequeues0.ram[4][7] top.test.nvmequeues0.ram[4][6] top.test.nvmequeues0.ram[4][5] top.test.nvmequeues0.ram[4][4] top.test.nvmequeues0.ram[4][3] top.test.nvmequeues0.ram[4][2] top.test.nvmequeues0.ram[4][1] top.test.nvmequeues0.ram[4][0]
+#{top.test.nvmequeues0.ram[5][127:0]} top.test.nvmequeues0.ram[5][127] top.test.nvmequeues0.ram[5][126] top.test.nvmequeues0.ram[5][125] top.test.nvmequeues0.ram[5][124] top.test.nvmequeues0.ram[5][123] top.test.nvmequeues0.ram[5][122] top.test.nvmequeues0.ram[5][121] top.test.nvmequeues0.ram[5][120] top.test.nvmequeues0.ram[5][119] top.test.nvmequeues0.ram[5][118] top.test.nvmequeues0.ram[5][117] top.test.nvmequeues0.ram[5][116] top.test.nvmequeues0.ram[5][115] top.test.nvmequeues0.ram[5][114] top.test.nvmequeues0.ram[5][113] top.test.nvmequeues0.ram[5][112] top.test.nvmequeues0.ram[5][111] top.test.nvmequeues0.ram[5][110] top.test.nvmequeues0.ram[5][109] top.test.nvmequeues0.ram[5][108] top.test.nvmequeues0.ram[5][107] top.test.nvmequeues0.ram[5][106] top.test.nvmequeues0.ram[5][105] top.test.nvmequeues0.ram[5][104] top.test.nvmequeues0.ram[5][103] top.test.nvmequeues0.ram[5][102] top.test.nvmequeues0.ram[5][101] top.test.nvmequeues0.ram[5][100] top.test.nvmequeues0.ram[5][99] top.test.nvmequeues0.ram[5][98] top.test.nvmequeues0.ram[5][97] top.test.nvmequeues0.ram[5][96] top.test.nvmequeues0.ram[5][95] top.test.nvmequeues0.ram[5][94] top.test.nvmequeues0.ram[5][93] top.test.nvmequeues0.ram[5][92] top.test.nvmequeues0.ram[5][91] top.test.nvmequeues0.ram[5][90] top.test.nvmequeues0.ram[5][89] top.test.nvmequeues0.ram[5][88] top.test.nvmequeues0.ram[5][87] top.test.nvmequeues0.ram[5][86] top.test.nvmequeues0.ram[5][85] top.test.nvmequeues0.ram[5][84] top.test.nvmequeues0.ram[5][83] top.test.nvmequeues0.ram[5][82] top.test.nvmequeues0.ram[5][81] top.test.nvmequeues0.ram[5][80] top.test.nvmequeues0.ram[5][79] top.test.nvmequeues0.ram[5][78] top.test.nvmequeues0.ram[5][77] top.test.nvmequeues0.ram[5][76] top.test.nvmequeues0.ram[5][75] top.test.nvmequeues0.ram[5][74] top.test.nvmequeues0.ram[5][73] top.test.nvmequeues0.ram[5][72] top.test.nvmequeues0.ram[5][71] top.test.nvmequeues0.ram[5][70] top.test.nvmequeues0.ram[5][69] top.test.nvmequeues0.ram[5][68] top.test.nvmequeues0.ram[5][67] top.test.nvmequeues0.ram[5][66] top.test.nvmequeues0.ram[5][65] top.test.nvmequeues0.ram[5][64] top.test.nvmequeues0.ram[5][63] top.test.nvmequeues0.ram[5][62] top.test.nvmequeues0.ram[5][61] top.test.nvmequeues0.ram[5][60] top.test.nvmequeues0.ram[5][59] top.test.nvmequeues0.ram[5][58] top.test.nvmequeues0.ram[5][57] top.test.nvmequeues0.ram[5][56] top.test.nvmequeues0.ram[5][55] top.test.nvmequeues0.ram[5][54] top.test.nvmequeues0.ram[5][53] top.test.nvmequeues0.ram[5][52] top.test.nvmequeues0.ram[5][51] top.test.nvmequeues0.ram[5][50] top.test.nvmequeues0.ram[5][49] top.test.nvmequeues0.ram[5][48] top.test.nvmequeues0.ram[5][47] top.test.nvmequeues0.ram[5][46] top.test.nvmequeues0.ram[5][45] top.test.nvmequeues0.ram[5][44] top.test.nvmequeues0.ram[5][43] top.test.nvmequeues0.ram[5][42] top.test.nvmequeues0.ram[5][41] top.test.nvmequeues0.ram[5][40] top.test.nvmequeues0.ram[5][39] top.test.nvmequeues0.ram[5][38] top.test.nvmequeues0.ram[5][37] top.test.nvmequeues0.ram[5][36] top.test.nvmequeues0.ram[5][35] top.test.nvmequeues0.ram[5][34] top.test.nvmequeues0.ram[5][33] top.test.nvmequeues0.ram[5][32] top.test.nvmequeues0.ram[5][31] top.test.nvmequeues0.ram[5][30] top.test.nvmequeues0.ram[5][29] top.test.nvmequeues0.ram[5][28] top.test.nvmequeues0.ram[5][27] top.test.nvmequeues0.ram[5][26] top.test.nvmequeues0.ram[5][25] top.test.nvmequeues0.ram[5][24] top.test.nvmequeues0.ram[5][23] top.test.nvmequeues0.ram[5][22] top.test.nvmequeues0.ram[5][21] top.test.nvmequeues0.ram[5][20] top.test.nvmequeues0.ram[5][19] top.test.nvmequeues0.ram[5][18] top.test.nvmequeues0.ram[5][17] top.test.nvmequeues0.ram[5][16] top.test.nvmequeues0.ram[5][15] top.test.nvmequeues0.ram[5][14] top.test.nvmequeues0.ram[5][13] top.test.nvmequeues0.ram[5][12] top.test.nvmequeues0.ram[5][11] top.test.nvmequeues0.ram[5][10] top.test.nvmequeues0.ram[5][9] top.test.nvmequeues0.ram[5][8] top.test.nvmequeues0.ram[5][7] top.test.nvmequeues0.ram[5][6] top.test.nvmequeues0.ram[5][5] top.test.nvmequeues0.ram[5][4] top.test.nvmequeues0.ram[5][3] top.test.nvmequeues0.ram[5][2] top.test.nvmequeues0.ram[5][1] top.test.nvmequeues0.ram[5][0]
+#{top.test.nvmequeues0.ram[6][127:0]} top.test.nvmequeues0.ram[6][127] top.test.nvmequeues0.ram[6][126] top.test.nvmequeues0.ram[6][125] top.test.nvmequeues0.ram[6][124] top.test.nvmequeues0.ram[6][123] top.test.nvmequeues0.ram[6][122] top.test.nvmequeues0.ram[6][121] top.test.nvmequeues0.ram[6][120] top.test.nvmequeues0.ram[6][119] top.test.nvmequeues0.ram[6][118] top.test.nvmequeues0.ram[6][117] top.test.nvmequeues0.ram[6][116] top.test.nvmequeues0.ram[6][115] top.test.nvmequeues0.ram[6][114] top.test.nvmequeues0.ram[6][113] top.test.nvmequeues0.ram[6][112] top.test.nvmequeues0.ram[6][111] top.test.nvmequeues0.ram[6][110] top.test.nvmequeues0.ram[6][109] top.test.nvmequeues0.ram[6][108] top.test.nvmequeues0.ram[6][107] top.test.nvmequeues0.ram[6][106] top.test.nvmequeues0.ram[6][105] top.test.nvmequeues0.ram[6][104] top.test.nvmequeues0.ram[6][103] top.test.nvmequeues0.ram[6][102] top.test.nvmequeues0.ram[6][101] top.test.nvmequeues0.ram[6][100] top.test.nvmequeues0.ram[6][99] top.test.nvmequeues0.ram[6][98] top.test.nvmequeues0.ram[6][97] top.test.nvmequeues0.ram[6][96] top.test.nvmequeues0.ram[6][95] top.test.nvmequeues0.ram[6][94] top.test.nvmequeues0.ram[6][93] top.test.nvmequeues0.ram[6][92] top.test.nvmequeues0.ram[6][91] top.test.nvmequeues0.ram[6][90] top.test.nvmequeues0.ram[6][89] top.test.nvmequeues0.ram[6][88] top.test.nvmequeues0.ram[6][87] top.test.nvmequeues0.ram[6][86] top.test.nvmequeues0.ram[6][85] top.test.nvmequeues0.ram[6][84] top.test.nvmequeues0.ram[6][83] top.test.nvmequeues0.ram[6][82] top.test.nvmequeues0.ram[6][81] top.test.nvmequeues0.ram[6][80] top.test.nvmequeues0.ram[6][79] top.test.nvmequeues0.ram[6][78] top.test.nvmequeues0.ram[6][77] top.test.nvmequeues0.ram[6][76] top.test.nvmequeues0.ram[6][75] top.test.nvmequeues0.ram[6][74] top.test.nvmequeues0.ram[6][73] top.test.nvmequeues0.ram[6][72] top.test.nvmequeues0.ram[6][71] top.test.nvmequeues0.ram[6][70] top.test.nvmequeues0.ram[6][69] top.test.nvmequeues0.ram[6][68] top.test.nvmequeues0.ram[6][67] top.test.nvmequeues0.ram[6][66] top.test.nvmequeues0.ram[6][65] top.test.nvmequeues0.ram[6][64] top.test.nvmequeues0.ram[6][63] top.test.nvmequeues0.ram[6][62] top.test.nvmequeues0.ram[6][61] top.test.nvmequeues0.ram[6][60] top.test.nvmequeues0.ram[6][59] top.test.nvmequeues0.ram[6][58] top.test.nvmequeues0.ram[6][57] top.test.nvmequeues0.ram[6][56] top.test.nvmequeues0.ram[6][55] top.test.nvmequeues0.ram[6][54] top.test.nvmequeues0.ram[6][53] top.test.nvmequeues0.ram[6][52] top.test.nvmequeues0.ram[6][51] top.test.nvmequeues0.ram[6][50] top.test.nvmequeues0.ram[6][49] top.test.nvmequeues0.ram[6][48] top.test.nvmequeues0.ram[6][47] top.test.nvmequeues0.ram[6][46] top.test.nvmequeues0.ram[6][45] top.test.nvmequeues0.ram[6][44] top.test.nvmequeues0.ram[6][43] top.test.nvmequeues0.ram[6][42] top.test.nvmequeues0.ram[6][41] top.test.nvmequeues0.ram[6][40] top.test.nvmequeues0.ram[6][39] top.test.nvmequeues0.ram[6][38] top.test.nvmequeues0.ram[6][37] top.test.nvmequeues0.ram[6][36] top.test.nvmequeues0.ram[6][35] top.test.nvmequeues0.ram[6][34] top.test.nvmequeues0.ram[6][33] top.test.nvmequeues0.ram[6][32] top.test.nvmequeues0.ram[6][31] top.test.nvmequeues0.ram[6][30] top.test.nvmequeues0.ram[6][29] top.test.nvmequeues0.ram[6][28] top.test.nvmequeues0.ram[6][27] top.test.nvmequeues0.ram[6][26] top.test.nvmequeues0.ram[6][25] top.test.nvmequeues0.ram[6][24] top.test.nvmequeues0.ram[6][23] top.test.nvmequeues0.ram[6][22] top.test.nvmequeues0.ram[6][21] top.test.nvmequeues0.ram[6][20] top.test.nvmequeues0.ram[6][19] top.test.nvmequeues0.ram[6][18] top.test.nvmequeues0.ram[6][17] top.test.nvmequeues0.ram[6][16] top.test.nvmequeues0.ram[6][15] top.test.nvmequeues0.ram[6][14] top.test.nvmequeues0.ram[6][13] top.test.nvmequeues0.ram[6][12] top.test.nvmequeues0.ram[6][11] top.test.nvmequeues0.ram[6][10] top.test.nvmequeues0.ram[6][9] top.test.nvmequeues0.ram[6][8] top.test.nvmequeues0.ram[6][7] top.test.nvmequeues0.ram[6][6] top.test.nvmequeues0.ram[6][5] top.test.nvmequeues0.ram[6][4] top.test.nvmequeues0.ram[6][3] top.test.nvmequeues0.ram[6][2] top.test.nvmequeues0.ram[6][1] top.test.nvmequeues0.ram[6][0]
+#{top.test.nvmequeues0.ram[7][127:0]} top.test.nvmequeues0.ram[7][127] top.test.nvmequeues0.ram[7][126] top.test.nvmequeues0.ram[7][125] top.test.nvmequeues0.ram[7][124] top.test.nvmequeues0.ram[7][123] top.test.nvmequeues0.ram[7][122] top.test.nvmequeues0.ram[7][121] top.test.nvmequeues0.ram[7][120] top.test.nvmequeues0.ram[7][119] top.test.nvmequeues0.ram[7][118] top.test.nvmequeues0.ram[7][117] top.test.nvmequeues0.ram[7][116] top.test.nvmequeues0.ram[7][115] top.test.nvmequeues0.ram[7][114] top.test.nvmequeues0.ram[7][113] top.test.nvmequeues0.ram[7][112] top.test.nvmequeues0.ram[7][111] top.test.nvmequeues0.ram[7][110] top.test.nvmequeues0.ram[7][109] top.test.nvmequeues0.ram[7][108] top.test.nvmequeues0.ram[7][107] top.test.nvmequeues0.ram[7][106] top.test.nvmequeues0.ram[7][105] top.test.nvmequeues0.ram[7][104] top.test.nvmequeues0.ram[7][103] top.test.nvmequeues0.ram[7][102] top.test.nvmequeues0.ram[7][101] top.test.nvmequeues0.ram[7][100] top.test.nvmequeues0.ram[7][99] top.test.nvmequeues0.ram[7][98] top.test.nvmequeues0.ram[7][97] top.test.nvmequeues0.ram[7][96] top.test.nvmequeues0.ram[7][95] top.test.nvmequeues0.ram[7][94] top.test.nvmequeues0.ram[7][93] top.test.nvmequeues0.ram[7][92] top.test.nvmequeues0.ram[7][91] top.test.nvmequeues0.ram[7][90] top.test.nvmequeues0.ram[7][89] top.test.nvmequeues0.ram[7][88] top.test.nvmequeues0.ram[7][87] top.test.nvmequeues0.ram[7][86] top.test.nvmequeues0.ram[7][85] top.test.nvmequeues0.ram[7][84] top.test.nvmequeues0.ram[7][83] top.test.nvmequeues0.ram[7][82] top.test.nvmequeues0.ram[7][81] top.test.nvmequeues0.ram[7][80] top.test.nvmequeues0.ram[7][79] top.test.nvmequeues0.ram[7][78] top.test.nvmequeues0.ram[7][77] top.test.nvmequeues0.ram[7][76] top.test.nvmequeues0.ram[7][75] top.test.nvmequeues0.ram[7][74] top.test.nvmequeues0.ram[7][73] top.test.nvmequeues0.ram[7][72] top.test.nvmequeues0.ram[7][71] top.test.nvmequeues0.ram[7][70] top.test.nvmequeues0.ram[7][69] top.test.nvmequeues0.ram[7][68] top.test.nvmequeues0.ram[7][67] top.test.nvmequeues0.ram[7][66] top.test.nvmequeues0.ram[7][65] top.test.nvmequeues0.ram[7][64] top.test.nvmequeues0.ram[7][63] top.test.nvmequeues0.ram[7][62] top.test.nvmequeues0.ram[7][61] top.test.nvmequeues0.ram[7][60] top.test.nvmequeues0.ram[7][59] top.test.nvmequeues0.ram[7][58] top.test.nvmequeues0.ram[7][57] top.test.nvmequeues0.ram[7][56] top.test.nvmequeues0.ram[7][55] top.test.nvmequeues0.ram[7][54] top.test.nvmequeues0.ram[7][53] top.test.nvmequeues0.ram[7][52] top.test.nvmequeues0.ram[7][51] top.test.nvmequeues0.ram[7][50] top.test.nvmequeues0.ram[7][49] top.test.nvmequeues0.ram[7][48] top.test.nvmequeues0.ram[7][47] top.test.nvmequeues0.ram[7][46] top.test.nvmequeues0.ram[7][45] top.test.nvmequeues0.ram[7][44] top.test.nvmequeues0.ram[7][43] top.test.nvmequeues0.ram[7][42] top.test.nvmequeues0.ram[7][41] top.test.nvmequeues0.ram[7][40] top.test.nvmequeues0.ram[7][39] top.test.nvmequeues0.ram[7][38] top.test.nvmequeues0.ram[7][37] top.test.nvmequeues0.ram[7][36] top.test.nvmequeues0.ram[7][35] top.test.nvmequeues0.ram[7][34] top.test.nvmequeues0.ram[7][33] top.test.nvmequeues0.ram[7][32] top.test.nvmequeues0.ram[7][31] top.test.nvmequeues0.ram[7][30] top.test.nvmequeues0.ram[7][29] top.test.nvmequeues0.ram[7][28] top.test.nvmequeues0.ram[7][27] top.test.nvmequeues0.ram[7][26] top.test.nvmequeues0.ram[7][25] top.test.nvmequeues0.ram[7][24] top.test.nvmequeues0.ram[7][23] top.test.nvmequeues0.ram[7][22] top.test.nvmequeues0.ram[7][21] top.test.nvmequeues0.ram[7][20] top.test.nvmequeues0.ram[7][19] top.test.nvmequeues0.ram[7][18] top.test.nvmequeues0.ram[7][17] top.test.nvmequeues0.ram[7][16] top.test.nvmequeues0.ram[7][15] top.test.nvmequeues0.ram[7][14] top.test.nvmequeues0.ram[7][13] top.test.nvmequeues0.ram[7][12] top.test.nvmequeues0.ram[7][11] top.test.nvmequeues0.ram[7][10] top.test.nvmequeues0.ram[7][9] top.test.nvmequeues0.ram[7][8] top.test.nvmequeues0.ram[7][7] top.test.nvmequeues0.ram[7][6] top.test.nvmequeues0.ram[7][5] top.test.nvmequeues0.ram[7][4] top.test.nvmequeues0.ram[7][3] top.test.nvmequeues0.ram[7][2] top.test.nvmequeues0.ram[7][1] top.test.nvmequeues0.ram[7][0]
+#{top.test.nvmequeues0.ram[8][127:0]} top.test.nvmequeues0.ram[8][127] top.test.nvmequeues0.ram[8][126] top.test.nvmequeues0.ram[8][125] top.test.nvmequeues0.ram[8][124] top.test.nvmequeues0.ram[8][123] top.test.nvmequeues0.ram[8][122] top.test.nvmequeues0.ram[8][121] top.test.nvmequeues0.ram[8][120] top.test.nvmequeues0.ram[8][119] top.test.nvmequeues0.ram[8][118] top.test.nvmequeues0.ram[8][117] top.test.nvmequeues0.ram[8][116] top.test.nvmequeues0.ram[8][115] top.test.nvmequeues0.ram[8][114] top.test.nvmequeues0.ram[8][113] top.test.nvmequeues0.ram[8][112] top.test.nvmequeues0.ram[8][111] top.test.nvmequeues0.ram[8][110] top.test.nvmequeues0.ram[8][109] top.test.nvmequeues0.ram[8][108] top.test.nvmequeues0.ram[8][107] top.test.nvmequeues0.ram[8][106] top.test.nvmequeues0.ram[8][105] top.test.nvmequeues0.ram[8][104] top.test.nvmequeues0.ram[8][103] top.test.nvmequeues0.ram[8][102] top.test.nvmequeues0.ram[8][101] top.test.nvmequeues0.ram[8][100] top.test.nvmequeues0.ram[8][99] top.test.nvmequeues0.ram[8][98] top.test.nvmequeues0.ram[8][97] top.test.nvmequeues0.ram[8][96] top.test.nvmequeues0.ram[8][95] top.test.nvmequeues0.ram[8][94] top.test.nvmequeues0.ram[8][93] top.test.nvmequeues0.ram[8][92] top.test.nvmequeues0.ram[8][91] top.test.nvmequeues0.ram[8][90] top.test.nvmequeues0.ram[8][89] top.test.nvmequeues0.ram[8][88] top.test.nvmequeues0.ram[8][87] top.test.nvmequeues0.ram[8][86] top.test.nvmequeues0.ram[8][85] top.test.nvmequeues0.ram[8][84] top.test.nvmequeues0.ram[8][83] top.test.nvmequeues0.ram[8][82] top.test.nvmequeues0.ram[8][81] top.test.nvmequeues0.ram[8][80] top.test.nvmequeues0.ram[8][79] top.test.nvmequeues0.ram[8][78] top.test.nvmequeues0.ram[8][77] top.test.nvmequeues0.ram[8][76] top.test.nvmequeues0.ram[8][75] top.test.nvmequeues0.ram[8][74] top.test.nvmequeues0.ram[8][73] top.test.nvmequeues0.ram[8][72] top.test.nvmequeues0.ram[8][71] top.test.nvmequeues0.ram[8][70] top.test.nvmequeues0.ram[8][69] top.test.nvmequeues0.ram[8][68] top.test.nvmequeues0.ram[8][67] top.test.nvmequeues0.ram[8][66] top.test.nvmequeues0.ram[8][65] top.test.nvmequeues0.ram[8][64] top.test.nvmequeues0.ram[8][63] top.test.nvmequeues0.ram[8][62] top.test.nvmequeues0.ram[8][61] top.test.nvmequeues0.ram[8][60] top.test.nvmequeues0.ram[8][59] top.test.nvmequeues0.ram[8][58] top.test.nvmequeues0.ram[8][57] top.test.nvmequeues0.ram[8][56] top.test.nvmequeues0.ram[8][55] top.test.nvmequeues0.ram[8][54] top.test.nvmequeues0.ram[8][53] top.test.nvmequeues0.ram[8][52] top.test.nvmequeues0.ram[8][51] top.test.nvmequeues0.ram[8][50] top.test.nvmequeues0.ram[8][49] top.test.nvmequeues0.ram[8][48] top.test.nvmequeues0.ram[8][47] top.test.nvmequeues0.ram[8][46] top.test.nvmequeues0.ram[8][45] top.test.nvmequeues0.ram[8][44] top.test.nvmequeues0.ram[8][43] top.test.nvmequeues0.ram[8][42] top.test.nvmequeues0.ram[8][41] top.test.nvmequeues0.ram[8][40] top.test.nvmequeues0.ram[8][39] top.test.nvmequeues0.ram[8][38] top.test.nvmequeues0.ram[8][37] top.test.nvmequeues0.ram[8][36] top.test.nvmequeues0.ram[8][35] top.test.nvmequeues0.ram[8][34] top.test.nvmequeues0.ram[8][33] top.test.nvmequeues0.ram[8][32] top.test.nvmequeues0.ram[8][31] top.test.nvmequeues0.ram[8][30] top.test.nvmequeues0.ram[8][29] top.test.nvmequeues0.ram[8][28] top.test.nvmequeues0.ram[8][27] top.test.nvmequeues0.ram[8][26] top.test.nvmequeues0.ram[8][25] top.test.nvmequeues0.ram[8][24] top.test.nvmequeues0.ram[8][23] top.test.nvmequeues0.ram[8][22] top.test.nvmequeues0.ram[8][21] top.test.nvmequeues0.ram[8][20] top.test.nvmequeues0.ram[8][19] top.test.nvmequeues0.ram[8][18] top.test.nvmequeues0.ram[8][17] top.test.nvmequeues0.ram[8][16] top.test.nvmequeues0.ram[8][15] top.test.nvmequeues0.ram[8][14] top.test.nvmequeues0.ram[8][13] top.test.nvmequeues0.ram[8][12] top.test.nvmequeues0.ram[8][11] top.test.nvmequeues0.ram[8][10] top.test.nvmequeues0.ram[8][9] top.test.nvmequeues0.ram[8][8] top.test.nvmequeues0.ram[8][7] top.test.nvmequeues0.ram[8][6] top.test.nvmequeues0.ram[8][5] top.test.nvmequeues0.ram[8][4] top.test.nvmequeues0.ram[8][3] top.test.nvmequeues0.ram[8][2] top.test.nvmequeues0.ram[8][1] top.test.nvmequeues0.ram[8][0]
+#{top.test.nvmequeues0.ram[9][127:0]} top.test.nvmequeues0.ram[9][127] top.test.nvmequeues0.ram[9][126] top.test.nvmequeues0.ram[9][125] top.test.nvmequeues0.ram[9][124] top.test.nvmequeues0.ram[9][123] top.test.nvmequeues0.ram[9][122] top.test.nvmequeues0.ram[9][121] top.test.nvmequeues0.ram[9][120] top.test.nvmequeues0.ram[9][119] top.test.nvmequeues0.ram[9][118] top.test.nvmequeues0.ram[9][117] top.test.nvmequeues0.ram[9][116] top.test.nvmequeues0.ram[9][115] top.test.nvmequeues0.ram[9][114] top.test.nvmequeues0.ram[9][113] top.test.nvmequeues0.ram[9][112] top.test.nvmequeues0.ram[9][111] top.test.nvmequeues0.ram[9][110] top.test.nvmequeues0.ram[9][109] top.test.nvmequeues0.ram[9][108] top.test.nvmequeues0.ram[9][107] top.test.nvmequeues0.ram[9][106] top.test.nvmequeues0.ram[9][105] top.test.nvmequeues0.ram[9][104] top.test.nvmequeues0.ram[9][103] top.test.nvmequeues0.ram[9][102] top.test.nvmequeues0.ram[9][101] top.test.nvmequeues0.ram[9][100] top.test.nvmequeues0.ram[9][99] top.test.nvmequeues0.ram[9][98] top.test.nvmequeues0.ram[9][97] top.test.nvmequeues0.ram[9][96] top.test.nvmequeues0.ram[9][95] top.test.nvmequeues0.ram[9][94] top.test.nvmequeues0.ram[9][93] top.test.nvmequeues0.ram[9][92] top.test.nvmequeues0.ram[9][91] top.test.nvmequeues0.ram[9][90] top.test.nvmequeues0.ram[9][89] top.test.nvmequeues0.ram[9][88] top.test.nvmequeues0.ram[9][87] top.test.nvmequeues0.ram[9][86] top.test.nvmequeues0.ram[9][85] top.test.nvmequeues0.ram[9][84] top.test.nvmequeues0.ram[9][83] top.test.nvmequeues0.ram[9][82] top.test.nvmequeues0.ram[9][81] top.test.nvmequeues0.ram[9][80] top.test.nvmequeues0.ram[9][79] top.test.nvmequeues0.ram[9][78] top.test.nvmequeues0.ram[9][77] top.test.nvmequeues0.ram[9][76] top.test.nvmequeues0.ram[9][75] top.test.nvmequeues0.ram[9][74] top.test.nvmequeues0.ram[9][73] top.test.nvmequeues0.ram[9][72] top.test.nvmequeues0.ram[9][71] top.test.nvmequeues0.ram[9][70] top.test.nvmequeues0.ram[9][69] top.test.nvmequeues0.ram[9][68] top.test.nvmequeues0.ram[9][67] top.test.nvmequeues0.ram[9][66] top.test.nvmequeues0.ram[9][65] top.test.nvmequeues0.ram[9][64] top.test.nvmequeues0.ram[9][63] top.test.nvmequeues0.ram[9][62] top.test.nvmequeues0.ram[9][61] top.test.nvmequeues0.ram[9][60] top.test.nvmequeues0.ram[9][59] top.test.nvmequeues0.ram[9][58] top.test.nvmequeues0.ram[9][57] top.test.nvmequeues0.ram[9][56] top.test.nvmequeues0.ram[9][55] top.test.nvmequeues0.ram[9][54] top.test.nvmequeues0.ram[9][53] top.test.nvmequeues0.ram[9][52] top.test.nvmequeues0.ram[9][51] top.test.nvmequeues0.ram[9][50] top.test.nvmequeues0.ram[9][49] top.test.nvmequeues0.ram[9][48] top.test.nvmequeues0.ram[9][47] top.test.nvmequeues0.ram[9][46] top.test.nvmequeues0.ram[9][45] top.test.nvmequeues0.ram[9][44] top.test.nvmequeues0.ram[9][43] top.test.nvmequeues0.ram[9][42] top.test.nvmequeues0.ram[9][41] top.test.nvmequeues0.ram[9][40] top.test.nvmequeues0.ram[9][39] top.test.nvmequeues0.ram[9][38] top.test.nvmequeues0.ram[9][37] top.test.nvmequeues0.ram[9][36] top.test.nvmequeues0.ram[9][35] top.test.nvmequeues0.ram[9][34] top.test.nvmequeues0.ram[9][33] top.test.nvmequeues0.ram[9][32] top.test.nvmequeues0.ram[9][31] top.test.nvmequeues0.ram[9][30] top.test.nvmequeues0.ram[9][29] top.test.nvmequeues0.ram[9][28] top.test.nvmequeues0.ram[9][27] top.test.nvmequeues0.ram[9][26] top.test.nvmequeues0.ram[9][25] top.test.nvmequeues0.ram[9][24] top.test.nvmequeues0.ram[9][23] top.test.nvmequeues0.ram[9][22] top.test.nvmequeues0.ram[9][21] top.test.nvmequeues0.ram[9][20] top.test.nvmequeues0.ram[9][19] top.test.nvmequeues0.ram[9][18] top.test.nvmequeues0.ram[9][17] top.test.nvmequeues0.ram[9][16] top.test.nvmequeues0.ram[9][15] top.test.nvmequeues0.ram[9][14] top.test.nvmequeues0.ram[9][13] top.test.nvmequeues0.ram[9][12] top.test.nvmequeues0.ram[9][11] top.test.nvmequeues0.ram[9][10] top.test.nvmequeues0.ram[9][9] top.test.nvmequeues0.ram[9][8] top.test.nvmequeues0.ram[9][7] top.test.nvmequeues0.ram[9][6] top.test.nvmequeues0.ram[9][5] top.test.nvmequeues0.ram[9][4] top.test.nvmequeues0.ram[9][3] top.test.nvmequeues0.ram[9][2] top.test.nvmequeues0.ram[9][1] top.test.nvmequeues0.ram[9][0]
+#{top.test.nvmequeues0.ram[10][127:0]} top.test.nvmequeues0.ram[10][127] top.test.nvmequeues0.ram[10][126] top.test.nvmequeues0.ram[10][125] top.test.nvmequeues0.ram[10][124] top.test.nvmequeues0.ram[10][123] top.test.nvmequeues0.ram[10][122] top.test.nvmequeues0.ram[10][121] top.test.nvmequeues0.ram[10][120] top.test.nvmequeues0.ram[10][119] top.test.nvmequeues0.ram[10][118] top.test.nvmequeues0.ram[10][117] top.test.nvmequeues0.ram[10][116] top.test.nvmequeues0.ram[10][115] top.test.nvmequeues0.ram[10][114] top.test.nvmequeues0.ram[10][113] top.test.nvmequeues0.ram[10][112] top.test.nvmequeues0.ram[10][111] top.test.nvmequeues0.ram[10][110] top.test.nvmequeues0.ram[10][109] top.test.nvmequeues0.ram[10][108] top.test.nvmequeues0.ram[10][107] top.test.nvmequeues0.ram[10][106] top.test.nvmequeues0.ram[10][105] top.test.nvmequeues0.ram[10][104] top.test.nvmequeues0.ram[10][103] top.test.nvmequeues0.ram[10][102] top.test.nvmequeues0.ram[10][101] top.test.nvmequeues0.ram[10][100] top.test.nvmequeues0.ram[10][99] top.test.nvmequeues0.ram[10][98] top.test.nvmequeues0.ram[10][97] top.test.nvmequeues0.ram[10][96] top.test.nvmequeues0.ram[10][95] top.test.nvmequeues0.ram[10][94] top.test.nvmequeues0.ram[10][93] top.test.nvmequeues0.ram[10][92] top.test.nvmequeues0.ram[10][91] top.test.nvmequeues0.ram[10][90] top.test.nvmequeues0.ram[10][89] top.test.nvmequeues0.ram[10][88] top.test.nvmequeues0.ram[10][87] top.test.nvmequeues0.ram[10][86] top.test.nvmequeues0.ram[10][85] top.test.nvmequeues0.ram[10][84] top.test.nvmequeues0.ram[10][83] top.test.nvmequeues0.ram[10][82] top.test.nvmequeues0.ram[10][81] top.test.nvmequeues0.ram[10][80] top.test.nvmequeues0.ram[10][79] top.test.nvmequeues0.ram[10][78] top.test.nvmequeues0.ram[10][77] top.test.nvmequeues0.ram[10][76] top.test.nvmequeues0.ram[10][75] top.test.nvmequeues0.ram[10][74] top.test.nvmequeues0.ram[10][73] top.test.nvmequeues0.ram[10][72] top.test.nvmequeues0.ram[10][71] top.test.nvmequeues0.ram[10][70] top.test.nvmequeues0.ram[10][69] top.test.nvmequeues0.ram[10][68] top.test.nvmequeues0.ram[10][67] top.test.nvmequeues0.ram[10][66] top.test.nvmequeues0.ram[10][65] top.test.nvmequeues0.ram[10][64] top.test.nvmequeues0.ram[10][63] top.test.nvmequeues0.ram[10][62] top.test.nvmequeues0.ram[10][61] top.test.nvmequeues0.ram[10][60] top.test.nvmequeues0.ram[10][59] top.test.nvmequeues0.ram[10][58] top.test.nvmequeues0.ram[10][57] top.test.nvmequeues0.ram[10][56] top.test.nvmequeues0.ram[10][55] top.test.nvmequeues0.ram[10][54] top.test.nvmequeues0.ram[10][53] top.test.nvmequeues0.ram[10][52] top.test.nvmequeues0.ram[10][51] top.test.nvmequeues0.ram[10][50] top.test.nvmequeues0.ram[10][49] top.test.nvmequeues0.ram[10][48] top.test.nvmequeues0.ram[10][47] top.test.nvmequeues0.ram[10][46] top.test.nvmequeues0.ram[10][45] top.test.nvmequeues0.ram[10][44] top.test.nvmequeues0.ram[10][43] top.test.nvmequeues0.ram[10][42] top.test.nvmequeues0.ram[10][41] top.test.nvmequeues0.ram[10][40] top.test.nvmequeues0.ram[10][39] top.test.nvmequeues0.ram[10][38] top.test.nvmequeues0.ram[10][37] top.test.nvmequeues0.ram[10][36] top.test.nvmequeues0.ram[10][35] top.test.nvmequeues0.ram[10][34] top.test.nvmequeues0.ram[10][33] top.test.nvmequeues0.ram[10][32] top.test.nvmequeues0.ram[10][31] top.test.nvmequeues0.ram[10][30] top.test.nvmequeues0.ram[10][29] top.test.nvmequeues0.ram[10][28] top.test.nvmequeues0.ram[10][27] top.test.nvmequeues0.ram[10][26] top.test.nvmequeues0.ram[10][25] top.test.nvmequeues0.ram[10][24] top.test.nvmequeues0.ram[10][23] top.test.nvmequeues0.ram[10][22] top.test.nvmequeues0.ram[10][21] top.test.nvmequeues0.ram[10][20] top.test.nvmequeues0.ram[10][19] top.test.nvmequeues0.ram[10][18] top.test.nvmequeues0.ram[10][17] top.test.nvmequeues0.ram[10][16] top.test.nvmequeues0.ram[10][15] top.test.nvmequeues0.ram[10][14] top.test.nvmequeues0.ram[10][13] top.test.nvmequeues0.ram[10][12] top.test.nvmequeues0.ram[10][11] top.test.nvmequeues0.ram[10][10] top.test.nvmequeues0.ram[10][9] top.test.nvmequeues0.ram[10][8] top.test.nvmequeues0.ram[10][7] top.test.nvmequeues0.ram[10][6] top.test.nvmequeues0.ram[10][5] top.test.nvmequeues0.ram[10][4] top.test.nvmequeues0.ram[10][3] top.test.nvmequeues0.ram[10][2] top.test.nvmequeues0.ram[10][1] top.test.nvmequeues0.ram[10][0]
+#{top.test.nvmequeues0.ram[11][127:0]} top.test.nvmequeues0.ram[11][127] top.test.nvmequeues0.ram[11][126] top.test.nvmequeues0.ram[11][125] top.test.nvmequeues0.ram[11][124] top.test.nvmequeues0.ram[11][123] top.test.nvmequeues0.ram[11][122] top.test.nvmequeues0.ram[11][121] top.test.nvmequeues0.ram[11][120] top.test.nvmequeues0.ram[11][119] top.test.nvmequeues0.ram[11][118] top.test.nvmequeues0.ram[11][117] top.test.nvmequeues0.ram[11][116] top.test.nvmequeues0.ram[11][115] top.test.nvmequeues0.ram[11][114] top.test.nvmequeues0.ram[11][113] top.test.nvmequeues0.ram[11][112] top.test.nvmequeues0.ram[11][111] top.test.nvmequeues0.ram[11][110] top.test.nvmequeues0.ram[11][109] top.test.nvmequeues0.ram[11][108] top.test.nvmequeues0.ram[11][107] top.test.nvmequeues0.ram[11][106] top.test.nvmequeues0.ram[11][105] top.test.nvmequeues0.ram[11][104] top.test.nvmequeues0.ram[11][103] top.test.nvmequeues0.ram[11][102] top.test.nvmequeues0.ram[11][101] top.test.nvmequeues0.ram[11][100] top.test.nvmequeues0.ram[11][99] top.test.nvmequeues0.ram[11][98] top.test.nvmequeues0.ram[11][97] top.test.nvmequeues0.ram[11][96] top.test.nvmequeues0.ram[11][95] top.test.nvmequeues0.ram[11][94] top.test.nvmequeues0.ram[11][93] top.test.nvmequeues0.ram[11][92] top.test.nvmequeues0.ram[11][91] top.test.nvmequeues0.ram[11][90] top.test.nvmequeues0.ram[11][89] top.test.nvmequeues0.ram[11][88] top.test.nvmequeues0.ram[11][87] top.test.nvmequeues0.ram[11][86] top.test.nvmequeues0.ram[11][85] top.test.nvmequeues0.ram[11][84] top.test.nvmequeues0.ram[11][83] top.test.nvmequeues0.ram[11][82] top.test.nvmequeues0.ram[11][81] top.test.nvmequeues0.ram[11][80] top.test.nvmequeues0.ram[11][79] top.test.nvmequeues0.ram[11][78] top.test.nvmequeues0.ram[11][77] top.test.nvmequeues0.ram[11][76] top.test.nvmequeues0.ram[11][75] top.test.nvmequeues0.ram[11][74] top.test.nvmequeues0.ram[11][73] top.test.nvmequeues0.ram[11][72] top.test.nvmequeues0.ram[11][71] top.test.nvmequeues0.ram[11][70] top.test.nvmequeues0.ram[11][69] top.test.nvmequeues0.ram[11][68] top.test.nvmequeues0.ram[11][67] top.test.nvmequeues0.ram[11][66] top.test.nvmequeues0.ram[11][65] top.test.nvmequeues0.ram[11][64] top.test.nvmequeues0.ram[11][63] top.test.nvmequeues0.ram[11][62] top.test.nvmequeues0.ram[11][61] top.test.nvmequeues0.ram[11][60] top.test.nvmequeues0.ram[11][59] top.test.nvmequeues0.ram[11][58] top.test.nvmequeues0.ram[11][57] top.test.nvmequeues0.ram[11][56] top.test.nvmequeues0.ram[11][55] top.test.nvmequeues0.ram[11][54] top.test.nvmequeues0.ram[11][53] top.test.nvmequeues0.ram[11][52] top.test.nvmequeues0.ram[11][51] top.test.nvmequeues0.ram[11][50] top.test.nvmequeues0.ram[11][49] top.test.nvmequeues0.ram[11][48] top.test.nvmequeues0.ram[11][47] top.test.nvmequeues0.ram[11][46] top.test.nvmequeues0.ram[11][45] top.test.nvmequeues0.ram[11][44] top.test.nvmequeues0.ram[11][43] top.test.nvmequeues0.ram[11][42] top.test.nvmequeues0.ram[11][41] top.test.nvmequeues0.ram[11][40] top.test.nvmequeues0.ram[11][39] top.test.nvmequeues0.ram[11][38] top.test.nvmequeues0.ram[11][37] top.test.nvmequeues0.ram[11][36] top.test.nvmequeues0.ram[11][35] top.test.nvmequeues0.ram[11][34] top.test.nvmequeues0.ram[11][33] top.test.nvmequeues0.ram[11][32] top.test.nvmequeues0.ram[11][31] top.test.nvmequeues0.ram[11][30] top.test.nvmequeues0.ram[11][29] top.test.nvmequeues0.ram[11][28] top.test.nvmequeues0.ram[11][27] top.test.nvmequeues0.ram[11][26] top.test.nvmequeues0.ram[11][25] top.test.nvmequeues0.ram[11][24] top.test.nvmequeues0.ram[11][23] top.test.nvmequeues0.ram[11][22] top.test.nvmequeues0.ram[11][21] top.test.nvmequeues0.ram[11][20] top.test.nvmequeues0.ram[11][19] top.test.nvmequeues0.ram[11][18] top.test.nvmequeues0.ram[11][17] top.test.nvmequeues0.ram[11][16] top.test.nvmequeues0.ram[11][15] top.test.nvmequeues0.ram[11][14] top.test.nvmequeues0.ram[11][13] top.test.nvmequeues0.ram[11][12] top.test.nvmequeues0.ram[11][11] top.test.nvmequeues0.ram[11][10] top.test.nvmequeues0.ram[11][9] top.test.nvmequeues0.ram[11][8] top.test.nvmequeues0.ram[11][7] top.test.nvmequeues0.ram[11][6] top.test.nvmequeues0.ram[11][5] top.test.nvmequeues0.ram[11][4] top.test.nvmequeues0.ram[11][3] top.test.nvmequeues0.ram[11][2] top.test.nvmequeues0.ram[11][1] top.test.nvmequeues0.ram[11][0]
+#{top.test.nvmequeues0.ram[12][127:0]} top.test.nvmequeues0.ram[12][127] top.test.nvmequeues0.ram[12][126] top.test.nvmequeues0.ram[12][125] top.test.nvmequeues0.ram[12][124] top.test.nvmequeues0.ram[12][123] top.test.nvmequeues0.ram[12][122] top.test.nvmequeues0.ram[12][121] top.test.nvmequeues0.ram[12][120] top.test.nvmequeues0.ram[12][119] top.test.nvmequeues0.ram[12][118] top.test.nvmequeues0.ram[12][117] top.test.nvmequeues0.ram[12][116] top.test.nvmequeues0.ram[12][115] top.test.nvmequeues0.ram[12][114] top.test.nvmequeues0.ram[12][113] top.test.nvmequeues0.ram[12][112] top.test.nvmequeues0.ram[12][111] top.test.nvmequeues0.ram[12][110] top.test.nvmequeues0.ram[12][109] top.test.nvmequeues0.ram[12][108] top.test.nvmequeues0.ram[12][107] top.test.nvmequeues0.ram[12][106] top.test.nvmequeues0.ram[12][105] top.test.nvmequeues0.ram[12][104] top.test.nvmequeues0.ram[12][103] top.test.nvmequeues0.ram[12][102] top.test.nvmequeues0.ram[12][101] top.test.nvmequeues0.ram[12][100] top.test.nvmequeues0.ram[12][99] top.test.nvmequeues0.ram[12][98] top.test.nvmequeues0.ram[12][97] top.test.nvmequeues0.ram[12][96] top.test.nvmequeues0.ram[12][95] top.test.nvmequeues0.ram[12][94] top.test.nvmequeues0.ram[12][93] top.test.nvmequeues0.ram[12][92] top.test.nvmequeues0.ram[12][91] top.test.nvmequeues0.ram[12][90] top.test.nvmequeues0.ram[12][89] top.test.nvmequeues0.ram[12][88] top.test.nvmequeues0.ram[12][87] top.test.nvmequeues0.ram[12][86] top.test.nvmequeues0.ram[12][85] top.test.nvmequeues0.ram[12][84] top.test.nvmequeues0.ram[12][83] top.test.nvmequeues0.ram[12][82] top.test.nvmequeues0.ram[12][81] top.test.nvmequeues0.ram[12][80] top.test.nvmequeues0.ram[12][79] top.test.nvmequeues0.ram[12][78] top.test.nvmequeues0.ram[12][77] top.test.nvmequeues0.ram[12][76] top.test.nvmequeues0.ram[12][75] top.test.nvmequeues0.ram[12][74] top.test.nvmequeues0.ram[12][73] top.test.nvmequeues0.ram[12][72] top.test.nvmequeues0.ram[12][71] top.test.nvmequeues0.ram[12][70] top.test.nvmequeues0.ram[12][69] top.test.nvmequeues0.ram[12][68] top.test.nvmequeues0.ram[12][67] top.test.nvmequeues0.ram[12][66] top.test.nvmequeues0.ram[12][65] top.test.nvmequeues0.ram[12][64] top.test.nvmequeues0.ram[12][63] top.test.nvmequeues0.ram[12][62] top.test.nvmequeues0.ram[12][61] top.test.nvmequeues0.ram[12][60] top.test.nvmequeues0.ram[12][59] top.test.nvmequeues0.ram[12][58] top.test.nvmequeues0.ram[12][57] top.test.nvmequeues0.ram[12][56] top.test.nvmequeues0.ram[12][55] top.test.nvmequeues0.ram[12][54] top.test.nvmequeues0.ram[12][53] top.test.nvmequeues0.ram[12][52] top.test.nvmequeues0.ram[12][51] top.test.nvmequeues0.ram[12][50] top.test.nvmequeues0.ram[12][49] top.test.nvmequeues0.ram[12][48] top.test.nvmequeues0.ram[12][47] top.test.nvmequeues0.ram[12][46] top.test.nvmequeues0.ram[12][45] top.test.nvmequeues0.ram[12][44] top.test.nvmequeues0.ram[12][43] top.test.nvmequeues0.ram[12][42] top.test.nvmequeues0.ram[12][41] top.test.nvmequeues0.ram[12][40] top.test.nvmequeues0.ram[12][39] top.test.nvmequeues0.ram[12][38] top.test.nvmequeues0.ram[12][37] top.test.nvmequeues0.ram[12][36] top.test.nvmequeues0.ram[12][35] top.test.nvmequeues0.ram[12][34] top.test.nvmequeues0.ram[12][33] top.test.nvmequeues0.ram[12][32] top.test.nvmequeues0.ram[12][31] top.test.nvmequeues0.ram[12][30] top.test.nvmequeues0.ram[12][29] top.test.nvmequeues0.ram[12][28] top.test.nvmequeues0.ram[12][27] top.test.nvmequeues0.ram[12][26] top.test.nvmequeues0.ram[12][25] top.test.nvmequeues0.ram[12][24] top.test.nvmequeues0.ram[12][23] top.test.nvmequeues0.ram[12][22] top.test.nvmequeues0.ram[12][21] top.test.nvmequeues0.ram[12][20] top.test.nvmequeues0.ram[12][19] top.test.nvmequeues0.ram[12][18] top.test.nvmequeues0.ram[12][17] top.test.nvmequeues0.ram[12][16] top.test.nvmequeues0.ram[12][15] top.test.nvmequeues0.ram[12][14] top.test.nvmequeues0.ram[12][13] top.test.nvmequeues0.ram[12][12] top.test.nvmequeues0.ram[12][11] top.test.nvmequeues0.ram[12][10] top.test.nvmequeues0.ram[12][9] top.test.nvmequeues0.ram[12][8] top.test.nvmequeues0.ram[12][7] top.test.nvmequeues0.ram[12][6] top.test.nvmequeues0.ram[12][5] top.test.nvmequeues0.ram[12][4] top.test.nvmequeues0.ram[12][3] top.test.nvmequeues0.ram[12][2] top.test.nvmequeues0.ram[12][1] top.test.nvmequeues0.ram[12][0]
+#{top.test.nvmequeues0.ram[13][127:0]} top.test.nvmequeues0.ram[13][127] top.test.nvmequeues0.ram[13][126] top.test.nvmequeues0.ram[13][125] top.test.nvmequeues0.ram[13][124] top.test.nvmequeues0.ram[13][123] top.test.nvmequeues0.ram[13][122] top.test.nvmequeues0.ram[13][121] top.test.nvmequeues0.ram[13][120] top.test.nvmequeues0.ram[13][119] top.test.nvmequeues0.ram[13][118] top.test.nvmequeues0.ram[13][117] top.test.nvmequeues0.ram[13][116] top.test.nvmequeues0.ram[13][115] top.test.nvmequeues0.ram[13][114] top.test.nvmequeues0.ram[13][113] top.test.nvmequeues0.ram[13][112] top.test.nvmequeues0.ram[13][111] top.test.nvmequeues0.ram[13][110] top.test.nvmequeues0.ram[13][109] top.test.nvmequeues0.ram[13][108] top.test.nvmequeues0.ram[13][107] top.test.nvmequeues0.ram[13][106] top.test.nvmequeues0.ram[13][105] top.test.nvmequeues0.ram[13][104] top.test.nvmequeues0.ram[13][103] top.test.nvmequeues0.ram[13][102] top.test.nvmequeues0.ram[13][101] top.test.nvmequeues0.ram[13][100] top.test.nvmequeues0.ram[13][99] top.test.nvmequeues0.ram[13][98] top.test.nvmequeues0.ram[13][97] top.test.nvmequeues0.ram[13][96] top.test.nvmequeues0.ram[13][95] top.test.nvmequeues0.ram[13][94] top.test.nvmequeues0.ram[13][93] top.test.nvmequeues0.ram[13][92] top.test.nvmequeues0.ram[13][91] top.test.nvmequeues0.ram[13][90] top.test.nvmequeues0.ram[13][89] top.test.nvmequeues0.ram[13][88] top.test.nvmequeues0.ram[13][87] top.test.nvmequeues0.ram[13][86] top.test.nvmequeues0.ram[13][85] top.test.nvmequeues0.ram[13][84] top.test.nvmequeues0.ram[13][83] top.test.nvmequeues0.ram[13][82] top.test.nvmequeues0.ram[13][81] top.test.nvmequeues0.ram[13][80] top.test.nvmequeues0.ram[13][79] top.test.nvmequeues0.ram[13][78] top.test.nvmequeues0.ram[13][77] top.test.nvmequeues0.ram[13][76] top.test.nvmequeues0.ram[13][75] top.test.nvmequeues0.ram[13][74] top.test.nvmequeues0.ram[13][73] top.test.nvmequeues0.ram[13][72] top.test.nvmequeues0.ram[13][71] top.test.nvmequeues0.ram[13][70] top.test.nvmequeues0.ram[13][69] top.test.nvmequeues0.ram[13][68] top.test.nvmequeues0.ram[13][67] top.test.nvmequeues0.ram[13][66] top.test.nvmequeues0.ram[13][65] top.test.nvmequeues0.ram[13][64] top.test.nvmequeues0.ram[13][63] top.test.nvmequeues0.ram[13][62] top.test.nvmequeues0.ram[13][61] top.test.nvmequeues0.ram[13][60] top.test.nvmequeues0.ram[13][59] top.test.nvmequeues0.ram[13][58] top.test.nvmequeues0.ram[13][57] top.test.nvmequeues0.ram[13][56] top.test.nvmequeues0.ram[13][55] top.test.nvmequeues0.ram[13][54] top.test.nvmequeues0.ram[13][53] top.test.nvmequeues0.ram[13][52] top.test.nvmequeues0.ram[13][51] top.test.nvmequeues0.ram[13][50] top.test.nvmequeues0.ram[13][49] top.test.nvmequeues0.ram[13][48] top.test.nvmequeues0.ram[13][47] top.test.nvmequeues0.ram[13][46] top.test.nvmequeues0.ram[13][45] top.test.nvmequeues0.ram[13][44] top.test.nvmequeues0.ram[13][43] top.test.nvmequeues0.ram[13][42] top.test.nvmequeues0.ram[13][41] top.test.nvmequeues0.ram[13][40] top.test.nvmequeues0.ram[13][39] top.test.nvmequeues0.ram[13][38] top.test.nvmequeues0.ram[13][37] top.test.nvmequeues0.ram[13][36] top.test.nvmequeues0.ram[13][35] top.test.nvmequeues0.ram[13][34] top.test.nvmequeues0.ram[13][33] top.test.nvmequeues0.ram[13][32] top.test.nvmequeues0.ram[13][31] top.test.nvmequeues0.ram[13][30] top.test.nvmequeues0.ram[13][29] top.test.nvmequeues0.ram[13][28] top.test.nvmequeues0.ram[13][27] top.test.nvmequeues0.ram[13][26] top.test.nvmequeues0.ram[13][25] top.test.nvmequeues0.ram[13][24] top.test.nvmequeues0.ram[13][23] top.test.nvmequeues0.ram[13][22] top.test.nvmequeues0.ram[13][21] top.test.nvmequeues0.ram[13][20] top.test.nvmequeues0.ram[13][19] top.test.nvmequeues0.ram[13][18] top.test.nvmequeues0.ram[13][17] top.test.nvmequeues0.ram[13][16] top.test.nvmequeues0.ram[13][15] top.test.nvmequeues0.ram[13][14] top.test.nvmequeues0.ram[13][13] top.test.nvmequeues0.ram[13][12] top.test.nvmequeues0.ram[13][11] top.test.nvmequeues0.ram[13][10] top.test.nvmequeues0.ram[13][9] top.test.nvmequeues0.ram[13][8] top.test.nvmequeues0.ram[13][7] top.test.nvmequeues0.ram[13][6] top.test.nvmequeues0.ram[13][5] top.test.nvmequeues0.ram[13][4] top.test.nvmequeues0.ram[13][3] top.test.nvmequeues0.ram[13][2] top.test.nvmequeues0.ram[13][1] top.test.nvmequeues0.ram[13][0]
+#{top.test.nvmequeues0.ram[14][127:0]} top.test.nvmequeues0.ram[14][127] top.test.nvmequeues0.ram[14][126] top.test.nvmequeues0.ram[14][125] top.test.nvmequeues0.ram[14][124] top.test.nvmequeues0.ram[14][123] top.test.nvmequeues0.ram[14][122] top.test.nvmequeues0.ram[14][121] top.test.nvmequeues0.ram[14][120] top.test.nvmequeues0.ram[14][119] top.test.nvmequeues0.ram[14][118] top.test.nvmequeues0.ram[14][117] top.test.nvmequeues0.ram[14][116] top.test.nvmequeues0.ram[14][115] top.test.nvmequeues0.ram[14][114] top.test.nvmequeues0.ram[14][113] top.test.nvmequeues0.ram[14][112] top.test.nvmequeues0.ram[14][111] top.test.nvmequeues0.ram[14][110] top.test.nvmequeues0.ram[14][109] top.test.nvmequeues0.ram[14][108] top.test.nvmequeues0.ram[14][107] top.test.nvmequeues0.ram[14][106] top.test.nvmequeues0.ram[14][105] top.test.nvmequeues0.ram[14][104] top.test.nvmequeues0.ram[14][103] top.test.nvmequeues0.ram[14][102] top.test.nvmequeues0.ram[14][101] top.test.nvmequeues0.ram[14][100] top.test.nvmequeues0.ram[14][99] top.test.nvmequeues0.ram[14][98] top.test.nvmequeues0.ram[14][97] top.test.nvmequeues0.ram[14][96] top.test.nvmequeues0.ram[14][95] top.test.nvmequeues0.ram[14][94] top.test.nvmequeues0.ram[14][93] top.test.nvmequeues0.ram[14][92] top.test.nvmequeues0.ram[14][91] top.test.nvmequeues0.ram[14][90] top.test.nvmequeues0.ram[14][89] top.test.nvmequeues0.ram[14][88] top.test.nvmequeues0.ram[14][87] top.test.nvmequeues0.ram[14][86] top.test.nvmequeues0.ram[14][85] top.test.nvmequeues0.ram[14][84] top.test.nvmequeues0.ram[14][83] top.test.nvmequeues0.ram[14][82] top.test.nvmequeues0.ram[14][81] top.test.nvmequeues0.ram[14][80] top.test.nvmequeues0.ram[14][79] top.test.nvmequeues0.ram[14][78] top.test.nvmequeues0.ram[14][77] top.test.nvmequeues0.ram[14][76] top.test.nvmequeues0.ram[14][75] top.test.nvmequeues0.ram[14][74] top.test.nvmequeues0.ram[14][73] top.test.nvmequeues0.ram[14][72] top.test.nvmequeues0.ram[14][71] top.test.nvmequeues0.ram[14][70] top.test.nvmequeues0.ram[14][69] top.test.nvmequeues0.ram[14][68] top.test.nvmequeues0.ram[14][67] top.test.nvmequeues0.ram[14][66] top.test.nvmequeues0.ram[14][65] top.test.nvmequeues0.ram[14][64] top.test.nvmequeues0.ram[14][63] top.test.nvmequeues0.ram[14][62] top.test.nvmequeues0.ram[14][61] top.test.nvmequeues0.ram[14][60] top.test.nvmequeues0.ram[14][59] top.test.nvmequeues0.ram[14][58] top.test.nvmequeues0.ram[14][57] top.test.nvmequeues0.ram[14][56] top.test.nvmequeues0.ram[14][55] top.test.nvmequeues0.ram[14][54] top.test.nvmequeues0.ram[14][53] top.test.nvmequeues0.ram[14][52] top.test.nvmequeues0.ram[14][51] top.test.nvmequeues0.ram[14][50] top.test.nvmequeues0.ram[14][49] top.test.nvmequeues0.ram[14][48] top.test.nvmequeues0.ram[14][47] top.test.nvmequeues0.ram[14][46] top.test.nvmequeues0.ram[14][45] top.test.nvmequeues0.ram[14][44] top.test.nvmequeues0.ram[14][43] top.test.nvmequeues0.ram[14][42] top.test.nvmequeues0.ram[14][41] top.test.nvmequeues0.ram[14][40] top.test.nvmequeues0.ram[14][39] top.test.nvmequeues0.ram[14][38] top.test.nvmequeues0.ram[14][37] top.test.nvmequeues0.ram[14][36] top.test.nvmequeues0.ram[14][35] top.test.nvmequeues0.ram[14][34] top.test.nvmequeues0.ram[14][33] top.test.nvmequeues0.ram[14][32] top.test.nvmequeues0.ram[14][31] top.test.nvmequeues0.ram[14][30] top.test.nvmequeues0.ram[14][29] top.test.nvmequeues0.ram[14][28] top.test.nvmequeues0.ram[14][27] top.test.nvmequeues0.ram[14][26] top.test.nvmequeues0.ram[14][25] top.test.nvmequeues0.ram[14][24] top.test.nvmequeues0.ram[14][23] top.test.nvmequeues0.ram[14][22] top.test.nvmequeues0.ram[14][21] top.test.nvmequeues0.ram[14][20] top.test.nvmequeues0.ram[14][19] top.test.nvmequeues0.ram[14][18] top.test.nvmequeues0.ram[14][17] top.test.nvmequeues0.ram[14][16] top.test.nvmequeues0.ram[14][15] top.test.nvmequeues0.ram[14][14] top.test.nvmequeues0.ram[14][13] top.test.nvmequeues0.ram[14][12] top.test.nvmequeues0.ram[14][11] top.test.nvmequeues0.ram[14][10] top.test.nvmequeues0.ram[14][9] top.test.nvmequeues0.ram[14][8] top.test.nvmequeues0.ram[14][7] top.test.nvmequeues0.ram[14][6] top.test.nvmequeues0.ram[14][5] top.test.nvmequeues0.ram[14][4] top.test.nvmequeues0.ram[14][3] top.test.nvmequeues0.ram[14][2] top.test.nvmequeues0.ram[14][1] top.test.nvmequeues0.ram[14][0]
+#{top.test.nvmequeues0.ram[15][127:0]} top.test.nvmequeues0.ram[15][127] top.test.nvmequeues0.ram[15][126] top.test.nvmequeues0.ram[15][125] top.test.nvmequeues0.ram[15][124] top.test.nvmequeues0.ram[15][123] top.test.nvmequeues0.ram[15][122] top.test.nvmequeues0.ram[15][121] top.test.nvmequeues0.ram[15][120] top.test.nvmequeues0.ram[15][119] top.test.nvmequeues0.ram[15][118] top.test.nvmequeues0.ram[15][117] top.test.nvmequeues0.ram[15][116] top.test.nvmequeues0.ram[15][115] top.test.nvmequeues0.ram[15][114] top.test.nvmequeues0.ram[15][113] top.test.nvmequeues0.ram[15][112] top.test.nvmequeues0.ram[15][111] top.test.nvmequeues0.ram[15][110] top.test.nvmequeues0.ram[15][109] top.test.nvmequeues0.ram[15][108] top.test.nvmequeues0.ram[15][107] top.test.nvmequeues0.ram[15][106] top.test.nvmequeues0.ram[15][105] top.test.nvmequeues0.ram[15][104] top.test.nvmequeues0.ram[15][103] top.test.nvmequeues0.ram[15][102] top.test.nvmequeues0.ram[15][101] top.test.nvmequeues0.ram[15][100] top.test.nvmequeues0.ram[15][99] top.test.nvmequeues0.ram[15][98] top.test.nvmequeues0.ram[15][97] top.test.nvmequeues0.ram[15][96] top.test.nvmequeues0.ram[15][95] top.test.nvmequeues0.ram[15][94] top.test.nvmequeues0.ram[15][93] top.test.nvmequeues0.ram[15][92] top.test.nvmequeues0.ram[15][91] top.test.nvmequeues0.ram[15][90] top.test.nvmequeues0.ram[15][89] top.test.nvmequeues0.ram[15][88] top.test.nvmequeues0.ram[15][87] top.test.nvmequeues0.ram[15][86] top.test.nvmequeues0.ram[15][85] top.test.nvmequeues0.ram[15][84] top.test.nvmequeues0.ram[15][83] top.test.nvmequeues0.ram[15][82] top.test.nvmequeues0.ram[15][81] top.test.nvmequeues0.ram[15][80] top.test.nvmequeues0.ram[15][79] top.test.nvmequeues0.ram[15][78] top.test.nvmequeues0.ram[15][77] top.test.nvmequeues0.ram[15][76] top.test.nvmequeues0.ram[15][75] top.test.nvmequeues0.ram[15][74] top.test.nvmequeues0.ram[15][73] top.test.nvmequeues0.ram[15][72] top.test.nvmequeues0.ram[15][71] top.test.nvmequeues0.ram[15][70] top.test.nvmequeues0.ram[15][69] top.test.nvmequeues0.ram[15][68] top.test.nvmequeues0.ram[15][67] top.test.nvmequeues0.ram[15][66] top.test.nvmequeues0.ram[15][65] top.test.nvmequeues0.ram[15][64] top.test.nvmequeues0.ram[15][63] top.test.nvmequeues0.ram[15][62] top.test.nvmequeues0.ram[15][61] top.test.nvmequeues0.ram[15][60] top.test.nvmequeues0.ram[15][59] top.test.nvmequeues0.ram[15][58] top.test.nvmequeues0.ram[15][57] top.test.nvmequeues0.ram[15][56] top.test.nvmequeues0.ram[15][55] top.test.nvmequeues0.ram[15][54] top.test.nvmequeues0.ram[15][53] top.test.nvmequeues0.ram[15][52] top.test.nvmequeues0.ram[15][51] top.test.nvmequeues0.ram[15][50] top.test.nvmequeues0.ram[15][49] top.test.nvmequeues0.ram[15][48] top.test.nvmequeues0.ram[15][47] top.test.nvmequeues0.ram[15][46] top.test.nvmequeues0.ram[15][45] top.test.nvmequeues0.ram[15][44] top.test.nvmequeues0.ram[15][43] top.test.nvmequeues0.ram[15][42] top.test.nvmequeues0.ram[15][41] top.test.nvmequeues0.ram[15][40] top.test.nvmequeues0.ram[15][39] top.test.nvmequeues0.ram[15][38] top.test.nvmequeues0.ram[15][37] top.test.nvmequeues0.ram[15][36] top.test.nvmequeues0.ram[15][35] top.test.nvmequeues0.ram[15][34] top.test.nvmequeues0.ram[15][33] top.test.nvmequeues0.ram[15][32] top.test.nvmequeues0.ram[15][31] top.test.nvmequeues0.ram[15][30] top.test.nvmequeues0.ram[15][29] top.test.nvmequeues0.ram[15][28] top.test.nvmequeues0.ram[15][27] top.test.nvmequeues0.ram[15][26] top.test.nvmequeues0.ram[15][25] top.test.nvmequeues0.ram[15][24] top.test.nvmequeues0.ram[15][23] top.test.nvmequeues0.ram[15][22] top.test.nvmequeues0.ram[15][21] top.test.nvmequeues0.ram[15][20] top.test.nvmequeues0.ram[15][19] top.test.nvmequeues0.ram[15][18] top.test.nvmequeues0.ram[15][17] top.test.nvmequeues0.ram[15][16] top.test.nvmequeues0.ram[15][15] top.test.nvmequeues0.ram[15][14] top.test.nvmequeues0.ram[15][13] top.test.nvmequeues0.ram[15][12] top.test.nvmequeues0.ram[15][11] top.test.nvmequeues0.ram[15][10] top.test.nvmequeues0.ram[15][9] top.test.nvmequeues0.ram[15][8] top.test.nvmequeues0.ram[15][7] top.test.nvmequeues0.ram[15][6] top.test.nvmequeues0.ram[15][5] top.test.nvmequeues0.ram[15][4] top.test.nvmequeues0.ram[15][3] top.test.nvmequeues0.ram[15][2] top.test.nvmequeues0.ram[15][1] top.test.nvmequeues0.ram[15][0]
+@28
+#{top.test.nvmequeues0.nvmequeueinpos[0][2:0]} top.test.nvmequeues0.nvmequeueinpos[0][2] top.test.nvmequeues0.nvmequeueinpos[0][1] top.test.nvmequeues0.nvmequeueinpos[0][0]
+@420
+top.test.nvmequeues0.hostqueueinnum
+top.test.nvmequeues0.nvmeraminaddress
+top.test.nvmequeues0.nvmestate
+@22
+#{top.test.nvmequeues0.ram[24][127:0]} top.test.nvmequeues0.ram[24][127] top.test.nvmequeues0.ram[24][126] top.test.nvmequeues0.ram[24][125] top.test.nvmequeues0.ram[24][124] top.test.nvmequeues0.ram[24][123] top.test.nvmequeues0.ram[24][122] top.test.nvmequeues0.ram[24][121] top.test.nvmequeues0.ram[24][120] top.test.nvmequeues0.ram[24][119] top.test.nvmequeues0.ram[24][118] top.test.nvmequeues0.ram[24][117] top.test.nvmequeues0.ram[24][116] top.test.nvmequeues0.ram[24][115] top.test.nvmequeues0.ram[24][114] top.test.nvmequeues0.ram[24][113] top.test.nvmequeues0.ram[24][112] top.test.nvmequeues0.ram[24][111] top.test.nvmequeues0.ram[24][110] top.test.nvmequeues0.ram[24][109] top.test.nvmequeues0.ram[24][108] top.test.nvmequeues0.ram[24][107] top.test.nvmequeues0.ram[24][106] top.test.nvmequeues0.ram[24][105] top.test.nvmequeues0.ram[24][104] top.test.nvmequeues0.ram[24][103] top.test.nvmequeues0.ram[24][102] top.test.nvmequeues0.ram[24][101] top.test.nvmequeues0.ram[24][100] top.test.nvmequeues0.ram[24][99] top.test.nvmequeues0.ram[24][98] top.test.nvmequeues0.ram[24][97] top.test.nvmequeues0.ram[24][96] top.test.nvmequeues0.ram[24][95] top.test.nvmequeues0.ram[24][94] top.test.nvmequeues0.ram[24][93] top.test.nvmequeues0.ram[24][92] top.test.nvmequeues0.ram[24][91] top.test.nvmequeues0.ram[24][90] top.test.nvmequeues0.ram[24][89] top.test.nvmequeues0.ram[24][88] top.test.nvmequeues0.ram[24][87] top.test.nvmequeues0.ram[24][86] top.test.nvmequeues0.ram[24][85] top.test.nvmequeues0.ram[24][84] top.test.nvmequeues0.ram[24][83] top.test.nvmequeues0.ram[24][82] top.test.nvmequeues0.ram[24][81] top.test.nvmequeues0.ram[24][80] top.test.nvmequeues0.ram[24][79] top.test.nvmequeues0.ram[24][78] top.test.nvmequeues0.ram[24][77] top.test.nvmequeues0.ram[24][76] top.test.nvmequeues0.ram[24][75] top.test.nvmequeues0.ram[24][74] top.test.nvmequeues0.ram[24][73] top.test.nvmequeues0.ram[24][72] top.test.nvmequeues0.ram[24][71] top.test.nvmequeues0.ram[24][70] top.test.nvmequeues0.ram[24][69] top.test.nvmequeues0.ram[24][68] top.test.nvmequeues0.ram[24][67] top.test.nvmequeues0.ram[24][66] top.test.nvmequeues0.ram[24][65] top.test.nvmequeues0.ram[24][64] top.test.nvmequeues0.ram[24][63] top.test.nvmequeues0.ram[24][62] top.test.nvmequeues0.ram[24][61] top.test.nvmequeues0.ram[24][60] top.test.nvmequeues0.ram[24][59] top.test.nvmequeues0.ram[24][58] top.test.nvmequeues0.ram[24][57] top.test.nvmequeues0.ram[24][56] top.test.nvmequeues0.ram[24][55] top.test.nvmequeues0.ram[24][54] top.test.nvmequeues0.ram[24][53] top.test.nvmequeues0.ram[24][52] top.test.nvmequeues0.ram[24][51] top.test.nvmequeues0.ram[24][50] top.test.nvmequeues0.ram[24][49] top.test.nvmequeues0.ram[24][48] top.test.nvmequeues0.ram[24][47] top.test.nvmequeues0.ram[24][46] top.test.nvmequeues0.ram[24][45] top.test.nvmequeues0.ram[24][44] top.test.nvmequeues0.ram[24][43] top.test.nvmequeues0.ram[24][42] top.test.nvmequeues0.ram[24][41] top.test.nvmequeues0.ram[24][40] top.test.nvmequeues0.ram[24][39] top.test.nvmequeues0.ram[24][38] top.test.nvmequeues0.ram[24][37] top.test.nvmequeues0.ram[24][36] top.test.nvmequeues0.ram[24][35] top.test.nvmequeues0.ram[24][34] top.test.nvmequeues0.ram[24][33] top.test.nvmequeues0.ram[24][32] top.test.nvmequeues0.ram[24][31] top.test.nvmequeues0.ram[24][30] top.test.nvmequeues0.ram[24][29] top.test.nvmequeues0.ram[24][28] top.test.nvmequeues0.ram[24][27] top.test.nvmequeues0.ram[24][26] top.test.nvmequeues0.ram[24][25] top.test.nvmequeues0.ram[24][24] top.test.nvmequeues0.ram[24][23] top.test.nvmequeues0.ram[24][22] top.test.nvmequeues0.ram[24][21] top.test.nvmequeues0.ram[24][20] top.test.nvmequeues0.ram[24][19] top.test.nvmequeues0.ram[24][18] top.test.nvmequeues0.ram[24][17] top.test.nvmequeues0.ram[24][16] top.test.nvmequeues0.ram[24][15] top.test.nvmequeues0.ram[24][14] top.test.nvmequeues0.ram[24][13] top.test.nvmequeues0.ram[24][12] top.test.nvmequeues0.ram[24][11] top.test.nvmequeues0.ram[24][10] top.test.nvmequeues0.ram[24][9] top.test.nvmequeues0.ram[24][8] top.test.nvmequeues0.ram[24][7] top.test.nvmequeues0.ram[24][6] top.test.nvmequeues0.ram[24][5] top.test.nvmequeues0.ram[24][4] top.test.nvmequeues0.ram[24][3] top.test.nvmequeues0.ram[24][2] top.test.nvmequeues0.ram[24][1] top.test.nvmequeues0.ram[24][0]
+#{top.test.nvmequeues0.ram[25][127:0]} top.test.nvmequeues0.ram[25][127] top.test.nvmequeues0.ram[25][126] top.test.nvmequeues0.ram[25][125] top.test.nvmequeues0.ram[25][124] top.test.nvmequeues0.ram[25][123] top.test.nvmequeues0.ram[25][122] top.test.nvmequeues0.ram[25][121] top.test.nvmequeues0.ram[25][120] top.test.nvmequeues0.ram[25][119] top.test.nvmequeues0.ram[25][118] top.test.nvmequeues0.ram[25][117] top.test.nvmequeues0.ram[25][116] top.test.nvmequeues0.ram[25][115] top.test.nvmequeues0.ram[25][114] top.test.nvmequeues0.ram[25][113] top.test.nvmequeues0.ram[25][112] top.test.nvmequeues0.ram[25][111] top.test.nvmequeues0.ram[25][110] top.test.nvmequeues0.ram[25][109] top.test.nvmequeues0.ram[25][108] top.test.nvmequeues0.ram[25][107] top.test.nvmequeues0.ram[25][106] top.test.nvmequeues0.ram[25][105] top.test.nvmequeues0.ram[25][104] top.test.nvmequeues0.ram[25][103] top.test.nvmequeues0.ram[25][102] top.test.nvmequeues0.ram[25][101] top.test.nvmequeues0.ram[25][100] top.test.nvmequeues0.ram[25][99] top.test.nvmequeues0.ram[25][98] top.test.nvmequeues0.ram[25][97] top.test.nvmequeues0.ram[25][96] top.test.nvmequeues0.ram[25][95] top.test.nvmequeues0.ram[25][94] top.test.nvmequeues0.ram[25][93] top.test.nvmequeues0.ram[25][92] top.test.nvmequeues0.ram[25][91] top.test.nvmequeues0.ram[25][90] top.test.nvmequeues0.ram[25][89] top.test.nvmequeues0.ram[25][88] top.test.nvmequeues0.ram[25][87] top.test.nvmequeues0.ram[25][86] top.test.nvmequeues0.ram[25][85] top.test.nvmequeues0.ram[25][84] top.test.nvmequeues0.ram[25][83] top.test.nvmequeues0.ram[25][82] top.test.nvmequeues0.ram[25][81] top.test.nvmequeues0.ram[25][80] top.test.nvmequeues0.ram[25][79] top.test.nvmequeues0.ram[25][78] top.test.nvmequeues0.ram[25][77] top.test.nvmequeues0.ram[25][76] top.test.nvmequeues0.ram[25][75] top.test.nvmequeues0.ram[25][74] top.test.nvmequeues0.ram[25][73] top.test.nvmequeues0.ram[25][72] top.test.nvmequeues0.ram[25][71] top.test.nvmequeues0.ram[25][70] top.test.nvmequeues0.ram[25][69] top.test.nvmequeues0.ram[25][68] top.test.nvmequeues0.ram[25][67] top.test.nvmequeues0.ram[25][66] top.test.nvmequeues0.ram[25][65] top.test.nvmequeues0.ram[25][64] top.test.nvmequeues0.ram[25][63] top.test.nvmequeues0.ram[25][62] top.test.nvmequeues0.ram[25][61] top.test.nvmequeues0.ram[25][60] top.test.nvmequeues0.ram[25][59] top.test.nvmequeues0.ram[25][58] top.test.nvmequeues0.ram[25][57] top.test.nvmequeues0.ram[25][56] top.test.nvmequeues0.ram[25][55] top.test.nvmequeues0.ram[25][54] top.test.nvmequeues0.ram[25][53] top.test.nvmequeues0.ram[25][52] top.test.nvmequeues0.ram[25][51] top.test.nvmequeues0.ram[25][50] top.test.nvmequeues0.ram[25][49] top.test.nvmequeues0.ram[25][48] top.test.nvmequeues0.ram[25][47] top.test.nvmequeues0.ram[25][46] top.test.nvmequeues0.ram[25][45] top.test.nvmequeues0.ram[25][44] top.test.nvmequeues0.ram[25][43] top.test.nvmequeues0.ram[25][42] top.test.nvmequeues0.ram[25][41] top.test.nvmequeues0.ram[25][40] top.test.nvmequeues0.ram[25][39] top.test.nvmequeues0.ram[25][38] top.test.nvmequeues0.ram[25][37] top.test.nvmequeues0.ram[25][36] top.test.nvmequeues0.ram[25][35] top.test.nvmequeues0.ram[25][34] top.test.nvmequeues0.ram[25][33] top.test.nvmequeues0.ram[25][32] top.test.nvmequeues0.ram[25][31] top.test.nvmequeues0.ram[25][30] top.test.nvmequeues0.ram[25][29] top.test.nvmequeues0.ram[25][28] top.test.nvmequeues0.ram[25][27] top.test.nvmequeues0.ram[25][26] top.test.nvmequeues0.ram[25][25] top.test.nvmequeues0.ram[25][24] top.test.nvmequeues0.ram[25][23] top.test.nvmequeues0.ram[25][22] top.test.nvmequeues0.ram[25][21] top.test.nvmequeues0.ram[25][20] top.test.nvmequeues0.ram[25][19] top.test.nvmequeues0.ram[25][18] top.test.nvmequeues0.ram[25][17] top.test.nvmequeues0.ram[25][16] top.test.nvmequeues0.ram[25][15] top.test.nvmequeues0.ram[25][14] top.test.nvmequeues0.ram[25][13] top.test.nvmequeues0.ram[25][12] top.test.nvmequeues0.ram[25][11] top.test.nvmequeues0.ram[25][10] top.test.nvmequeues0.ram[25][9] top.test.nvmequeues0.ram[25][8] top.test.nvmequeues0.ram[25][7] top.test.nvmequeues0.ram[25][6] top.test.nvmequeues0.ram[25][5] top.test.nvmequeues0.ram[25][4] top.test.nvmequeues0.ram[25][3] top.test.nvmequeues0.ram[25][2] top.test.nvmequeues0.ram[25][1] top.test.nvmequeues0.ram[25][0]
+#{top.test.nvmequeues0.ram[26][127:0]} top.test.nvmequeues0.ram[26][127] top.test.nvmequeues0.ram[26][126] top.test.nvmequeues0.ram[26][125] top.test.nvmequeues0.ram[26][124] top.test.nvmequeues0.ram[26][123] top.test.nvmequeues0.ram[26][122] top.test.nvmequeues0.ram[26][121] top.test.nvmequeues0.ram[26][120] top.test.nvmequeues0.ram[26][119] top.test.nvmequeues0.ram[26][118] top.test.nvmequeues0.ram[26][117] top.test.nvmequeues0.ram[26][116] top.test.nvmequeues0.ram[26][115] top.test.nvmequeues0.ram[26][114] top.test.nvmequeues0.ram[26][113] top.test.nvmequeues0.ram[26][112] top.test.nvmequeues0.ram[26][111] top.test.nvmequeues0.ram[26][110] top.test.nvmequeues0.ram[26][109] top.test.nvmequeues0.ram[26][108] top.test.nvmequeues0.ram[26][107] top.test.nvmequeues0.ram[26][106] top.test.nvmequeues0.ram[26][105] top.test.nvmequeues0.ram[26][104] top.test.nvmequeues0.ram[26][103] top.test.nvmequeues0.ram[26][102] top.test.nvmequeues0.ram[26][101] top.test.nvmequeues0.ram[26][100] top.test.nvmequeues0.ram[26][99] top.test.nvmequeues0.ram[26][98] top.test.nvmequeues0.ram[26][97] top.test.nvmequeues0.ram[26][96] top.test.nvmequeues0.ram[26][95] top.test.nvmequeues0.ram[26][94] top.test.nvmequeues0.ram[26][93] top.test.nvmequeues0.ram[26][92] top.test.nvmequeues0.ram[26][91] top.test.nvmequeues0.ram[26][90] top.test.nvmequeues0.ram[26][89] top.test.nvmequeues0.ram[26][88] top.test.nvmequeues0.ram[26][87] top.test.nvmequeues0.ram[26][86] top.test.nvmequeues0.ram[26][85] top.test.nvmequeues0.ram[26][84] top.test.nvmequeues0.ram[26][83] top.test.nvmequeues0.ram[26][82] top.test.nvmequeues0.ram[26][81] top.test.nvmequeues0.ram[26][80] top.test.nvmequeues0.ram[26][79] top.test.nvmequeues0.ram[26][78] top.test.nvmequeues0.ram[26][77] top.test.nvmequeues0.ram[26][76] top.test.nvmequeues0.ram[26][75] top.test.nvmequeues0.ram[26][74] top.test.nvmequeues0.ram[26][73] top.test.nvmequeues0.ram[26][72] top.test.nvmequeues0.ram[26][71] top.test.nvmequeues0.ram[26][70] top.test.nvmequeues0.ram[26][69] top.test.nvmequeues0.ram[26][68] top.test.nvmequeues0.ram[26][67] top.test.nvmequeues0.ram[26][66] top.test.nvmequeues0.ram[26][65] top.test.nvmequeues0.ram[26][64] top.test.nvmequeues0.ram[26][63] top.test.nvmequeues0.ram[26][62] top.test.nvmequeues0.ram[26][61] top.test.nvmequeues0.ram[26][60] top.test.nvmequeues0.ram[26][59] top.test.nvmequeues0.ram[26][58] top.test.nvmequeues0.ram[26][57] top.test.nvmequeues0.ram[26][56] top.test.nvmequeues0.ram[26][55] top.test.nvmequeues0.ram[26][54] top.test.nvmequeues0.ram[26][53] top.test.nvmequeues0.ram[26][52] top.test.nvmequeues0.ram[26][51] top.test.nvmequeues0.ram[26][50] top.test.nvmequeues0.ram[26][49] top.test.nvmequeues0.ram[26][48] top.test.nvmequeues0.ram[26][47] top.test.nvmequeues0.ram[26][46] top.test.nvmequeues0.ram[26][45] top.test.nvmequeues0.ram[26][44] top.test.nvmequeues0.ram[26][43] top.test.nvmequeues0.ram[26][42] top.test.nvmequeues0.ram[26][41] top.test.nvmequeues0.ram[26][40] top.test.nvmequeues0.ram[26][39] top.test.nvmequeues0.ram[26][38] top.test.nvmequeues0.ram[26][37] top.test.nvmequeues0.ram[26][36] top.test.nvmequeues0.ram[26][35] top.test.nvmequeues0.ram[26][34] top.test.nvmequeues0.ram[26][33] top.test.nvmequeues0.ram[26][32] top.test.nvmequeues0.ram[26][31] top.test.nvmequeues0.ram[26][30] top.test.nvmequeues0.ram[26][29] top.test.nvmequeues0.ram[26][28] top.test.nvmequeues0.ram[26][27] top.test.nvmequeues0.ram[26][26] top.test.nvmequeues0.ram[26][25] top.test.nvmequeues0.ram[26][24] top.test.nvmequeues0.ram[26][23] top.test.nvmequeues0.ram[26][22] top.test.nvmequeues0.ram[26][21] top.test.nvmequeues0.ram[26][20] top.test.nvmequeues0.ram[26][19] top.test.nvmequeues0.ram[26][18] top.test.nvmequeues0.ram[26][17] top.test.nvmequeues0.ram[26][16] top.test.nvmequeues0.ram[26][15] top.test.nvmequeues0.ram[26][14] top.test.nvmequeues0.ram[26][13] top.test.nvmequeues0.ram[26][12] top.test.nvmequeues0.ram[26][11] top.test.nvmequeues0.ram[26][10] top.test.nvmequeues0.ram[26][9] top.test.nvmequeues0.ram[26][8] top.test.nvmequeues0.ram[26][7] top.test.nvmequeues0.ram[26][6] top.test.nvmequeues0.ram[26][5] top.test.nvmequeues0.ram[26][4] top.test.nvmequeues0.ram[26][3] top.test.nvmequeues0.ram[26][2] top.test.nvmequeues0.ram[26][1] top.test.nvmequeues0.ram[26][0]
+#{top.test.nvmequeues0.ram[27][127:0]} top.test.nvmequeues0.ram[27][127] top.test.nvmequeues0.ram[27][126] top.test.nvmequeues0.ram[27][125] top.test.nvmequeues0.ram[27][124] top.test.nvmequeues0.ram[27][123] top.test.nvmequeues0.ram[27][122] top.test.nvmequeues0.ram[27][121] top.test.nvmequeues0.ram[27][120] top.test.nvmequeues0.ram[27][119] top.test.nvmequeues0.ram[27][118] top.test.nvmequeues0.ram[27][117] top.test.nvmequeues0.ram[27][116] top.test.nvmequeues0.ram[27][115] top.test.nvmequeues0.ram[27][114] top.test.nvmequeues0.ram[27][113] top.test.nvmequeues0.ram[27][112] top.test.nvmequeues0.ram[27][111] top.test.nvmequeues0.ram[27][110] top.test.nvmequeues0.ram[27][109] top.test.nvmequeues0.ram[27][108] top.test.nvmequeues0.ram[27][107] top.test.nvmequeues0.ram[27][106] top.test.nvmequeues0.ram[27][105] top.test.nvmequeues0.ram[27][104] top.test.nvmequeues0.ram[27][103] top.test.nvmequeues0.ram[27][102] top.test.nvmequeues0.ram[27][101] top.test.nvmequeues0.ram[27][100] top.test.nvmequeues0.ram[27][99] top.test.nvmequeues0.ram[27][98] top.test.nvmequeues0.ram[27][97] top.test.nvmequeues0.ram[27][96] top.test.nvmequeues0.ram[27][95] top.test.nvmequeues0.ram[27][94] top.test.nvmequeues0.ram[27][93] top.test.nvmequeues0.ram[27][92] top.test.nvmequeues0.ram[27][91] top.test.nvmequeues0.ram[27][90] top.test.nvmequeues0.ram[27][89] top.test.nvmequeues0.ram[27][88] top.test.nvmequeues0.ram[27][87] top.test.nvmequeues0.ram[27][86] top.test.nvmequeues0.ram[27][85] top.test.nvmequeues0.ram[27][84] top.test.nvmequeues0.ram[27][83] top.test.nvmequeues0.ram[27][82] top.test.nvmequeues0.ram[27][81] top.test.nvmequeues0.ram[27][80] top.test.nvmequeues0.ram[27][79] top.test.nvmequeues0.ram[27][78] top.test.nvmequeues0.ram[27][77] top.test.nvmequeues0.ram[27][76] top.test.nvmequeues0.ram[27][75] top.test.nvmequeues0.ram[27][74] top.test.nvmequeues0.ram[27][73] top.test.nvmequeues0.ram[27][72] top.test.nvmequeues0.ram[27][71] top.test.nvmequeues0.ram[27][70] top.test.nvmequeues0.ram[27][69] top.test.nvmequeues0.ram[27][68] top.test.nvmequeues0.ram[27][67] top.test.nvmequeues0.ram[27][66] top.test.nvmequeues0.ram[27][65] top.test.nvmequeues0.ram[27][64] top.test.nvmequeues0.ram[27][63] top.test.nvmequeues0.ram[27][62] top.test.nvmequeues0.ram[27][61] top.test.nvmequeues0.ram[27][60] top.test.nvmequeues0.ram[27][59] top.test.nvmequeues0.ram[27][58] top.test.nvmequeues0.ram[27][57] top.test.nvmequeues0.ram[27][56] top.test.nvmequeues0.ram[27][55] top.test.nvmequeues0.ram[27][54] top.test.nvmequeues0.ram[27][53] top.test.nvmequeues0.ram[27][52] top.test.nvmequeues0.ram[27][51] top.test.nvmequeues0.ram[27][50] top.test.nvmequeues0.ram[27][49] top.test.nvmequeues0.ram[27][48] top.test.nvmequeues0.ram[27][47] top.test.nvmequeues0.ram[27][46] top.test.nvmequeues0.ram[27][45] top.test.nvmequeues0.ram[27][44] top.test.nvmequeues0.ram[27][43] top.test.nvmequeues0.ram[27][42] top.test.nvmequeues0.ram[27][41] top.test.nvmequeues0.ram[27][40] top.test.nvmequeues0.ram[27][39] top.test.nvmequeues0.ram[27][38] top.test.nvmequeues0.ram[27][37] top.test.nvmequeues0.ram[27][36] top.test.nvmequeues0.ram[27][35] top.test.nvmequeues0.ram[27][34] top.test.nvmequeues0.ram[27][33] top.test.nvmequeues0.ram[27][32] top.test.nvmequeues0.ram[27][31] top.test.nvmequeues0.ram[27][30] top.test.nvmequeues0.ram[27][29] top.test.nvmequeues0.ram[27][28] top.test.nvmequeues0.ram[27][27] top.test.nvmequeues0.ram[27][26] top.test.nvmequeues0.ram[27][25] top.test.nvmequeues0.ram[27][24] top.test.nvmequeues0.ram[27][23] top.test.nvmequeues0.ram[27][22] top.test.nvmequeues0.ram[27][21] top.test.nvmequeues0.ram[27][20] top.test.nvmequeues0.ram[27][19] top.test.nvmequeues0.ram[27][18] top.test.nvmequeues0.ram[27][17] top.test.nvmequeues0.ram[27][16] top.test.nvmequeues0.ram[27][15] top.test.nvmequeues0.ram[27][14] top.test.nvmequeues0.ram[27][13] top.test.nvmequeues0.ram[27][12] top.test.nvmequeues0.ram[27][11] top.test.nvmequeues0.ram[27][10] top.test.nvmequeues0.ram[27][9] top.test.nvmequeues0.ram[27][8] top.test.nvmequeues0.ram[27][7] top.test.nvmequeues0.ram[27][6] top.test.nvmequeues0.ram[27][5] top.test.nvmequeues0.ram[27][4] top.test.nvmequeues0.ram[27][3] top.test.nvmequeues0.ram[27][2] top.test.nvmequeues0.ram[27][1] top.test.nvmequeues0.ram[27][0]
+#{top.test.nvmequeues0.ram[28][127:0]} top.test.nvmequeues0.ram[28][127] top.test.nvmequeues0.ram[28][126] top.test.nvmequeues0.ram[28][125] top.test.nvmequeues0.ram[28][124] top.test.nvmequeues0.ram[28][123] top.test.nvmequeues0.ram[28][122] top.test.nvmequeues0.ram[28][121] top.test.nvmequeues0.ram[28][120] top.test.nvmequeues0.ram[28][119] top.test.nvmequeues0.ram[28][118] top.test.nvmequeues0.ram[28][117] top.test.nvmequeues0.ram[28][116] top.test.nvmequeues0.ram[28][115] top.test.nvmequeues0.ram[28][114] top.test.nvmequeues0.ram[28][113] top.test.nvmequeues0.ram[28][112] top.test.nvmequeues0.ram[28][111] top.test.nvmequeues0.ram[28][110] top.test.nvmequeues0.ram[28][109] top.test.nvmequeues0.ram[28][108] top.test.nvmequeues0.ram[28][107] top.test.nvmequeues0.ram[28][106] top.test.nvmequeues0.ram[28][105] top.test.nvmequeues0.ram[28][104] top.test.nvmequeues0.ram[28][103] top.test.nvmequeues0.ram[28][102] top.test.nvmequeues0.ram[28][101] top.test.nvmequeues0.ram[28][100] top.test.nvmequeues0.ram[28][99] top.test.nvmequeues0.ram[28][98] top.test.nvmequeues0.ram[28][97] top.test.nvmequeues0.ram[28][96] top.test.nvmequeues0.ram[28][95] top.test.nvmequeues0.ram[28][94] top.test.nvmequeues0.ram[28][93] top.test.nvmequeues0.ram[28][92] top.test.nvmequeues0.ram[28][91] top.test.nvmequeues0.ram[28][90] top.test.nvmequeues0.ram[28][89] top.test.nvmequeues0.ram[28][88] top.test.nvmequeues0.ram[28][87] top.test.nvmequeues0.ram[28][86] top.test.nvmequeues0.ram[28][85] top.test.nvmequeues0.ram[28][84] top.test.nvmequeues0.ram[28][83] top.test.nvmequeues0.ram[28][82] top.test.nvmequeues0.ram[28][81] top.test.nvmequeues0.ram[28][80] top.test.nvmequeues0.ram[28][79] top.test.nvmequeues0.ram[28][78] top.test.nvmequeues0.ram[28][77] top.test.nvmequeues0.ram[28][76] top.test.nvmequeues0.ram[28][75] top.test.nvmequeues0.ram[28][74] top.test.nvmequeues0.ram[28][73] top.test.nvmequeues0.ram[28][72] top.test.nvmequeues0.ram[28][71] top.test.nvmequeues0.ram[28][70] top.test.nvmequeues0.ram[28][69] top.test.nvmequeues0.ram[28][68] top.test.nvmequeues0.ram[28][67] top.test.nvmequeues0.ram[28][66] top.test.nvmequeues0.ram[28][65] top.test.nvmequeues0.ram[28][64] top.test.nvmequeues0.ram[28][63] top.test.nvmequeues0.ram[28][62] top.test.nvmequeues0.ram[28][61] top.test.nvmequeues0.ram[28][60] top.test.nvmequeues0.ram[28][59] top.test.nvmequeues0.ram[28][58] top.test.nvmequeues0.ram[28][57] top.test.nvmequeues0.ram[28][56] top.test.nvmequeues0.ram[28][55] top.test.nvmequeues0.ram[28][54] top.test.nvmequeues0.ram[28][53] top.test.nvmequeues0.ram[28][52] top.test.nvmequeues0.ram[28][51] top.test.nvmequeues0.ram[28][50] top.test.nvmequeues0.ram[28][49] top.test.nvmequeues0.ram[28][48] top.test.nvmequeues0.ram[28][47] top.test.nvmequeues0.ram[28][46] top.test.nvmequeues0.ram[28][45] top.test.nvmequeues0.ram[28][44] top.test.nvmequeues0.ram[28][43] top.test.nvmequeues0.ram[28][42] top.test.nvmequeues0.ram[28][41] top.test.nvmequeues0.ram[28][40] top.test.nvmequeues0.ram[28][39] top.test.nvmequeues0.ram[28][38] top.test.nvmequeues0.ram[28][37] top.test.nvmequeues0.ram[28][36] top.test.nvmequeues0.ram[28][35] top.test.nvmequeues0.ram[28][34] top.test.nvmequeues0.ram[28][33] top.test.nvmequeues0.ram[28][32] top.test.nvmequeues0.ram[28][31] top.test.nvmequeues0.ram[28][30] top.test.nvmequeues0.ram[28][29] top.test.nvmequeues0.ram[28][28] top.test.nvmequeues0.ram[28][27] top.test.nvmequeues0.ram[28][26] top.test.nvmequeues0.ram[28][25] top.test.nvmequeues0.ram[28][24] top.test.nvmequeues0.ram[28][23] top.test.nvmequeues0.ram[28][22] top.test.nvmequeues0.ram[28][21] top.test.nvmequeues0.ram[28][20] top.test.nvmequeues0.ram[28][19] top.test.nvmequeues0.ram[28][18] top.test.nvmequeues0.ram[28][17] top.test.nvmequeues0.ram[28][16] top.test.nvmequeues0.ram[28][15] top.test.nvmequeues0.ram[28][14] top.test.nvmequeues0.ram[28][13] top.test.nvmequeues0.ram[28][12] top.test.nvmequeues0.ram[28][11] top.test.nvmequeues0.ram[28][10] top.test.nvmequeues0.ram[28][9] top.test.nvmequeues0.ram[28][8] top.test.nvmequeues0.ram[28][7] top.test.nvmequeues0.ram[28][6] top.test.nvmequeues0.ram[28][5] top.test.nvmequeues0.ram[28][4] top.test.nvmequeues0.ram[28][3] top.test.nvmequeues0.ram[28][2] top.test.nvmequeues0.ram[28][1] top.test.nvmequeues0.ram[28][0]
+#{top.test.nvmequeues0.ram[29][127:0]} top.test.nvmequeues0.ram[29][127] top.test.nvmequeues0.ram[29][126] top.test.nvmequeues0.ram[29][125] top.test.nvmequeues0.ram[29][124] top.test.nvmequeues0.ram[29][123] top.test.nvmequeues0.ram[29][122] top.test.nvmequeues0.ram[29][121] top.test.nvmequeues0.ram[29][120] top.test.nvmequeues0.ram[29][119] top.test.nvmequeues0.ram[29][118] top.test.nvmequeues0.ram[29][117] top.test.nvmequeues0.ram[29][116] top.test.nvmequeues0.ram[29][115] top.test.nvmequeues0.ram[29][114] top.test.nvmequeues0.ram[29][113] top.test.nvmequeues0.ram[29][112] top.test.nvmequeues0.ram[29][111] top.test.nvmequeues0.ram[29][110] top.test.nvmequeues0.ram[29][109] top.test.nvmequeues0.ram[29][108] top.test.nvmequeues0.ram[29][107] top.test.nvmequeues0.ram[29][106] top.test.nvmequeues0.ram[29][105] top.test.nvmequeues0.ram[29][104] top.test.nvmequeues0.ram[29][103] top.test.nvmequeues0.ram[29][102] top.test.nvmequeues0.ram[29][101] top.test.nvmequeues0.ram[29][100] top.test.nvmequeues0.ram[29][99] top.test.nvmequeues0.ram[29][98] top.test.nvmequeues0.ram[29][97] top.test.nvmequeues0.ram[29][96] top.test.nvmequeues0.ram[29][95] top.test.nvmequeues0.ram[29][94] top.test.nvmequeues0.ram[29][93] top.test.nvmequeues0.ram[29][92] top.test.nvmequeues0.ram[29][91] top.test.nvmequeues0.ram[29][90] top.test.nvmequeues0.ram[29][89] top.test.nvmequeues0.ram[29][88] top.test.nvmequeues0.ram[29][87] top.test.nvmequeues0.ram[29][86] top.test.nvmequeues0.ram[29][85] top.test.nvmequeues0.ram[29][84] top.test.nvmequeues0.ram[29][83] top.test.nvmequeues0.ram[29][82] top.test.nvmequeues0.ram[29][81] top.test.nvmequeues0.ram[29][80] top.test.nvmequeues0.ram[29][79] top.test.nvmequeues0.ram[29][78] top.test.nvmequeues0.ram[29][77] top.test.nvmequeues0.ram[29][76] top.test.nvmequeues0.ram[29][75] top.test.nvmequeues0.ram[29][74] top.test.nvmequeues0.ram[29][73] top.test.nvmequeues0.ram[29][72] top.test.nvmequeues0.ram[29][71] top.test.nvmequeues0.ram[29][70] top.test.nvmequeues0.ram[29][69] top.test.nvmequeues0.ram[29][68] top.test.nvmequeues0.ram[29][67] top.test.nvmequeues0.ram[29][66] top.test.nvmequeues0.ram[29][65] top.test.nvmequeues0.ram[29][64] top.test.nvmequeues0.ram[29][63] top.test.nvmequeues0.ram[29][62] top.test.nvmequeues0.ram[29][61] top.test.nvmequeues0.ram[29][60] top.test.nvmequeues0.ram[29][59] top.test.nvmequeues0.ram[29][58] top.test.nvmequeues0.ram[29][57] top.test.nvmequeues0.ram[29][56] top.test.nvmequeues0.ram[29][55] top.test.nvmequeues0.ram[29][54] top.test.nvmequeues0.ram[29][53] top.test.nvmequeues0.ram[29][52] top.test.nvmequeues0.ram[29][51] top.test.nvmequeues0.ram[29][50] top.test.nvmequeues0.ram[29][49] top.test.nvmequeues0.ram[29][48] top.test.nvmequeues0.ram[29][47] top.test.nvmequeues0.ram[29][46] top.test.nvmequeues0.ram[29][45] top.test.nvmequeues0.ram[29][44] top.test.nvmequeues0.ram[29][43] top.test.nvmequeues0.ram[29][42] top.test.nvmequeues0.ram[29][41] top.test.nvmequeues0.ram[29][40] top.test.nvmequeues0.ram[29][39] top.test.nvmequeues0.ram[29][38] top.test.nvmequeues0.ram[29][37] top.test.nvmequeues0.ram[29][36] top.test.nvmequeues0.ram[29][35] top.test.nvmequeues0.ram[29][34] top.test.nvmequeues0.ram[29][33] top.test.nvmequeues0.ram[29][32] top.test.nvmequeues0.ram[29][31] top.test.nvmequeues0.ram[29][30] top.test.nvmequeues0.ram[29][29] top.test.nvmequeues0.ram[29][28] top.test.nvmequeues0.ram[29][27] top.test.nvmequeues0.ram[29][26] top.test.nvmequeues0.ram[29][25] top.test.nvmequeues0.ram[29][24] top.test.nvmequeues0.ram[29][23] top.test.nvmequeues0.ram[29][22] top.test.nvmequeues0.ram[29][21] top.test.nvmequeues0.ram[29][20] top.test.nvmequeues0.ram[29][19] top.test.nvmequeues0.ram[29][18] top.test.nvmequeues0.ram[29][17] top.test.nvmequeues0.ram[29][16] top.test.nvmequeues0.ram[29][15] top.test.nvmequeues0.ram[29][14] top.test.nvmequeues0.ram[29][13] top.test.nvmequeues0.ram[29][12] top.test.nvmequeues0.ram[29][11] top.test.nvmequeues0.ram[29][10] top.test.nvmequeues0.ram[29][9] top.test.nvmequeues0.ram[29][8] top.test.nvmequeues0.ram[29][7] top.test.nvmequeues0.ram[29][6] top.test.nvmequeues0.ram[29][5] top.test.nvmequeues0.ram[29][4] top.test.nvmequeues0.ram[29][3] top.test.nvmequeues0.ram[29][2] top.test.nvmequeues0.ram[29][1] top.test.nvmequeues0.ram[29][0]
+@28
+top.test.nvmequeues0.nvmereplyout.ready
+top.test.nvmequeues0.nvmereplyout.valid
+top.test.nvmequeues0.nvmereplyout.last
+@22
+#{top.test.nvmequeues0.nvmereplyout.data[127:0]} top.test.nvmequeues0.nvmereplyout.data[127] top.test.nvmequeues0.nvmereplyout.data[126] top.test.nvmequeues0.nvmereplyout.data[125] top.test.nvmequeues0.nvmereplyout.data[124] top.test.nvmequeues0.nvmereplyout.data[123] top.test.nvmequeues0.nvmereplyout.data[122] top.test.nvmequeues0.nvmereplyout.data[121] top.test.nvmequeues0.nvmereplyout.data[120] top.test.nvmequeues0.nvmereplyout.data[119] top.test.nvmequeues0.nvmereplyout.data[118] top.test.nvmequeues0.nvmereplyout.data[117] top.test.nvmequeues0.nvmereplyout.data[116] top.test.nvmequeues0.nvmereplyout.data[115] top.test.nvmequeues0.nvmereplyout.data[114] top.test.nvmequeues0.nvmereplyout.data[113] top.test.nvmequeues0.nvmereplyout.data[112] top.test.nvmequeues0.nvmereplyout.data[111] top.test.nvmequeues0.nvmereplyout.data[110] top.test.nvmequeues0.nvmereplyout.data[109] top.test.nvmequeues0.nvmereplyout.data[108] top.test.nvmequeues0.nvmereplyout.data[107] top.test.nvmequeues0.nvmereplyout.data[106] top.test.nvmequeues0.nvmereplyout.data[105] top.test.nvmequeues0.nvmereplyout.data[104] top.test.nvmequeues0.nvmereplyout.data[103] top.test.nvmequeues0.nvmereplyout.data[102] top.test.nvmequeues0.nvmereplyout.data[101] top.test.nvmequeues0.nvmereplyout.data[100] top.test.nvmequeues0.nvmereplyout.data[99] top.test.nvmequeues0.nvmereplyout.data[98] top.test.nvmequeues0.nvmereplyout.data[97] top.test.nvmequeues0.nvmereplyout.data[96] top.test.nvmequeues0.nvmereplyout.data[95] top.test.nvmequeues0.nvmereplyout.data[94] top.test.nvmequeues0.nvmereplyout.data[93] top.test.nvmequeues0.nvmereplyout.data[92] top.test.nvmequeues0.nvmereplyout.data[91] top.test.nvmequeues0.nvmereplyout.data[90] top.test.nvmequeues0.nvmereplyout.data[89] top.test.nvmequeues0.nvmereplyout.data[88] top.test.nvmequeues0.nvmereplyout.data[87] top.test.nvmequeues0.nvmereplyout.data[86] top.test.nvmequeues0.nvmereplyout.data[85] top.test.nvmequeues0.nvmereplyout.data[84] top.test.nvmequeues0.nvmereplyout.data[83] top.test.nvmequeues0.nvmereplyout.data[82] top.test.nvmequeues0.nvmereplyout.data[81] top.test.nvmequeues0.nvmereplyout.data[80] top.test.nvmequeues0.nvmereplyout.data[79] top.test.nvmequeues0.nvmereplyout.data[78] top.test.nvmequeues0.nvmereplyout.data[77] top.test.nvmequeues0.nvmereplyout.data[76] top.test.nvmequeues0.nvmereplyout.data[75] top.test.nvmequeues0.nvmereplyout.data[74] top.test.nvmequeues0.nvmereplyout.data[73] top.test.nvmequeues0.nvmereplyout.data[72] top.test.nvmequeues0.nvmereplyout.data[71] top.test.nvmequeues0.nvmereplyout.data[70] top.test.nvmequeues0.nvmereplyout.data[69] top.test.nvmequeues0.nvmereplyout.data[68] top.test.nvmequeues0.nvmereplyout.data[67] top.test.nvmequeues0.nvmereplyout.data[66] top.test.nvmequeues0.nvmereplyout.data[65] top.test.nvmequeues0.nvmereplyout.data[64] top.test.nvmequeues0.nvmereplyout.data[63] top.test.nvmequeues0.nvmereplyout.data[62] top.test.nvmequeues0.nvmereplyout.data[61] top.test.nvmequeues0.nvmereplyout.data[60] top.test.nvmequeues0.nvmereplyout.data[59] top.test.nvmequeues0.nvmereplyout.data[58] top.test.nvmequeues0.nvmereplyout.data[57] top.test.nvmequeues0.nvmereplyout.data[56] top.test.nvmequeues0.nvmereplyout.data[55] top.test.nvmequeues0.nvmereplyout.data[54] top.test.nvmequeues0.nvmereplyout.data[53] top.test.nvmequeues0.nvmereplyout.data[52] top.test.nvmequeues0.nvmereplyout.data[51] top.test.nvmequeues0.nvmereplyout.data[50] top.test.nvmequeues0.nvmereplyout.data[49] top.test.nvmequeues0.nvmereplyout.data[48] top.test.nvmequeues0.nvmereplyout.data[47] top.test.nvmequeues0.nvmereplyout.data[46] top.test.nvmequeues0.nvmereplyout.data[45] top.test.nvmequeues0.nvmereplyout.data[44] top.test.nvmequeues0.nvmereplyout.data[43] top.test.nvmequeues0.nvmereplyout.data[42] top.test.nvmequeues0.nvmereplyout.data[41] top.test.nvmequeues0.nvmereplyout.data[40] top.test.nvmequeues0.nvmereplyout.data[39] top.test.nvmequeues0.nvmereplyout.data[38] top.test.nvmequeues0.nvmereplyout.data[37] top.test.nvmequeues0.nvmereplyout.data[36] top.test.nvmequeues0.nvmereplyout.data[35] top.test.nvmequeues0.nvmereplyout.data[34] top.test.nvmequeues0.nvmereplyout.data[33] top.test.nvmequeues0.nvmereplyout.data[32] top.test.nvmequeues0.nvmereplyout.data[31] top.test.nvmequeues0.nvmereplyout.data[30] top.test.nvmequeues0.nvmereplyout.data[29] top.test.nvmequeues0.nvmereplyout.data[28] top.test.nvmequeues0.nvmereplyout.data[27] top.test.nvmequeues0.nvmereplyout.data[26] top.test.nvmequeues0.nvmereplyout.data[25] top.test.nvmequeues0.nvmereplyout.data[24] top.test.nvmequeues0.nvmereplyout.data[23] top.test.nvmequeues0.nvmereplyout.data[22] top.test.nvmequeues0.nvmereplyout.data[21] top.test.nvmequeues0.nvmereplyout.data[20] top.test.nvmequeues0.nvmereplyout.data[19] top.test.nvmequeues0.nvmereplyout.data[18] top.test.nvmequeues0.nvmereplyout.data[17] top.test.nvmequeues0.nvmereplyout.data[16] top.test.nvmequeues0.nvmereplyout.data[15] top.test.nvmequeues0.nvmereplyout.data[14] top.test.nvmequeues0.nvmereplyout.data[13] top.test.nvmequeues0.nvmereplyout.data[12] top.test.nvmequeues0.nvmereplyout.data[11] top.test.nvmequeues0.nvmereplyout.data[10] top.test.nvmequeues0.nvmereplyout.data[9] top.test.nvmequeues0.nvmereplyout.data[8] top.test.nvmequeues0.nvmereplyout.data[7] top.test.nvmequeues0.nvmereplyout.data[6] top.test.nvmequeues0.nvmereplyout.data[5] top.test.nvmequeues0.nvmereplyout.data[4] top.test.nvmequeues0.nvmereplyout.data[3] top.test.nvmequeues0.nvmereplyout.data[2] top.test.nvmequeues0.nvmereplyout.data[1] top.test.nvmequeues0.nvmereplyout.data[0]
+#{top.test.nvmequeues0.nvmereplyout.keep[15:0]} top.test.nvmequeues0.nvmereplyout.keep[15] top.test.nvmequeues0.nvmereplyout.keep[14] top.test.nvmequeues0.nvmereplyout.keep[13] top.test.nvmequeues0.nvmereplyout.keep[12] top.test.nvmequeues0.nvmereplyout.keep[11] top.test.nvmequeues0.nvmereplyout.keep[10] top.test.nvmequeues0.nvmereplyout.keep[9] top.test.nvmequeues0.nvmereplyout.keep[8] top.test.nvmequeues0.nvmereplyout.keep[7] top.test.nvmequeues0.nvmereplyout.keep[6] top.test.nvmequeues0.nvmereplyout.keep[5] top.test.nvmequeues0.nvmereplyout.keep[4] top.test.nvmequeues0.nvmereplyout.keep[3] top.test.nvmequeues0.nvmereplyout.keep[2] top.test.nvmequeues0.nvmereplyout.keep[1] top.test.nvmequeues0.nvmereplyout.keep[0]
+#{top.test.nvmequeues0.nvmedata1[127:0]} top.test.nvmequeues0.nvmedata1[127] top.test.nvmequeues0.nvmedata1[126] top.test.nvmequeues0.nvmedata1[125] top.test.nvmequeues0.nvmedata1[124] top.test.nvmequeues0.nvmedata1[123] top.test.nvmequeues0.nvmedata1[122] top.test.nvmequeues0.nvmedata1[121] top.test.nvmequeues0.nvmedata1[120] top.test.nvmequeues0.nvmedata1[119] top.test.nvmequeues0.nvmedata1[118] top.test.nvmequeues0.nvmedata1[117] top.test.nvmequeues0.nvmedata1[116] top.test.nvmequeues0.nvmedata1[115] top.test.nvmequeues0.nvmedata1[114] top.test.nvmequeues0.nvmedata1[113] top.test.nvmequeues0.nvmedata1[112] top.test.nvmequeues0.nvmedata1[111] top.test.nvmequeues0.nvmedata1[110] top.test.nvmequeues0.nvmedata1[109] top.test.nvmequeues0.nvmedata1[108] top.test.nvmequeues0.nvmedata1[107] top.test.nvmequeues0.nvmedata1[106] top.test.nvmequeues0.nvmedata1[105] top.test.nvmequeues0.nvmedata1[104] top.test.nvmequeues0.nvmedata1[103] top.test.nvmequeues0.nvmedata1[102] top.test.nvmequeues0.nvmedata1[101] top.test.nvmequeues0.nvmedata1[100] top.test.nvmequeues0.nvmedata1[99] top.test.nvmequeues0.nvmedata1[98] top.test.nvmequeues0.nvmedata1[97] top.test.nvmequeues0.nvmedata1[96] top.test.nvmequeues0.nvmedata1[95] top.test.nvmequeues0.nvmedata1[94] top.test.nvmequeues0.nvmedata1[93] top.test.nvmequeues0.nvmedata1[92] top.test.nvmequeues0.nvmedata1[91] top.test.nvmequeues0.nvmedata1[90] top.test.nvmequeues0.nvmedata1[89] top.test.nvmequeues0.nvmedata1[88] top.test.nvmequeues0.nvmedata1[87] top.test.nvmequeues0.nvmedata1[86] top.test.nvmequeues0.nvmedata1[85] top.test.nvmequeues0.nvmedata1[84] top.test.nvmequeues0.nvmedata1[83] top.test.nvmequeues0.nvmedata1[82] top.test.nvmequeues0.nvmedata1[81] top.test.nvmequeues0.nvmedata1[80] top.test.nvmequeues0.nvmedata1[79] top.test.nvmequeues0.nvmedata1[78] top.test.nvmequeues0.nvmedata1[77] top.test.nvmequeues0.nvmedata1[76] top.test.nvmequeues0.nvmedata1[75] top.test.nvmequeues0.nvmedata1[74] top.test.nvmequeues0.nvmedata1[73] top.test.nvmequeues0.nvmedata1[72] top.test.nvmequeues0.nvmedata1[71] top.test.nvmequeues0.nvmedata1[70] top.test.nvmequeues0.nvmedata1[69] top.test.nvmequeues0.nvmedata1[68] top.test.nvmequeues0.nvmedata1[67] top.test.nvmequeues0.nvmedata1[66] top.test.nvmequeues0.nvmedata1[65] top.test.nvmequeues0.nvmedata1[64] top.test.nvmequeues0.nvmedata1[63] top.test.nvmequeues0.nvmedata1[62] top.test.nvmequeues0.nvmedata1[61] top.test.nvmequeues0.nvmedata1[60] top.test.nvmequeues0.nvmedata1[59] top.test.nvmequeues0.nvmedata1[58] top.test.nvmequeues0.nvmedata1[57] top.test.nvmequeues0.nvmedata1[56] top.test.nvmequeues0.nvmedata1[55] top.test.nvmequeues0.nvmedata1[54] top.test.nvmequeues0.nvmedata1[53] top.test.nvmequeues0.nvmedata1[52] top.test.nvmequeues0.nvmedata1[51] top.test.nvmequeues0.nvmedata1[50] top.test.nvmequeues0.nvmedata1[49] top.test.nvmequeues0.nvmedata1[48] top.test.nvmequeues0.nvmedata1[47] top.test.nvmequeues0.nvmedata1[46] top.test.nvmequeues0.nvmedata1[45] top.test.nvmequeues0.nvmedata1[44] top.test.nvmequeues0.nvmedata1[43] top.test.nvmequeues0.nvmedata1[42] top.test.nvmequeues0.nvmedata1[41] top.test.nvmequeues0.nvmedata1[40] top.test.nvmequeues0.nvmedata1[39] top.test.nvmequeues0.nvmedata1[38] top.test.nvmequeues0.nvmedata1[37] top.test.nvmequeues0.nvmedata1[36] top.test.nvmequeues0.nvmedata1[35] top.test.nvmequeues0.nvmedata1[34] top.test.nvmequeues0.nvmedata1[33] top.test.nvmequeues0.nvmedata1[32] top.test.nvmequeues0.nvmedata1[31] top.test.nvmequeues0.nvmedata1[30] top.test.nvmequeues0.nvmedata1[29] top.test.nvmequeues0.nvmedata1[28] top.test.nvmequeues0.nvmedata1[27] top.test.nvmequeues0.nvmedata1[26] top.test.nvmequeues0.nvmedata1[25] top.test.nvmequeues0.nvmedata1[24] top.test.nvmequeues0.nvmedata1[23] top.test.nvmequeues0.nvmedata1[22] top.test.nvmequeues0.nvmedata1[21] top.test.nvmequeues0.nvmedata1[20] top.test.nvmequeues0.nvmedata1[19] top.test.nvmequeues0.nvmedata1[18] top.test.nvmequeues0.nvmedata1[17] top.test.nvmequeues0.nvmedata1[16] top.test.nvmequeues0.nvmedata1[15] top.test.nvmequeues0.nvmedata1[14] top.test.nvmequeues0.nvmedata1[13] top.test.nvmequeues0.nvmedata1[12] top.test.nvmequeues0.nvmedata1[11] top.test.nvmequeues0.nvmedata1[10] top.test.nvmequeues0.nvmedata1[9] top.test.nvmequeues0.nvmedata1[8] top.test.nvmequeues0.nvmedata1[7] top.test.nvmequeues0.nvmedata1[6] top.test.nvmequeues0.nvmedata1[5] top.test.nvmequeues0.nvmedata1[4] top.test.nvmequeues0.nvmedata1[3] top.test.nvmequeues0.nvmedata1[2] top.test.nvmequeues0.nvmedata1[1] top.test.nvmequeues0.nvmedata1[0]
+@23
+#{top.test.nvmequeues0.nvmedata2[127:0]} top.test.nvmequeues0.nvmedata2[127] top.test.nvmequeues0.nvmedata2[126] top.test.nvmequeues0.nvmedata2[125] top.test.nvmequeues0.nvmedata2[124] top.test.nvmequeues0.nvmedata2[123] top.test.nvmequeues0.nvmedata2[122] top.test.nvmequeues0.nvmedata2[121] top.test.nvmequeues0.nvmedata2[120] top.test.nvmequeues0.nvmedata2[119] top.test.nvmequeues0.nvmedata2[118] top.test.nvmequeues0.nvmedata2[117] top.test.nvmequeues0.nvmedata2[116] top.test.nvmequeues0.nvmedata2[115] top.test.nvmequeues0.nvmedata2[114] top.test.nvmequeues0.nvmedata2[113] top.test.nvmequeues0.nvmedata2[112] top.test.nvmequeues0.nvmedata2[111] top.test.nvmequeues0.nvmedata2[110] top.test.nvmequeues0.nvmedata2[109] top.test.nvmequeues0.nvmedata2[108] top.test.nvmequeues0.nvmedata2[107] top.test.nvmequeues0.nvmedata2[106] top.test.nvmequeues0.nvmedata2[105] top.test.nvmequeues0.nvmedata2[104] top.test.nvmequeues0.nvmedata2[103] top.test.nvmequeues0.nvmedata2[102] top.test.nvmequeues0.nvmedata2[101] top.test.nvmequeues0.nvmedata2[100] top.test.nvmequeues0.nvmedata2[99] top.test.nvmequeues0.nvmedata2[98] top.test.nvmequeues0.nvmedata2[97] top.test.nvmequeues0.nvmedata2[96] top.test.nvmequeues0.nvmedata2[95] top.test.nvmequeues0.nvmedata2[94] top.test.nvmequeues0.nvmedata2[93] top.test.nvmequeues0.nvmedata2[92] top.test.nvmequeues0.nvmedata2[91] top.test.nvmequeues0.nvmedata2[90] top.test.nvmequeues0.nvmedata2[89] top.test.nvmequeues0.nvmedata2[88] top.test.nvmequeues0.nvmedata2[87] top.test.nvmequeues0.nvmedata2[86] top.test.nvmequeues0.nvmedata2[85] top.test.nvmequeues0.nvmedata2[84] top.test.nvmequeues0.nvmedata2[83] top.test.nvmequeues0.nvmedata2[82] top.test.nvmequeues0.nvmedata2[81] top.test.nvmequeues0.nvmedata2[80] top.test.nvmequeues0.nvmedata2[79] top.test.nvmequeues0.nvmedata2[78] top.test.nvmequeues0.nvmedata2[77] top.test.nvmequeues0.nvmedata2[76] top.test.nvmequeues0.nvmedata2[75] top.test.nvmequeues0.nvmedata2[74] top.test.nvmequeues0.nvmedata2[73] top.test.nvmequeues0.nvmedata2[72] top.test.nvmequeues0.nvmedata2[71] top.test.nvmequeues0.nvmedata2[70] top.test.nvmequeues0.nvmedata2[69] top.test.nvmequeues0.nvmedata2[68] top.test.nvmequeues0.nvmedata2[67] top.test.nvmequeues0.nvmedata2[66] top.test.nvmequeues0.nvmedata2[65] top.test.nvmequeues0.nvmedata2[64] top.test.nvmequeues0.nvmedata2[63] top.test.nvmequeues0.nvmedata2[62] top.test.nvmequeues0.nvmedata2[61] top.test.nvmequeues0.nvmedata2[60] top.test.nvmequeues0.nvmedata2[59] top.test.nvmequeues0.nvmedata2[58] top.test.nvmequeues0.nvmedata2[57] top.test.nvmequeues0.nvmedata2[56] top.test.nvmequeues0.nvmedata2[55] top.test.nvmequeues0.nvmedata2[54] top.test.nvmequeues0.nvmedata2[53] top.test.nvmequeues0.nvmedata2[52] top.test.nvmequeues0.nvmedata2[51] top.test.nvmequeues0.nvmedata2[50] top.test.nvmequeues0.nvmedata2[49] top.test.nvmequeues0.nvmedata2[48] top.test.nvmequeues0.nvmedata2[47] top.test.nvmequeues0.nvmedata2[46] top.test.nvmequeues0.nvmedata2[45] top.test.nvmequeues0.nvmedata2[44] top.test.nvmequeues0.nvmedata2[43] top.test.nvmequeues0.nvmedata2[42] top.test.nvmequeues0.nvmedata2[41] top.test.nvmequeues0.nvmedata2[40] top.test.nvmequeues0.nvmedata2[39] top.test.nvmequeues0.nvmedata2[38] top.test.nvmequeues0.nvmedata2[37] top.test.nvmequeues0.nvmedata2[36] top.test.nvmequeues0.nvmedata2[35] top.test.nvmequeues0.nvmedata2[34] top.test.nvmequeues0.nvmedata2[33] top.test.nvmequeues0.nvmedata2[32] top.test.nvmequeues0.nvmedata2[31] top.test.nvmequeues0.nvmedata2[30] top.test.nvmequeues0.nvmedata2[29] top.test.nvmequeues0.nvmedata2[28] top.test.nvmequeues0.nvmedata2[27] top.test.nvmequeues0.nvmedata2[26] top.test.nvmequeues0.nvmedata2[25] top.test.nvmequeues0.nvmedata2[24] top.test.nvmequeues0.nvmedata2[23] top.test.nvmequeues0.nvmedata2[22] top.test.nvmequeues0.nvmedata2[21] top.test.nvmequeues0.nvmedata2[20] top.test.nvmequeues0.nvmedata2[19] top.test.nvmequeues0.nvmedata2[18] top.test.nvmequeues0.nvmedata2[17] top.test.nvmequeues0.nvmedata2[16] top.test.nvmequeues0.nvmedata2[15] top.test.nvmequeues0.nvmedata2[14] top.test.nvmequeues0.nvmedata2[13] top.test.nvmequeues0.nvmedata2[12] top.test.nvmequeues0.nvmedata2[11] top.test.nvmequeues0.nvmedata2[10] top.test.nvmequeues0.nvmedata2[9] top.test.nvmequeues0.nvmedata2[8] top.test.nvmequeues0.nvmedata2[7] top.test.nvmequeues0.nvmedata2[6] top.test.nvmequeues0.nvmedata2[5] top.test.nvmequeues0.nvmedata2[4] top.test.nvmequeues0.nvmedata2[3] top.test.nvmequeues0.nvmedata2[2] top.test.nvmequeues0.nvmedata2[1] top.test.nvmequeues0.nvmedata2[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test010-queueram.vhd b/source/DuneNvme/sim/testbench/test010-queueram.vhd
new file mode 100644 (file)
index 0000000..0cff0b5
--- /dev/null
@@ -0,0 +1,128 @@
+--------------------------------------------------------------------------------
+--     Test009-packets.vhd     Simple nvme interface tests
+--     T.Barnaby,      Beam Ltd.       2020-04-14
+--------------------------------------------------------------------------------
+--
+--
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+use work.TestPkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+constant NumQueueEntries: integer      := 2;
+
+component NvmeQueues is
+generic(
+       NumQueueEntries : integer       := NumQueueEntries;     --! The number of entries per queue
+       Simulate        : boolean       := True
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       hostRequestIn   : inout AxisStream := AxisInput;        --! Request queue entries
+       hostRequestPos  : out unsigned(log2(NumQueueEntries)-1 downto 0);               --! Current queue position for last request queue entry
+
+       hostReplyOut    : inout AxisStream := AxisOutput;       --! Replies
+       hostReplyPos    : out unsigned(log2(NumQueueEntries)-1 downto 0);               --! Current queue position for last reply queue entry
+       
+       -- Nvme read/write data interface
+       nvmeRequestIn   : inout AxisStream := AxisInput;        --! Nvme Request queue entries
+       nvmeReplyOut    : inout AxisStream := AxisOutput        --! Nvme Replies
+);
+end component;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal hostReq         : AxisStream    := AxisOutput;
+signal hostReply       : AxisStream    := AxisInput;
+signal nvmeReq         : AxisStream    := AxisOutput;
+signal nvmeReply       : AxisStream    := AxisInput;
+
+signal hostReqPos      : unsigned(log2(NumQueueEntries)-1 downto 0);
+signal hostReplyPos    : unsigned(log2(NumQueueEntries)-1 downto 0);
+
+type NvmeStateType is (NVME_STATE_IDLE, NVME_STATE_WRITEDATA_START, NVME_STATE_WRITEDATA);
+signal nvmeState       : NvmeStateType := NVME_STATE_IDLE;
+signal nvmeRequestHead : PcieRequestHead;
+signal nvmeRequestHead1        : PcieRequestHead;
+signal nvmeReplyHead   : PcieReplyHead;
+signal nvmeCount       : unsigned(10 downto 0);                        -- DWord data send count
+signal nvmeChunkCount  : unsigned(10 downto 0);                        -- DWord data send within a chunk count
+signal nvmeByteCount   : integer;
+signal nvmeData                : std_logic_vector(127 downto 0);
+
+
+begin
+       hostReply.ready <= '1';
+       nvmeReply.ready <= '1';
+       
+       NvmeQueues0 : NvmeQueues
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               hostRequestIn   => hostReq,
+               hostRequestPos  => hostReqPos,
+
+               hostReplyOut    => hostReply,
+               hostReplyPos    => hostReplyPos,
+
+               -- NVMe interface
+               nvmeRequestIn   => nvmeReq,
+               nvmeReplyOut    => nvmeReply
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Write queue entry
+               pcieWriteRequest(clk, hostReq, 1, 1, 0, 16#44#, 16, 16#00100000#);
+               pcieWriteRequest(clk, hostReq, 1, 1, 0, 16#44#, 16, 16#00200000#);
+               pcieWriteRequest(clk, hostReq, 1, 1, 0, 16#44#, 16, 16#00300000#);
+               
+               --pcieWriteRequest(clk, nvmeReq, 1, 1, 0, 16#44#, 1, 16#00400000#);
+               --pcieWriteRequest(clk, nvmeReq, 1, 1, 0, 16#44#, 1, 16#00500000#);
+               pcieReadRequest(clk, nvmeReq, 0, 1, 0, 16#44#, 16);
+
+               wait;
+       end process;
+       
+       stop : process
+       begin
+               wait for 700 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test011-switch.sav b/source/DuneNvme/sim/testbench/test011-switch.sav
new file mode 100644 (file)
index 0000000..809abdf
--- /dev/null
@@ -0,0 +1,64 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Mon Apr 20 16:18:17 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test016-switch/sim/simu/test.ghw"
+[dumpfile_mtime] "Mon Apr 20 16:18:09 2020"
+[dumpfile_size] 9902
+[savefile] "/src/dune/FpgaPlay/test016-switch/sim/testbench/test011-switch.sav"
+[timestart] 0
+[size] 1920 1171
+[pos] -1 -1
+*-26.416382 29500000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.streamrecv.
+[treeopen] top.test.streamrecv.[0].
+[treeopen] top.test.streamrecv.[1].
+[treeopen] top.test.streamsend.
+[treeopen] top.test.streamsend.[0].
+[treeopen] top.test.streamsend.[1].
+[treeopen] top.test.streamswitch0.
+[treeopen] top.test.streamswitch0.streamin.
+[treeopen] top.test.streamswitch0.streamin.[0].
+[treeopen] top.test.streamswitch0.streamout.[1].
+[treeopen] top.test.streamswitch0.streamout.[2].
+[treeopen] top.test.streamswitch0.switchrequest.
+[sst_width] 235
+[signals_width] 675
+[sst_expanded] 1
+[sst_vpaned_height] 342
+@28
+top.test.clk
+top.test.reset
+@420
+top.test.streamswitch0.switchin
+top.test.streamswitch0.switchout
+@28
+top.test.streamsend[0].ready
+top.test.streamsend[0].valid
+top.test.streamsend[0].last
+@22
+#{top.test.streamsend[0].data[127:0]} top.test.streamsend[0].data[127] top.test.streamsend[0].data[126] top.test.streamsend[0].data[125] top.test.streamsend[0].data[124] top.test.streamsend[0].data[123] top.test.streamsend[0].data[122] top.test.streamsend[0].data[121] top.test.streamsend[0].data[120] top.test.streamsend[0].data[119] top.test.streamsend[0].data[118] top.test.streamsend[0].data[117] top.test.streamsend[0].data[116] top.test.streamsend[0].data[115] top.test.streamsend[0].data[114] top.test.streamsend[0].data[113] top.test.streamsend[0].data[112] top.test.streamsend[0].data[111] top.test.streamsend[0].data[110] top.test.streamsend[0].data[109] top.test.streamsend[0].data[108] top.test.streamsend[0].data[107] top.test.streamsend[0].data[106] top.test.streamsend[0].data[105] top.test.streamsend[0].data[104] top.test.streamsend[0].data[103] top.test.streamsend[0].data[102] top.test.streamsend[0].data[101] top.test.streamsend[0].data[100] top.test.streamsend[0].data[99] top.test.streamsend[0].data[98] top.test.streamsend[0].data[97] top.test.streamsend[0].data[96] top.test.streamsend[0].data[95] top.test.streamsend[0].data[94] top.test.streamsend[0].data[93] top.test.streamsend[0].data[92] top.test.streamsend[0].data[91] top.test.streamsend[0].data[90] top.test.streamsend[0].data[89] top.test.streamsend[0].data[88] top.test.streamsend[0].data[87] top.test.streamsend[0].data[86] top.test.streamsend[0].data[85] top.test.streamsend[0].data[84] top.test.streamsend[0].data[83] top.test.streamsend[0].data[82] top.test.streamsend[0].data[81] top.test.streamsend[0].data[80] top.test.streamsend[0].data[79] top.test.streamsend[0].data[78] top.test.streamsend[0].data[77] top.test.streamsend[0].data[76] top.test.streamsend[0].data[75] top.test.streamsend[0].data[74] top.test.streamsend[0].data[73] top.test.streamsend[0].data[72] top.test.streamsend[0].data[71] top.test.streamsend[0].data[70] top.test.streamsend[0].data[69] top.test.streamsend[0].data[68] top.test.streamsend[0].data[67] top.test.streamsend[0].data[66] top.test.streamsend[0].data[65] top.test.streamsend[0].data[64] top.test.streamsend[0].data[63] top.test.streamsend[0].data[62] top.test.streamsend[0].data[61] top.test.streamsend[0].data[60] top.test.streamsend[0].data[59] top.test.streamsend[0].data[58] top.test.streamsend[0].data[57] top.test.streamsend[0].data[56] top.test.streamsend[0].data[55] top.test.streamsend[0].data[54] top.test.streamsend[0].data[53] top.test.streamsend[0].data[52] top.test.streamsend[0].data[51] top.test.streamsend[0].data[50] top.test.streamsend[0].data[49] top.test.streamsend[0].data[48] top.test.streamsend[0].data[47] top.test.streamsend[0].data[46] top.test.streamsend[0].data[45] top.test.streamsend[0].data[44] top.test.streamsend[0].data[43] top.test.streamsend[0].data[42] top.test.streamsend[0].data[41] top.test.streamsend[0].data[40] top.test.streamsend[0].data[39] top.test.streamsend[0].data[38] top.test.streamsend[0].data[37] top.test.streamsend[0].data[36] top.test.streamsend[0].data[35] top.test.streamsend[0].data[34] top.test.streamsend[0].data[33] top.test.streamsend[0].data[32] top.test.streamsend[0].data[31] top.test.streamsend[0].data[30] top.test.streamsend[0].data[29] top.test.streamsend[0].data[28] top.test.streamsend[0].data[27] top.test.streamsend[0].data[26] top.test.streamsend[0].data[25] top.test.streamsend[0].data[24] top.test.streamsend[0].data[23] top.test.streamsend[0].data[22] top.test.streamsend[0].data[21] top.test.streamsend[0].data[20] top.test.streamsend[0].data[19] top.test.streamsend[0].data[18] top.test.streamsend[0].data[17] top.test.streamsend[0].data[16] top.test.streamsend[0].data[15] top.test.streamsend[0].data[14] top.test.streamsend[0].data[13] top.test.streamsend[0].data[12] top.test.streamsend[0].data[11] top.test.streamsend[0].data[10] top.test.streamsend[0].data[9] top.test.streamsend[0].data[8] top.test.streamsend[0].data[7] top.test.streamsend[0].data[6] top.test.streamsend[0].data[5] top.test.streamsend[0].data[4] top.test.streamsend[0].data[3] top.test.streamsend[0].data[2] top.test.streamsend[0].data[1] top.test.streamsend[0].data[0]
+@28
+top.test.streamrecv[0].ready
+top.test.streamrecv[0].valid
+top.test.streamrecv[0].last
+@22
+#{top.test.streamrecv[0].data[127:0]} top.test.streamrecv[0].data[127] top.test.streamrecv[0].data[126] top.test.streamrecv[0].data[125] top.test.streamrecv[0].data[124] top.test.streamrecv[0].data[123] top.test.streamrecv[0].data[122] top.test.streamrecv[0].data[121] top.test.streamrecv[0].data[120] top.test.streamrecv[0].data[119] top.test.streamrecv[0].data[118] top.test.streamrecv[0].data[117] top.test.streamrecv[0].data[116] top.test.streamrecv[0].data[115] top.test.streamrecv[0].data[114] top.test.streamrecv[0].data[113] top.test.streamrecv[0].data[112] top.test.streamrecv[0].data[111] top.test.streamrecv[0].data[110] top.test.streamrecv[0].data[109] top.test.streamrecv[0].data[108] top.test.streamrecv[0].data[107] top.test.streamrecv[0].data[106] top.test.streamrecv[0].data[105] top.test.streamrecv[0].data[104] top.test.streamrecv[0].data[103] top.test.streamrecv[0].data[102] top.test.streamrecv[0].data[101] top.test.streamrecv[0].data[100] top.test.streamrecv[0].data[99] top.test.streamrecv[0].data[98] top.test.streamrecv[0].data[97] top.test.streamrecv[0].data[96] top.test.streamrecv[0].data[95] top.test.streamrecv[0].data[94] top.test.streamrecv[0].data[93] top.test.streamrecv[0].data[92] top.test.streamrecv[0].data[91] top.test.streamrecv[0].data[90] top.test.streamrecv[0].data[89] top.test.streamrecv[0].data[88] top.test.streamrecv[0].data[87] top.test.streamrecv[0].data[86] top.test.streamrecv[0].data[85] top.test.streamrecv[0].data[84] top.test.streamrecv[0].data[83] top.test.streamrecv[0].data[82] top.test.streamrecv[0].data[81] top.test.streamrecv[0].data[80] top.test.streamrecv[0].data[79] top.test.streamrecv[0].data[78] top.test.streamrecv[0].data[77] top.test.streamrecv[0].data[76] top.test.streamrecv[0].data[75] top.test.streamrecv[0].data[74] top.test.streamrecv[0].data[73] top.test.streamrecv[0].data[72] top.test.streamrecv[0].data[71] top.test.streamrecv[0].data[70] top.test.streamrecv[0].data[69] top.test.streamrecv[0].data[68] top.test.streamrecv[0].data[67] top.test.streamrecv[0].data[66] top.test.streamrecv[0].data[65] top.test.streamrecv[0].data[64] top.test.streamrecv[0].data[63] top.test.streamrecv[0].data[62] top.test.streamrecv[0].data[61] top.test.streamrecv[0].data[60] top.test.streamrecv[0].data[59] top.test.streamrecv[0].data[58] top.test.streamrecv[0].data[57] top.test.streamrecv[0].data[56] top.test.streamrecv[0].data[55] top.test.streamrecv[0].data[54] top.test.streamrecv[0].data[53] top.test.streamrecv[0].data[52] top.test.streamrecv[0].data[51] top.test.streamrecv[0].data[50] top.test.streamrecv[0].data[49] top.test.streamrecv[0].data[48] top.test.streamrecv[0].data[47] top.test.streamrecv[0].data[46] top.test.streamrecv[0].data[45] top.test.streamrecv[0].data[44] top.test.streamrecv[0].data[43] top.test.streamrecv[0].data[42] top.test.streamrecv[0].data[41] top.test.streamrecv[0].data[40] top.test.streamrecv[0].data[39] top.test.streamrecv[0].data[38] top.test.streamrecv[0].data[37] top.test.streamrecv[0].data[36] top.test.streamrecv[0].data[35] top.test.streamrecv[0].data[34] top.test.streamrecv[0].data[33] top.test.streamrecv[0].data[32] top.test.streamrecv[0].data[31] top.test.streamrecv[0].data[30] top.test.streamrecv[0].data[29] top.test.streamrecv[0].data[28] top.test.streamrecv[0].data[27] top.test.streamrecv[0].data[26] top.test.streamrecv[0].data[25] top.test.streamrecv[0].data[24] top.test.streamrecv[0].data[23] top.test.streamrecv[0].data[22] top.test.streamrecv[0].data[21] top.test.streamrecv[0].data[20] top.test.streamrecv[0].data[19] top.test.streamrecv[0].data[18] top.test.streamrecv[0].data[17] top.test.streamrecv[0].data[16] top.test.streamrecv[0].data[15] top.test.streamrecv[0].data[14] top.test.streamrecv[0].data[13] top.test.streamrecv[0].data[12] top.test.streamrecv[0].data[11] top.test.streamrecv[0].data[10] top.test.streamrecv[0].data[9] top.test.streamrecv[0].data[8] top.test.streamrecv[0].data[7] top.test.streamrecv[0].data[6] top.test.streamrecv[0].data[5] top.test.streamrecv[0].data[4] top.test.streamrecv[0].data[3] top.test.streamrecv[0].data[2] top.test.streamrecv[0].data[1] top.test.streamrecv[0].data[0]
+@28
+top.test.streamrecv[1].ready
+top.test.streamrecv[1].valid
+top.test.streamrecv[1].last
+@23
+#{top.test.streamrecv[1].keep[15:0]} top.test.streamrecv[1].keep[15] top.test.streamrecv[1].keep[14] top.test.streamrecv[1].keep[13] top.test.streamrecv[1].keep[12] top.test.streamrecv[1].keep[11] top.test.streamrecv[1].keep[10] top.test.streamrecv[1].keep[9] top.test.streamrecv[1].keep[8] top.test.streamrecv[1].keep[7] top.test.streamrecv[1].keep[6] top.test.streamrecv[1].keep[5] top.test.streamrecv[1].keep[4] top.test.streamrecv[1].keep[3] top.test.streamrecv[1].keep[2] top.test.streamrecv[1].keep[1] top.test.streamrecv[1].keep[0]
+@22
+#{top.test.streamrecv[1].data[127:0]} top.test.streamrecv[1].data[127] top.test.streamrecv[1].data[126] top.test.streamrecv[1].data[125] top.test.streamrecv[1].data[124] top.test.streamrecv[1].data[123] top.test.streamrecv[1].data[122] top.test.streamrecv[1].data[121] top.test.streamrecv[1].data[120] top.test.streamrecv[1].data[119] top.test.streamrecv[1].data[118] top.test.streamrecv[1].data[117] top.test.streamrecv[1].data[116] top.test.streamrecv[1].data[115] top.test.streamrecv[1].data[114] top.test.streamrecv[1].data[113] top.test.streamrecv[1].data[112] top.test.streamrecv[1].data[111] top.test.streamrecv[1].data[110] top.test.streamrecv[1].data[109] top.test.streamrecv[1].data[108] top.test.streamrecv[1].data[107] top.test.streamrecv[1].data[106] top.test.streamrecv[1].data[105] top.test.streamrecv[1].data[104] top.test.streamrecv[1].data[103] top.test.streamrecv[1].data[102] top.test.streamrecv[1].data[101] top.test.streamrecv[1].data[100] top.test.streamrecv[1].data[99] top.test.streamrecv[1].data[98] top.test.streamrecv[1].data[97] top.test.streamrecv[1].data[96] top.test.streamrecv[1].data[95] top.test.streamrecv[1].data[94] top.test.streamrecv[1].data[93] top.test.streamrecv[1].data[92] top.test.streamrecv[1].data[91] top.test.streamrecv[1].data[90] top.test.streamrecv[1].data[89] top.test.streamrecv[1].data[88] top.test.streamrecv[1].data[87] top.test.streamrecv[1].data[86] top.test.streamrecv[1].data[85] top.test.streamrecv[1].data[84] top.test.streamrecv[1].data[83] top.test.streamrecv[1].data[82] top.test.streamrecv[1].data[81] top.test.streamrecv[1].data[80] top.test.streamrecv[1].data[79] top.test.streamrecv[1].data[78] top.test.streamrecv[1].data[77] top.test.streamrecv[1].data[76] top.test.streamrecv[1].data[75] top.test.streamrecv[1].data[74] top.test.streamrecv[1].data[73] top.test.streamrecv[1].data[72] top.test.streamrecv[1].data[71] top.test.streamrecv[1].data[70] top.test.streamrecv[1].data[69] top.test.streamrecv[1].data[68] top.test.streamrecv[1].data[67] top.test.streamrecv[1].data[66] top.test.streamrecv[1].data[65] top.test.streamrecv[1].data[64] top.test.streamrecv[1].data[63] top.test.streamrecv[1].data[62] top.test.streamrecv[1].data[61] top.test.streamrecv[1].data[60] top.test.streamrecv[1].data[59] top.test.streamrecv[1].data[58] top.test.streamrecv[1].data[57] top.test.streamrecv[1].data[56] top.test.streamrecv[1].data[55] top.test.streamrecv[1].data[54] top.test.streamrecv[1].data[53] top.test.streamrecv[1].data[52] top.test.streamrecv[1].data[51] top.test.streamrecv[1].data[50] top.test.streamrecv[1].data[49] top.test.streamrecv[1].data[48] top.test.streamrecv[1].data[47] top.test.streamrecv[1].data[46] top.test.streamrecv[1].data[45] top.test.streamrecv[1].data[44] top.test.streamrecv[1].data[43] top.test.streamrecv[1].data[42] top.test.streamrecv[1].data[41] top.test.streamrecv[1].data[40] top.test.streamrecv[1].data[39] top.test.streamrecv[1].data[38] top.test.streamrecv[1].data[37] top.test.streamrecv[1].data[36] top.test.streamrecv[1].data[35] top.test.streamrecv[1].data[34] top.test.streamrecv[1].data[33] top.test.streamrecv[1].data[32] top.test.streamrecv[1].data[31] top.test.streamrecv[1].data[30] top.test.streamrecv[1].data[29] top.test.streamrecv[1].data[28] top.test.streamrecv[1].data[27] top.test.streamrecv[1].data[26] top.test.streamrecv[1].data[25] top.test.streamrecv[1].data[24] top.test.streamrecv[1].data[23] top.test.streamrecv[1].data[22] top.test.streamrecv[1].data[21] top.test.streamrecv[1].data[20] top.test.streamrecv[1].data[19] top.test.streamrecv[1].data[18] top.test.streamrecv[1].data[17] top.test.streamrecv[1].data[16] top.test.streamrecv[1].data[15] top.test.streamrecv[1].data[14] top.test.streamrecv[1].data[13] top.test.streamrecv[1].data[12] top.test.streamrecv[1].data[11] top.test.streamrecv[1].data[10] top.test.streamrecv[1].data[9] top.test.streamrecv[1].data[8] top.test.streamrecv[1].data[7] top.test.streamrecv[1].data[6] top.test.streamrecv[1].data[5] top.test.streamrecv[1].data[4] top.test.streamrecv[1].data[3] top.test.streamrecv[1].data[2] top.test.streamrecv[1].data[1] top.test.streamrecv[1].data[0]
+@28
+top.test.streamswitch0.streamout[2].ready
+top.test.streamswitch0.streamout[2].valid
+top.test.streamswitch0.streamout[2].last
+@22
+#{top.test.streamswitch0.streamout[2].data[127:0]} top.test.streamswitch0.streamout[2].data[127] top.test.streamswitch0.streamout[2].data[126] top.test.streamswitch0.streamout[2].data[125] top.test.streamswitch0.streamout[2].data[124] top.test.streamswitch0.streamout[2].data[123] top.test.streamswitch0.streamout[2].data[122] top.test.streamswitch0.streamout[2].data[121] top.test.streamswitch0.streamout[2].data[120] top.test.streamswitch0.streamout[2].data[119] top.test.streamswitch0.streamout[2].data[118] top.test.streamswitch0.streamout[2].data[117] top.test.streamswitch0.streamout[2].data[116] top.test.streamswitch0.streamout[2].data[115] top.test.streamswitch0.streamout[2].data[114] top.test.streamswitch0.streamout[2].data[113] top.test.streamswitch0.streamout[2].data[112] top.test.streamswitch0.streamout[2].data[111] top.test.streamswitch0.streamout[2].data[110] top.test.streamswitch0.streamout[2].data[109] top.test.streamswitch0.streamout[2].data[108] top.test.streamswitch0.streamout[2].data[107] top.test.streamswitch0.streamout[2].data[106] top.test.streamswitch0.streamout[2].data[105] top.test.streamswitch0.streamout[2].data[104] top.test.streamswitch0.streamout[2].data[103] top.test.streamswitch0.streamout[2].data[102] top.test.streamswitch0.streamout[2].data[101] top.test.streamswitch0.streamout[2].data[100] top.test.streamswitch0.streamout[2].data[99] top.test.streamswitch0.streamout[2].data[98] top.test.streamswitch0.streamout[2].data[97] top.test.streamswitch0.streamout[2].data[96] top.test.streamswitch0.streamout[2].data[95] top.test.streamswitch0.streamout[2].data[94] top.test.streamswitch0.streamout[2].data[93] top.test.streamswitch0.streamout[2].data[92] top.test.streamswitch0.streamout[2].data[91] top.test.streamswitch0.streamout[2].data[90] top.test.streamswitch0.streamout[2].data[89] top.test.streamswitch0.streamout[2].data[88] top.test.streamswitch0.streamout[2].data[87] top.test.streamswitch0.streamout[2].data[86] top.test.streamswitch0.streamout[2].data[85] top.test.streamswitch0.streamout[2].data[84] top.test.streamswitch0.streamout[2].data[83] top.test.streamswitch0.streamout[2].data[82] top.test.streamswitch0.streamout[2].data[81] top.test.streamswitch0.streamout[2].data[80] top.test.streamswitch0.streamout[2].data[79] top.test.streamswitch0.streamout[2].data[78] top.test.streamswitch0.streamout[2].data[77] top.test.streamswitch0.streamout[2].data[76] top.test.streamswitch0.streamout[2].data[75] top.test.streamswitch0.streamout[2].data[74] top.test.streamswitch0.streamout[2].data[73] top.test.streamswitch0.streamout[2].data[72] top.test.streamswitch0.streamout[2].data[71] top.test.streamswitch0.streamout[2].data[70] top.test.streamswitch0.streamout[2].data[69] top.test.streamswitch0.streamout[2].data[68] top.test.streamswitch0.streamout[2].data[67] top.test.streamswitch0.streamout[2].data[66] top.test.streamswitch0.streamout[2].data[65] top.test.streamswitch0.streamout[2].data[64] top.test.streamswitch0.streamout[2].data[63] top.test.streamswitch0.streamout[2].data[62] top.test.streamswitch0.streamout[2].data[61] top.test.streamswitch0.streamout[2].data[60] top.test.streamswitch0.streamout[2].data[59] top.test.streamswitch0.streamout[2].data[58] top.test.streamswitch0.streamout[2].data[57] top.test.streamswitch0.streamout[2].data[56] top.test.streamswitch0.streamout[2].data[55] top.test.streamswitch0.streamout[2].data[54] top.test.streamswitch0.streamout[2].data[53] top.test.streamswitch0.streamout[2].data[52] top.test.streamswitch0.streamout[2].data[51] top.test.streamswitch0.streamout[2].data[50] top.test.streamswitch0.streamout[2].data[49] top.test.streamswitch0.streamout[2].data[48] top.test.streamswitch0.streamout[2].data[47] top.test.streamswitch0.streamout[2].data[46] top.test.streamswitch0.streamout[2].data[45] top.test.streamswitch0.streamout[2].data[44] top.test.streamswitch0.streamout[2].data[43] top.test.streamswitch0.streamout[2].data[42] top.test.streamswitch0.streamout[2].data[41] top.test.streamswitch0.streamout[2].data[40] top.test.streamswitch0.streamout[2].data[39] top.test.streamswitch0.streamout[2].data[38] top.test.streamswitch0.streamout[2].data[37] top.test.streamswitch0.streamout[2].data[36] top.test.streamswitch0.streamout[2].data[35] top.test.streamswitch0.streamout[2].data[34] top.test.streamswitch0.streamout[2].data[33] top.test.streamswitch0.streamout[2].data[32] top.test.streamswitch0.streamout[2].data[31] top.test.streamswitch0.streamout[2].data[30] top.test.streamswitch0.streamout[2].data[29] top.test.streamswitch0.streamout[2].data[28] top.test.streamswitch0.streamout[2].data[27] top.test.streamswitch0.streamout[2].data[26] top.test.streamswitch0.streamout[2].data[25] top.test.streamswitch0.streamout[2].data[24] top.test.streamswitch0.streamout[2].data[23] top.test.streamswitch0.streamout[2].data[22] top.test.streamswitch0.streamout[2].data[21] top.test.streamswitch0.streamout[2].data[20] top.test.streamswitch0.streamout[2].data[19] top.test.streamswitch0.streamout[2].data[18] top.test.streamswitch0.streamout[2].data[17] top.test.streamswitch0.streamout[2].data[16] top.test.streamswitch0.streamout[2].data[15] top.test.streamswitch0.streamout[2].data[14] top.test.streamswitch0.streamout[2].data[13] top.test.streamswitch0.streamout[2].data[12] top.test.streamswitch0.streamout[2].data[11] top.test.streamswitch0.streamout[2].data[10] top.test.streamswitch0.streamout[2].data[9] top.test.streamswitch0.streamout[2].data[8] top.test.streamswitch0.streamout[2].data[7] top.test.streamswitch0.streamout[2].data[6] top.test.streamswitch0.streamout[2].data[5] top.test.streamswitch0.streamout[2].data[4] top.test.streamswitch0.streamout[2].data[3] top.test.streamswitch0.streamout[2].data[2] top.test.streamswitch0.streamout[2].data[1] top.test.streamswitch0.streamout[2].data[0]
+[pattern_trace] 1
+[pattern_trace] 0
diff --git a/source/DuneNvme/sim/testbench/test011-switch.vhd b/source/DuneNvme/sim/testbench/test011-switch.vhd
new file mode 100644 (file)
index 0000000..674e64d
--- /dev/null
@@ -0,0 +1,194 @@
+--------------------------------------------------------------------------------
+--     Test009-packets.vhd     Simple nvme interface tests
+--     T.Barnaby,      Beam Ltd.       2020-04-14
+--------------------------------------------------------------------------------
+--
+--
+--
+library ieee ;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+--use ieee.std_logic_unsigned.all;
+--use ieee.std_logic_arith.all;
+--use ieee.std_logic_misc.all;
+--use ieee.std_logic_textio.all;
+--use std.textio.all; 
+
+library work;
+use work.AxiPkg.all;
+use work.NvmeStoragePkg.all;
+
+entity Test is
+end;
+
+architecture sim of Test is
+
+constant TCQ           : time := 1 ns;
+constant CHUNK_SIZE    : integer := 32;                        -- The data write chunk size in DWords due to PCIe packet size limitations
+constant NumStreams    : integer := 4;
+
+component StreamSwitch is
+generic(
+       NumStreams      : integer       := NumStreams           --! The number of stream
+);
+port (
+       clk             : in std_logic;                         --! The interface clock line
+       reset           : in std_logic;                         --! The active high reset line
+       
+       streamIn        : inout AxisArrayType(0 to NumStreams-1) := (others => AxisInput);      --! Input stream
+       streamOut       : inout AxisArrayType(0 to NumStreams-1) := (others => AxisOutput)      --! Output stream
+);
+end component;
+
+signal clk             : std_logic := '0';
+signal reset           : std_logic := '0';
+
+signal streamSend      : AxisArrayType(0 to NumStreams-1)      := (others => AxisOutput);
+signal streamRecv      : AxisArrayType(0 to NumStreams-1)      := (others => AxisInput);
+
+procedure pcieWriteRequest(signal stream: inout AxisStream; request: in integer; streamNum: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+variable packetHead    : PcieRequestHead;
+variable c             : integer;
+variable d             : integer;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(streamNum, packetHead.stream'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(count, packetHead.count'length);
+       packetHead.request := to_unsigned(request, packetHead.request'length);
+       packetHead.requesterId := to_unsigned(0, packetHead.requesterId'length);
+       c := count / 4;
+       d := data;
+       
+       -- Write address
+       wait until rising_edge(clk);
+       stream.data <= to_stl(packetHead);
+       stream.keep <= concat('1', 16);
+       stream.valid <= '1';
+
+       while(c > 0) loop
+               wait until rising_edge(clk) and (stream.ready = '1');
+               stream.data <= to_stl(0, 96) & to_stl(d, 32);
+               stream.valid <= '1';
+               d := d + 1;
+               c := c - 1;
+       end loop;
+       stream.last <= '1';
+       
+       wait until rising_edge(clk) and (stream.ready = '1');
+       stream.valid <= '0';
+       stream.last <= '0';
+end procedure;
+
+procedure pcieReadRequest(signal stream: inout AxisStream; request: in integer; streamNum: in integer; address: in integer; tag: in integer; count: in integer) is
+variable packetHead    : PcieRequestHead;
+variable c             : integer;
+variable d             : integer;
+begin
+       packetHead.nvme := to_unsigned(0, packetHead.nvme'length);
+       packetHead.stream := to_unsigned(streamNum, packetHead.stream'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(count, packetHead.count'length);
+       packetHead.request := to_unsigned(request, packetHead.request'length);
+       packetHead.requesterId := to_unsigned(0, packetHead.requesterId'length);
+
+       -- Write address
+       wait until rising_edge(clk);
+       stream.data <= to_stl(packetHead);
+       stream.keep <= concat('1', 16);
+       stream.valid <= '1';
+       stream.last <= '1';
+       
+       wait until rising_edge(clk) and (stream.ready = '1');
+       stream.valid <= '0';
+       stream.last <= '0';
+end procedure;
+
+procedure pcieReply(signal stream: inout AxisStream; status: in integer; requesterId: in integer; address: in integer; tag: in integer; count: in integer; data: in integer) is
+variable packetHead    : PcieReplyHead;
+variable c             : integer;
+variable d             : integer;
+begin
+       packetHead.byteCount := to_unsigned(0, packetHead.byteCount'length);
+       packetHead.error := to_unsigned(0, packetHead.error'length);
+       packetHead.address := to_unsigned(address, packetHead.address'length);
+       packetHead.tag := to_unsigned(tag, packetHead.tag'length);
+       packetHead.count := to_unsigned(count, packetHead.count'length);
+       packetHead.status := to_unsigned(status, packetHead.status'length);
+       packetHead.requesterId := to_unsigned(requesterId, packetHead.requesterId'length);
+       c := count / 4;
+       d := data;
+       
+       -- Write address
+       wait until rising_edge(clk);
+       stream.data <= to_stl(d, 32) &to_stl(packetHead);
+       stream.keep <= concat('1', 16);
+       stream.valid <= '1';
+       d := d + 1;
+
+       while(c > 0) loop
+               wait until rising_edge(clk) and (stream.ready = '1');
+               stream.data <= to_stl(0, 96) & to_stl(d, 32);
+               stream.valid <= '1';
+               d := d + 1;
+               c := c - 1;
+       end loop;
+       stream.last <= '1';
+       stream.keep <= concat('0', 4) & concat('1', 12);                -- Hard coded for multiple of 4 data words
+       
+       wait until rising_edge(clk) and (stream.ready = '1');
+       stream.valid <= '0';
+       stream.last <= '0';
+end procedure;
+
+begin
+       set: for i in 1 to NumStreams-1 generate
+               streamSend(i).valid     <= '0';
+               streamRecv(i).ready     <= '1';
+       end generate;
+       streamRecv(0).ready     <= '1';
+       
+       streamSwitch0 : StreamSwitch
+       port map (
+               clk             => clk,
+               reset           => reset,
+
+               streamIn        => streamSend,
+               streamOut       => streamRecv
+       );
+
+       clock : process
+       begin
+               wait for 5 ns; clk  <= not clk;
+       end process clock;
+
+       init : process
+       begin
+               reset   <= '1';
+               wait for 20 ns;
+               reset   <= '0';
+               wait;
+       end process;
+       
+       run : process
+       begin
+               wait until reset = '0';
+               
+               -- Write queue entry
+               pcieWriteRequest(streamSend(0), 1, 1, 16#00000000#, 16#44#, 16, 16#00100000#);
+               pcieWriteRequest(streamSend(0), 1, 2, 16#00000000#, 16#44#, 16, 16#00200000#);
+               pcieWriteRequest(streamSend(0), 1, 3, 16#00000000#, 16#44#, 16, 16#00300000#);
+
+               pcieReply(streamSend(0), 0, 2, 16#00000000#, 16#44#, 16, 16#00300000#);
+
+               wait;
+       end process;
+       
+       stop : process
+       begin
+               wait for 700 ns;
+               assert false report "simulation ended ok" severity failure;
+       end process;
+end;
diff --git a/source/DuneNvme/sim/testbench/test012-hostnvme.sav b/source/DuneNvme/sim/testbench/test012-hostnvme.sav
new file mode 100644 (file)
index 0000000..dff34f9
--- /dev/null
@@ -0,0 +1,101 @@
+[*]
+[*] GTKWave Analyzer v3.3.104 (w)1999-2020 BSI
+[*] Wed Apr 22 07:08:18 2020
+[*]
+[dumpfile] "/src/dune/FpgaPlay/test017-nvmeprocess/sim/simu/test.ghw"
+[dumpfile_mtime] "Wed Apr 22 07:05:34 2020"
+[dumpfile_size] 104380
+[savefile] "/src/dune/FpgaPlay/test017-nvmeprocess/sim/testbench/test012-hostnvme.sav"
+[timestart] 108400000
+[size] 1920 1171
+[pos] -1 -1
+*-26.418455 365000000 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+[treeopen] top.
+[treeopen] top.test.
+[treeopen] top.test.hostrecv.
+[treeopen] top.test.hostsend.
+[treeopen] top.test.nvmestorageunit0.
+[treeopen] top.test.nvmestorageunit0.gen03.
+[treeopen] top.test.nvmestorageunit0.gen03.nvmequeues0.
+[treeopen] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmereplyout.
+[treeopen] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.
+[treeopen] top.test.nvmestorageunit0.sim.
+[treeopen] top.test.nvmestorageunit0.streamrecv.
+[treeopen] top.test.nvmestorageunit0.streamrecv.[0].
+[treeopen] top.test.nvmestorageunit0.streamrecv.[1].
+[treeopen] top.test.nvmestorageunit0.streamsend.
+[treeopen] top.test.nvmestorageunit0.streamsend.[0].
+[sst_width] 371
+[signals_width] 582
+[sst_expanded] 1
+[sst_vpaned_height] 768
+@28
+top.test.clk
+top.test.reset
+top.test.hostsend.ready
+top.test.hostsend.valid
+top.test.hostsend.last
+@22
+#{top.test.hostsend.data[127:0]} top.test.hostsend.data[127] top.test.hostsend.data[126] top.test.hostsend.data[125] top.test.hostsend.data[124] top.test.hostsend.data[123] top.test.hostsend.data[122] top.test.hostsend.data[121] top.test.hostsend.data[120] top.test.hostsend.data[119] top.test.hostsend.data[118] top.test.hostsend.data[117] top.test.hostsend.data[116] top.test.hostsend.data[115] top.test.hostsend.data[114] top.test.hostsend.data[113] top.test.hostsend.data[112] top.test.hostsend.data[111] top.test.hostsend.data[110] top.test.hostsend.data[109] top.test.hostsend.data[108] top.test.hostsend.data[107] top.test.hostsend.data[106] top.test.hostsend.data[105] top.test.hostsend.data[104] top.test.hostsend.data[103] top.test.hostsend.data[102] top.test.hostsend.data[101] top.test.hostsend.data[100] top.test.hostsend.data[99] top.test.hostsend.data[98] top.test.hostsend.data[97] top.test.hostsend.data[96] top.test.hostsend.data[95] top.test.hostsend.data[94] top.test.hostsend.data[93] top.test.hostsend.data[92] top.test.hostsend.data[91] top.test.hostsend.data[90] top.test.hostsend.data[89] top.test.hostsend.data[88] top.test.hostsend.data[87] top.test.hostsend.data[86] top.test.hostsend.data[85] top.test.hostsend.data[84] top.test.hostsend.data[83] top.test.hostsend.data[82] top.test.hostsend.data[81] top.test.hostsend.data[80] top.test.hostsend.data[79] top.test.hostsend.data[78] top.test.hostsend.data[77] top.test.hostsend.data[76] top.test.hostsend.data[75] top.test.hostsend.data[74] top.test.hostsend.data[73] top.test.hostsend.data[72] top.test.hostsend.data[71] top.test.hostsend.data[70] top.test.hostsend.data[69] top.test.hostsend.data[68] top.test.hostsend.data[67] top.test.hostsend.data[66] top.test.hostsend.data[65] top.test.hostsend.data[64] top.test.hostsend.data[63] top.test.hostsend.data[62] top.test.hostsend.data[61] top.test.hostsend.data[60] top.test.hostsend.data[59] top.test.hostsend.data[58] top.test.hostsend.data[57] top.test.hostsend.data[56] top.test.hostsend.data[55] top.test.hostsend.data[54] top.test.hostsend.data[53] top.test.hostsend.data[52] top.test.hostsend.data[51] top.test.hostsend.data[50] top.test.hostsend.data[49] top.test.hostsend.data[48] top.test.hostsend.data[47] top.test.hostsend.data[46] top.test.hostsend.data[45] top.test.hostsend.data[44] top.test.hostsend.data[43] top.test.hostsend.data[42] top.test.hostsend.data[41] top.test.hostsend.data[40] top.test.hostsend.data[39] top.test.hostsend.data[38] top.test.hostsend.data[37] top.test.hostsend.data[36] top.test.hostsend.data[35] top.test.hostsend.data[34] top.test.hostsend.data[33] top.test.hostsend.data[32] top.test.hostsend.data[31] top.test.hostsend.data[30] top.test.hostsend.data[29] top.test.hostsend.data[28] top.test.hostsend.data[27] top.test.hostsend.data[26] top.test.hostsend.data[25] top.test.hostsend.data[24] top.test.hostsend.data[23] top.test.hostsend.data[22] top.test.hostsend.data[21] top.test.hostsend.data[20] top.test.hostsend.data[19] top.test.hostsend.data[18] top.test.hostsend.data[17] top.test.hostsend.data[16] top.test.hostsend.data[15] top.test.hostsend.data[14] top.test.hostsend.data[13] top.test.hostsend.data[12] top.test.hostsend.data[11] top.test.hostsend.data[10] top.test.hostsend.data[9] top.test.hostsend.data[8] top.test.hostsend.data[7] top.test.hostsend.data[6] top.test.hostsend.data[5] top.test.hostsend.data[4] top.test.hostsend.data[3] top.test.hostsend.data[2] top.test.hostsend.data[1] top.test.hostsend.data[0]
+@28
+top.test.hostrecv.ready
+top.test.hostrecv.valid
+top.test.hostrecv.last
+@22
+#{top.test.hostrecv.data[127:0]} top.test.hostrecv.data[127] top.test.hostrecv.data[126] top.test.hostrecv.data[125] top.test.hostrecv.data[124] top.test.hostrecv.data[123] top.test.hostrecv.data[122] top.test.hostrecv.data[121] top.test.hostrecv.data[120] top.test.hostrecv.data[119] top.test.hostrecv.data[118] top.test.hostrecv.data[117] top.test.hostrecv.data[116] top.test.hostrecv.data[115] top.test.hostrecv.data[114] top.test.hostrecv.data[113] top.test.hostrecv.data[112] top.test.hostrecv.data[111] top.test.hostrecv.data[110] top.test.hostrecv.data[109] top.test.hostrecv.data[108] top.test.hostrecv.data[107] top.test.hostrecv.data[106] top.test.hostrecv.data[105] top.test.hostrecv.data[104] top.test.hostrecv.data[103] top.test.hostrecv.data[102] top.test.hostrecv.data[101] top.test.hostrecv.data[100] top.test.hostrecv.data[99] top.test.hostrecv.data[98] top.test.hostrecv.data[97] top.test.hostrecv.data[96] top.test.hostrecv.data[95] top.test.hostrecv.data[94] top.test.hostrecv.data[93] top.test.hostrecv.data[92] top.test.hostrecv.data[91] top.test.hostrecv.data[90] top.test.hostrecv.data[89] top.test.hostrecv.data[88] top.test.hostrecv.data[87] top.test.hostrecv.data[86] top.test.hostrecv.data[85] top.test.hostrecv.data[84] top.test.hostrecv.data[83] top.test.hostrecv.data[82] top.test.hostrecv.data[81] top.test.hostrecv.data[80] top.test.hostrecv.data[79] top.test.hostrecv.data[78] top.test.hostrecv.data[77] top.test.hostrecv.data[76] top.test.hostrecv.data[75] top.test.hostrecv.data[74] top.test.hostrecv.data[73] top.test.hostrecv.data[72] top.test.hostrecv.data[71] top.test.hostrecv.data[70] top.test.hostrecv.data[69] top.test.hostrecv.data[68] top.test.hostrecv.data[67] top.test.hostrecv.data[66] top.test.hostrecv.data[65] top.test.hostrecv.data[64] top.test.hostrecv.data[63] top.test.hostrecv.data[62] top.test.hostrecv.data[61] top.test.hostrecv.data[60] top.test.hostrecv.data[59] top.test.hostrecv.data[58] top.test.hostrecv.data[57] top.test.hostrecv.data[56] top.test.hostrecv.data[55] top.test.hostrecv.data[54] top.test.hostrecv.data[53] top.test.hostrecv.data[52] top.test.hostrecv.data[51] top.test.hostrecv.data[50] top.test.hostrecv.data[49] top.test.hostrecv.data[48] top.test.hostrecv.data[47] top.test.hostrecv.data[46] top.test.hostrecv.data[45] top.test.hostrecv.data[44] top.test.hostrecv.data[43] top.test.hostrecv.data[42] top.test.hostrecv.data[41] top.test.hostrecv.data[40] top.test.hostrecv.data[39] top.test.hostrecv.data[38] top.test.hostrecv.data[37] top.test.hostrecv.data[36] top.test.hostrecv.data[35] top.test.hostrecv.data[34] top.test.hostrecv.data[33] top.test.hostrecv.data[32] top.test.hostrecv.data[31] top.test.hostrecv.data[30] top.test.hostrecv.data[29] top.test.hostrecv.data[28] top.test.hostrecv.data[27] top.test.hostrecv.data[26] top.test.hostrecv.data[25] top.test.hostrecv.data[24] top.test.hostrecv.data[23] top.test.hostrecv.data[22] top.test.hostrecv.data[21] top.test.hostrecv.data[20] top.test.hostrecv.data[19] top.test.hostrecv.data[18] top.test.hostrecv.data[17] top.test.hostrecv.data[16] top.test.hostrecv.data[15] top.test.hostrecv.data[14] top.test.hostrecv.data[13] top.test.hostrecv.data[12] top.test.hostrecv.data[11] top.test.hostrecv.data[10] top.test.hostrecv.data[9] top.test.hostrecv.data[8] top.test.hostrecv.data[7] top.test.hostrecv.data[6] top.test.hostrecv.data[5] top.test.hostrecv.data[4] top.test.hostrecv.data[3] top.test.hostrecv.data[2] top.test.hostrecv.data[1] top.test.hostrecv.data[0]
+@28
+top.test.nvmestorageunit0.streamrecv[0].ready
+top.test.nvmestorageunit0.streamrecv[0].valid
+top.test.nvmestorageunit0.streamrecv[0].last
+@22
+#{top.test.nvmestorageunit0.streamrecv[0].keep[15:0]} top.test.nvmestorageunit0.streamrecv[0].keep[15] top.test.nvmestorageunit0.streamrecv[0].keep[14] top.test.nvmestorageunit0.streamrecv[0].keep[13] top.test.nvmestorageunit0.streamrecv[0].keep[12] top.test.nvmestorageunit0.streamrecv[0].keep[11] top.test.nvmestorageunit0.streamrecv[0].keep[10] top.test.nvmestorageunit0.streamrecv[0].keep[9] top.test.nvmestorageunit0.streamrecv[0].keep[8] top.test.nvmestorageunit0.streamrecv[0].keep[7] top.test.nvmestorageunit0.streamrecv[0].keep[6] top.test.nvmestorageunit0.streamrecv[0].keep[5] top.test.nvmestorageunit0.streamrecv[0].keep[4] top.test.nvmestorageunit0.streamrecv[0].keep[3] top.test.nvmestorageunit0.streamrecv[0].keep[2] top.test.nvmestorageunit0.streamrecv[0].keep[1] top.test.nvmestorageunit0.streamrecv[0].keep[0]
+#{top.test.nvmestorageunit0.streamrecv[0].data[127:0]} top.test.nvmestorageunit0.streamrecv[0].data[127] top.test.nvmestorageunit0.streamrecv[0].data[126] top.test.nvmestorageunit0.streamrecv[0].data[125] top.test.nvmestorageunit0.streamrecv[0].data[124] top.test.nvmestorageunit0.streamrecv[0].data[123] top.test.nvmestorageunit0.streamrecv[0].data[122] top.test.nvmestorageunit0.streamrecv[0].data[121] top.test.nvmestorageunit0.streamrecv[0].data[120] top.test.nvmestorageunit0.streamrecv[0].data[119] top.test.nvmestorageunit0.streamrecv[0].data[118] top.test.nvmestorageunit0.streamrecv[0].data[117] top.test.nvmestorageunit0.streamrecv[0].data[116] top.test.nvmestorageunit0.streamrecv[0].data[115] top.test.nvmestorageunit0.streamrecv[0].data[114] top.test.nvmestorageunit0.streamrecv[0].data[113] top.test.nvmestorageunit0.streamrecv[0].data[112] top.test.nvmestorageunit0.streamrecv[0].data[111] top.test.nvmestorageunit0.streamrecv[0].data[110] top.test.nvmestorageunit0.streamrecv[0].data[109] top.test.nvmestorageunit0.streamrecv[0].data[108] top.test.nvmestorageunit0.streamrecv[0].data[107] top.test.nvmestorageunit0.streamrecv[0].data[106] top.test.nvmestorageunit0.streamrecv[0].data[105] top.test.nvmestorageunit0.streamrecv[0].data[104] top.test.nvmestorageunit0.streamrecv[0].data[103] top.test.nvmestorageunit0.streamrecv[0].data[102] top.test.nvmestorageunit0.streamrecv[0].data[101] top.test.nvmestorageunit0.streamrecv[0].data[100] top.test.nvmestorageunit0.streamrecv[0].data[99] top.test.nvmestorageunit0.streamrecv[0].data[98] top.test.nvmestorageunit0.streamrecv[0].data[97] top.test.nvmestorageunit0.streamrecv[0].data[96] top.test.nvmestorageunit0.streamrecv[0].data[95] top.test.nvmestorageunit0.streamrecv[0].data[94] top.test.nvmestorageunit0.streamrecv[0].data[93] top.test.nvmestorageunit0.streamrecv[0].data[92] top.test.nvmestorageunit0.streamrecv[0].data[91] top.test.nvmestorageunit0.streamrecv[0].data[90] top.test.nvmestorageunit0.streamrecv[0].data[89] top.test.nvmestorageunit0.streamrecv[0].data[88] top.test.nvmestorageunit0.streamrecv[0].data[87] top.test.nvmestorageunit0.streamrecv[0].data[86] top.test.nvmestorageunit0.streamrecv[0].data[85] top.test.nvmestorageunit0.streamrecv[0].data[84] top.test.nvmestorageunit0.streamrecv[0].data[83] top.test.nvmestorageunit0.streamrecv[0].data[82] top.test.nvmestorageunit0.streamrecv[0].data[81] top.test.nvmestorageunit0.streamrecv[0].data[80] top.test.nvmestorageunit0.streamrecv[0].data[79] top.test.nvmestorageunit0.streamrecv[0].data[78] top.test.nvmestorageunit0.streamrecv[0].data[77] top.test.nvmestorageunit0.streamrecv[0].data[76] top.test.nvmestorageunit0.streamrecv[0].data[75] top.test.nvmestorageunit0.streamrecv[0].data[74] top.test.nvmestorageunit0.streamrecv[0].data[73] top.test.nvmestorageunit0.streamrecv[0].data[72] top.test.nvmestorageunit0.streamrecv[0].data[71] top.test.nvmestorageunit0.streamrecv[0].data[70] top.test.nvmestorageunit0.streamrecv[0].data[69] top.test.nvmestorageunit0.streamrecv[0].data[68] top.test.nvmestorageunit0.streamrecv[0].data[67] top.test.nvmestorageunit0.streamrecv[0].data[66] top.test.nvmestorageunit0.streamrecv[0].data[65] top.test.nvmestorageunit0.streamrecv[0].data[64] top.test.nvmestorageunit0.streamrecv[0].data[63] top.test.nvmestorageunit0.streamrecv[0].data[62] top.test.nvmestorageunit0.streamrecv[0].data[61] top.test.nvmestorageunit0.streamrecv[0].data[60] top.test.nvmestorageunit0.streamrecv[0].data[59] top.test.nvmestorageunit0.streamrecv[0].data[58] top.test.nvmestorageunit0.streamrecv[0].data[57] top.test.nvmestorageunit0.streamrecv[0].data[56] top.test.nvmestorageunit0.streamrecv[0].data[55] top.test.nvmestorageunit0.streamrecv[0].data[54] top.test.nvmestorageunit0.streamrecv[0].data[53] top.test.nvmestorageunit0.streamrecv[0].data[52] top.test.nvmestorageunit0.streamrecv[0].data[51] top.test.nvmestorageunit0.streamrecv[0].data[50] top.test.nvmestorageunit0.streamrecv[0].data[49] top.test.nvmestorageunit0.streamrecv[0].data[48] top.test.nvmestorageunit0.streamrecv[0].data[47] top.test.nvmestorageunit0.streamrecv[0].data[46] top.test.nvmestorageunit0.streamrecv[0].data[45] top.test.nvmestorageunit0.streamrecv[0].data[44] top.test.nvmestorageunit0.streamrecv[0].data[43] top.test.nvmestorageunit0.streamrecv[0].data[42] top.test.nvmestorageunit0.streamrecv[0].data[41] top.test.nvmestorageunit0.streamrecv[0].data[40] top.test.nvmestorageunit0.streamrecv[0].data[39] top.test.nvmestorageunit0.streamrecv[0].data[38] top.test.nvmestorageunit0.streamrecv[0].data[37] top.test.nvmestorageunit0.streamrecv[0].data[36] top.test.nvmestorageunit0.streamrecv[0].data[35] top.test.nvmestorageunit0.streamrecv[0].data[34] top.test.nvmestorageunit0.streamrecv[0].data[33] top.test.nvmestorageunit0.streamrecv[0].data[32] top.test.nvmestorageunit0.streamrecv[0].data[31] top.test.nvmestorageunit0.streamrecv[0].data[30] top.test.nvmestorageunit0.streamrecv[0].data[29] top.test.nvmestorageunit0.streamrecv[0].data[28] top.test.nvmestorageunit0.streamrecv[0].data[27] top.test.nvmestorageunit0.streamrecv[0].data[26] top.test.nvmestorageunit0.streamrecv[0].data[25] top.test.nvmestorageunit0.streamrecv[0].data[24] top.test.nvmestorageunit0.streamrecv[0].data[23] top.test.nvmestorageunit0.streamrecv[0].data[22] top.test.nvmestorageunit0.streamrecv[0].data[21] top.test.nvmestorageunit0.streamrecv[0].data[20] top.test.nvmestorageunit0.streamrecv[0].data[19] top.test.nvmestorageunit0.streamrecv[0].data[18] top.test.nvmestorageunit0.streamrecv[0].data[17] top.test.nvmestorageunit0.streamrecv[0].data[16] top.test.nvmestorageunit0.streamrecv[0].data[15] top.test.nvmestorageunit0.streamrecv[0].data[14] top.test.nvmestorageunit0.streamrecv[0].data[13] top.test.nvmestorageunit0.streamrecv[0].data[12] top.test.nvmestorageunit0.streamrecv[0].data[11] top.test.nvmestorageunit0.streamrecv[0].data[10] top.test.nvmestorageunit0.streamrecv[0].data[9] top.test.nvmestorageunit0.streamrecv[0].data[8] top.test.nvmestorageunit0.streamrecv[0].data[7] top.test.nvmestorageunit0.streamrecv[0].data[6] top.test.nvmestorageunit0.streamrecv[0].data[5] top.test.nvmestorageunit0.streamrecv[0].data[4] top.test.nvmestorageunit0.streamrecv[0].data[3] top.test.nvmestorageunit0.streamrecv[0].data[2] top.test.nvmestorageunit0.streamrecv[0].data[1] top.test.nvmestorageunit0.streamrecv[0].data[0]
+@28
+top.test.nvmestorageunit0.streamsend[0].ready
+top.test.nvmestorageunit0.streamsend[0].valid
+@23
+#{top.test.nvmestorageunit0.streamsend[0].keep[15:0]} top.test.nvmestorageunit0.streamsend[0].keep[15] top.test.nvmestorageunit0.streamsend[0].keep[14] top.test.nvmestorageunit0.streamsend[0].keep[13] top.test.nvmestorageunit0.streamsend[0].keep[12] top.test.nvmestorageunit0.streamsend[0].keep[11] top.test.nvmestorageunit0.streamsend[0].keep[10] top.test.nvmestorageunit0.streamsend[0].keep[9] top.test.nvmestorageunit0.streamsend[0].keep[8] top.test.nvmestorageunit0.streamsend[0].keep[7] top.test.nvmestorageunit0.streamsend[0].keep[6] top.test.nvmestorageunit0.streamsend[0].keep[5] top.test.nvmestorageunit0.streamsend[0].keep[4] top.test.nvmestorageunit0.streamsend[0].keep[3] top.test.nvmestorageunit0.streamsend[0].keep[2] top.test.nvmestorageunit0.streamsend[0].keep[1] top.test.nvmestorageunit0.streamsend[0].keep[0]
+@28
+top.test.nvmestorageunit0.streamsend[0].last
+@22
+#{top.test.nvmestorageunit0.streamsend[0].data[127:0]} top.test.nvmestorageunit0.streamsend[0].data[127] top.test.nvmestorageunit0.streamsend[0].data[126] top.test.nvmestorageunit0.streamsend[0].data[125] top.test.nvmestorageunit0.streamsend[0].data[124] top.test.nvmestorageunit0.streamsend[0].data[123] top.test.nvmestorageunit0.streamsend[0].data[122] top.test.nvmestorageunit0.streamsend[0].data[121] top.test.nvmestorageunit0.streamsend[0].data[120] top.test.nvmestorageunit0.streamsend[0].data[119] top.test.nvmestorageunit0.streamsend[0].data[118] top.test.nvmestorageunit0.streamsend[0].data[117] top.test.nvmestorageunit0.streamsend[0].data[116] top.test.nvmestorageunit0.streamsend[0].data[115] top.test.nvmestorageunit0.streamsend[0].data[114] top.test.nvmestorageunit0.streamsend[0].data[113] top.test.nvmestorageunit0.streamsend[0].data[112] top.test.nvmestorageunit0.streamsend[0].data[111] top.test.nvmestorageunit0.streamsend[0].data[110] top.test.nvmestorageunit0.streamsend[0].data[109] top.test.nvmestorageunit0.streamsend[0].data[108] top.test.nvmestorageunit0.streamsend[0].data[107] top.test.nvmestorageunit0.streamsend[0].data[106] top.test.nvmestorageunit0.streamsend[0].data[105] top.test.nvmestorageunit0.streamsend[0].data[104] top.test.nvmestorageunit0.streamsend[0].data[103] top.test.nvmestorageunit0.streamsend[0].data[102] top.test.nvmestorageunit0.streamsend[0].data[101] top.test.nvmestorageunit0.streamsend[0].data[100] top.test.nvmestorageunit0.streamsend[0].data[99] top.test.nvmestorageunit0.streamsend[0].data[98] top.test.nvmestorageunit0.streamsend[0].data[97] top.test.nvmestorageunit0.streamsend[0].data[96] top.test.nvmestorageunit0.streamsend[0].data[95] top.test.nvmestorageunit0.streamsend[0].data[94] top.test.nvmestorageunit0.streamsend[0].data[93] top.test.nvmestorageunit0.streamsend[0].data[92] top.test.nvmestorageunit0.streamsend[0].data[91] top.test.nvmestorageunit0.streamsend[0].data[90] top.test.nvmestorageunit0.streamsend[0].data[89] top.test.nvmestorageunit0.streamsend[0].data[88] top.test.nvmestorageunit0.streamsend[0].data[87] top.test.nvmestorageunit0.streamsend[0].data[86] top.test.nvmestorageunit0.streamsend[0].data[85] top.test.nvmestorageunit0.streamsend[0].data[84] top.test.nvmestorageunit0.streamsend[0].data[83] top.test.nvmestorageunit0.streamsend[0].data[82] top.test.nvmestorageunit0.streamsend[0].data[81] top.test.nvmestorageunit0.streamsend[0].data[80] top.test.nvmestorageunit0.streamsend[0].data[79] top.test.nvmestorageunit0.streamsend[0].data[78] top.test.nvmestorageunit0.streamsend[0].data[77] top.test.nvmestorageunit0.streamsend[0].data[76] top.test.nvmestorageunit0.streamsend[0].data[75] top.test.nvmestorageunit0.streamsend[0].data[74] top.test.nvmestorageunit0.streamsend[0].data[73] top.test.nvmestorageunit0.streamsend[0].data[72] top.test.nvmestorageunit0.streamsend[0].data[71] top.test.nvmestorageunit0.streamsend[0].data[70] top.test.nvmestorageunit0.streamsend[0].data[69] top.test.nvmestorageunit0.streamsend[0].data[68] top.test.nvmestorageunit0.streamsend[0].data[67] top.test.nvmestorageunit0.streamsend[0].data[66] top.test.nvmestorageunit0.streamsend[0].data[65] top.test.nvmestorageunit0.streamsend[0].data[64] top.test.nvmestorageunit0.streamsend[0].data[63] top.test.nvmestorageunit0.streamsend[0].data[62] top.test.nvmestorageunit0.streamsend[0].data[61] top.test.nvmestorageunit0.streamsend[0].data[60] top.test.nvmestorageunit0.streamsend[0].data[59] top.test.nvmestorageunit0.streamsend[0].data[58] top.test.nvmestorageunit0.streamsend[0].data[57] top.test.nvmestorageunit0.streamsend[0].data[56] top.test.nvmestorageunit0.streamsend[0].data[55] top.test.nvmestorageunit0.streamsend[0].data[54] top.test.nvmestorageunit0.streamsend[0].data[53] top.test.nvmestorageunit0.streamsend[0].data[52] top.test.nvmestorageunit0.streamsend[0].data[51] top.test.nvmestorageunit0.streamsend[0].data[50] top.test.nvmestorageunit0.streamsend[0].data[49] top.test.nvmestorageunit0.streamsend[0].data[48] top.test.nvmestorageunit0.streamsend[0].data[47] top.test.nvmestorageunit0.streamsend[0].data[46] top.test.nvmestorageunit0.streamsend[0].data[45] top.test.nvmestorageunit0.streamsend[0].data[44] top.test.nvmestorageunit0.streamsend[0].data[43] top.test.nvmestorageunit0.streamsend[0].data[42] top.test.nvmestorageunit0.streamsend[0].data[41] top.test.nvmestorageunit0.streamsend[0].data[40] top.test.nvmestorageunit0.streamsend[0].data[39] top.test.nvmestorageunit0.streamsend[0].data[38] top.test.nvmestorageunit0.streamsend[0].data[37] top.test.nvmestorageunit0.streamsend[0].data[36] top.test.nvmestorageunit0.streamsend[0].data[35] top.test.nvmestorageunit0.streamsend[0].data[34] top.test.nvmestorageunit0.streamsend[0].data[33] top.test.nvmestorageunit0.streamsend[0].data[32] top.test.nvmestorageunit0.streamsend[0].data[31] top.test.nvmestorageunit0.streamsend[0].data[30] top.test.nvmestorageunit0.streamsend[0].data[29] top.test.nvmestorageunit0.streamsend[0].data[28] top.test.nvmestorageunit0.streamsend[0].data[27] top.test.nvmestorageunit0.streamsend[0].data[26] top.test.nvmestorageunit0.streamsend[0].data[25] top.test.nvmestorageunit0.streamsend[0].data[24] top.test.nvmestorageunit0.streamsend[0].data[23] top.test.nvmestorageunit0.streamsend[0].data[22] top.test.nvmestorageunit0.streamsend[0].data[21] top.test.nvmestorageunit0.streamsend[0].data[20] top.test.nvmestorageunit0.streamsend[0].data[19] top.test.nvmestorageunit0.streamsend[0].data[18] top.test.nvmestorageunit0.streamsend[0].data[17] top.test.nvmestorageunit0.streamsend[0].data[16] top.test.nvmestorageunit0.streamsend[0].data[15] top.test.nvmestorageunit0.streamsend[0].data[14] top.test.nvmestorageunit0.streamsend[0].data[13] top.test.nvmestorageunit0.streamsend[0].data[12] top.test.nvmestorageunit0.streamsend[0].data[11] top.test.nvmestorageunit0.streamsend[0].data[10] top.test.nvmestorageunit0.streamsend[0].data[9] top.test.nvmestorageunit0.streamsend[0].data[8] top.test.nvmestorageunit0.streamsend[0].data[7] top.test.nvmestorageunit0.streamsend[0].data[6] top.test.nvmestorageunit0.streamsend[0].data[5] top.test.nvmestorageunit0.streamsend[0].data[4] top.test.nvmestorageunit0.streamsend[0].data[3] top.test.nvmestorageunit0.streamsend[0].data[2] top.test.nvmestorageunit0.streamsend[0].data[1] top.test.nvmestorageunit0.streamsend[0].data[0]
+@28
+top.test.nvmestorageunit0.configstart
+top.test.nvmestorageunit0.streamrecv[1].ready
+top.test.nvmestorageunit0.streamrecv[1].valid
+top.test.nvmestorageunit0.streamrecv[1].last
+@22
+#{top.test.nvmestorageunit0.streamrecv[1].data[127:0]} top.test.nvmestorageunit0.streamrecv[1].data[127] top.test.nvmestorageunit0.streamrecv[1].data[126] top.test.nvmestorageunit0.streamrecv[1].data[125] top.test.nvmestorageunit0.streamrecv[1].data[124] top.test.nvmestorageunit0.streamrecv[1].data[123] top.test.nvmestorageunit0.streamrecv[1].data[122] top.test.nvmestorageunit0.streamrecv[1].data[121] top.test.nvmestorageunit0.streamrecv[1].data[120] top.test.nvmestorageunit0.streamrecv[1].data[119] top.test.nvmestorageunit0.streamrecv[1].data[118] top.test.nvmestorageunit0.streamrecv[1].data[117] top.test.nvmestorageunit0.streamrecv[1].data[116] top.test.nvmestorageunit0.streamrecv[1].data[115] top.test.nvmestorageunit0.streamrecv[1].data[114] top.test.nvmestorageunit0.streamrecv[1].data[113] top.test.nvmestorageunit0.streamrecv[1].data[112] top.test.nvmestorageunit0.streamrecv[1].data[111] top.test.nvmestorageunit0.streamrecv[1].data[110] top.test.nvmestorageunit0.streamrecv[1].data[109] top.test.nvmestorageunit0.streamrecv[1].data[108] top.test.nvmestorageunit0.streamrecv[1].data[107] top.test.nvmestorageunit0.streamrecv[1].data[106] top.test.nvmestorageunit0.streamrecv[1].data[105] top.test.nvmestorageunit0.streamrecv[1].data[104] top.test.nvmestorageunit0.streamrecv[1].data[103] top.test.nvmestorageunit0.streamrecv[1].data[102] top.test.nvmestorageunit0.streamrecv[1].data[101] top.test.nvmestorageunit0.streamrecv[1].data[100] top.test.nvmestorageunit0.streamrecv[1].data[99] top.test.nvmestorageunit0.streamrecv[1].data[98] top.test.nvmestorageunit0.streamrecv[1].data[97] top.test.nvmestorageunit0.streamrecv[1].data[96] top.test.nvmestorageunit0.streamrecv[1].data[95] top.test.nvmestorageunit0.streamrecv[1].data[94] top.test.nvmestorageunit0.streamrecv[1].data[93] top.test.nvmestorageunit0.streamrecv[1].data[92] top.test.nvmestorageunit0.streamrecv[1].data[91] top.test.nvmestorageunit0.streamrecv[1].data[90] top.test.nvmestorageunit0.streamrecv[1].data[89] top.test.nvmestorageunit0.streamrecv[1].data[88] top.test.nvmestorageunit0.streamrecv[1].data[87] top.test.nvmestorageunit0.streamrecv[1].data[86] top.test.nvmestorageunit0.streamrecv[1].data[85] top.test.nvmestorageunit0.streamrecv[1].data[84] top.test.nvmestorageunit0.streamrecv[1].data[83] top.test.nvmestorageunit0.streamrecv[1].data[82] top.test.nvmestorageunit0.streamrecv[1].data[81] top.test.nvmestorageunit0.streamrecv[1].data[80] top.test.nvmestorageunit0.streamrecv[1].data[79] top.test.nvmestorageunit0.streamrecv[1].data[78] top.test.nvmestorageunit0.streamrecv[1].data[77] top.test.nvmestorageunit0.streamrecv[1].data[76] top.test.nvmestorageunit0.streamrecv[1].data[75] top.test.nvmestorageunit0.streamrecv[1].data[74] top.test.nvmestorageunit0.streamrecv[1].data[73] top.test.nvmestorageunit0.streamrecv[1].data[72] top.test.nvmestorageunit0.streamrecv[1].data[71] top.test.nvmestorageunit0.streamrecv[1].data[70] top.test.nvmestorageunit0.streamrecv[1].data[69] top.test.nvmestorageunit0.streamrecv[1].data[68] top.test.nvmestorageunit0.streamrecv[1].data[67] top.test.nvmestorageunit0.streamrecv[1].data[66] top.test.nvmestorageunit0.streamrecv[1].data[65] top.test.nvmestorageunit0.streamrecv[1].data[64] top.test.nvmestorageunit0.streamrecv[1].data[63] top.test.nvmestorageunit0.streamrecv[1].data[62] top.test.nvmestorageunit0.streamrecv[1].data[61] top.test.nvmestorageunit0.streamrecv[1].data[60] top.test.nvmestorageunit0.streamrecv[1].data[59] top.test.nvmestorageunit0.streamrecv[1].data[58] top.test.nvmestorageunit0.streamrecv[1].data[57] top.test.nvmestorageunit0.streamrecv[1].data[56] top.test.nvmestorageunit0.streamrecv[1].data[55] top.test.nvmestorageunit0.streamrecv[1].data[54] top.test.nvmestorageunit0.streamrecv[1].data[53] top.test.nvmestorageunit0.streamrecv[1].data[52] top.test.nvmestorageunit0.streamrecv[1].data[51] top.test.nvmestorageunit0.streamrecv[1].data[50] top.test.nvmestorageunit0.streamrecv[1].data[49] top.test.nvmestorageunit0.streamrecv[1].data[48] top.test.nvmestorageunit0.streamrecv[1].data[47] top.test.nvmestorageunit0.streamrecv[1].data[46] top.test.nvmestorageunit0.streamrecv[1].data[45] top.test.nvmestorageunit0.streamrecv[1].data[44] top.test.nvmestorageunit0.streamrecv[1].data[43] top.test.nvmestorageunit0.streamrecv[1].data[42] top.test.nvmestorageunit0.streamrecv[1].data[41] top.test.nvmestorageunit0.streamrecv[1].data[40] top.test.nvmestorageunit0.streamrecv[1].data[39] top.test.nvmestorageunit0.streamrecv[1].data[38] top.test.nvmestorageunit0.streamrecv[1].data[37] top.test.nvmestorageunit0.streamrecv[1].data[36] top.test.nvmestorageunit0.streamrecv[1].data[35] top.test.nvmestorageunit0.streamrecv[1].data[34] top.test.nvmestorageunit0.streamrecv[1].data[33] top.test.nvmestorageunit0.streamrecv[1].data[32] top.test.nvmestorageunit0.streamrecv[1].data[31] top.test.nvmestorageunit0.streamrecv[1].data[30] top.test.nvmestorageunit0.streamrecv[1].data[29] top.test.nvmestorageunit0.streamrecv[1].data[28] top.test.nvmestorageunit0.streamrecv[1].data[27] top.test.nvmestorageunit0.streamrecv[1].data[26] top.test.nvmestorageunit0.streamrecv[1].data[25] top.test.nvmestorageunit0.streamrecv[1].data[24] top.test.nvmestorageunit0.streamrecv[1].data[23] top.test.nvmestorageunit0.streamrecv[1].data[22] top.test.nvmestorageunit0.streamrecv[1].data[21] top.test.nvmestorageunit0.streamrecv[1].data[20] top.test.nvmestorageunit0.streamrecv[1].data[19] top.test.nvmestorageunit0.streamrecv[1].data[18] top.test.nvmestorageunit0.streamrecv[1].data[17] top.test.nvmestorageunit0.streamrecv[1].data[16] top.test.nvmestorageunit0.streamrecv[1].data[15] top.test.nvmestorageunit0.streamrecv[1].data[14] top.test.nvmestorageunit0.streamrecv[1].data[13] top.test.nvmestorageunit0.streamrecv[1].data[12] top.test.nvmestorageunit0.streamrecv[1].data[11] top.test.nvmestorageunit0.streamrecv[1].data[10] top.test.nvmestorageunit0.streamrecv[1].data[9] top.test.nvmestorageunit0.streamrecv[1].data[8] top.test.nvmestorageunit0.streamrecv[1].data[7] top.test.nvmestorageunit0.streamrecv[1].data[6] top.test.nvmestorageunit0.streamrecv[1].data[5] top.test.nvmestorageunit0.streamrecv[1].data[4] top.test.nvmestorageunit0.streamrecv[1].data[3] top.test.nvmestorageunit0.streamrecv[1].data[2] top.test.nvmestorageunit0.streamrecv[1].data[1] top.test.nvmestorageunit0.streamrecv[1].data[0]
+@800200
+-NvmeQueue
+@28
+top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.ready
+top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.valid
+top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.last
+@22
+#{top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[127:0]} top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[127] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[126] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[125] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[124] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[123] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[122] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[121] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[120] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[119] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[118] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[117] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[116] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[115] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[114] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[113] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[112] top.test.nvmestorageunit0.gen03.nvmequeues0.nvmerequestin.data[111] t