2026-08-13 11:32:14 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00
2026-07-12 11:01:51 +03:00

Rocket GPS SoC

Bu depo, RV64 Rocket cekirdegi ile GPS acquisition, tracking, navigation ve PPS donanimini ayni SoC icinde birlestirir. Ayni tasarim VCU118, Genesys2 ve Ti375C529 FPGA kartlarinda; ortak GPS firmware'i ise bare-metal olarak calisir. ASIC-style RTL ve simulasyon girisi de korunur. Upstream Rocket-Chip kaynaklari daginik kok klasorlerde tutulmaz; gerekli upstream kaynaklar hardware/upstream/rocket-chip/ altindadir.

Donanim; RF orneklerini alan acquisition/tracking kanallarini, atomik olcum snapshot'larini, interrupt kaynaklarini ve PPS periferigini saglar. gps_system firmware'i interrupt servislerini, LNAV/ephemeris parsing'i, coherent epoch toplamayi, position ve Doppler WLS'i, flash persistence'i ve opsiyonel GPS+IMU ESKF'yi yurutur. Flash bootloader uygulama imajini CRC ile denetleyip DTIM'e tasir; GDB yolu ayni ELF'i test icin dogrudan DTIM'e yukleyebilir.

Kisa Harita

hardware/
  soc/scala/                  Proje Scala/Chisel SoC katmani
  generated/                  FIRRTL ve SystemVerilog dump alani
  fpga/vcu118/rtl/            VCU118 ek RTL
  fpga/vcu118/constraints/    VCU118 XDC
  fpga/genesys2/rtl/          Genesys2 ek RTL
  fpga/genesys2/constraints/  Genesys2 XDC
  fpga/ti375c529/rtl/         Ti375C529 ek RTL
  fpga/ti375c529/constraints/ Ti375C529 Efinity interface kaynagi
  sim/fpga/vcu118/            FPGA smoke/sim girisi
  sim/asic/rocket/            ASIC testbench, modeller, wave.do
  external/gps/rtl/           GPS RTL kaynaklari ve filelist
  upstream/rocket-chip/       Gerekli upstream Rocket-Chip src ve bootrom

soc/software/                 Bootloader, BSP, uygulamalar, flash image tool
targets/fpga/vcu118/          VCU118 build/programlama akisi
targets/fpga/genesys2/        Genesys2 build/programlama akisi
targets/fpga/ti375c529/       Ti375C529 Efinity build/programlama akisi
targets/asic/rocket/          ASIC wrapper/filelist/sim akisi
setup_tools.sh                /tools/soc-tools host araci kurulum betigi

