Commit Graph
59 Commits
Author SHA1 Message Date
Palmer DabbeltandPalmer Dabbelt 2f70136f90 Fix the Nasti to Smi Converter for single-word Nasti busses
There's a register that tracks what word within a Nasti transaction a
Smi response cooresponds to, since Smi itself doesn't have any
multi-word stuff.  This breaks the single-word Nasti to Smi converter
due to what's essentially a 0-width wire bug: it ends up doing something
like

  word_offset_into_nasti := nasti_address(3, 3)

when "word_offset_into_nasti" should really be a 0-bit register, but due
to some log2Up block size calculation logic it's actually a 1-bit
register.  Thus, this expression ends up grabbing a bit of the address,
which causes odd addresses to get buffered incorrectly.

My fix is to just special-case the "Nasti bus width is the same as Smi
bus width" case.
2016-07-12 09:31:21 -07:00
Palmer Dabbelt 68ba33369b Default to Chisel 3
Now that we can test Chisel 3 on Travis, I think it's time to turn it on
for everyone else.
2016-06-15 14:01:43 -07:00
Palmer Dabbelt e617bb8aa8 Start testing Chisel 3 in Travis
Now that we have verilator support we can start testing the Chisel 3
Verilog on Travis.  This disables Chisel 2 Travis tests because they're
too slow.
2016-06-15 14:01:22 -07:00
Palmer Dabbelt f6432395cb Allow the regressions to run more than once 2016-06-14 21:21:44 -07:00
Palmer Dabbelt 1525b4717e Install Verilator when building the emulator
We need a fairly new version of Verilator, so I just added a rule to
download and install it on all systems.
2016-06-14 21:21:43 -07:00
Palmer Dabbelt 571b5b2093 Prevent sbt from running multiple times in emulator
If you have multi-target rules that don't have %s in them, make
interprets that as "run this recipe multiple times, once to produce each
target".  If you have %s in the rules, then make interprets it as "run
this recipe once to produce all targets".  We want the second one.
2016-06-14 11:59:20 -07:00
Palmer DabbeltandAndrew Waterman e6c4372332 Fix "make run-asm-tests" for Chisel 3
This was just a missing Makefrag-verilog dependency (the .d file).
2016-06-06 21:36:55 -07:00
Palmer DabbeltandPalmer Dabbelt 39cf945efb Use Chisel 3 to build verilog on Travis
Chisel 3 can't build the C++ emulator, so we currently can't have direct
support for testing RocketChip.  We can at least test to see if the
Verilog builds when run through Chisel 3, which this patch does.
2016-03-24 12:00:13 -07:00
Palmer DabbeltandPalmer Dabbelt cddfdf0929 Add CHISEL_VERSION make argument
This allows users to specify if they want to build RocketChip against
Chisel 2 or 3.  Since Chisel 3 is now open source we can add these
submodule pointers directly to avoid a fork of upstream.
2016-03-24 12:00:13 -07:00
Palmer DabbeltandPalmer Dabbelt d697559754 Correct the polarity of the non-backup-memory HTIF
This fails in FIRRTL because <> has polarity now.
2016-03-24 12:00:13 -07:00
Palmer DabbeltandPalmer Dabbelt 4744deec28 Fix the SCR file for Chisel 3 2016-03-24 12:00:13 -07:00
Palmer DabbeltandPalmer Dabbelt 476db6ef39 Move to a newer Scala version
Chisel3 needs a newer version of Scala to run correctly.
2016-03-24 12:00:13 -07:00
Palmer DabbeltandPalmer Dabbelt c9e1b72972 Don't assign SInt(-1) to a UInt 2016-03-23 16:24:27 -07:00
Palmer Dabbelt aa22f175c3 Add cloneType methods for Chisel3 2016-03-21 13:35:02 -07:00
Palmer Dabbelt c989ec5813 Fix the SCR file for Chisel 3 2016-03-21 11:55:40 -07:00
Palmer Dabbelt 1344d09cef Fix the SCR file for Chisel 3 2016-03-21 11:55:18 -07:00
Palmer Dabbelt 50f61687de Work around Chisel3's lack of 0-width wires
This is super ugly, but it's necessary to get Chisel3 to compile.  Note
that this still fails simulations in Chisel3, so it might be wrong.
2016-03-14 22:50:37 -07:00
Palmer DabbeltandHenry Cook e2185d40f6 Avoid right-shift by larger that the bit width
FIRRTL bails out on this.  There's an outstanding bug, this is just a
workaround.  See https://github.com/ucb-bar/firrtl/issues/69
2016-03-10 17:37:40 -08:00
Palmer DabbeltandHenry Cook 8c7e29eacd Avoid generating 0-width UInts
Chisel3 requires a 1-bit width to represent UInt(0).
2016-03-10 17:37:40 -08:00
Palmer Dabbelt bf06ba0d37 Pass a BitPat to Lookup
This is the only supported type of Lookup in Chisel 3.
2016-03-05 18:50:56 -08:00
Palmer DabbeltandHenry Cook 4acdc67485 Add an assertion in the NastiIOTileLink converter
This uses an reorder queue but doesn't check to ensure that the data it fetches
from the queue is actually in the queue before using it.  It seems that during
correct operation this never breaks, but I'm trying to get the backup memory
port working again and this assertion fails with it enabled (without the
assertion the core just gets a bogus data beat dies).

