Hi all,

I'm having trouble generating functional borph executables, and i'm
hoping someone can help me figure out why. Since i'm targeting high
speeds, i can't use the bee_xps workflow. So here's what i'm doing:

1) synthesize a mdl via the bee_xps interface.
2) load the netlist into PlanAhead.
3) manually place various components.
4) modify the four NET "adc[01]clk_[np]" PERIOD constraints.
5) run implementation.
6) verify that the timing score is 0.
7) run bitgen.
8) run mkbof (using core_info.tab from the bee_xps run).

If i just use bee_xps from mdl to bof, i get always get a functional
design at 200MHz.

If i then load that netlist into PlanAhead, do not floorplan anything,
do not change any constraints, and just run implementation and bitgen,
then mkbof again gives me a functional executable for 200MHz.

But if i then floorplan my DSP48Es and BRAMs, do not change any period
constraints, and run implementation and bitgen, then mkbof gives me a
broken executable for 200MHz.

By "broken", i mean: i can program the fpga, but all the registers read
out zero; if i write a register, it continues to read back zero.

To rule out tcpborphserver, i logged into a board and manually executed
my bof while monitoring dmesg. It programs without error. When i echo
values into the fabric-mapped registers in /proc, reads and writes also
give no errors. But i always read back zero, so something somewhere is
broken.

Suraj started a thread about something similar sounding last July:
http://www.mail-archive.com/casper@lists.berkeley.edu/msg01694.html
But there wasn't a solution, just a hack workaround requiring jtag.

Based on external observations, i would guess that mkbof is making some
assumptions about input bitstreams that are only guaranteed to hold for
bitstreams generated by bee_xps. But i don't know anything about mkbof,
so i could be wrong.

I've noticed that bof files generated from PlanAhead bitstreams have 122
more bytes of metadata at offset 0x1282. Maybe mkbof doesn't expect that?

I've also noticed that when i floorplan, adc0's sync input sometimes
ends up in the middle of the fpga instead of on the left edge where
you'd expect it to be. Maybe things like this don't happen at lower
speeds with bee_xps, but it trips up mkbof when it does?

But i really have no idea, so i'll stop guessing. Maybe someone more
clueful about mkbof and/or borph can suggest something?

Billy

Reply via email to