hardware/generated/, soc/out/, targets/*/out/ ve kok out/ uretilen ciktilardir; kalici kaynak degisiklikleri bu dizinlere yapilmamalidir.

Destek Ozeti

Kart FPGA araci SoC / ACQ / TRK Flash ve app offset Varsayilan RF
VCU118 Vivado 100 / 100 / 125 MHz 128 MiB, 0x06000000 PMOD
Genesys2 Vivado 50 / 80 / 125 MHz 32 MiB, 0x01800000 PMOD
Ti375C529 Efinity 100 / 100 / 125 MHz 64 MiB, 0x00800000 PMOD

Kart secimi FPGA_BOARD=<kart> veya BOARD=<kart> ile yapilir. Kesin clock, flash, UART ve RF ayarlarini varsaymak yerine once su komut kullanilmalidir:

make FPGA_BOARD=genesys2 fpga-config

Kart bazli ayrintilar targets/fpga/<kart>/README.md, yazilim ayrintilari soc/software/gps_system/README.md icindedir.

Gelistirme Araclari

Mill, JDK, CIRCT/firtool ve Z3 makineye/işletim sistemine ozel binary paketlerdir; Git'e eklenmezler. Linux x86-64 host araclarini sabit surum ve SHA256 kontrolleriyle /tools/soc-tools altina kurmak icin:

./setup_tools.sh

Proje araclarini ve RISC-V bare-metal toolchain'i shell'e eklemek icin:

source source.sh
make doctor

source.sh, RISC-V GCC'yi sirasiyla RISCV_TOOLCHAIN, TOOLCHAIN, proje-ici tools/local/riscv/bin, /tools/toolchain/bin, /tools/toolchains/bin ve PATH icinde arar. Standart olmayan bir kurulum icin:

RISCV_TOOLCHAIN=/opt/riscv source source.sh

Ayni ayar shell'i degistirmeden Make'e de verilebilir:

make fpga-rtl RISCV_TOOLCHAIN=/opt/riscv

setup_tools.sh host tarafindaki Scala/Chisel uretim araclarini kurar. RISC-V bare-metal toolchain buyuk ve ayri bir urun oldugu icin indirilmez; source.sh tarafindan mevcut /tools/toolchains kurulumundan veya RISCV_TOOLCHAIN degiskeninden bulunur.

Ana Komutlar

Hedef Amaci
make doctor JDK, Mill, firtool ve RISC-V toolchain'i kontrol eder.
make fpga-config Secili kartin etkin clock, flash, UART ve RF ayarlarini yazar.
make fpga-rtl Chisel/FIRRTL'den kart wrapper'i dahil SystemVerilog uretir.
make fpga-bitstream Vivado veya Efinity sentez, place-route ve bitstream akisini calistirir.
make fpga-elf-flash-image APP ELF'ini bootloader header/CRC iceren app imajina cevirir.
make fpga-mcs Mevcut bitstream ile app imajini birlestirir; karta yazmaz. Ti375'te cikti HEX'tir.
make fpga-program Bitstream'i FPGA SRAM'ine gecici yukler.
make fpga-flash-app Yalniz uygulama flash bolgesini programlar.
make fpga-flash-bitstream Yalniz konfigurasyon/bitstream bolgesini programlar.
make fpga-flash-mcs Birlesik kalici flash imajini uretip programlar.
make fpga-flash-all Degisen bitstream ve app bolgelerini ayri ayri programlar.
make fpga-debug-openocd Rocket DMI icin OpenOCD/GDB sunucusunu acar.
make fpga-debug-load Secili uygulamayi GDB ile DTIM'e yukler.
make fpga-uart Kart UART'ini varsayilan 460800 baud ile dinler.
make asic-rtl, make asic-sim ASIC-style RTL veya Questa simulasyon akisini calistirir.

APP verilmezse varsayilan hello_uart olur. GPS firmware'i icin her build ve programlama komutunda APP=gps_system acikca verilmelidir. fpga-mcs sonrasi MCS/HEX dosyasini GUI ile programlamak da gecerlidir; kalici boot testi icin kart power-cycle edilmelidir.

GPS bare-metal uygulamasini derlemek ve FPGA uzerinde GDB ile RAM'e yuklemek:

make -C soc/software app APP=gps_system
make -C targets/fpga/vcu118 debug-load APP=gps_system

GPS Firmware Profilleri: ESKF ve GPS-only

gps_system varsayilan olarak ESKF acik (GPS_ESKF_ENABLE=1) ve UART 460800 baud olacak sekilde derlenir. Kok Makefile'in kart varsayilani VCU118 oldugu icin Genesys2 komutlarinda FPGA_BOARD=genesys2 acikca yazilmalidir.

TDK ICM42688 + GPS + ESKF iceren birlesik Genesys2 MCS/BIN:

make FPGA_BOARD=genesys2 APP=gps_system \
  GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs

Yalniz GPS acquisition/tracking, WLS, Doppler velocity ve PPS calistiran; IMU/ESKF baslatmayan firmware:

make FPGA_BOARD=genesys2 APP=gps_system \
  GPS_ESKF_ENABLE=0 fpga-mcs

GPS_ESKF_ENABLE verilmezse deger 1'dir. Iki komut ayni targets/fpga/genesys2/out/flash/genesys2_rocket.mcs ve .bin yollarini kullanir; ikinci build birincinin ciktisinin uzerine yazar.

fpga-mcs mevcut .bit dosyasini kullanip bootloader ve uygulamayi yeniden derler. Yalniz software profili veya baud degisikligi icin sentez gerekmez. Tracking/PPS RTL veya Chisel degistiyse once:

make FPGA_BOARD=genesys2 APP=gps_system fpga-bitstream
make FPGA_BOARD=genesys2 APP=gps_system GPS_ESKF_ENABLE=1 \
  IMU_SENSOR=tdk fpga-mcs

Firmware ve host UART dinleyicisinin varsayilani birlikte 460800'dur:

make FPGA_BOARD=genesys2 fpga-uart

Kalici GPS verisi

gps_system varsayilan olarak ephemeris flash store'u ve navigation context store'u acik derler. Ephemeris store bos ise 32 PRN icin stale baslangic kayitlari yazilir; bunlar zaman/fit kontrolunu gecmeden konum hesabinda kullanilmaz ve gercek LNAV ephemeris'i geldikce yenilenir. Her boot'ta erase yapilmaz (GPS_EPHEMERIS_FLASH_FORCE_FORMAT=0).

Kart Navigation context Ephemeris store
Genesys2 0x01FC0000 0x01FE0000
VCU118 0x07FC0000 0x07FE0000
Ti375C529 0x03FC0000 0x03FE0000

Ilgili build ayarlari GPS_NAV_CONTEXT_ENABLE, GPS_EPHEMERIS_FLASH_ENABLE ve GPS_EPHEMERIS_FLASH_SEED_INITIAL'dir.

UART GPS durum satirlari

[TRK] tracked satellites aktif ve lock durumundaki tracking kanallarini gosterir. [NAV] epoch funnel ise bir konum epoch'unun asamalarini ayirir:

tracked     aktif/locked tracking kanali
ready       gecerli ephemeris, HOW time anchor ve taze olcumu olan kanal
candidates  tamamlanmis ayni epoch snapshot'ina giren kanal
coherent    zaman/coherence kontrolunden gecen kanal
fix         en az WLS minimumu ile nav solve calistirilabildi

Bu nedenle tracked sayisinin ready sayisindan buyuk olmasi tek basina interrupt hatasi degildir. fix=1 WLS denemesinin girdisinin hazir oldugunu gosterir; basarili [LOCATION] sonucunu tek basina garanti etmez. eph_reject/eph_hit/eph_miss, assembly_failed/deadline/overwrite sayaclari kaybin ephemeris mi yoksa epoch assembly tarafinda mi oldugunu ayirmak icindir. Firmware revizyonu acilista [FUSION] init build=... alaninda gorulur; beklenen log yoksa once karta yuklenen build bu alanla dogrulanmalidir.

Doppler, WLS ve ESKF veri yolu

tracking loop, her 20 ms:
  carrier Q7 + 20 prompt I/Q + wideband power + ABS_SAMPLE/code phase
      -> sabit tracking snapshot
      -> synchronizer + APB-domain atomik register + interrupt
      -> C/N0 ve Doppler/range-rate donusumu
      -> ham Doppler + tek-kanal FDE ile C/N0-weighted velocity WLS
      -> ECEF velocity + 3x3 covariance + receiver clock drift
      -> ECEF->ENU adapter
      -> ayri velocity NIS gate
      -> ayni capture epoch'unda 15-state ESKF update
      -> daha yeni IMU history replay

RTL Doppler veya C/N0 uzerinde IIR yapmaz; ham ve 20 ms sabit snapshot'i software'e verir. Software ayni PRN icin C/N0'yi alpha=0.2 ile yumusatir; Doppler'in hem ham de alpha=0.05 IIR sonucu korunur. L1 range-rate -doppler_hz * c / 1575420000 ile hesaplanir. Ham yol tek-kanal leave-one-out FDE'li velocity WLS'ten ESKF'ye, filtreli yol ayri velocity WLS'ten yalniz PPS clock-bias drift predictor'una gider. PPS'in ana faz/zaman olcumu position WLS clock_bias_m sonucudur; Doppler yalniz 200 ms epoch'lar arasindaki turev prediction'ina ve kalite siniflandirmasina yardim eder. Her iki velocity WLS state'i [vx, vy, vz, receiver_clock_drift_mps]'dir; uydu LOS hizi ve broadcast satellite clock drift observation'dan ayrilir. C/N0, range-rate agirligini belirler; post-fit residual gerekirse formal covariance'i yalniz buyutur.

Klasik mutlak-pseudorange GNSS modelinde receiver zaman hatasi delta_t_r(t) ise:

code WLS 4. state:     b_r     = c * delta_t_r             [metre]
Doppler WLS 4. state:  bdot_r  = c * d(delta_t_r)/dt       [metre/saniye]
b_r(t + dt) ~= b_r(t) + bdot_r * dt

Burada bdot_r, receiver oscillator frequency error'inin range-rate birimindeki ortak etkisidir. Ornegin 0.1 ppm yaklasik 29.98 m/s eder; Doppler WLS bu ortak terimi uydu yonune gore degisen gercek vx/vy/vz hareketinden ayirir.

Bu projede onemli bir datum farki vardir: position WLS'e verilen capture zamanlarindan ortak receiver zamani cikarilir ve STARTOFFSET eklenir. Bu nedenle solution.clock_bias_m, saf c*delta_t_r degil, yaklasik c*STARTOFFSET - reference_range olan referans-uyduya bagli goreli datumdur. Doppler WLS'nin dorduncu bilinmeyeni yine uydulara ortak receiver clock/frequency drift'tir; fakat iki fit arasinda clock_bias_m(t+dt)=clock_bias_m(t)+clock_drift_mps*dt kisiti kurulmaz. Fit'ler ayri measurement/normal-equation kullanir. Doppler WLS, LOS vektorleri icin position WLS'nin guncel receiver konumuna baglidir.

ESKF; ENU position/velocity, quaternion attitude, accel bias ve gyro bias iceren 15 hata durumlu filtredir. Her timestamp'li IMU ornegi prediction'a girer. Gecikmis GPS position ve Doppler velocity olcumleri kendi capture epoch'unda uygulanir, ardindan daha yeni IMU history replay edilir. Position ve velocity'nin ayri NIS kapilari vardir; kotu Doppler ayni epoch'taki gecerli position update'ini iptal etmez. Durağanlik supervisor'u uygun oldugunda ZUPT ve zero-gyro update uygular; GPS kesintisinde filtre sahte konum olcumu uretmeden dead-reckoning yapar ve covariance buyur.

C/N0, geometri, WLS clock sigma, integrity ve Doppler residual metrikleri PPS software'inin acquire/precision/robust/holdover profilini de secer. PPS donanimi bu metrikleri dogrudan yorumlamaz; software v2.2 mailbox ile PI Kp/Ki, slew ve lock esiklerini atomik olarak gunceller. Ayrintilar:

  • hardware/external/gps/rtl/trck_src/README.md
  • soc/software/gps_system/README.md
  • soc/software/fusion/README.md
  • hardware/external/gps/rtl/pps/README.md
  • soc/software/pps_python/README.md

Alt girisler:

make -C hardware/soc help
make -C hardware/fpga/vcu118/rtl help
make -C hardware/sim/fpga/vcu118 help
make -C targets/fpga/vcu118 help
make -C targets/fpga/genesys2 help
make -C targets/fpga/ti375c529 help
make -C targets/asic/rocket help

FPGA Kart Secimi ve RF Girisi

FPGA karti kok Makefile'dan FPGA_BOARD ile secilir:

make FPGA_BOARD=vcu118 fpga-config
make FPGA_BOARD=genesys2 fpga-config
make FPGA_BOARD=ti375c529 fpga-config

Top-level BOARD=... alias'i da desteklenir. Orneklerde Genesys2 kullanilir:

make BOARD=genesys2 fpga-config

Top-level hedeflerde tireli isimler tercih edilir (fpga-program gibi). Yanlislikla underscore kullanilmasi durumunda yaygin FPGA hedefleri icin alias'lar da vardir (fpga_program, fpga_debug_openocd gibi).

fpga-config secilen kartin clock, flash, UART, DTIM ve RF ayarlarini gosterir. Genesys2 ve VCU118'de RF kaynagi RF_INPUT_MODE ile secilir:

RF_INPUT_MODE=pmod       Varsayilan. Harici 4-bit RF data + RF clock PMOD'dan gelir.
RF_INPUT_MODE=generated  Dahili RF clock uretilir, RF data sifira baglanir.
RF_INPUT_MODE=ethernet   Kart bazli raw-Ethernet RF streamer path'i.

MAX2771 EVKIT PMOD Baglantisi

MAX2771, mevcut standart PMOD SPI'dan ayri bir uc-telli seri IP ve MMIO peripheralidir. MAX2771 IP tabani 0x10016000, mevcut PMOD SPI tabani ise 0x10015000 adresindedir. Iki arayuzun portlari ve kart pinleri birbirinden bagimsizdir.

Genesys2 icin MAX2771 EVKIT, PMOD JB grubuna baglanir:

MAX2771 sinyali FPGA yonu Genesys2 PMOD FPGA pini Elektrik standardi
SCLK cikis JB2 V30 LVCMOS33
CSN cikis JB3 V25 LVCMOS33
SDATA yazmada cikis, okumada giris JB4 W26 LVCMOS33

Okuma komutunda FPGA, R/W bitinden sonraki turnaround baslangicinda SDATA surucusunu high-Z yapar ve ayni JB4 pinini giris olarak ornekler. Yazmada ayni pin cikis olarak kullanilir. EVKIT ve kart GND hatlari ortaklanmalidir.

VCU118 icin ayrilan bos PMOD0/J52 pinleri:

MAX2771 sinyali FPGA yonu VCU118 PMOD Header pini FPGA pini FPGA I/O standardi
SCLK cikis PMOD0_5 J52.4 AU16 LVCMOS18
CSN cikis PMOD0_6 J52.6 AT15 LVCMOS18
SDATA yazmada cikis, okumada giris PMOD0_7 J52.8 AT16 LVCMOS18

VCU118'in U41 level shifter'i PMOD header tarafini 3.3 V'a cevirir. Mevcut standart PMOD SPI pinleri degistirilmemistir:

Ti375C529, PMOD0/J13'te RF veri ve saatinden arta kalan uc pini kullanir:

MAX2771 sinyali FPGA yonu Ti375C529 PMOD FPGA pini Elektrik standardi
SCLK cikis J13.1 G15 3.3_V_LVCMOS
CSN cikis J13.8 A11 3.3_V_LVCMOS
SDATA yazmada cikis, okumada giris J13.9 A13 3.3_V_LVCMOS
Kart Standart PMOD SPI CSN/MOSI/MISO/SCLK MAX2771 CSN/SDATA/SCLK
Genesys2 JC1/JC2/JC3/JC4 JB3/JB4/JB2
VCU118 J53.1/J53.3/J53.5/J53.7 J52.6/J52.8/J52.4
Ti375C529 J14.1/J14.2/J14.3/J14.4 J13.8/J13.9/J13.1

MAX2771 register varsayilanlarini yazip tek-hat SDATA uzerinden geri okuyarak dogrulayan bare-metal uygulama:

make -C targets/fpga/genesys2 software APP=max2771_spi_test

Test MAX2771 register 0x0-0xA icerigini veri sayfasindaki degerlerle degistirir. EVKIT uzerindeki MAX32625 kontrolcusunun seri hatlari test boyunca high-Z olmali ve EVKIT GUI ayni anda kullanilmamalidir.

Ti375C529 Efinity wrapper'i su anda yalniz harici PMOD RF girisini kullanir; bu kartta RF_INPUT_MODE=pmod birakilmalidir. generated ve ethernet yollari Ti375C529 wrapper'ina henuz uygulanmamistir.

Top-level FPGA wrapper'lar elle yazilmaz; targets/fpga/*/tools/gen_*_wrapper.py scriptleri tarafindan uretilir. Genesys2 ve VCU118'de RF secimi RTL ifdef ile degil, generator parametresi ile yapilir. make rtl ve Vivado build.tcl ayni RF_INPUT_MODE degerini wrapper generator'a gecirir.

