whitequark / prjbureau

Documenting the Microchip (Atmel) ATF15xx CPLD fuse maps and programming algorithms
https://whitequark.github.io/prjbureau
Other
50 stars 8 forks source link

Routing VCC to IO.EN and PT5 to ST.I5 #7

Closed bcrist closed 3 years ago

bcrist commented 3 years ago

The PT5 routing group documentation seems to be imply that you should be able to route VCC to IO.EN like this:

oe_mux = VCC_pt5
pt5_mux = sum
pt5_func = oe

I tested programming this configuration and the JTAG BSR always indicates that the driver is in high-impedance mode; as if oe_mux had been set to GND. Setting pt5_func to as does enable the driver permanently as expected.

I verified that PT5 is routed to the macrocell sum and is not routed to either IO.EN or FF.AS in both of these configurations (which makes sense, since pt5_mux is sum). Additionally, pt5_func doesn't seem to matter when pt5_mux is sum and oe_mux is set to GND or one of the GOEs; it only seems to be this one edge case that's affected.

In general, the PT5 routing group table was by far the hardest one for me to get my head around. I guess it's trying to be succinct and show that pt5_mux and pt5_func are mostly independent from oe_mux and only highlight the cases where they interfere with each other, but in my opinion, it would be much clearer if it just listed all the combinations that are both valid and useful. If you continue to group the GOE variants together, it doesn't even require any more rows than the current table:

pt5_mux pt5_func oe_mux ST.I5 FF.AS IO.EN
sum - GND pt5 GND GND
sum - GOE1..GOE6 pt5 GND GOE1..GOE6
sum as VCC_pt5 pt5 GND VCC
as_oe oe VCC_pt5 GND GND pt5
as_oe as GND GND pt5 GND
as_oe as GOE1..GOE6 GND pt5 GOE1..GOE6
as_oe as VCC_pt5 GND pt5 VCC
whitequark commented 3 years ago

I didn't personally recheck your findings here but it seems like you've looked at this issue in depth and what you wrote seems reasonable. Would you be willing to send a PR?