[Libre-soc-bugs] [Bug 199] Layout using coriolis2 main core, 180nm

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Thu Oct 1 10:38:54 BST 2020


https://bugs.libre-soc.org/show_bug.cgi?id=199

--- Comment #96 from Jean-Paul.Chaput at lip6.fr ---
(In reply to Luke Kenneth Casson Leighton from comment #84)
> Created attachment 108 [details]
> how jtag is organised
> 
> ok so here is how it is organised.
> 
> * the top level "core" is now called "ls180" where "test_issuer" contains
>   the PowerISA.
> 
> * ls180 contains:
> 
>   - test_issuer
>   - JTAG
>   - Litex "stuff" mostly wishbone bus management and arbiters
>   - peripherals
> 
> * JTAG has three "things" it controls:
> 
>   - IOPad testing
>   - DMI
>   - Wishbone
>   - (we may add PLL "counter" here although it will probably be part of Core)
> 
> * Litex provides peripherals however the IO for UART and GPIO need to
>   be routed *through JTAG*
> 
> * Therefore, there are some wires for UART distinguished by prefix
>   "_pads_" and "_core_" such as "uart_pads_tx" and "uart_core_rx" which
>   go **IN** to ls180 then come **OUT** of ls180
> 
> * these double-routed wires go SPECIFICALLY into the JTAG "IOPad testing"
>   side.
> 
>   this is so that the JTAG core can "re-route" the IO Pads, taking them
>   AWAY from ls180 and SPECIFICALLY connecting them DIRECTLY to the
>   (real) actual IOPads through the Corona.
> 
>   this is done with MUXes, and they are, strictly speaking, not part
>   of the "core".
> 
>   although, if they are not, it would be a royal nuisance to have to
>   split them out into a separate file.

    Not sure I correctly see how the wiring is organized (I'm a visual
    guy, I understand more quickly schematics). Nevertheless, the
    strategy here is:

    * Put everything that contains gates under ls180. It will be flat
      placed & routed. So *below* ls180, you can have whatever
      hierarchy you like.

    * Complex wiring between pads and core (ls180) will take place
      inside the "corona" level (like the 'oe' signal for all pads
      part of the same bus).

    * Connexion betweens "corona" and I/O pads (that is, at "chip"
      level) go *almost* straight (in our case, they go straight
      because both side are symbolic layout).

    * And finally, a dedicated "router" connect the I/O pad ring
      connectors together, including corners.

  NOTE: This partitionning also has the advantage to *not* include
        the I/O pad area inside the general routing area, which
        allows me to remove all special cases related to I/O pads
        from Katana (and they are hellish).

> i *think*.... the main thing is that the JTAG clock should not be
> associated with (connected to or controlled by) the pxlib "ck" lines
> on the IO pads:
> 
> 
>   # this is good
> 
>   p_sys_clk_0 : pck_px
>   port map ( pad  => sys_clk
>            , ck   => cki
>            , vdde => vdde
>            , vddi => vddi
>            , vsse => vsse
>            , vssi => vssi
>            );
> 
> 
>   # this is bad
> 
>   p_jtag_tck : pi_px       <- nooo! must be of type pck_px!
>   port map ( ck   => cki       <- baaaad, noooo!
>            , pad  => jtag_tck 
>            , t    => jtag_tck_core
>            , vdde => vdde
>            , vddi => vddi
>            , vsse => vsse
>            , vssi => vssi
>            );
> 
> 
> therefore if similar to this:
> 
>    env.setCLOCK("sys_clk")
> 
> we could have:
> 
>    env.setOUTSIDEOFCORONACLOCK("jtag_tck")
> 
> and it to be treated completely differently, then that would i think work.
> 
> we also would need some of the PLL clock wires similarly.  we cannot
> have them under the control of sys_clk.
> 
> is this unreasonably complex, to work out which clock is associated
> with what, without splitting them into separate files?

  I understand. To avoid putting extra specifications, the fact that
  there is different clocks could be directly guessed from the I/O pad
  netlist (at "chip" level). I think it is not very difficult to
  create disjoined parts in the I/O pad ring.
    The big question is, will each part be made of an assembly of pxlib
  pads *or* will Staf add some other kind with different wiring
  strategies? Before I upgrade the I/O pad "router" I would need a
  clear understanding of the I/O pads physical interface.

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-soc-bugs mailing list