Varsayilan pmod modunda Ethernet RF IP/RTL okunmaz ve top'ta Ethernet PHY portlari olusmaz. Ethernet RF akisi gerektiginde:

make -C targets/fpga/vcu118 bitstream RF_INPUT_MODE=ethernet
sudo make -C targets/fpga/vcu118 eth-rf-send

make -C targets/fpga/genesys2 bitstream RF_INPUT_MODE=ethernet
sudo make -C targets/fpga/genesys2 eth-rf-send

PMOD RF pinleri ve voltajlari:

Genesys2 JA, connector ve FPGA tarafi 3.3 V:
  port              FPGA pin  PMOD pin  FPGA I/O   PMOD header level
  rf_clk_pmod       U27       JA[0]     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

VCU118 PMOD0/J52, connector tarafi 3.3 V, FPGA U1 tarafi U41 level shifter
uzerinden 1.8 V bank/LVCMOS18:
  port              FPGA pin  PMOD pin       FPGA I/O   PMOD header level
  rf_clk_pmod       AY14      PMOD0_0 J52.1  LVCMOS18   3.3 V
  rf_data_pmod[0]   AY15      PMOD0_1 J52.3  LVCMOS18   3.3 V
  rf_data_pmod[1]   AW15      PMOD0_2 J52.5  LVCMOS18   3.3 V
  rf_data_pmod[2]   AV15      PMOD0_3 J52.7  LVCMOS18   3.3 V
  rf_data_pmod[3]   AV16      PMOD0_4 J52.2  LVCMOS18   3.3 V

