Dual-Chirp Radar · logic / block-level schematic

Dual-Chirp Radar 논리 회로도

FFT를 지난 두 레인의 거리-Doppler 맵이 들어와 속도와 거리가 정해지고 추적기로 나가기까지의 결정 경로를 레지스터, 비교기, 게이트로 옮긴 회로입니다. 위쪽 시트에서 블록을 누르면 그 블록의 내부 회로와 논리식, 신호가 아래에 나옵니다. 그 아래에 이 회로를 Verilog로 구현해 돌린 결과가 있습니다.

개념 설계입니다. 원 논문은 이 회로를 구현하거나 측정하지 않았고, 논문의 결과는 모두 소프트웨어 시뮬레이터에서 나왔습니다. 이 회로도는 논문의 식 (2)–(7)과 비교 분석에서 제안한 거리 일치 검사를 하드웨어로 만든다면 어떤 구조가 되는지를 보여줍니다. 논문에 없는 선택은 블록마다 "설계 가정"에 적었습니다. 아래 시뮬레이션 결과는 Icarus Verilog 12로 RTL을 직접 돌린 것입니다. 같은 입력을 넣은 Python 참조 모델과 로그를 줄 단위로 비교해 2,005프레임(S1–S5, 기본 1,000, 스트레스 1,000) 모두 차이가 없었습니다. 자원과 논리 깊이는 Yosys 합성 결과이고, 배치·배선과 최대 주파수는 아직 다루지 않았습니다.

최상위 시트

상태를 가진 블록 (레지스터, 메모리) 조합 논리 외부 IP 굵은 선: 버스 점선: 제어 ◺ 클록 입력 논리식 표기 · AND, + OR, ¬ NOT, ⊕ XOR

적용: Verilog 구현과 시뮬레이션

위 회로도를 Verilog로 구현했습니다. 결정 경로 전체(PKD, NBR, GRK, FV, LREG, CAND, MATCH, RC, FLAG, OREG, CTRL)가 dc_top 아래 네 모듈에 들어 있습니다. 한 레인의 맵은 한 클록에 한 셀씩 32,768사이클 동안 흘러 들어오고, 두 레인을 마친 뒤 한 사이클 안에 속도와 거리가 정해집니다. 시뮬레이션은 Icarus Verilog 12(이 환경에서 소스로 빌드)로 돌렸고, 같은 레지스터·고정소수점·나눗셈 순서를 따르는 Python 참조 모델의 로그와 줄 단위로 비교했습니다. 결과: 2,005프레임, diff 0줄.

구현한 파일

파일줄 수내용

동작 시나리오 (RTL 시뮬레이션 파형)

S1(반대 차선 차량, R 62.3 m, v −58.6 m/s, 맵 SNR 25 dB)에서 레인 2의 마지막 샘플이 들어온 뒤부터 결과가 나오기까지 24사이클입니다. 레인 1은 같은 과정을 먼저 지났습니다(v̂₁ = −9.92 m/s, 접힌 값). 파형은 tb_dc.v를 -DDUMP로 돌려 얻은 VCD에서 vcd_window.py로 하강 에지마다 뽑은 실제 RTL 신호입니다. 사이클 번호는 테스트벤치의 클록 카운터(리셋 포함)입니다.

사이클상태iq무슨 일이 일어났나

시나리오별 결과

비교 분석 페이지의 시나리오 S1–S5를 같은 회로에 넣은 결과입니다. 피크 위치는 (n, m), m은 FFT 순서이고 64 이상이 음의 Doppler bin입니다.

ID입력레인 1 피크 · v̂₁레인 2 피크 · v̂₂dminv̂R̂플래그판정

무작위 검증

프레임 1,000개씩 두 설정을 RTL로 돌리고 모든 결정을 검사기로 대조했습니다. 검사기는 RTL 구조와 상관없이 맵에서 직접 최댓값과 이웃을 찾고, Grandke 보간, 접힌 속도, 후보, 최근접 쌍, 속도, 거리, 플래그를 부동소수점으로 다시 계산합니다. 고정소수점 반올림 차이는 허용 오차로, 임계값 2 LSB 안에서 갈리는 결정은 '경계'로 따로 셉니다.

항목기본 설정스트레스 설정

처리 시간과 자원 (Yosys 0.60 합성, 배치·배선 전)

항목값근거

합성에서 새로 보인 것: COMB(CAND → MATCH → RC → FLAG)가 LUT의 3분의 2를 쓰고, 조합 경로도 4-LUT 기준 123단으로 가장 깁니다. PKD는 6단, GRK는 20단입니다. LUT 한 단에 배선 지연까지 더하면 이 경로만으로 10 ns(100 MHz)를 넘을 가능성이 커서, 위의 100 MHz는 아직 가정일 뿐입니다. 고칠 방향은 COMB를 순차화하는 것입니다. 후보 15쌍을 사이클마다 하나씩 비교하면 프레임당 사이클은 0.02% 늘고, 뺄셈기 15개가 1개로 줄어듭니다. 이 수정과 배치·배선(nextpnr)은 다음 단계로 남겨 두었습니다.

구현하면서 회로도를 고친 곳

    설계하면서 고른 것

      이 구현이 다루지 않는 것

      직접 돌려 보기 (Icarus Verilog 12, Python 3 + NumPy)

      cd rtl
      python3 gen_stim.py 5 0 scenario --hex          # S1–S5, 또는: gen_stim.py 1000 101 base --hex
      iverilog -g2005 -o tb.vvp -Ptb.NF=5 tb_dc.v dc_top.v dc_pkd.v dc_div.v dc_comb.v
      vvp -n tb.vvp > run.log
      python3 check.py run.log                          # exit 0, "errors": {} 이면 통과
      python3 run_model.py OUT=model.log && diff <(grep -v END run.log) <(grep -v END model.log)   # RTL = 참조 모델
      iverilog -g2005 -DDUMP -o tbd.vvp -Ptb.NF=1 tb_dc.v dc_top.v dc_pkd.v dc_div.v dc_comb.v
      vvp -n tbd.vvp > /dev/null && python3 vcd_window.py dc_wave.vcd > wave.json   # 위 파형
      yosys -q -s synth.ys                              # iCE40 자원 → synth_stat.txt
      yosys -q -s depth.ys                              # 가장 긴 조합 경로 → synth_depth.txt

      비트 폭 근거 (논문 파라미터에서 계산)

      신호폭근거