Closes #16
2016-03-01 12:23:32 -08:00
Palmer Dabbelt a0f3189c74 Change MIF_DATA_BITS back to 64
It turns out the Chisel C++ backend can't emit correct initialization
code for a 128 bit wide NastiROM.  Rather than trying to fix Chisel, I'm
just going to hack up the backup memory port Verilog harness a bit more
to make it work.

Note that the backup memory port Verilog already couldn't take arbitrary
parameters for MIF_*, so it's not like we're losing any flexibility
here.
2016-02-27 11:43:44 -08:00
Palmer Dabbelt 9ea8c4e781 Add an 8-channel backup memory port config
Now that the backup memory port works I want to test it.
2016-02-27 10:56:13 -08:00
Palmer Dabbelt 7319f430d0 Fix the backup memory port on multiple-channel configs
The backup memory port doesn't work on multi-channel configurations, it
just screws up the Nasti tag bits.  This patch always instantiates a
single-channel backup memory port, which relies on the memory channel
selector to only enable a single memory channel when the backup memory
port is enabled.  There are some assertions to make sure this happens,
as otherwise memory gets silently corrupted.

While this is a bit of a hack, the backup memory port will be going away
soon so I don't want to spend a whole lot of time fixing it.  The
generated hardware is actually very similar: we used to elaborate a
Nasti arbiter inside the backup memory support, now there's one outside
of it instead.
2016-02-27 10:47:52 -08:00
Palmer Dabbelt 7c0c48fac4 Resurrect the backup memory port
We need this to work for our chip, and it's not been tested in a long
time in upstream -- it didn't even used to build since the Nasti
conversion.  This makes a few changes:

 * Rather than calling the backup memory port parameters MEM_*, it calls
   them MIF_* (to match the MIT* paramater objects).  A new name was
   necessary because the Nasti stuff is now dumped as MEM_*, which has
   similar names but incompatible values.

 * p(MIFDataBits) was changed back to 128, as otherwise the backup
   memory port doesn't work (it only send half a TileLink transaction).
   64 also causes readmemh to bail out, but changing the elf2hex parameters
   works around that.

 * A configuration was added that enabled the backup memory port in the
   tester.  While this is kind of an awkward way to do it, I want to
   make sure I can start testing this regularly and this makes it easy to
   integrate.
2016-02-27 10:46:56 -08:00
Palmer Dabbelt 8c73d10fe1 Support SCR address generation with __OFFSET at the end 2016-02-25 21:57:37 -08:00
Palmer Dabbelt ebffd69b8e Provide both __OFFSET and __PADDR for SCR entries
This was recently changed to write out physical addresses for SCR file entries,
but to bring up the chip we need SCR offsets so we can write the uncore SCR
file over HTIF.  This changes the map generator to generate both.