Ti375C529 PMOD0/J13, connector ve FPGA tarafi 3.3 V:
  port              FPGA pin  PMOD pin  FPGA resource       FPGA I/O
  rf_clk            A12       J13.10    GPIOR_95_CLK12      3.3_V_LVCMOS
  rf_data[0]        G16       J13.2     GPIOR_89            3.3_V_LVCMOS
  rf_data[1]        F16       J13.3     GPIOR_90            3.3_V_LVCMOS
  rf_data[2]        F17       J13.4     GPIOR_91            3.3_V_LVCMOS
  rf_data[3]        G17       J13.7     GPIOR_92            3.3_V_LVCMOS

VCU118'de disaridan PMOD header'a 3.3 V seviye verilir. FPGA U1 package pinlerine dogrudan 3.3 V uygulanmaz; o tarafta XDC LVCMOS18 kullanir.

Ti375C529'de AX2771 rf_clk hatti mutlaka J13 pin 10'a baglanmalidir. Bu pin global-clock girisidir. J13 pin 1 / G15 (GPIOR_88_PLLIN1) MAX2771 SCLK cikisidir; dedicated fabric GCLK olmadigi icin RF saati oradan alinmaz.

PMOD SPI portu her RF modunda aktiftir ve ayri MMIO register block olarak 0x10015000 adresindedir. Kart uzerindeki konfig flash SPI'si 0x10014000 adresinde kalir. Yazilim driver'i single/quad calisma modunu ctrl.bit2 uzerinden secer; single modda dq[0] MOSI, dq[1] MISO olarak kullanilir ve dq[2:3] high-Z kalir. Quad modda dq[3:0] birlikte kullanilir.

