Marcel Jung
10/08/2024, 12:38 PMIO[0]
/ IO[37]
of each chain are marked as H_DEPENDENT
, the next seven pins are marked as H_INDEPENDENT
and the last pin of each chain fails the check and is marked as H_UNKNOWN
(so also both chains on the same chip have the same pattern). I tested eight chips so far, all of them at 1.5V and one also at 1.8V with the exact same result. Is this expected for MPW-5? Did anyone else get similar results? For MPW-2 I got different results for almost every chip and also for different voltages for the same chip. Is there something I could be doing wrong when checking the MPW-5 chips?
Thanks in advance for any answers and feedback!Tim Edwards
10/08/2024, 5:20 PMH_UNKNOWN
in the last pin on each side.
The flaky behavior of MPW-2 chips was due to the fact that the timing of the hold violations was just at the edge of working/not working. Process variations from run to run could easily account for moving the hold violations out of that range and making them stable and predictable, which is a good thing. How badly is operation impacted by not being able to reach GPIO 18 and 19?Marcel Jung
10/09/2024, 10:22 AMIO[30]
and one at IO[32]
. The lower chain however remains the same. Its nice that all other chips have the same pattern, I guess that will make things easier!
Since the design is an FPGA, many pins are configurable and not being able to reach IO[18]
and IO[19]
fortunately does not affect the functionality at all (other than just losing two GPIOs ofc). Only pins 7 to 13 are hardwired to special functionality of the fabric (7-12 input, 13 output). So far I was not able to get a bitstream running on the MPW-5 chip. I tried the same GPIO config and Caravel firmware as for the MPW-2 design, since the fabric pins are at the same location. However, the problem could be independent of the GPIO config since there are still small differences in the FPGA fabric. Is there a possibility to check whether the pins are configured as intended so the GPIO config can be isolated from the rest of the troubleshooting?Tim Edwards
10/09/2024, 1:26 PMgpio_config/gpio_config_simulator.py
and take a look at what the GPIOs are actually set to. Especially since you have 10 dependent hold violations in a row, all the GPIOs after that have a very limited number of configurations they can be set to. If you need help getting a configuration that works right for you, please let me know.
Can you clarify what you mean by "not able to get a bistream running"? Does that mean complete failure (other than GPIO 0 and 37, which always work)? Or partial failure? Or the software is telling you it can't do it and refuses to create a bitstream?Marcel Jung
10/09/2024, 2:06 PMI'm hoping that the consistency among the chips might also mean that you get the same pattern whether the board is on or off the Nucleo.
This luckily also was no issue for the MPW-2 chips, so I suppose it will be the same for MPW-5. I read some of your previous messages and in one message you wrote that your understanding at that point was that it does not matter if it is on or off, is that correct?
At least for all configurations with the input driver enabled: The input goes to both the management processor and the user project simultaneously, so you should be able to set all GPIO as inputs, apply power or ground to the pin, and read that state from the management processor.
So on the input side a pin is always connected to both the MGMT and the user area? Only the output is exclusive?
You will probably want to run gpio_config/gpio_config_simulator.py and take a look at what the GPIOs are actually set to.
Thanks for the tip, I will check this!
Especially since you have 10 dependent hold violations in a row, all the GPIOs after that have a very limited number of configurations they can be set to. If you need help getting a configuration that works right for you, please let me know.
What I need is a configuration that sets pins 7 -12 to inputs (while only 8,9 and 12 are critical, the rest is more or less nice to have), 13 to output (quite nice to have) and 14 - 37 to bidirectional. For the MPW-2 Chip I was able to achieve this by settings all pins to bidirectional.
Can you clarify what you mean by "not able to get a bistream running"? Does that mean complete failure (other than GPIO 0 and 37, which always work)? Or partial failure? Or the software is telling you it can't do it and refuses to create a bitstream?
Sorry, I didn't clarify this enough. What I'm doing is creating a bitstream for the FPGA fabric using the FABulous framework. The user logic design to create this bitstream from is just a simple counter which toggles all IOs from IO[14]
to IO[36]
while IO[37]
is used as a reset. I am able to upload the bitstream for this design onto the MPW-2 fabric and see the pins toggle (which is currently my definition for "bitstream upload successful"/"bitstrea running"). I have not yet achieved that on the MPW-5 chip. This could be due to a wrong IO config, but also due to other reasons which are beyond the scope of this channel and are more related to FABulous (if you are however still interested in these reasons, let me know).
I hope this clarifies what I'm trying to achieve. If you need any more information, just let me know! Thanks for your help so far!Marcel Jung
10/09/2024, 4:42 PMTim Edwards
10/09/2024, 11:49 PMLeo Moser
10/10/2024, 7:52 AMMarcel Jung
10/10/2024, 7:55 AMLeo Moser
10/10/2024, 8:04 AMgatecat
10/11/2024, 6:46 AMgatecat
10/11/2024, 6:48 AMMarcel Jung
10/14/2024, 9:21 AMI'm also still lurking around and did the MPW2 FABulous bring up if you need any help...Thanks! π without your work I would not have been able to bringup the MPW-2 chip myself! Indeed I have a specific question about the fabric code: In the MPW-2 design, the seven pins used for the FPGA configuration have their
io_oeb
bits set to 7'b0111111
while in the MPW-5 design they are set to 7'b1000000
:
MPW-2:
https://github.com/gatecat/fabulous-mpw2-bringup/blob/main/fabric/verilog/eFPGA_v3_top_sky130.v#L204
MPW-5:
https://github.com/nguyendao-uom/open_eFPGA/blob/main/verilog/rtl/eFPGA_v3_top_sky130.v#L221
I don't understand why the bits are not inverted anymore in MPW-5, since io_oeb
for me sounds like active low and we need the first six pins as inputs and then one output for the RX LED. Did the IO pads change from MPW-2 to MPW-5? I also asked @Nguyen Dao and @Dirk Koch but we could not yet find the reason for the change.
If the IO are configured correctly and the config interface is receiving bitbang data, then you should see activity (a single clock cycle pulse every received word, iirc) on the ReceiveLED outputYes, I get a blinking LED for the MPW-2 design which lights up constantly while the fabric receives data (when using the UART config port). However I do not get that for the MPW-5 open everything FPGA (which could be due to the
io_oeb
setting described above).gatecat
10/14/2024, 9:44 AMMarcel Jung
10/14/2024, 9:54 AMunless there's another layer of inversion in the user project that's being missed somewhere.Do you have any idea where I could look for this?
It's possible to force pins to be inputs in the IO configuration, but not force an output to be enabled. So the config input pins can still be usable, but the RX LED pin would be non-functionalIsn't it also a problem that the output of a pin then effectively directly drives the input?
gatecat
10/14/2024, 9:59 AMDo you have any idea where I could look for this?The only place it could be is here but there's no inversion, so that's not it
Isn't it also a problem that the output of a pin then effectively directly drives the input?I believe if the pin is configured as an input only in the IO config (the config loaded into the shift registers), then the output related functionality is totally disabled regardless of oeb
Marcel Jung
10/14/2024, 10:01 AMI believe if the pin is configured as an input only in the IO config (the config loaded into the shift registers), then the output related functionality is totally disabled regardless of oebOkay thanks, I will look into this!
Marcel Jung
10/14/2024, 10:10 AMMarcel Jung
10/14/2024, 10:14 AMMarcel Jung
10/14/2024, 5:02 PMoeb
setting.gatecat
10/14/2024, 5:04 PMgatecat
10/14/2024, 5:09 PMMarcel Jung
10/14/2024, 5:13 PMThe input signal gets routed to the user design either way, so in this case, there's no harm setting it to management mode in order to force it into being an inputYes you're right, it should just be enough to set the as management input only pins. Thanks!
Marcel Jung
10/17/2024, 2:11 PMC_MGMT_IN
is 0010000000011
and there only 8 bits which can be filled with 1's ( or rather 7, since eight would cause that there is no more transition between 1 and 0). If anyone still has an idea how it still would be possible I'm open for any kind of solution!
Now to the good news:
It still seems to be possible to upload the bitstream onto the FPGA. This is because the default GPIO config is C_MGMT_IN
(except for the first pins dedicated to SPI), which is exactly what is needed due how the oeb
bits are set. The only problem is that then of course ALL pins are set to inputs and there is no feedback to see if the upload actually worked. Therefore I used the osc.v
design created by @gatecat to see if the power draw changes (this was @Dirk Kochs idea), which is indeed the case when compared to a design where just a pin is routed through! It's just 0.11W, but its consistent between alternately uploading the designs a few times. So I'm quite confident that the upload and the FPGA itself are now working!
@Tim Edwards is it possible to only configure the high GPIO chain and leave the low chain at the default values? This would allow to at least use some Pins of the high chain.
Thanks for all of the help so far! :)Marcel Jung
10/17/2024, 3:06 PMis it possible to only configure the high GPIO chain and leave the low chain at the default values? This would allow to at least use some Pins of the high chainAfter taking a look at the Caravel files it seems like its not possible, since they are written the same way and are clocked by the same clock.
gatecat
10/17/2024, 3:26 PMgatecat
10/17/2024, 3:27 PMTim Edwards
10/17/2024, 3:32 PM100
mode is open-drain, so even though the output buffer is turned on, if you apply (from the management side) an output value of 1, the output is effectively disabled due to the open drain. The input buffer is enabled, so it should still behave like an input.Marcel Jung
10/17/2024, 3:37 PMMarcel Jung
10/18/2024, 6:07 PMgatecat
10/18/2024, 6:08 PMTim Edwards
10/18/2024, 9:10 PMMarcel Jung
10/28/2024, 5:57 PMH_DEPENDENT
are working as expected, at least in the high chain where there is not conflict with the oeb
setting of the fabric.
Only IO[29]
-IO[27]
are not working as inputs. C_USER_BIDIR_WPU
was used for all
FPGA user design pins, since there is just a single bit set for this config and input/output
behavior can then be defined in the user design. However, Pins marked as H_INDEPENDENT
are behaving a bit strange: If all of them are set to C_USER_BIDIR_WPU
, there
is an output on most pins, but only on some it is the correct output. On the
screenshot the signals captured by a logic analyzer can be seen. The desired
output would be to have alternating waveforms of frequencies f
and 2*f
on every pin.
On the first screenshot it can be seen that some signals are missing every
second high value. Zooming in on the rising edge of such a signal (second
screenshot) shows many
oscillations before the signal gets steady. This is not the case for the falling
edge.
When experimenting with the config values I also noticed the following: If the
H_INDEPENDENT
pins are set alternating to C_DISABLE
and
C_USER_BIDIR_WPU
, the ones set to C_DISABLE
work, while those set to
C_USER_BIDIR_WPU
are not working (multiple chips were tested).
I also still had no success in uploading a bitstream after the GPIOs are configured
with setting the fixed fabric pins to the suggested GPIO config. Maybe this is
also related to the strange behavior of the H_INDEPENDENT
Pins?
With the alternation described above, enough pins are working for our purposes, so I will
stop further investigation since I have to move on to doing other stuff. I
still wanted to leave this here for anyone who is interested or might even
experience the same behavior. If there are any questions I will of course try to
answer them.