Without this change things happened to work anyway because the high bits were
getting dropped by the SCR file.
2016-02-25 21:48:32 -08:00
Palmer Dabbelt 58d6af207f Cache all the Scala build directories
I hope this will result in Travis building our stuff a lot faster, since this
currently takes about half the time.
2016-02-23 16:47:48 -08:00
Palmer Dabbelt c263c636b3 Actually reference all the tests from RISCV 2016-02-23 16:05:27 -08:00
Palmer Dabbelt ad62afd9ca Add zscale to regression submodule list 2016-02-23 12:58:08 -08:00
Palmer Dabbelt bae4c0c0c9 Point Testing to $RISCV/... not $base_dir/...
This uses the compiled tests in RISCV, which match the rest of the toolchain.
2016-02-23 10:58:51 -08:00
Palmer Dabbelt 28c91795c3 Enable travis caching 2016-02-23 10:58:51 -08:00
Palmer Dabbelt edd0b3b824 Move travis to the regression Makefile
We want to add support for caching riscv-tools builds on Travis and the easiest
way to do so looks like to jus go ahead and use
2016-02-23 10:58:51 -08:00
Palmer Dabbelt a073c37e36 The FPGA doesn't have an HTIF clock divider
We used to just be writing the SCR anyway, but now that the SCR maps are
automatically defined VCS will detect the missing SCR and bail out when
compiling test harness code.  This patch just doesn't write the HTIF SCR when
there isn't one.
2016-02-22 16:15:07 -08:00
Palmer Dabbelt 926efd0cab Allow the number of memory channels to be picked at runtime
We're building a chip with 8 memory channels.  Since this will require a
complicated test setup we want to also be able to bring up the chip with fewer
memory channels.  This commit adds a SCR that controls the number of active
memory channels on a chip.  Toggling this SCR will scramble memory and drop
Nasti messages, so it's only possible to change while the chip is booting.

By default this just adds a 1-bit SCR, which essentially no extra logic.

When multiple memory channel configurations are enabled at elaboration time, a
NastiMemoryInterconnect is generated for each channel configuration.  The
number of outstanding misses is increased to coorespond to the maximum number
of banks per memory channel (added as a parameter), which I believe is
necessary to avoid deadlock in the memory system.

A configuration is added that supports 8 memory channels but has only 1 enabled
by default.
2016-02-17 15:23:30 -08:00
Palmer Dabbelt 95b065153d Add CDE to the submodule list
Without this I don't get rebuilds when toching a file in CDE.
2016-02-17 15:23:25 -08:00
Palmer Dabbelt db9de94588 Generate and use SCR address header files
This uses the new SCRFile changes to generate a header file containing a list
of all the SCRs in a core to remove the magic constant "63" (the HTIF clock
divider control register) and replace it with a generated number (which is
still 63).
2016-02-17 15:23:18 -08:00
Palmer Dabbelt 1ac9f59b31 Allow SCR files to be enumerated in C headers
Right now there's no way to ensure that SCR addresses don't conflict within
RocketChip.  Since upstream only has one of them this isn't a big deal, but we
want to add a whole bunch more to control all the IP on Hurricane.

This patch adds some Scala code to allocate registers inside the SCR file,
ensure they don't conflict, to provide names for SCRs, attach registers to the
SCR file, and generate a C header file that contains the addresses of every SCR
on a chip.