Genesys2 PMOD JC, connector ve FPGA tarafi 3.3 V:
  port              FPGA pin  PMOD pin  FPGA I/O   PMOD header level
  pmod_spi_csn      AC26      JC1       LVCMOS33   3.3 V
  pmod_spi_dq[0]    AJ27      JC2 MOSI  LVCMOS33   3.3 V
  pmod_spi_dq[1]    AH30      JC3 MISO  LVCMOS33   3.3 V
  pmod_spi_sck      AK29      JC4 SCK   LVCMOS33   3.3 V
  pmod_spi_dq[2]    AD26      JC7       LVCMOS33   3.3 V
  pmod_spi_dq[3]    AG30      JC8       LVCMOS33   3.3 V

VCU118 PMOD1/J53, connector tarafi 3.3 V, FPGA U1 tarafi U42 level shifter
uzerinden 1.2 V bank/LVCMOS12:
  port              FPGA pin  PMOD pin          FPGA I/O   PMOD header level
  pmod_spi_csn      N28       PMOD1_0 J53.1     LVCMOS12   3.3 V
  pmod_spi_dq[0]    M30       PMOD1_1 J53.3 MOSI LVCMOS12  3.3 V
  pmod_spi_dq[1]    N30       PMOD1_2 J53.5 MISO LVCMOS12  3.3 V
  pmod_spi_sck      P30       PMOD1_3 J53.7 SCK  LVCMOS12  3.3 V
  pmod_spi_dq[2]    P29       PMOD1_4 J53.2     LVCMOS12   3.3 V
  pmod_spi_dq[3]    L31       PMOD1_5 J53.4     LVCMOS12   3.3 V

