tomverbeure / panologic-g2

Pano Logic G2 Reverse Engineering Project
Apache License 2.0
134 stars 21 forks source link

Pano Logic Zero Client G2

Questions? Try the Pano Logic gitter.im chat room! https://gitter.im/panologic/community

Introduction

This project contains the reverse engineering results of the Pano Logic Zero Client G2.

It was started by cyrozap, who did all the hard work of figuring out connections between the FPGA and peripheral ICs. Some of this work can also be found on his wiki page, though this GitHub repo should now all have that information as well.

There is a similar effort that focuses, among other things, on expanding the Pano Logic G2 with a break-out board. Check here for further information.

The Pano Logic G2 is the successor of the Pano Logic G1. Like the G1, it has all the interfaces that are needed to build a small mini-computer with an FPGA.

IMPORTANT: There are 2 versions of the Pano Logic G2: some use a Spartan 6 LX150 while others use an LX100, which is smaller but still very large, and with equal amount of block RAM and DSPs. You should be able to distinguish between the two by the revision code: LX150 is rev B and LX100 is rev C. But beware: there are VGA-based Pano G1s that are also called rev C. So always check first that your unit has the right video connector.

Compared to the G1, the most important improvements of G2 are:

Disassembly

Overly detailed disassembly pictures can be found here.

Disassembly Complete

JTAG

Instructions on how to get the JTAG going are here.

JTAG Connected

FPGA Connections

See the Pano.ucf file for all the FPGA connections.

These were all reverse engineered by cyrozap.

FPGA External Clocking Architecture

According to the initial reverse engineered pin assignment by cyrozap, there is a fixed 25MHz oscillator input into the FPGA on pin Y13 that will serve all your clocking needs.

The reality is a bit more interesting. The real clocking architecture (with my custom FPGA content) is as follows:

FPGA External Clocking Diagram

There is indeed a 25MHz clock oscillator on the PCB, but instead of going straight to the FPGA, it goes to the Marvell Ethernet PHY instead.

The PHY has a fixed ratio 25MHz to 125MHz PLL. That 125MHz clock is used internally, but also brought out to the 125CLK pin which is in turn connected to pin Y13 of the FPGA.

However, when the PHY is in reset, this PLL is disabled and pin 125CLK carries the original 25MHz instead! (This is not documented in the datasheet of the close cousin of this PHY.)

When you don't use the PHY, it's natural to not assign any value to the FPGA pin that drives the PHY RESET_ pin, so without knowing this quirk of the design, one gets tricked into assuming that pin Y13 always carries a clock of 25MHz.

But as soon as you want to use the PHY and deassert its reset, the clock switches to 125MHz!

For designs with Ethernet support, there are 2 options:

  1. Always have the FPGA deassert (drive to 1) the reset pin of the PHY.

    In this case, pin Y13 will always carry 125MHz and you can design your logic with that clock in mind. It has the disadvantage that you'll never be able to toggle the reset pin of the PHY at will.

  2. Make you design capable of dealing with both 25MHz and 125MHz.

    This is a bit more complicated, but it will allow you to toggle the reset pin.

It's usually not necessary to reset a PHY which makes the first option the most attractive one.

(Since I wasn't aware of this clocking arrangement at first, my initial choice was of course the second one...)

Board to Board Connector

The Board to Board connector was reverse engineered by twj42. The table below is based on this page.

Pin Nr FPGA Pin Function Function FPGA Pin
Outside Inside
1 GND GND
2 3.3V 3.3V
3 ` D17 DVI_D[0] DVI_D[1] A14
4 A15 DVI_D[2] DVI_D[3] A16
5 A17 DVI_D[4] DVI_D[5] A18
6 GND GND
7 D14 DVI_D[6] DVI_D[7] B14
8 B16 DVI_D[8] DVI_D[9] B18
9 E16 DVI_D[10] DVI_D[11] D15
10 GND GND
11 H12 PANO_BUTTON DVI_XCLK_P E14
12 F13 LED_GREEN DVI_XCLK_N F15
13 H13 LED_BLUE 5V
14 5V ?
15 GND DVI_SPD D9
16 5V 5V
17 ? 1.8V
18 GND GND
19 1.8V 1.8V
20 C14 DVI_DDC_SCL DVI_H F12
21 C17 DVI_DDC_SDA DVI_V C16
22 GND GND
23 ? DVI_DE F14
24 ? DVIRESET C15?
25 ? DVI_HPINT D13
26 GND GND
27 Linked to 28 USB J2
28 Linked to 27 USB J2
29 1.2V 1.2V
30 GND USB J3
31 1.2V USB J3
32 GND GND

Programming

There are different ways to program a bitstream into a Pano G2:

Resources