# 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 ``` Kok Makefile uzerinden: ```bash make FPGA_BOARD=genesys2 fpga-config make FPGA_BOARD=genesys2 fpga-bitstream make FPGA_BOARD=genesys2 fpga-program ```