Ti375C529 PMOD1/J14, connector ve FPGA tarafi 3.3 V:
  port              FPGA pin  PMOD pin      FPGA resource       FPGA I/O
  pmod_spi_csn      B12       J14.1         GPIOR_96_CLK13      3.3_V_LVCMOS
  pmod_spi_dq[0]    C14       J14.2 MOSI    GPIOR_97            3.3_V_LVCMOS
  pmod_spi_dq[1]    C13       J14.3 MISO    GPIOR_98            3.3_V_LVCMOS
  pmod_spi_sck      C12       J14.4 SCK     GPIOR_99            3.3_V_LVCMOS
  pmod_spi_dq[2]    D12       J14.7         GPIOR_100           3.3_V_LVCMOS
  pmod_spi_dq[3]    F12       J14.8         GPIOR_101_PLLIN1    3.3_V_LVCMOS

Sensorden gelen external interrupt hatti SPI'dan bagimsizdir. pmod_irq top-level input'u olarak PMOD'a alinir ve PLIC'te BSP_PMOD_IRQ (11) ID'siyle gorunur.

Genesys2:
  port       FPGA pin  PMOD pin  FPGA I/O   PMOD header level
  pmod_irq  AK30      JC9       LVCMOS33   3.3 V

VCU118:
  port       FPGA pin  PMOD pin        FPGA I/O   PMOD header level
  pmod_irq  M31       PMOD1_6 J53.6   LVCMOS12   3.3 V

Ti375C529:
  port       FPGA pin  PMOD pin  FPGA resource  FPGA I/O
  pmod_irq   D13       J14.9     GPIOR_102      3.3_V_LVCMOS
  gps_pps    E13       J14.10    GPIOR_103      3.3_V_LVCMOS

Ti375C529'de gps_pps J14.10 uzerinden cikan 3.3 V PPS sinyalidir; pmod_irq ise J14.9 uzerinden FPGA'ya girer.

