Files
gps/targets/fpga/genesys2/README.md
T

203 lines
7.5 KiB
Markdown

# Genesys2 Rocket FPGA Flow
Bu dizin Digilent Genesys2 uzerinde Rocket SoC bitstream'i uretmek ve karti
programlamak icin VCU118 akisina paralel, sade bir Vivado non-project akisi
saglar.
## Kullanilan kart ayarlari
```bash
make -C targets/fpga/genesys2 fpga-config
```
Varsayilanlar:
```text
SoC/fabric clock : 50 MHz
GPS acquisition : 80 MHz
GPS tracking : 125 MHz
UART baud : 115200
App flash offset : 0x01800000
QSPI flash : 32 MiB S25FL256S
RF input mode : pmod
```
SoC/fabric saati 200 MHz kart kristalinden uretilir. GPS acquisition ve
tracking/PPS saatleri ise kart kristalinden degil secili RF sample clock'tan
uretilir. Varsayilan 16.367981 MHz RF referansi iki MMCM kademesinden gecerek
55.555556 MHz ara referans, 80 MHz acquisition ve 125 MHz tracking saati
olusturur. Iki kademeli oran nominal tracking saatini yaklasik 0.007 ppm hata
ile uretir; tek MMCM'li yuzlerce ppm hata tasiyan yaklasim kullanilmaz. SoC
reset'i fabric MMCM ile iki GPS MMCM'in de lock olmasini bekler.
RF, acquisition ve tracking domainleri ayni frekans referansini paylassalar da
RTL aralarinda CDC kullanir. Vivado scripti bu nedenle bu domainleri timing
acisindan ayri asynchronous gruplar olarak tutar; ortak referans frekans
coherency saglar, CDC protokolunu ortadan kaldirmaz.
UART baudrate Chisel config ile board'a ozel uretilmez. Software startup,
`BSP_UART_CLOCK_HZ` ve `BSP_UART_BAUDRATE` define'larindan UART divisor
register'ini programlar.
UART pin isimleri Digilent USB-UART bridge tarafindan adlandirilir. Bu yuzden
`uart_tx_in` FPGA'ya giren hatti, `uart_rx_out` FPGA'dan PC'ye giden hatti
ifade eder:
```text
port FPGA pin FPGA I/O SoC tarafi
uart_tx_in Y20 LVCMOS33 uart_rxd input
uart_rx_out Y23 LVCMOS33 uart_txd output
```
## JTAG / OpenOCD debug
Genesys2 OpenOCD debug yolu FPGA TAP uzerindeki `BSCANE2` USER4 chain'ini
kullanir. Bu kartta BSCAN-DMI koprusu VCU118 ile ayni dosyayi kullanmaz:
`hardware/fpga/genesys2/rtl/rocket_bscan_dmi_tunnel.sv` icinde TDO response
baslangici iki bit geciktirilir. Bu gecikme olmazsa DTMCS degeri iki bit saga
kaymis okunur; ornegin beklenen `0x5071`, OpenOCD tarafinda `0x141c` olur ve
`unsupported dtm version: 12` hatasi gorulur.
OpenOCD FTDI configi Genesys2 icin explicit tutulur: Digilent Adept USB device
`0403:6010` ve `ftdi channel 1`. Kurulu OpenOCD'nin genel
`digilent_jtag_smt2.cfg` dosyasi `0403:6014` bekledigi icin bu kartta
kullanilmaz.
## RF girisi
Genesys2 FPGA top'u `tools/gen_genesys2_wrapper.py` ile uretilir. RF kaynagi
`RF_INPUT_MODE` ile secilir:
```text
pmod Harici RF clock + 4-bit RF data PMOD JA'dan SoC GPS RF portuna gider ve GPS PLL'lerini referanslar.
generated Eski fallback: dahili RF clock uretilir, RF data 4'd0 olur.
ethernet RTL8211E-VL RGMII PHY uzerinden raw-Ethernet RF streamer yolu.
```
Varsayilan `RF_INPUT_MODE=pmod` degeridir:
```bash
make -C targets/fpga/genesys2 bitstream
make -C targets/fpga/genesys2 bitstream RF_INPUT_MODE=generated
make -C targets/fpga/genesys2 bitstream RF_INPUT_MODE=ethernet
```
Ethernet RF modunda top-level portlar Genesys2 kartindaki RGMII/MDIO PHY
pinlerine acilir. Host sender ayni raw Ethernet protokolunu kullanir:
```bash
sudo make -C targets/fpga/genesys2 eth-rf-send
```
Bu mod ilk Genesys2 RGMII tasimasidir. PHY MDIO hatti su an idle birakilir;
RTL8211E-VL kart strap ayarlariyla acilir. Kart uzerinde link veya timing
sorunu gorulurse ilk bakilacak yerler PHY delay/MDIO init ve RGMII timing
constraintleridir.
PMOD JA pinleri 3.3 V `LVCMOS33` olarak constrain edilir. Connector ve FPGA
I/O seviyesi ayni 3.3 V'tur:
```text
port FPGA pin PMOD pin FPGA I/O PMOD header level
rf_clk_pmod U27 JA[0], MRCC LVCMOS33 3.3 V
rf_data_pmod[0] U28 JA[1] LVCMOS33 3.3 V
rf_data_pmod[1] T26 JA[2] LVCMOS33 3.3 V
rf_data_pmod[2] T27 JA[3] LVCMOS33 3.3 V
rf_data_pmod[3] T22 JA[4] LVCMOS33 3.3 V
```
Pin constraintleri `hardware/fpga/genesys2/constraints/genesys2_pmod_rf.xdc`
dosyasindadir ve sadece `RF_INPUT_MODE=pmod` iken Vivado tarafindan okunur.
PMOD SPI portu her RF modunda aktiftir. SoC register adresi `0x10015000`'dir;
kart konfig flash'ina bagli mevcut SPI `0x10014000` adresinde kalir.
SPI, bosta kalan PMOD JC'ye atanir. Driver single/quad calisma modunu secer;
single modda sadece `dq[0]` MOSI ve `dq[1]` MISO kullanilir.
```text
port FPGA pin PMOD pin
pmod_spi_csn AC26 JC1
pmod_spi_dq[0] AJ27 JC2 MOSI
pmod_spi_dq[1] AH30 JC3 MISO
pmod_spi_sck AK29 JC4 SCK
pmod_spi_dq[2] AD26 JC7
pmod_spi_dq[3] AG30 JC8
```
Pin constraintleri `hardware/fpga/genesys2/constraints/genesys2_pmod_spi.xdc`
dosyasindadir ve Vivado akisi tarafindan her RF modunda okunur.
Sensorden gelen external interrupt hatti SPI'dan bagimsizdir. Guncel pin
planinda `pmod_irq` PMOD JB pin 1'e cikar ve PLIC'te `BSP_PMOD_IRQ` (`11`)
ID'siyle gorunur. Eski `JC9/AK30` eslemesi 2026-07-14'te `JB1/V29` olarak
degistirildi; mevcut XDC ve bitstream icin sensor `INT1` hatti JB1'e
baglanmalidir. JC10 GPS PPS cikisidir.
```text
port FPGA pin PMOD pin
pmod_irq V29 JB1
```
Pin constraintleri `hardware/fpga/genesys2/constraints/genesys2_pmod_irq.xdc`
dosyasindadir ve Vivado akisi tarafindan her RF modunda okunur.
Ethernet PHY pinleri sadece `RF_INPUT_MODE=ethernet` iken
`hardware/fpga/genesys2/constraints/genesys2_ethernet.xdc` dosyasindan okunur.
RGMII/MDIO bank 33 tarafinda 1.5 V `LVCMOS15`, PHY reset 3.3 V `LVCMOS33`,
INTB/PMEB ise 1.8 V `LVCMOS18` seviyesindedir:
```text
port FPGA pin FPGA I/O board signal
eth_rxck AG10 LVCMOS15 ETH_RXCK
eth_rxctl AH11 LVCMOS15 ETH_RXCTL
eth_rxd[0] AJ14 LVCMOS15 ETH_RXD0
eth_rxd[1] AH14 LVCMOS15 ETH_RXD1
eth_rxd[2] AK13 LVCMOS15 ETH_RXD2
eth_rxd[3] AJ13 LVCMOS15 ETH_RXD3
eth_txck AE10 LVCMOS15 ETH_TXCK
eth_txctl AK14 LVCMOS15 ETH_TXCTL
eth_txd[0] AJ12 LVCMOS15 ETH_TXD0
eth_txd[1] AK11 LVCMOS15 ETH_TXD1
eth_txd[2] AJ11 LVCMOS15 ETH_TXD2
eth_txd[3] AK10 LVCMOS15 ETH_TXD3
eth_mdc AF12 LVCMOS15 ETH_MDC
eth_mdio AG12 LVCMOS15 ETH_MDIO
eth_phyrst_n AH24 LVCMOS33 ETH_RSTN
eth_int_b AK16 LVCMOS18 ETH_INT_B, pull-up
eth_pme_b AK15 LVCMOS18 ETH_PME_B, pull-up
```
Bu pinler Digilent Genesys 2 reference manual ve Genesys-2-Master.xdc
pin isimleriyle ayni tutuldu.
`fpga-config` ve `help` ciktisi aktif `RF_INPUT_MODE` degerini gosterir.
## Komutlar
```bash
make -C targets/fpga/genesys2 software
make -C targets/fpga/genesys2 rtl
make -C targets/fpga/genesys2 bitstream
make -C targets/fpga/genesys2 program-fpga
make -C targets/fpga/genesys2 program-flash
make -C targets/fpga/genesys2 program-app APP=gps_system
make -C targets/fpga/genesys2 uart-listen UART_PORT=/dev/ttyUSB1 UART_BAUD=115200
```
Kok Makefile uzerinden:
```bash
make FPGA_BOARD=genesys2 fpga-config
make FPGA_BOARD=genesys2 fpga-bitstream
make FPGA_BOARD=genesys2 fpga-program
```
`program-app APP=gps_system` yalniz application flash bolgesini derleyip
programlar. Tracking mailbox registerlari ve synchronizer RTL degisikligi
bitstream gerektirir; Doppler IIR katsayisi/yazilim degisikligi ise bitstream
gerektirmez, yalniz yeni `gps_system` uygulamasinin yuklenmesi yeterlidir.
`debug-load APP=gps_system` ELF'i GDB ile DTIM/RAM'e yukler; hizli kart testi
icin uygundur fakat power-cycle/reset sonrasinda flash'taki eski uygulama geri
gelir. Kalici kullanim icin `program-app APP=gps_system` kullanilmalidir.