Closed leonschoorl closed 1 year ago
The weird thing is this code does work in practice on hardware. Which is probably why this wasn't noticed earlier.
If I read this code, I'd think the outputs led_0
and led_1
are undefined because they're effectively connected to nothing.
And the simulator does seem to agree with that.
But Vivado is happy to synthesize it. (It does generate warnings about probe_out0
and probe_out1
not having any drivers)
And when you add appropriate pin mappings, you can actually make 2 leds light up from the VIO GUI.
It seems the synthesizer is happy to read the assign my_probe_out_0 = probe_out0;
backwards, and effectively assign my_probe_out_0
to the wire probe_out0
.
I suspect Vivado might use in undirected graph as a netlist format somewhere internally.
Amazing, nice find! Conclusion seems sensible.
generates:
There are multiple related issues with routing of the vio outputs:
probe_out0
andprobe_out1
aren't driven by anythingled_0
andled_1
aren't driven either, (indirectly vialed
andds
they're assignedprobe_out0
andprobe_out1
)my_probe_out_0
andmy_probe_out_1
are driven twice, once directly withassign
and once in the port mapping of the vio