Bu pinler mod bazli companion XDC dosyalarinda tutulur: hardware/fpga/genesys2/constraints/genesys2_pmod_rf.xdc, hardware/fpga/vcu118/constraints/vcu118_pmod_rf.xdc, hardware/fpga/genesys2/constraints/genesys2_pmod_spi.xdc, hardware/fpga/vcu118/constraints/vcu118_pmod_spi.xdc, hardware/fpga/genesys2/constraints/genesys2_pmod_irq.xdc, hardware/fpga/vcu118/constraints/vcu118_pmod_irq.xdc, hardware/fpga/genesys2/constraints/genesys2_ethernet.xdc ve hardware/fpga/vcu118/constraints/vcu118_ethernet.xdc. Ti375C529 pinleri, I/O standartlari, PLL'ler ve hard-JTAG baglantisi tek Efinity interface scriptinde tutulur: hardware/fpga/ti375c529/constraints/ti375c529_rocket.isf.

Ti375C529 kart uzeri baglantilar

Ti375C529 development kit'te Rocket sistem saati kart uzerindeki 100 MHz osilatorden, GPS isleme saatleri ise AX2771'in J13.10 uzerindeki 16.367981 MHz RF saatinden uretilir. SW3 active-low Rocket resetidir. FTDI UART varsayilan olarak 460800 baud ve mevcut Linux enumeration'inda /dev/ttyUSB2 kullanir. Birden fazla kart veya farkli enumeration icin UART_PORT=... ve FTDI_URL=... ile override edilebilir.

Lower 512-Mbit konfig flash'i kart icinde su pinlere baglidir; PMOD'a kablo cekilmez:

port          FPGA pin  FPGA resource
flash_csn     A7        GPIOB_N_38 / SSL_N
flash_sck     G6        GPIOB_P_39 / CCK
flash_dq[0]   H4        GPIOB_N_40 / CDI0
flash_dq[1]   H5        GPIOB_P_40 / CDI1
flash_dq[2]   G5        GPIOB_N_39 / CDI2
flash_dq[3]   B7        GPIOB_P_38 / CDI3

Efinity JTAG_USER1, mevcut Rocket DMI tunnel protokolunu kullanir. Host OpenOCD build'inde riscv set_bscan_tunnel_ir destegi bulunmalidir; Efinity ile gelen OpenOCD yerine uyumlu host OpenOCD kullanilir. OpenOCD 0.12 icin gerekli host yamasi targets/fpga/ti375c529/flow/debug/openocd-0.12-ti375-bscan.patch dosyasindadir. Ayrintili Efinity, clock, JTAG ve dogrulama notlari icin targets/fpga/ti375c529/README.md dosyasina bakin.

FPGA Flash ve MCS Akislari

Bu hedefler kok Makefile'dan secilen karta yonlenir. Genesys2 icin BOARD=genesys2, VCU118 icin BOARD=vcu118, Ti375C529 icin BOARD=ti375c529 kullanilir. APP verilmezse varsayilan uygulama hello_uart olur.

Sadece ELF'i derleyip bootloader'in okuyacagi flash-format app imajina cevirmek:

make BOARD=genesys2 APP=hello_uart fpga-elf-flash-image

Bu akista ELF dogrudan MCS'e girmez. Once su dosya uretilir:

soc/out/flash/hello_uart.flash.bin

Yeni bitstream ve yeni aplikasyon ile birlesik MCS/BIN olusturmak:

make BOARD=genesys2 APP=hello_uart fpga-bitstream fpga-mcs

Genesys2 ciktilari:

targets/fpga/genesys2/out/bitstream/genesys2_rocket.bit
targets/fpga/genesys2/out/flash/genesys2_rocket.mcs
targets/fpga/genesys2/out/flash/genesys2_rocket.bin

Birlesik MCS'i olusturup kart flash'ina yazmak:

make BOARD=genesys2 APP=hello_uart fpga-flash-mcs

Yeni bitstream de uretilsin, sonra birlesik MCS flash'a yazilsin:

make BOARD=genesys2 APP=hello_uart fpga-bitstream fpga-flash-mcs

Sadece bitstream region'ini kart flash'ina yazmak:

make BOARD=genesys2 fpga-flash-bitstream

Yeni bitstream uretip sadece bitstream region'ini yazmak:

make BOARD=genesys2 fpga-bitstream fpga-flash-bitstream

ELF'i flash formatina cevirip sadece app region'ini kart flash'ina yazmak:

make BOARD=genesys2 APP=hello_uart fpga-flash-app

fpga-flash, fpga-flash-app icin alias'tir:

make BOARD=genesys2 APP=hello_uart fpga-flash

Degisen bitstream ve app region'larini ayri MCS'lerle programlamak:

