feat(gps): expose ESKF build profiles and 460800 UART
This commit is contained in:
@@ -40,6 +40,9 @@ help:
|
|||||||
'' \
|
'' \
|
||||||
'Config:' \
|
'Config:' \
|
||||||
' FPGA_BOARD=$(FPGA_BOARD) # vcu118 or genesys2' \
|
' FPGA_BOARD=$(FPGA_BOARD) # vcu118 or genesys2' \
|
||||||
|
' UART_BAUD=460800 # FPGA firmware and host listener default' \
|
||||||
|
' GPS_ESKF_ENABLE=1 # gps_system: 1 ESKF, 0 GPS-only' \
|
||||||
|
' IMU_SENSOR=auto # gps_system: auto, tdk, st or stm' \
|
||||||
'' \
|
'' \
|
||||||
'Direct entry points:' \
|
'Direct entry points:' \
|
||||||
' make -C soc help' \
|
' make -C soc help' \
|
||||||
|
|||||||
@@ -86,6 +86,93 @@ make -C soc/software app APP=gps_system
|
|||||||
make -C targets/fpga/vcu118 debug-load 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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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. Iki profili
|
||||||
|
saklamak gerekiyorsa her build'den sonra dosyayi profil adiyla kopyalayin.
|
||||||
|
|
||||||
|
`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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
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:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make FPGA_BOARD=genesys2 fpga-uart
|
||||||
|
```
|
||||||
|
|
||||||
|
### Doppler, WLS ve ESKF veri yolu
|
||||||
|
|
||||||
|
```text
|
||||||
|
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
|
||||||
|
-> satellite velocity/clock-drift duzeltmeli 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`, Doppler'i
|
||||||
|
`alpha=0.05` ile yumusatir. L1 range-rate
|
||||||
|
`-doppler_hz * c / 1575420000` ile hesaplanir. En az dort uyduyla cozulmus
|
||||||
|
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.
|
||||||
|
|
||||||
|
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:
|
Alt girisler:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
|
|||||||
@@ -46,3 +46,9 @@ external/gps/rtl/
|
|||||||
pass this path as the default GPS_SYSTEM_DIR, so the Vivado flow does not
|
pass this path as the default GPS_SYSTEM_DIR, so the Vivado flow does not
|
||||||
depend on a user-specific /home/... checkout.
|
depend on a user-specific /home/... checkout.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
GPS tracking olcum yolunun 20 ms Doppler/C/N0 snapshot, PCLK synchronizer,
|
||||||
|
APB register/interrupt ve software velocity WLS sozlesmesi
|
||||||
|
`external/gps/rtl/trck_src/README.md` icinde belgelenir. PPS PI periferigi,
|
||||||
|
runtime coefficient/lock register map'i ve fiziksel pin sinirlari
|
||||||
|
`external/gps/rtl/pps/README.md` icindedir.
|
||||||
|
|||||||
+10
@@ -47,6 +47,16 @@ The hardware does not add `POSTPONE_TOW`. Baremetal must commit an already
|
|||||||
epoch-aligned GPS reference, so the verified 160 ms subframe readout correction
|
epoch-aligned GPS reference, so the verified 160 ms subframe readout correction
|
||||||
is owned exactly once by the navigation software.
|
is owned exactly once by the navigation software.
|
||||||
|
|
||||||
|
Tracking C/N0 and Doppler are not inputs to the PPS RTL. The tracking wrapper
|
||||||
|
publishes those measurements through its separate 20 ms APB mailbox. Firmware
|
||||||
|
uses C/N0, geometry, WLS clock sigma, integrity and Doppler velocity residual
|
||||||
|
to select `acquire`, `precision`, `robust` or `holdover`, then writes the
|
||||||
|
corresponding PI coefficients, slew limit and lock thresholds through this
|
||||||
|
PPS mailbox. Doppler also predicts the WLS clock-bias datum between commits.
|
||||||
|
This keeps quality policy and the small navigation pre-filter in software
|
||||||
|
while the deterministic PI loop, fixed-point rate state and physical edge
|
||||||
|
generation remain in hardware.
|
||||||
|
|
||||||
The APB register offsets live in `pps_pkg.sv`. Multiword input fields are
|
The APB register offsets live in `pps_pkg.sv`. Multiword input fields are
|
||||||
shadow registers and must be followed by one `COMMIT` write. A new mailbox
|
shadow registers and must be followed by one `COMMIT` write. A new mailbox
|
||||||
must not be written while `STATUS.COMMIT_BUSY` is set.
|
must not be written while `STATUS.COMMIT_BUSY` is set.
|
||||||
|
|||||||
+107
@@ -0,0 +1,107 @@
|
|||||||
|
# GPS tracking measurement yolu
|
||||||
|
|
||||||
|
Bu dizindeki tracking loop yalniz code/carrier takibi yapmaz; her 20 ms GPS
|
||||||
|
L1 C/A navigation-bit epoch'unda software'in C/N0 ve Doppler kullanabilmesi
|
||||||
|
icin atomik bir measurement snapshot'i da uretir.
|
||||||
|
|
||||||
|
## 20 ms snapshot
|
||||||
|
|
||||||
|
`tracking_measurement.sv`, ilk NAV-bit kenarinda accumulator'lari arm eder ve
|
||||||
|
sonraki her bit epoch'unda su alanlari birlikte latch eder:
|
||||||
|
|
||||||
|
```text
|
||||||
|
nav bit
|
||||||
|
ABS_SAMPLE
|
||||||
|
remaining code phase
|
||||||
|
signed carrier frequency, Q7
|
||||||
|
20 x prompt I toplami
|
||||||
|
20 x prompt Q toplami
|
||||||
|
20 x (I_prompt^2 + Q_prompt^2) wideband power toplami
|
||||||
|
sample count
|
||||||
|
16-bit sequence
|
||||||
|
```
|
||||||
|
|
||||||
|
Prompt energy `lock_detector.sv` icinde pipeline'li oldugu icin bit kenarindan
|
||||||
|
sonra dort tracking clock beklenir; bu, son 1 ms enerji terimini eski epoch'a
|
||||||
|
dahil eder ve yeni epoch ile karistirmaz. Snapshot ve `measurement_valid`
|
||||||
|
sonraki bit epoch'una kadar, yaklasik 20 ms sabit kalir.
|
||||||
|
|
||||||
|
## APB aktarimi ve interrupt
|
||||||
|
|
||||||
|
`apb_wrappers/tracking_wrapper.sv`, valid ve payload'un her bitini
|
||||||
|
`double_ff_syn` yardimcisi ile PCLK domainine alir. Bu yardimcinin mevcut
|
||||||
|
implementasyonu `stage_1`, `stage_2` ve registered `Dout` olmak uzere uc
|
||||||
|
register kademesidir. Kaynak payload 20 ms sabit kaldigi icin FIFO veya toggle
|
||||||
|
handshake kullanilmaz. Wrapper synchronized valid kenarindan sonra iki ek PCLK
|
||||||
|
settle cycle bekler, tum alanlari APB-domain register bankina ayni anda kopyalar
|
||||||
|
ve measurement interrupt/flag uretir.
|
||||||
|
|
||||||
|
Software sequence'i okumadan once ve payload'dan sonra tekrar okuyarak atomik
|
||||||
|
snapshot dogrulamasi yapar. Sequence degisirse okuma tekrar edilir; sequence
|
||||||
|
atlarsa kayip measurement diagnostics sayaci artar.
|
||||||
|
|
||||||
|
Measurement register offsetleri:
|
||||||
|
|
||||||
|
| Offset | Alan |
|
||||||
|
|---:|---|
|
||||||
|
| `0x50` | version, valid, NAV bit, lock ve sample count metadata |
|
||||||
|
| `0x54` | 16-bit sequence |
|
||||||
|
| `0x58` | signed carrier frequency Q7 |
|
||||||
|
| `0x5c` | ABS_SAMPLE |
|
||||||
|
| `0x60` | remaining code phase |
|
||||||
|
| `0x64` | signed prompt sum I |
|
||||||
|
| `0x68` | signed prompt sum Q |
|
||||||
|
| `0x6c` | wideband power low |
|
||||||
|
| `0x70` | wideband power high |
|
||||||
|
|
||||||
|
## Software'e verilen anlam
|
||||||
|
|
||||||
|
Carrier register'i toplam NCO frekansidir. Software IF merkezini cikarir:
|
||||||
|
|
||||||
|
```text
|
||||||
|
doppler_hz = carrier_q7 / 128 - 4092000
|
||||||
|
range_rate_mps = -doppler_hz * c / 1575420000
|
||||||
|
```
|
||||||
|
|
||||||
|
Pozitif received-frequency Doppler azalan geometrik range anlamina geldigi
|
||||||
|
icin range-rate denkleminde eksi isareti vardir.
|
||||||
|
|
||||||
|
C/N0, 20 prompt icin narrowband/wideband power estimator'i ile hesaplanir:
|
||||||
|
|
||||||
|
```text
|
||||||
|
R = (sum_i^2 + sum_q^2) / WBP
|
||||||
|
C/N0_linear = 1000 * (R - 1) / (20 - R)
|
||||||
|
C/N0_dbhz = 10 * log10(C/N0_linear)
|
||||||
|
```
|
||||||
|
|
||||||
|
RTL IIR uygulamaz. Ham snapshot debug ve yeniden tune icin korunur. ISR state'i
|
||||||
|
ayni PRN'de C/N0 icin `alpha=0.2`, Doppler icin `alpha=0.05` software IIR
|
||||||
|
uygular; reacquisition veya PRN degisiminde eski kanal state'i kullanilmaz.
|
||||||
|
|
||||||
|
Filtrelenmis range-rate, satellite ECEF velocity ve satellite clock drift ile
|
||||||
|
C/N0-weighted 4-state velocity WLS'ye girer:
|
||||||
|
|
||||||
|
```text
|
||||||
|
state = [receiver_vx, receiver_vy, receiver_vz, receiver_clock_drift_mps]
|
||||||
|
observation = measured_range_rate
|
||||||
|
- satellite_LOS_rate
|
||||||
|
+ c * satellite_clock_drift
|
||||||
|
H = [-u_x, -u_y, -u_z, 1]
|
||||||
|
```
|
||||||
|
|
||||||
|
WLS en az dort gecerli uydu ister; ECEF velocity, 3x3 covariance, receiver
|
||||||
|
clock drift ve residual RMS uretir. Fusion adapter velocity/covariance'i ENU'ya
|
||||||
|
dondurur ve ayri velocity NIS kapisi ile 15-state ESKF'ye verir.
|
||||||
|
|
||||||
|
## Dogrulama
|
||||||
|
|
||||||
|
```sh
|
||||||
|
make -C hardware/external/gps/rtl/trck_src/tb test
|
||||||
|
make -C soc/software/gps_system/tests run
|
||||||
|
make -C soc/software/gps_system/tests sanitize
|
||||||
|
```
|
||||||
|
|
||||||
|
Questa testleri 20 prompt akumulasyonu, snapshot hold, synchronizer settle,
|
||||||
|
atomik APB copy ve interrupt'i; Linux C testleri Q7 Doppler/range-rate, C/N0
|
||||||
|
estimator, coherent read, satellite velocity/clock drift ve weighted velocity
|
||||||
|
WLS/covariance yolunu kontrol eder.
|
||||||
@@ -11,8 +11,10 @@ APP_FLASH_OFFSET ?= 0x06000000
|
|||||||
APP ?= hello_uart
|
APP ?= hello_uart
|
||||||
GPS_DEBUG ?= 1
|
GPS_DEBUG ?= 1
|
||||||
GPS_DEBUG_LEVEL ?= 1
|
GPS_DEBUG_LEVEL ?= 1
|
||||||
|
GPS_ESKF_ENABLE ?= 1
|
||||||
|
IMU_SENSOR ?= auto
|
||||||
BSP_UART_CLOCK_HZ ?= 100000000
|
BSP_UART_CLOCK_HZ ?= 100000000
|
||||||
BSP_UART_BAUDRATE ?= 115200
|
BSP_UART_BAUDRATE ?= 460800
|
||||||
GPS_SYSTEM_UART_BAUDRATE ?= 460800
|
GPS_SYSTEM_UART_BAUDRATE ?= 460800
|
||||||
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
||||||
GPS_SYSTEM_CLINT_TIMEBASE_HZ ?= 500000
|
GPS_SYSTEM_CLINT_TIMEBASE_HZ ?= 500000
|
||||||
@@ -42,6 +44,8 @@ help:
|
|||||||
@echo " BSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)"
|
@echo " BSP_UART_CLOCK_HZ=$(BSP_UART_CLOCK_HZ)"
|
||||||
@echo " BSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)"
|
@echo " BSP_UART_BAUDRATE=$(BSP_UART_BAUDRATE)"
|
||||||
@echo " GPS_SYSTEM_UART_BAUDRATE=$(GPS_SYSTEM_UART_BAUDRATE)"
|
@echo " GPS_SYSTEM_UART_BAUDRATE=$(GPS_SYSTEM_UART_BAUDRATE)"
|
||||||
|
@echo " GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)"
|
||||||
|
@echo " IMU_SENSOR=$(IMU_SENSOR)"
|
||||||
@echo " BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)"
|
@echo " BSP_CLINT_TIMEBASE_HZ=$(BSP_CLINT_TIMEBASE_HZ)"
|
||||||
@echo " GPS_SYSTEM_CLINT_TIMEBASE_HZ=$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)"
|
@echo " GPS_SYSTEM_CLINT_TIMEBASE_HZ=$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)"
|
||||||
@echo " GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES=$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)"
|
@echo " GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES=$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)"
|
||||||
@@ -63,11 +67,11 @@ steval-mki217v1-test:
|
|||||||
@make -C steval_mki217v1_test TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/steval_mki217v1_test" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
@make -C steval_mki217v1_test TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/steval_mki217v1_test" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||||
|
|
||||||
gps-system:
|
gps-system:
|
||||||
@make -C gps_system TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/gps_system" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(GPS_SYSTEM_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)" IMU_CORRECTED_PUBLISH_EVERY_N_SAMPLES="$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
@make -C gps_system TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/gps_system" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(GPS_SYSTEM_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(GPS_SYSTEM_CLINT_TIMEBASE_HZ)" IMU_CORRECTED_PUBLISH_EVERY_N_SAMPLES="$(GPS_SYSTEM_IMU_PUBLISH_EVERY_N_SAMPLES)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||||
|
|
||||||
app:
|
app:
|
||||||
@test -d "$(APP)"
|
@test -d "$(APP)"
|
||||||
@make -C "$(APP)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/$(APP)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
@make -C "$(APP)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(OUT_DIR)/$(APP)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(BSP_DTIM_BASE)" BSP_DTIM_SIZE="$(BSP_DTIM_SIZE)" all
|
||||||
|
|
||||||
flash-image: app
|
flash-image: app
|
||||||
@mkdir -p "$(FLASH_DIR)"
|
@mkdir -p "$(FLASH_DIR)"
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ APP_FLASH_OFFSET ?= 0x06000000
|
|||||||
MARCH ?= rv64imafdc_zicsr_zifencei
|
MARCH ?= rv64imafdc_zicsr_zifencei
|
||||||
MABI ?= lp64d
|
MABI ?= lp64d
|
||||||
BSP_UART_CLOCK_HZ ?= 100000000
|
BSP_UART_CLOCK_HZ ?= 100000000
|
||||||
BSP_UART_BAUDRATE ?= 115200
|
BSP_UART_BAUDRATE ?= 460800
|
||||||
BSP_DTIM_BASE ?= 0x80000000
|
BSP_DTIM_BASE ?= 0x80000000
|
||||||
BSP_DTIM_SIZE ?= 0x00100000
|
BSP_DTIM_SIZE ?= 0x00100000
|
||||||
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
|
CONFIG_STAMP := $(BUILD_DIR)/build_config.txt
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef BSP_UART_BAUDRATE
|
#ifndef BSP_UART_BAUDRATE
|
||||||
#define BSP_UART_BAUDRATE 115200UL
|
#define BSP_UART_BAUDRATE 460800UL
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void bsp_init(void)
|
void bsp_init(void)
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ LINKER_SCRIPT ?= $(COMMON_DIR)/linker_ram.ld
|
|||||||
MARCH ?= rv64imafdc_zicsr_zifencei
|
MARCH ?= rv64imafdc_zicsr_zifencei
|
||||||
MABI ?= lp64d
|
MABI ?= lp64d
|
||||||
BSP_UART_CLOCK_HZ ?= 100000000
|
BSP_UART_CLOCK_HZ ?= 100000000
|
||||||
BSP_UART_BAUDRATE ?= 115200
|
BSP_UART_BAUDRATE ?= 460800
|
||||||
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
BSP_CLINT_TIMEBASE_HZ ?= 1000000
|
||||||
BSP_DTIM_BASE ?= 0x80000000
|
BSP_DTIM_BASE ?= 0x80000000
|
||||||
BSP_DTIM_SIZE ?= 0x00100000
|
BSP_DTIM_SIZE ?= 0x00100000
|
||||||
|
|||||||
@@ -6,6 +6,22 @@ Bu klasör Genesys2 kartından UART ile alınan GPS WLS konumlarını ve PMOD SP
|
|||||||
ve jiroskop biası. Kartın durağan olduğu deneyde zero-velocity update (ZUPT)
|
ve jiroskop biası. Kartın durağan olduğu deneyde zero-velocity update (ZUPT)
|
||||||
uygulanır ve GPS innovation değerlerine aykırı-ölçüm kapısı konur.
|
uygulanır ve GPS innovation değerlerine aykırı-ölçüm kapısı konur.
|
||||||
|
|
||||||
|
Bare-metal ürün firmware'i ana dizinden iki profille üretilebilir:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# TDK + GPS + ESKF (varsayılan GPS_ESKF_ENABLE=1)
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
|
||||||
|
|
||||||
|
# GPS-only; IMU/ESKF kapalı, WLS/Doppler/PPS açık
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=0 fpga-mcs
|
||||||
|
```
|
||||||
|
|
||||||
|
Firmware ve UART kayıt aracının varsayılan hızı `460800` baud'dur. İki profil
|
||||||
|
aynı MCS/BIN çıktı yolunu kullandığı için ikinci build ilk dosyanın üzerine
|
||||||
|
yazar.
|
||||||
|
|
||||||
## Güncel durum ve devralma notu (2026-07-16)
|
## Güncel durum ve devralma notu (2026-07-16)
|
||||||
|
|
||||||
Bu bölüm yeni bir geliştirme oturumunun nereden devam edeceğini tek yerde
|
Bu bölüm yeni bir geliştirme oturumunun nereden devam edeceğini tek yerde
|
||||||
@@ -71,6 +87,37 @@ GPS position + Doppler velocity --\
|
|||||||
TDK veya ST IMU -> imu_sensor ----/
|
TDK veya ST IMU -> imu_sensor ----/
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Doppler ESKF'ye nasıl geliyor?
|
||||||
|
|
||||||
|
1. Tracking RTL her 20 ms NAV-bit epoch'unda carrier NCO Q7 değerini,
|
||||||
|
`ABS_SAMPLE`, remaining code phase ve 20 prompt'un I/Q/WBP toplamlarını
|
||||||
|
birlikte latch eder. Payload 20 ms sabit kalır; APB wrapper registered
|
||||||
|
synchronizer ve settle süresinden sonra atomik register bankı ile interrupt
|
||||||
|
üretir.
|
||||||
|
2. Firmware coherent mailbox okumasında sequence'i payload öncesi/sonrası
|
||||||
|
kontrol eder. Carrier değeri için
|
||||||
|
`doppler_hz = carrier_q7/128 - 4092000`, L1 pseudorange-rate için
|
||||||
|
`range_rate = -doppler_hz*c/1575420000` kullanılır.
|
||||||
|
3. Aynı PRN'in 50 Hz snapshot'larında C/N0 `alpha=0.2`, Doppler `alpha=0.05`
|
||||||
|
software IIR ile yumuşatılır. RTL ham ölçümü korur; hardware Doppler IIR
|
||||||
|
içermez.
|
||||||
|
4. En az dört uyduyla C/N0-weighted velocity WLS
|
||||||
|
`[receiver_vx, receiver_vy, receiver_vz, receiver_clock_drift_mps]`
|
||||||
|
state'ini çözer. Her observation'dan satellite LOS velocity çıkarılır,
|
||||||
|
broadcast satellite clock drift eklenir. Inverse normal matrix ve post-fit
|
||||||
|
residual ECEF velocity covariance'ini üretir.
|
||||||
|
5. GPS adapter velocity ve 3x3 covariance'i ECEF'ten ENU'ya döndürür,
|
||||||
|
kart ölçümüne dayalı minimum `2/2/3 m/s` standard-deviation floor'larını
|
||||||
|
uygular ve position ile aynı capture timestamp'ini korur.
|
||||||
|
6. Fusion engine gecikmiş position ve velocity'yi aynı geçmiş epoch'unda
|
||||||
|
uygular. Velocity'nin ayrı 3-DOF `%99.9`, `NIS=16.266` kapısı vardır; bir
|
||||||
|
velocity reject aynı epoch'taki kabul edilmiş position update'ini bozmaz.
|
||||||
|
Sonra daha yeni IMU history current-time horizon'a kadar replay edilir.
|
||||||
|
|
||||||
|
Bu zincirin RTL/register ayrıntısı
|
||||||
|
`hardware/external/gps/rtl/trck_src/README.md`, bare-metal WLS ve kart
|
||||||
|
doğrulaması `soc/software/gps_system/README.md` içindedir.
|
||||||
|
|
||||||
Python tarafındaki giriş noktaları:
|
Python tarafındaki giriş noktaları:
|
||||||
|
|
||||||
- `serial_capture.py`: UART akışını zaman damgalı CSV olarak toplar;
|
- `serial_capture.py`: UART akışını zaman damgalı CSV olarak toplar;
|
||||||
@@ -149,11 +196,12 @@ konum çözülmesi tek başına PPS üretildiğini kanıtlamaz.
|
|||||||
|
|
||||||
İlk kabul edilen WLS/PPS commit'i yalnız coarse alignment yapar. Ardından faz
|
İlk kabul edilen WLS/PPS commit'i yalnız coarse alignment yapar. Ardından faz
|
||||||
hatası en fazla sekiz adet 125 MHz tracking-clock tick'i, yani 64 ns olan beş
|
hatası en fazla sekiz adet 125 MHz tracking-clock tick'i, yani 64 ns olan beş
|
||||||
ardışık PI update gerekir. Lock kazanıldıktan sonra 256 ns üzerindeki yeni bir
|
ardışık PI update gerekir. RTL reset release eşiği 256 ns'dir; v2.2 production
|
||||||
faz hatası lock'u düşürür. WLS receiver-clock bias/pseudorange jitter'ı veya
|
software profile'ları tek seyrek WLS sıçraması pulse kaybettirmesin diye
|
||||||
epoch capture belirsizliği beş ardışık ölçümde 64 ns koşulunu bozarsa konum
|
release eşiğini runtime `LOOP_CONFIG` ile 1.024 us yapar. WLS receiver-clock
|
||||||
gelmeye devam ederken PPS pini sürekli LOW kalabilir. Bu şu an en güçlü
|
bias/pseudorange jitter'ı veya epoch capture belirsizliği beş ardışık ölçümde
|
||||||
olasılıktır; register ölçmeden eşik değiştirilmemelidir.
|
64 ns acquire koşulunu bozarsa konum gelmeye devam ederken PPS pini LOW
|
||||||
|
kalabilir.
|
||||||
|
|
||||||
Firmware ancak WLS başarılı, `solution_valid=true`, PPS referans satırı FDE ile
|
Firmware ancak WLS başarılı, `solution_valid=true`, PPS referans satırı FDE ile
|
||||||
dışlanmamış ve referans kanalın capture sequence'i sıfır değilse PPS mailbox'a
|
dışlanmamış ve referans kanalın capture sequence'i sıfır değilse PPS mailbox'a
|
||||||
@@ -185,7 +233,7 @@ monitor resume
|
|||||||
|
|
||||||
| Register | Beklenen/yorum |
|
| Register | Beklenen/yorum |
|
||||||
|---|---|
|
|---|---|
|
||||||
| `VERSION @ 0x1002a07c` | `0x00020100`; farklıysa ELF/bitstream eşleşmiyor |
|
| `VERSION @ 0x1002a07c` | Production v2.2 için `0x00020200`; farklıysa ELF/bitstream eşleşmesini kontrol edin |
|
||||||
| `CONTROL @ 0x1002a000` | Enable + track açıkken alt bitler genellikle `0x3` |
|
| `CONTROL @ 0x1002a000` | Enable + track açıkken alt bitler genellikle `0x3` |
|
||||||
| `STATUS @ 0x1002a004` | `0x1`: commit/alignment yok; alt bitler `0x7`: aligned fakat lock değil; bit 11 set ve alt bitler `0xf`: locked/valid |
|
| `STATUS @ 0x1002a004` | `0x1`: commit/alignment yok; alt bitler `0x7`: aligned fakat lock değil; bit 11 set ve alt bitler `0xf`: locked/valid |
|
||||||
| `ACTIVE_SEQUENCE @ 0x1002a048` | `0`: firmware hiç geçerli PPS commit'i yapmamış; artıyorsa WLS referansları PPS'ye ulaşıyor |
|
| `ACTIVE_SEQUENCE @ 0x1002a048` | `0`: firmware hiç geçerli PPS commit'i yapmamış; artıyorsa WLS referansları PPS'ye ulaşıyor |
|
||||||
@@ -197,7 +245,7 @@ lock acquisition/faz jitter'ıdır. `STATUS` lock gösteriyor ve `PULSE_COUNT`
|
|||||||
artıyorsa JC10 sinyali JC11 GND referansıyla osiloskop veya logic analyzer'da
|
artıyorsa JC10 sinyali JC11 GND referansıyla osiloskop veya logic analyzer'da
|
||||||
ölçülmelidir; pulse saniyede bir yaklaşık 100 ms HIGH'dır.
|
ölçülmelidir; pulse saniyede bir yaklaşık 100 ms HIGH'dır.
|
||||||
|
|
||||||
2026-07-25 canlı Genesys2 ölçümünde `VERSION=0x00020100`,
|
Erken 2026-07-25 v2.1 canlı Genesys2 ölçümünde `VERSION=0x00020100`,
|
||||||
`CONTROL=0x00000003` ve snapshot `ACTIVE_SEQUENCE=11583` görüldü.
|
`CONTROL=0x00000003` ve snapshot `ACTIVE_SEQUENCE=11583` görüldü.
|
||||||
`PULSE_COUNT=314`, PPS core'un resetten beri 314 `pps_out` pulse olayı
|
`PULSE_COUNT=314`, PPS core'un resetten beri 314 `pps_out` pulse olayı
|
||||||
oluşturduğunu kanıtladı; post-route top-level yol da sabit LOW değildir.
|
oluşturduğunu kanıtladı; post-route top-level yol da sabit LOW değildir.
|
||||||
@@ -218,6 +266,13 @@ işaret eder. Eşik ölçümsüz büyütülmemeli; önce clock-bias/TDOP kalite
|
|||||||
outlier reddi veya faz gözlemi süzme stratejisi board A/B testiyle
|
outlier reddi veya faz gözlemi süzme stratejisi board A/B testiyle
|
||||||
değerlendirilmelidir.
|
değerlendirilmelidir.
|
||||||
|
|
||||||
|
Bu tarihsel v2.1 teşhisinden sonra v2.2 dinamik PI profilleri, Doppler
|
||||||
|
clock-drift prediction, bounded WLS clock-bias filtresi, 2 s validity
|
||||||
|
watchdog/30 s state koruma politikası ve fractional capture correction
|
||||||
|
eklenmiştir. Güncel sentetik ve kart sonuçları
|
||||||
|
`soc/software/gps_system/README.md` altındaki PPS bölümlerinde, register/RTL
|
||||||
|
davranışı `hardware/external/gps/rtl/pps/README.md` içinde tutulur.
|
||||||
|
|
||||||
## Çalıştırma
|
## Çalıştırma
|
||||||
|
|
||||||
UART kaydı:
|
UART kaydı:
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import serial
|
|||||||
def parse_args() -> argparse.Namespace:
|
def parse_args() -> argparse.Namespace:
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("--port", default="/dev/ttyUSB2")
|
parser.add_argument("--port", default="/dev/ttyUSB2")
|
||||||
parser.add_argument("--baud", type=int, default=115200)
|
parser.add_argument("--baud", type=int, default=460800)
|
||||||
parser.add_argument("--duration", type=float, default=60.0)
|
parser.add_argument("--duration", type=float, default=60.0)
|
||||||
parser.add_argument("--output", type=Path, required=True)
|
parser.add_argument("--output", type=Path, required=True)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
# GPS System Port Notes
|
# GPS System Port Notes
|
||||||
|
|
||||||
Bu notlar GPS bare-metal yaziliminin VCU118 Rocket SoC portu ve interrupt debug sureci icin yazildi.
|
Bu notlar GPS bare-metal yaziliminin VCU118/Genesys2 Rocket SoC portunu,
|
||||||
|
tracking Doppler/C/N0 yolunu, ESKF entegrasyonunu ve interrupt debug surecini
|
||||||
|
belgeler.
|
||||||
|
|
||||||
## Uygulama akisi ve dosya sinirlari
|
## Uygulama akisi ve dosya sinirlari
|
||||||
|
|
||||||
@@ -66,6 +68,34 @@ ve raw kuyruga koyar. GPS ISR'leri acquisition/tracking olaylarini kaydeder.
|
|||||||
interrupt'lari gelebilecegi icin IMU kuyrugu WLS'den hem once hem sonra drain
|
interrupt'lari gelebilecegi icin IMU kuyrugu WLS'den hem once hem sonra drain
|
||||||
edilir; GPS update'i WLS bitis zamaninda degil capture epoch'unda uygulanir.
|
edilir; GPS update'i WLS bitis zamaninda degil capture epoch'unda uygulanir.
|
||||||
|
|
||||||
|
### ESKF entegrasyonunda yapilanlar
|
||||||
|
|
||||||
|
- TDK ICM42688 ve ST LSM6DSOX suruculeri sensor-markasindan bagimsiz
|
||||||
|
`imu_sensor`/`imu_sample_t` sinirinin arkasina alindi. Her IMU ornegi olcum
|
||||||
|
aninda monotonik CLINT timestamp'i alir; ISR icinde ESKF matematigi
|
||||||
|
calismaz.
|
||||||
|
- Filtre ENU position/velocity, quaternion attitude, accel bias ve gyro bias
|
||||||
|
iceren 15 hata durumlu ESKF'dir. Prediction her ham IMU orneginde midpoint
|
||||||
|
mechanization ile calisir; telemetry bolucusu prediction oranini dusurmez.
|
||||||
|
- GPS WLS position ve Doppler velocity ayni capture timestamp'iyle tek
|
||||||
|
`fusion_navigation_measurement_t` icinde tasinir. Gecikmis GPS olcumu
|
||||||
|
history icindeki kendi epoch'una uygulanir; sonraki IMU ornekleri current
|
||||||
|
time'a kadar tekrar oynatilir.
|
||||||
|
- Position ve velocity update'lerinin ayri 3-DOF NIS kapilari ve
|
||||||
|
accept/reject sayaclari vardir. Velocity bozuksa ayni epoch'taki gecerli
|
||||||
|
position update'i geri alinmaz.
|
||||||
|
- Doppler WLS ECEF velocity covariance'i ENU'ya dondurulur. Kart verisinde
|
||||||
|
zayif geometrinin formal covariance'i asiri iyimser yapmamasi icin
|
||||||
|
horizontal `2.0 m/s`, vertical `3.0 m/s` minimum standard deviation floor'u
|
||||||
|
uygulanir; daha buyuk formal belirsizlik korunur.
|
||||||
|
- Durağanlik supervisor'u IMU/GNSS hareket kanitlarini histerezisle
|
||||||
|
birlestirir ve yalniz guvenli durumda ZUPT/zero-gyro update uygular.
|
||||||
|
GPS kesintisinde sahte position olcumu uretilmez; dead-reckoning devam eder
|
||||||
|
ve covariance buyur.
|
||||||
|
- Kotu ilk fix sonraki tutarli fix'leri surekli NIS reject'e kilitlerse,
|
||||||
|
timeout ve coklu-fix sureklilik kosuluyla yalniz position state/covariance
|
||||||
|
yeniden ankrajlanir. Velocity, attitude ve IMU bias state'leri korunur.
|
||||||
|
|
||||||
## Generic IMU Mimarisi (TDK ve ST)
|
## Generic IMU Mimarisi (TDK ve ST)
|
||||||
|
|
||||||
GPS/ESKF artik dogrudan bir sensor surucusune bagli degildir. Veri yolu:
|
GPS/ESKF artik dogrudan bir sensor surucusune bagli degildir. Veri yolu:
|
||||||
@@ -129,6 +159,23 @@ Bu durumda GPS acquisition/tracking/WLS ve ham lat-lon yayini calismaya devam
|
|||||||
eder; IMU stream'i ve `navigation_fusion` baslatilmaz. UART startup satirinda
|
eder; IMU stream'i ve `navigation_fusion` baslatilmaz. UART startup satirinda
|
||||||
`eskf_enabled` ve gercek init sonucu olan `eskf_ready` ayri alanlardir.
|
`eskf_enabled` ve gercek init sonucu olan `eskf_ready` ayri alanlardir.
|
||||||
|
|
||||||
|
Ana proje dizininden Genesys2 MCS uretmek icin:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
# TDK + ESKF; GPS_ESKF_ENABLE verilmezse de varsayilan 1'dir.
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
|
||||||
|
|
||||||
|
# GPS-only: tracking, C/N0, Doppler velocity WLS ve PPS calisir.
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=0 fpga-mcs
|
||||||
|
```
|
||||||
|
|
||||||
|
Her iki profil bootloader ve uygulamayi varsayilan `460800` baud ile derler.
|
||||||
|
Iki komut ayni MCS/BIN yoluna yazdigi icin iki imaj birlikte saklanacaksa
|
||||||
|
build'ler arasinda profil adiyla kopyalanmalidir. Bu secenekler software
|
||||||
|
derleme parametresidir; mevcut bitstream ile `fpga-mcs` yeterlidir.
|
||||||
|
|
||||||
Otomatik WHO_AM_I algilama varsayilandir:
|
Otomatik WHO_AM_I algilama varsayilandir:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
@@ -446,32 +493,30 @@ Bu kosuda `mcause=5` tekrar etmedi.
|
|||||||
|
|
||||||
## Build ve Debug Komutlari
|
## Build ve Debug Komutlari
|
||||||
|
|
||||||
Build:
|
Ana dizinden kalici flash imaji:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make -C /home/ankaoc/Desktop/rocket/rocket-chip/soc/software/gps_system \
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
BUILD_DIR=/home/ankaoc/Desktop/rocket/rocket-chip/soc/out/software/gps_system \
|
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
|
||||||
clean all
|
|
||||||
```
|
```
|
||||||
|
|
||||||
OpenOCD:
|
OpenOCD:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
make -C /home/ankaoc/Desktop/rocket/rocket-chip fpga-debug-openocd
|
make FPGA_BOARD=genesys2 fpga-debug-openocd
|
||||||
```
|
```
|
||||||
|
|
||||||
ELF'i RAM'e yukleyip calistirma:
|
ELF'i RAM'e yukleyip calistirma:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
/tools/toolchains/rvtc-medany/bin/riscv64-unknown-elf-gdb \
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
-q /home/ankaoc/Desktop/rocket/rocket-chip/soc/out/software/gps_system/gps_system.elf \
|
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-debug-load
|
||||||
-ex "target extended-remote :3333" \
|
```
|
||||||
-ex "monitor reset halt" \
|
|
||||||
-ex "load" \
|
UART:
|
||||||
-ex "set \$pc = _start" \
|
|
||||||
-ex "monitor resume" \
|
```sh
|
||||||
-ex "detach" \
|
make FPGA_BOARD=genesys2 fpga-uart
|
||||||
-ex "quit"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Durum okumak icin claim register'ini okumadan:
|
Durum okumak icin claim register'ini okumadan:
|
||||||
@@ -749,6 +794,13 @@ Gecersiz oranlar reddedilir; sonuc `10..60 dB-Hz` araliginda sinirlanir.
|
|||||||
Bir-bit estimator jitter'i ayni PRN'in ard arda olcumlerinde software
|
Bir-bit estimator jitter'i ayni PRN'in ard arda olcumlerinde software
|
||||||
IIR'i ile `alpha=0.2` kullanilarak yumusatilir.
|
IIR'i ile `alpha=0.2` kullanilarak yumusatilir.
|
||||||
|
|
||||||
|
RTL snapshot, synchronizer, APB register ve measurement-interrupt ayrintilari
|
||||||
|
`hardware/external/gps/rtl/trck_src/README.md` icinde belgelenir. Ozetle
|
||||||
|
payload tracking domaininde yaklasik 20 ms sabit tutulur; valid ve tum alanlar
|
||||||
|
PCLK'e registered synchronizer ile alinir, iki ek settle cycle'dan sonra
|
||||||
|
atomik APB bankina kopyalanir. Software sequence-before/payload/sequence-after
|
||||||
|
okumasiyla coherence'i tekrar dogrular.
|
||||||
|
|
||||||
Carrier register'i signed Q7 toplam NCO frekansidir. Doppler ve range-rate
|
Carrier register'i signed Q7 toplam NCO frekansidir. Doppler ve range-rate
|
||||||
donusumu:
|
donusumu:
|
||||||
|
|
||||||
|
|||||||
@@ -107,7 +107,12 @@ $(BOOTLOADER_IMG): FORCE $(BOOTLOADER_SW_SRCS)
|
|||||||
|
|
||||||
$(APP_ELF): $(APP_SW_SRCS)
|
$(APP_ELF): $(APP_SW_SRCS)
|
||||||
test -d "$(APP_SW_DIR)"
|
test -d "$(APP_SW_DIR)"
|
||||||
$(MAKE) -C "$(APP_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(APP_BUILD_DIR)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" $(SIM_APP_MAKE_ARGS) all
|
$(MAKE) -C "$(APP_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" BUILD_DIR="$(APP_BUILD_DIR)" \
|
||||||
|
GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" \
|
||||||
|
BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" \
|
||||||
|
BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" \
|
||||||
|
BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" \
|
||||||
|
$(SIM_APP_MAKE_ARGS) all
|
||||||
|
|
||||||
$(APP_FLASH_BIN): $(APP_ELF)
|
$(APP_FLASH_BIN): $(APP_ELF)
|
||||||
mkdir -p "$(FLASH_DIR)"
|
mkdir -p "$(FLASH_DIR)"
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ GDB_HOST ?= localhost
|
|||||||
GDB_PORT ?= 3333
|
GDB_PORT ?= 3333
|
||||||
OPENOCD_ADAPTER_SPEED ?= 1000
|
OPENOCD_ADAPTER_SPEED ?= 1000
|
||||||
UART_PORT ?= auto
|
UART_PORT ?= auto
|
||||||
UART_BAUD ?= 115200
|
UART_BAUD ?= 460800
|
||||||
BOARD ?= genesys2
|
BOARD ?= genesys2
|
||||||
PART_NAME ?= xc7k325tffg900-2
|
PART_NAME ?= xc7k325tffg900-2
|
||||||
BOARD_PART ?= digilentinc.com:genesys2:part0:1.1
|
BOARD_PART ?= digilentinc.com:genesys2:part0:1.1
|
||||||
@@ -69,6 +69,8 @@ FLASH_REGIONS ?= auto
|
|||||||
FLASH_FORCE ?= 0
|
FLASH_FORCE ?= 0
|
||||||
GPS_DEBUG ?= 1
|
GPS_DEBUG ?= 1
|
||||||
GPS_DEBUG_LEVEL ?= 1
|
GPS_DEBUG_LEVEL ?= 1
|
||||||
|
GPS_ESKF_ENABLE ?= 1
|
||||||
|
IMU_SENSOR ?= auto
|
||||||
|
|
||||||
FLASH_MCS ?= $(OUT_DIR)/flash/genesys2_rocket.mcs
|
FLASH_MCS ?= $(OUT_DIR)/flash/genesys2_rocket.mcs
|
||||||
FLASH_BIN ?= $(OUT_DIR)/flash/genesys2_rocket.bin
|
FLASH_BIN ?= $(OUT_DIR)/flash/genesys2_rocket.bin
|
||||||
@@ -172,6 +174,8 @@ help:
|
|||||||
' FLASH_FORCE=$(FLASH_FORCE) # 1 forces unchanged regions too' \
|
' FLASH_FORCE=$(FLASH_FORCE) # 1 forces unchanged regions too' \
|
||||||
' APP=$(APP)' \
|
' APP=$(APP)' \
|
||||||
' APP_ELF=$(APP_ELF)' \
|
' APP_ELF=$(APP_ELF)' \
|
||||||
|
' GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)' \
|
||||||
|
' IMU_SENSOR=$(IMU_SENSOR)' \
|
||||||
' UART_PORT=$(UART_PORT)' \
|
' UART_PORT=$(UART_PORT)' \
|
||||||
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
||||||
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
||||||
@@ -209,15 +213,17 @@ fpga-config:
|
|||||||
' CFGMEM_PART=$(CFGMEM_PART)' \
|
' CFGMEM_PART=$(CFGMEM_PART)' \
|
||||||
' UART_PORT=$(UART_PORT)' \
|
' UART_PORT=$(UART_PORT)' \
|
||||||
' UART_BAUD=$(UART_BAUD)' \
|
' UART_BAUD=$(UART_BAUD)' \
|
||||||
|
' GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)' \
|
||||||
|
' IMU_SENSOR=$(IMU_SENSOR)' \
|
||||||
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
||||||
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
||||||
' ETH_RF_SAMPLE_FORMAT=$(ETH_RF_SAMPLE_FORMAT)'
|
' ETH_RF_SAMPLE_FORMAT=$(ETH_RF_SAMPLE_FORMAT)'
|
||||||
|
|
||||||
software:
|
software:
|
||||||
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" bootloader flash-image
|
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" bootloader flash-image
|
||||||
|
|
||||||
$(APP_ELF): FORCE
|
$(APP_ELF): FORCE
|
||||||
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" app
|
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" app
|
||||||
|
|
||||||
chisel: software
|
chisel: software
|
||||||
@cd "$(REPO_DIR)"
|
@cd "$(REPO_DIR)"
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ Varsayilanlar:
|
|||||||
SoC/fabric clock : 50 MHz
|
SoC/fabric clock : 50 MHz
|
||||||
GPS acquisition : 80 MHz
|
GPS acquisition : 80 MHz
|
||||||
GPS tracking : 125 MHz
|
GPS tracking : 125 MHz
|
||||||
UART baud : 115200
|
UART baud : 460800
|
||||||
App flash offset : 0x01800000
|
App flash offset : 0x01800000
|
||||||
QSPI flash : 32 MiB S25FL256S
|
QSPI flash : 32 MiB S25FL256S
|
||||||
RF input mode : pmod
|
RF input mode : pmod
|
||||||
@@ -181,7 +181,7 @@ make -C targets/fpga/genesys2 bitstream
|
|||||||
make -C targets/fpga/genesys2 program-fpga
|
make -C targets/fpga/genesys2 program-fpga
|
||||||
make -C targets/fpga/genesys2 program-flash
|
make -C targets/fpga/genesys2 program-flash
|
||||||
make -C targets/fpga/genesys2 program-app APP=gps_system
|
make -C targets/fpga/genesys2 program-app APP=gps_system
|
||||||
make -C targets/fpga/genesys2 uart-listen UART_PORT=/dev/ttyUSB1 UART_BAUD=115200
|
make -C targets/fpga/genesys2 uart-listen UART_PORT=/dev/ttyUSB1
|
||||||
```
|
```
|
||||||
|
|
||||||
Kok Makefile uzerinden:
|
Kok Makefile uzerinden:
|
||||||
@@ -190,12 +190,25 @@ Kok Makefile uzerinden:
|
|||||||
make FPGA_BOARD=genesys2 fpga-config
|
make FPGA_BOARD=genesys2 fpga-config
|
||||||
make FPGA_BOARD=genesys2 fpga-bitstream
|
make FPGA_BOARD=genesys2 fpga-bitstream
|
||||||
make FPGA_BOARD=genesys2 fpga-program
|
make FPGA_BOARD=genesys2 fpga-program
|
||||||
|
|
||||||
|
# TDK + GPS + ESKF, UART varsayilani 460800
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=1 IMU_SENSOR=tdk fpga-mcs
|
||||||
|
|
||||||
|
# GPS-only; tracking, Doppler velocity WLS ve PPS aktif
|
||||||
|
make FPGA_BOARD=genesys2 APP=gps_system \
|
||||||
|
GPS_ESKF_ENABLE=0 fpga-mcs
|
||||||
```
|
```
|
||||||
|
|
||||||
`program-app APP=gps_system` yalniz application flash bolgesini derleyip
|
`program-app APP=gps_system` yalniz application flash bolgesini derleyip
|
||||||
programlar. Tracking mailbox registerlari ve synchronizer RTL degisikligi
|
programlar. Tracking mailbox registerlari ve synchronizer RTL degisikligi
|
||||||
bitstream gerektirir; Doppler IIR katsayisi/yazilim degisikligi ise bitstream
|
bitstream gerektirir; Doppler IIR katsayisi/yazilim degisikligi ise bitstream
|
||||||
gerektirmez, yalniz yeni `gps_system` uygulamasinin yuklenmesi yeterlidir.
|
gerektirmez, yalniz yeni `gps_system` uygulamasinin yuklenmesi yeterlidir.
|
||||||
|
`GPS_ESKF_ENABLE` verilmezse ESKF aciktir. ESKF kapali profilde IMU ve fusion
|
||||||
|
baslatilmaz; GPS acquisition/tracking, C/N0, Doppler velocity WLS, ham konum ve
|
||||||
|
PPS calismaya devam eder. Iki profil ayni `genesys2_rocket.mcs/.bin` cikti
|
||||||
|
yoluna yazdigi icin birlikte saklanacaksa build sonrasinda yeniden
|
||||||
|
adlandirilmalidir.
|
||||||
|
|
||||||
`debug-load APP=gps_system` ELF'i GDB ile DTIM/RAM'e yukler; hizli kart testi
|
`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
|
icin uygundur fakat power-cycle/reset sonrasinda flash'taki eski uygulama geri
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ GDB_HOST ?= localhost
|
|||||||
GDB_PORT ?= 3333
|
GDB_PORT ?= 3333
|
||||||
OPENOCD_ADAPTER_SPEED ?= 1000
|
OPENOCD_ADAPTER_SPEED ?= 1000
|
||||||
UART_PORT ?= /dev/ttyUSB2
|
UART_PORT ?= /dev/ttyUSB2
|
||||||
UART_BAUD ?= 115200
|
UART_BAUD ?= 460800
|
||||||
BOARD ?= vcu118
|
BOARD ?= vcu118
|
||||||
PART_NAME ?= xcvu9p-flga2104-2L-e
|
PART_NAME ?= xcvu9p-flga2104-2L-e
|
||||||
BOARD_PART ?= xilinx.com:vcu118:part0:2.4
|
BOARD_PART ?= xilinx.com:vcu118:part0:2.4
|
||||||
@@ -68,6 +68,8 @@ FLASH_REGIONS ?= auto
|
|||||||
FLASH_FORCE ?= 0
|
FLASH_FORCE ?= 0
|
||||||
GPS_DEBUG ?= 1
|
GPS_DEBUG ?= 1
|
||||||
GPS_DEBUG_LEVEL ?= 4
|
GPS_DEBUG_LEVEL ?= 4
|
||||||
|
GPS_ESKF_ENABLE ?= 1
|
||||||
|
IMU_SENSOR ?= auto
|
||||||
|
|
||||||
FLASH_MCS ?= $(OUT_DIR)/flash/vcu118_rocket.mcs
|
FLASH_MCS ?= $(OUT_DIR)/flash/vcu118_rocket.mcs
|
||||||
FLASH_BIN ?= $(OUT_DIR)/flash/vcu118_rocket.bin
|
FLASH_BIN ?= $(OUT_DIR)/flash/vcu118_rocket.bin
|
||||||
@@ -171,6 +173,8 @@ help:
|
|||||||
' FLASH_FORCE=$(FLASH_FORCE) # 1 forces unchanged regions too' \
|
' FLASH_FORCE=$(FLASH_FORCE) # 1 forces unchanged regions too' \
|
||||||
' APP=$(APP)' \
|
' APP=$(APP)' \
|
||||||
' APP_ELF=$(APP_ELF)' \
|
' APP_ELF=$(APP_ELF)' \
|
||||||
|
' GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)' \
|
||||||
|
' IMU_SENSOR=$(IMU_SENSOR)' \
|
||||||
' UART_PORT=$(UART_PORT)' \
|
' UART_PORT=$(UART_PORT)' \
|
||||||
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
' ETH_RF_IFACE=$(ETH_RF_IFACE)' \
|
||||||
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
' ETH_RF_INPUT=$(ETH_RF_INPUT)' \
|
||||||
@@ -207,13 +211,15 @@ fpga-config:
|
|||||||
' FLASH_INTERFACE=$(FLASH_INTERFACE)' \
|
' FLASH_INTERFACE=$(FLASH_INTERFACE)' \
|
||||||
' CFGMEM_PART=$(CFGMEM_PART)' \
|
' CFGMEM_PART=$(CFGMEM_PART)' \
|
||||||
' UART_PORT=$(UART_PORT)' \
|
' UART_PORT=$(UART_PORT)' \
|
||||||
' UART_BAUD=$(UART_BAUD)'
|
' UART_BAUD=$(UART_BAUD)' \
|
||||||
|
' GPS_ESKF_ENABLE=$(GPS_ESKF_ENABLE)' \
|
||||||
|
' IMU_SENSOR=$(IMU_SENSOR)'
|
||||||
|
|
||||||
software:
|
software:
|
||||||
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" bootloader flash-image
|
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" bootloader flash-image
|
||||||
|
|
||||||
$(APP_ELF): FORCE
|
$(APP_ELF): FORCE
|
||||||
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" app
|
@$(MAKE_BIN) -C "$(SOC_SW_DIR)" TOOLCHAIN="$(TOOLCHAIN)" APP="$(APP)" APP_FLASH_OFFSET="$(APP_FLASH_OFFSET)" BSP_UART_CLOCK_HZ="$(BSP_UART_CLOCK_HZ)" BSP_UART_BAUDRATE="$(BSP_UART_BAUDRATE)" BSP_CLINT_TIMEBASE_HZ="$(BSP_CLINT_TIMEBASE_HZ)" BSP_DTIM_BASE="$(DTIM_BASE)" BSP_DTIM_SIZE="$(DTIM_SIZE)" GPS_DEBUG="$(GPS_DEBUG)" GPS_DEBUG_LEVEL="$(GPS_DEBUG_LEVEL)" GPS_ESKF_ENABLE="$(GPS_ESKF_ENABLE)" IMU_SENSOR="$(IMU_SENSOR)" app
|
||||||
|
|
||||||
chisel: software
|
chisel: software
|
||||||
@cd "$(REPO_DIR)"
|
@cd "$(REPO_DIR)"
|
||||||
|
|||||||
Reference in New Issue
Block a user