With this patch we'll be able to get rid of that constant in the testbench.
This also allows us to kill one of the Raven diffs, which is does pretty much
the same thing (just in a second SCR file, and hacked in).
2016-02-17 14:21:12 -08:00
Palmer Dabbelt 770f2742de Make NastiMemorySelector a subtype of NastiInterconnect
When RocketChip has a single memory configuration I want to ensure no extra
hardware is being generated by only instantiating a NastiMemoryInterconnect
rather than a NastiMemorySelector, which I believe will insert a Mux with 0
when there is only one config (because there aren't any 0-width wires allowed).
2016-02-17 10:41:01 -08:00
Palmer Dabbelt 6b39db8ce6 Add "NastiMemorySelector", a memory interconnect
On Hurricane we want to be able to support multiple memory channels but have a
fallback to fewer, since the full configuration is going to require a
complicated FPGA setup.  This adds another sort of interconnect that can switch
between having different numbers of top-level memory channels active at chip
boot time.

This interconnect is a bit funny: changing the select input when there is
memory traffic is a bad idea.  This is fine for this use case, since we really
only care about changing the memory configuration at boot time -- since it'll
scramble the memory of the machine it's not so useful, anyway.

The advantage is that we don't have to have a full 8x8 Nasti crossbar in our
chip, which would be fairly expensive.  Changing the crossbar would garble
memory as well, so it's not like it would add any extra functionality.
2016-02-16 23:59:01 -08:00
Palmer Dabbelt 98baf401a6 Bump junctions, for a chisel3 fix 2016-02-08 13:33:05 -08:00
Palmer Dabbelt b2ed35e8aa Print a better error on missing config classes
Without this you don't actually see what config class you tried to use, which
makes it hard to grep around Makefiles to see why things are broken.
2016-02-05 09:59:02 -08:00
Palmer Dabbelt 8422aaf6fc Add a "/" when targetDir doesn't have one
This isn't Chisel 3 specific, but that's what I happened to do in the Chisel 3
Driver wrapper.
2016-02-05 09:57:47 -08:00
Palmer Dabbelt 3bb0f11e6c Chisel3 <> reverse fix 2016-02-05 09:56:42 -08:00
Palmer Dabbelt 62257e0b04 Uncomment MemSerializedIO.cloneType()
Not sure why this was commented, but when I build this against Chisel3 it fails
without this override.
2016-02-04 15:28:46 -08:00
Palmer Dabbelt be424633c1 Improve ParamaterizedBundle.cloneType()'s error messages
Without this it's really hard to read the IllegalArgumentException that you get
if you subclass ParamaterizedBundle and don't define a matching cloneType().
2016-02-04 15:26:42 -08:00
Palmer Dabbelt 5cea4edee2 Bump riscv-tools for torture NaN ISA change 2016-01-31 23:06:59 -08:00
Palmer Dabbelt e18759642f Avoid running Chisel in parallel in the same directory
It looks like Chisel fails when I try to run it in parallel.  This adds a lock
file to ensure that only a single Chisel instance is running at a time when
running the regressions.
2016-01-31 23:06:59 -08:00
Palmer Dabbelt 00465b15c3 Allow the regression Makefile to clean all targets 2016-01-31 23:06:59 -08:00
Palmer Dabbelt c9a2b7d109 Add torture as part of the regression
Since the latest Spike fix my torture runs are succeeding, so I can now run it
as part of the regression flow.
2016-01-31 23:06:59 -08:00
Palmer Dabbelt e185fe6850 Add targets for emulator and fsim regressions
This change allows the other simulation targets (the emulator and the FPGA
simulator) to be run just like the Verilog simulator could be before.
2016-01-31 23:06:59 -08:00
Palmer Dabbelt 1149a412cc Support make-3.82 and newer
make changed its priorties for resolving implicit rules, which causes different
behavior when running "make run-bmark-tests".  This patch changes the hex file
rules to ensure they match between the two versions of make.

I've tried this with both make-3.81 and make-4.1, and they both work for me.
2016-01-28 12:19:11 -08:00
Palmer DabbeltandPalmer Dabbelt 7209c13338 Move to a regression Makefile
In order to have the buildbot support various types of failures it needs
to run different commands.  Rather than modifying the regression script
to have a bunch of arguments I've just gone and made a makefile for
regressions instead.

This doesn't run torture right now because that's broken, but I'll add
support soon.
2016-01-26 22:50:49 -08:00
Palmer Dabbelt 07f0e6be94 Don't re-generate the .d files on "make clean" 2015-11-12 00:41:55 -08:00
Palmer Dabbelt 3d2a4ffdd6 Add a "--master" flag to the regression script
I want to be able to test the master of riscv-gnu-toolchain against the current
RTL as part of the buildbot.  This flag takes a list of repositories (by their
submodule path) and updates those to the current master, which facilitates that
check.
2015-10-29 14:11:26 -07:00
Palmer Dabbelt d6b29ca9cc Run regression with bash's "-ex" mode
This causes every command to be echo'd to stderr, and any failing
command will fail the whole script.  Without this the regression
script will always pass.
2015-07-20 12:21:19 -07:00
Palmer Dabbelt 9bbecffbb8 Have regression run "make" before "make run-asm-tests"
I'm seeing some odd behavior where "make run-asm-tests" actually does
nothing.  This works around the issue.
2015-07-20 12:20:32 -07:00
Palmer Dabbelt 0fc3acb978 Update the directions on how to update Chisel
It seems that the update process in the README is really out of date
(it refers to scala-2.8 and chisel-1.1).  I've updated it to what I
believe to be correct, which now just consists of pulling the Chisel
submodule.

Note that I tried this myself, but when I did it I also ran an "sbt
package" in the Chisel submodule top-level directory (there's no "sbt"
directory in there any more).  I believe it's not necessary to run
"sbt package", but I really know nothing about SBT...
2014-08-05 11:56:03 -07:00
Palmer Dabbelt 693489da87 Add a note to the README about "make emulator-debug"
I made a clean checkout of reference-chip yesterday and wasn't able to
build the debug emulator without first having built the non-debug
emulator.  I just added a note to the README to say this.
2014-08-05 11:53:55 -07:00