make BOARD=genesys2 APP=hello_uart fpga-flash-all

Flash programlama bittikten sonra FPGA her zaman otomatik olarak flash'taki kullanici bitstream'inden yeniden baslamaz. Kartin kalici flash'tan boot etmesini test etmek icin power-cycle/reconfigure yapin; sadece RAM/SRAM'e hemen yuklemek icin fpga-program kullanin:

make BOARD=genesys2 fpga-program

OpenOCD baslarken LIBUSB_ERROR_BUSY gorulurse JTAG kablosunu Vivado hw_server tutuyordur. Hardware Manager'i kapatin veya bu prosesleri durdurun:

pkill -u "$USER" -x hw_server || true
pkill -u "$USER" -x cs_server || true
make BOARD=genesys2 fpga-debug-openocd

Genesys2 flash yerlesimi:

bitstream offset: 0x00000000
app offset:       0x01800000
flash size:       32 MiB
interface:        SPIx4

Ti375C529 Efinity build ve flash

Efinity /tools/efinix/efinity, /tools/Efinix/efinity, /opt, kullanici dizini ve tools/local/efinity altinda aranir. Farkli bir kurulum EFINITY_HOME=/path/to/efinity/<version> ile secilebilir. fpga-bitstream, uzun RTL elaborasyonundan once kurulumdaki bin/setup.sh ve scripts/efx_run.py dosyalarini kontrol eder. Build, SRAM'e gecici programlama ve kart tespiti kokten su sekilde yapilir:

make FPGA_BOARD=ti375c529 fpga-config
make FPGA_BOARD=ti375c529 fpga-bitstream
make -C targets/fpga/ti375c529 detect
make FPGA_BOARD=ti375c529 fpga-program

Ti375C529'de repository genelindeki fpga-mcs hedef adi korunur fakat cikti Xilinx MCS/BIN degil, Efinity raw HEX'tir. Lower 512-Mbit flash yerlesimi:

configuration offset: 0x00000000
app offset:           0x00800000
flash size:           64 MiB
interface:            active-x1 configuration / user-mode quad SPI

Konfig ve uygulama imajlarini uretmek ve programlamak icin:

make FPGA_BOARD=ti375c529 APP=hello_uart fpga-mcs
make FPGA_BOARD=ti375c529 APP=hello_uart fpga-flash-app
make FPGA_BOARD=ti375c529 fpga-flash-bitstream
make FPGA_BOARD=ti375c529 APP=hello_uart fpga-flash-mcs

Ciktilar:

targets/fpga/ti375c529/out/bitstream/ti375c529_rocket.bit
targets/fpga/ti375c529/out/bitstream/ti375c529_rocket.hex
targets/fpga/ti375c529/out/flash/ti375c529_rocket.hex
targets/fpga/ti375c529/out/flash/ti375c529_rocket.json

Flash programlama Efinity'nin Ti375'e uygun JTAG-to-SPI bridge'ini gecici olarak yukler. Gercek persistent boot testi icin programlamadan sonra karta power-cycle uygulanmalidir. GDB ile DTIM'e yukleme ve UART dinleme:

make FPGA_BOARD=ti375c529 fpga-debug-openocd
make FPGA_BOARD=ti375c529 APP=hello_uart fpga-debug-load
make FPGA_BOARD=ti375c529 fpga-uart

GPS Reset Davranisi

OpenOCD/GDB monitor reset yolu Rocket debug module ndmreset sinyalini assert eder. FPGA top wrapper'lari bu sinyali SoC resetine katar; bu reset hem Rocket core'a hem APB peripheral tarafina gider.

GPS APB entegrasyonu reseti tek tel olarak kullanmaz. APBGpsBlock icinde ResetCatchAndSync ile APB/PCLK, acquisition 80 MHz, tracking 125 MHz ve RF/AFE clock domainleri icin ayri active-low resetler uretilir. Assert async, deassert ilgili clock domaininde 3 kademe senkronizedir. APB register wrapper lari PRESETN ile resetlenir; acq_top, trck_top ve afe_top ise kendi clock domain resetleriyle resetlenir.

Not: Senkron deassert icin ilgili clock calismalidir. PMOD/RF clock yoksa RF/AFE domain reseti release olmaz; bu reset acisindan beklenen davranistir.

Detayli dosya haritasi icin PROJECT_LAYOUT.md ve hardware/README.md.

S
Description
No description provided
Readme 1.1 GiB
Languages
FIRRTL 66.2%
VHDL 8.1%
Scala 7.6%
SystemVerilog 6.6%
C 4.5%
Other 6.9%