[6/40] RTL 시뮬레이터 개발일지 – 조용히 틀리지 않기

내가 만드는 RTL 시뮬레이터 vitamin에서 가장 먼저 정한 규칙은, 맞는 답을 낼 수 없으면 조용히 틀린 답을 내지 말고 에러를 내며 멈추라는 것이다. 이 규칙 때문에 다 만든 기능을 되돌린 적도 있다. RTL을 짜다 보면 파형 어딘가에 X가 번져 있거나,…
현업 SoC 엔지니어가 직접 만들고 돌려 본 기록이다. SoC 설계 해설, 오픈소스 RTL 시뮬레이터 개발일지, 미국 주식 자동매매 봇 개발기를 모았다.

내가 만드는 RTL 시뮬레이터 vitamin에서 가장 먼저 정한 규칙은, 맞는 답을 낼 수 없으면 조용히 틀린 답을 내지 말고 에러를 내며 멈추라는 것이다. 이 규칙 때문에 다 만든 기능을 되돌린 적도 있다. RTL을 짜다 보면 파형 어딘가에 X가 번져 있거나,…

RTL에서 순차 로직에는 <=를, 조합 로직에는 =를 쓴다. 두 기호가 왜 다른 결과를 내는지, 그 차이를 지키려고 시뮬레이터가 한 시각 안에서 무슨 일을 하는지 vitamin 안쪽에서 들여다본다. 기호 하나만 바꾼 시프트 레지스터 두 단짜리 시프트 레지스터다. 값이 a에서 b로, 다시…

vitamin을 단계별로 나눠 돌리면 앞 단계의 산출물이 디스크에 남는다. 소스나 플래그가 바뀌었을 때 그 산출물을 다시 써도 되는지는, 어떤 입력을 판단 근거에 넣느냐로 정해진다. 예전에 시뮬레이션을 돌리면 로그가 주루룩 쏟아지곤 했다. 그런데 같은 걸 다시 돌리면 몇 줄 띡 하고…

vitamin의 명령은 넷이고 처음부터 그렇게 계획했다. 계획은 두 번 어긋났다. 파일 수정 시각(mtime)은 절대 쓰지 않겠다던 규칙을 조건을 붙여 풀었고, 단계별 명령을 만들어 놓고 정작 나는 한 번에 도는 vita만 쓴다. 명령은 처음부터 넷이었다 vitamin에는 명령이 넷 있다. vita 한…

vitamin에서 Verilog 소스가 파형 파일이 되기까지는 일곱 단계를 거친다. 이 단계를 밖으로 꺼내 셋으로 나눠 돌릴 수 있게 했는데, 나눠 돌리는 길에서 결과가 조용히 틀린 적이 두 번 있었다. 명령 한 줄이면 시뮬레이션은 돈다. vita counter.sv라고 치면 텍스트 파일이 들어가서…

맥북에서 Verilog 파일 하나를 설치 안내나 빌드 도구 없이 cargo build 한 줄로 돌려 보고 싶어서 RTL 시뮬레이터 vitamin을 만들기 시작했다. 첫 편은 이벤트 구동 시뮬레이터가 회로를 “실행한다”는 게 무슨 뜻인지에서 시작한다. 1년쯤 지난 지금은 크레이트 17개에 테스트 6,240개짜리 물건이…

고빈도 단타를 접고 저빈도 추세 전략으로 갈아탄 지 3개월, 계좌는 $3,049.68에서 $3,137.18로 +2.87%가 됐다. 같은 기간 봇이 들고 있던 ETF 한 종목은 혼자서 +5.55%였다. 결과는 그냥 사서 들고 있는 것보다 못했다. 봇은 설계한 대로 돌았다 앞선 편들에서 파라미터를 튜닝할 게…

봇이 주문 수량을 계산할 때 쓰는 가격과 증권사가 그 주문을 받아 줄지 판정할 때 쓰는 가격은 같지 않다. 잔고가 1주 단위로 빠듯한 날에는 이 차이 때문에 주문가능금액 초과로 주문이 거부된다. 2026년 4월 29일, 신호는 맞았는데 주문만 거부됐다 그날 봇은 틀린…

미국주식 봇을 4개월 굴리며 실계좌에서 겪은 사고는 대개 전략이 아니라 예외 상황에서 났다. 주문 직후 프로세스가 죽거나, 잔고가 몇 초 늦게 갱신되거나, 재시도가 스스로 차단을 불러온 경우다. 그때마다 안전장치를 하나씩 넣었다. 백테스트를 통과해도 실계좌에서 터진 것들 백테스트는 시그널을 계산하는 코드만…

증권 계좌 하나를 매매 빈도가 다른 세 칸으로 나누고, 잔고가 늘면 새 칸이 저절로 켜지게 만들었다. 그런데 잔고가 $3,000 경계를 오르내리면서 칸 구성이 두 달에 아홉 번 바뀌었다. 거래 빈도를 버리자는 결론은 왕복 비용 0.60%를 다룬 12편과 생존편향을 점검한 편에…