203 lines
7.5 KiB
Markdown
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.
|