설계독학맛비
@semisgdh
Lead 레벨·
HW_임베디드 엔지니어
외국계 비메모리 반도체설계
수강생
4,213
수강평
355
강의 평점
5.0
멘토링 신청
9
멘토링 리뷰
2
멘토링 평점
5.0
게시글
질문&답변
22장 vaild/ready
안녕하세요 🙂먼저 해당 조건에 대해 반대로 생각해보면, 이해에 도움이 될 거 같아요.이 수식을 뒤집어 생각해보면 더 명확합니다. (not 을 취해보죠) assign s_ready = ~m_valid | m_ready; // s_ready 가 0 이 되는 경우를 생각해봅시다.s_ready가 0이 되는 시점은 m_valid = 1 && m_ready = 0 일 때뿐입니다. 즉, "내가 내보낼 데이터가 꽉 차 있는데(m_valid=1), 다음 녀석이 못 받겠다고 버티는 경우(m_ready=0)" 에만 비로소 앞단에 "나도 더 이상 못 받아!"라고 s_ready = 0을 치는 것이죠.이것이 바로 Back-pressure의 핵심입니다. 따라서, 원래의 의미로 생각을 해보면,~m_valid: "내 마지막 칸이 비어있으니, 일단 밀어 넣어라." 또는 ( "|" or 기호 가 있으니까)m_ready: "내 마지막 칸이 차 있어도, 다음 녀석이 가져갈 거니까 한 칸씩 전진 가능하다. 그러니 밀어 넣어라."의 의미로 s_ready 가 1 이 됩니다.이해에 도움이 되셨기를 바래요.즐공하세요 🙂
- 1
- 1
- 25
질문&답변
./build시, waveform 'divide color' 사용
안녕하세요 🙂강의 영상을 촬영할때, 전부 "./build" 를 통해서 제작했습니다.tool 관련해서 버튼이 왜 막혀있는지는 모르겠네요. 지금 다시 해봤는데 저는 풀려있습니다. 강의때 사용했던 버전은 2020 이었고, test 는 2024 로 했어요.(사진)
- 1
- 2
- 23
질문&답변
Latch와 관련하여 (Time borrowing, Latch-based design)
안녕하세요 🙂저는 주로 "Latch 를 만들면 안되는" 설계를 해서, Latch 를 일부러 만들어서 사용하지는 않습니다. (엄창난 High Freq 를 요구하지않고, 안정성을 더 중요시 해서 그래요)실제로 사용하는가, 관점에서.네, 사용합니다.아주 높은 클럭 주파수를 뽑아내야 하는 고성능 프로세서 설계에서 주로 쓰입니다.실제로 쓰긴 하지만, 아무나 아무 때나 쓰지는 않습니다.장점: 클럭 주파수를 한계치까지 끌어올릴 수 있고, FF보다 면적이나 전력 면에서 유리한 면이 있습니다.단점(매우 큼): 질문자님이 짚으신 것처럼 타이밍 분석(STA) 난이도가 지옥 수준으로 올라갑니다. Static Timing Analysis 툴이 경로를 분석할 때 계산이 복잡해지고, 자칫 설계자가 의도하지 않은 레이스 컨디션(Race Condition)이 발생할 위험이 커요.정리하면, 일반적인? 로직설계에서 Latch 는 금기이나, 수 GHz 단위로 동작하는 CPU 설계팀 같은 곳에서는 타이밍 마진을 조금이라도 더 확보하기 위해서 Latch 를 사용합니다.즐공하세요!
- 1
- 2
- 49
질문&답변
output, reg 선언
안녕하세요 🙂네네 코딩 스타일인데, 저도 사람인지라 이것저것 씁니다.System Verilog "logic" 을 주로 사용합니다.기존 Verilog에서는 wire(연속 할당)와 reg(절차형 할당)를 엄격히 구분해서 써야 했죠. 이게 은근히 설계 실수를 유발하고 번거롭습니다. SystemVerilog의 logic은 이 둘을 하나로 통합한 것이라 보시면 됩니다.Latch 의 경우는 타입(logic)이 Latch를 만드는 게 아닙니다. Latch는 '코딩 스타일' 때문에 발생합니다.logic을 쓰더라도 always_comb나 always_ff 같은 전용 블록을 함께 사용하면 오히려 Latch 발생을 더 잘 잡아낼 수 있습니다. (그리고.. 어차피 tool 이 Lint 를 통해서 잡아줍니다 ㅎㅎ)현업에서 신경써야 할 것은 맞지만, 실수를 하더라도 금방 잡히니 너무 걱정하지 마세요.즐공하세요!
- 1
- 3
- 37
질문&답변
gvim
안녕하세요 🙂vim 은 커스터마이즈가 가능한 자유로운 에디터 입니다.우분투 상에서 gvim 을 설치 명령어는sudo apt install vim-gtk3즐공하세요 🙂
- 1
- 1
- 39
질문&답변
FPGA 공식문서 읽는법
안녕하세요 🙂FPGA 공식 문서 읽는 게 참 고역이죠... 저는 사실 시간이 해결을 해주더라.. 의 케이스 입니다.제가 처음 시작할 때 썼던 방법을 짧고 굵게 공유해 드릴게요.1. "전부 다 읽겠다"는 생각부터 버리세요. 그 방대한 문서를 다 읽으려면 프로젝트 끝납니다. 필요한 기능(예: I2C 제어, FIFO 사용법)이 있으면 그 부분만 쏙 골라 읽는 '발췌독'이 기본입니다.2. 그림(Block Diagram, Timing Diagram)이 8할입니다. 글자 백 번 읽는 것보다 타이밍도 한 번 그려보는 게 훨씬 빠릅니다. 신호가 언제 튀는지(Edge), 데이터가 언제 유효한지(Valid) 그림으로 먼저 이해하세요.3. 주소(Register Map)는 엑셀에 따로 정리하세요. Nios 같은 프로세서를 쓰신다면 레지스터 맵 확인이 필수일 텐데, 문서 켜놓고 작업하면 헷갈립니다. 내가 쓸 핵심 레지스터 주소랑 비트 설정만 엑셀에 딱 정리해두고 코딩 시작하는 게 실수를 줄이는 길입니다.보드 설계까지 같이 하신다면 'Pin Connection Guidelines' 같은 문서도 꼭 챙겨보세요. 전원이나 접지 처리 잘못하면 나중에 로직 아무리 잘 짜도 동작 안 합니다.처음이라 막막하시겠지만, 하나씩 직접 구현해 보면서 찾아가다 보면 금방 손에 익으실 거예요. 경험이 쌓이시다보면, 더 잘하게 되실꺼에요. (저도 아직도 막막한 부분이 있습니다 허허 ㅠ)즐공하세요!
- 1
- 2
- 45
질문&답변
안녕하세요 설치 관련 질문 드립니다.
아 다행이네요.Folder path 를 원하시는 path 로 적어주시면 해결되셨을 것 같은데요.해결하셨다고 답글 남겨주셔서 감사합니다.즐공하세요!
- 1
- 3
- 31
질문&답변
멤버십 관련 문의
안녕하세요 🙂 제가 매일 확인을 못해서 ㅠ혹시 지금도 안되었다면, 디스코드 아이디 남겨주시면 확인해서 직접 등업 시켜드리겠습니다.감사합니다!
- 1
- 1
- 24
질문&답변
16장 mealy 설계.
안녕하세요 🙂작성하신 코드는 Mealy Machine이 맞습니다.이유: always @(*) 출력 블록을 보시면, o_done이 결정될 때 현재 상태(c_state == S_DONE)뿐만 아니라 입력 신호(i_run, is_done)가 조건문(if)에 직접 관여하고 있습니다. 출력이 '현재 상태'와 '입력' 모두에 의존하기 때문에 전형적인 Mealy 설계라고 할 수 있습니다.최적화 관점에서는 출력에 d/ff 을 달면 출력신호의 글리치를 최소화 할 수 있겠네요.즐공하세요 🙂
- 1
- 2
- 52
질문&답변
14장 Cycle 관련, Testbench 코드.
안녕하세요 🙂제작 당시, simulation 상에서 waveform 의 값을 명확하게 보려고 조정하던게 들어갔습니다. RTL 코드는 문제 없습니다. 3 cycle 을 의도한게 맞습니다. "14장 실습코드에서 valid 신호에 대해"시뮬레이션 관련하여서는, 매번 run 을 해줘야하는 이유 현재 simulation 이 project mode 가 아닌, standalone 방법이기 때문인데요. 따라서 현재 환경에서는 다시 xvlog, xelab 과정을 거치는 방법을 진행해야 합니다.project mode 로 simulation 을 만드시면 tcl 에 "relaunch_sim" 이라는 명령어로 코드수정 후 바로 simulation 을 돌릴 수 있습니다. (사실 relunch_sim 이 xvlog, xelab 다시 하는 것과 동일합니다) 프로젝트 모드 변경 방법. 제미나이 글입니다. 따라해봤는데, 잘 되네요. 필요하시면 반영 하시면 되겠습니다. 즐공하세요 🙂 (one time 이 아닌, 꾸준한 개발이면 프로젝트 모드가 좋아보이네요.)(사진) 1. Tcl 스크립트를 이용한 프로젝트 자동 생성기존 3개의 명령어를 대신하여, Vivado 프로젝트를 만들고 시뮬레이션을 실행하는 run_sim.tcl 파일을 만듭니다.파일 생성 (run_sim.tcl):Tcl# 1. 프로젝트 생성 (이미 있으면 열기) if {[file exists my_sim_project.xpr]} { open_project my_sim_project.xpr } else { create_project my_sim_project ./my_sim_project -part xc7a35tcpg236-1 # (part 번호는 사용하시는 보드에 맞춰 수정하세요) } # 2. 소스 파일 및 TB 파일 추가 add_files {./power_of_8.v ./tb_power_of_8.v} # 3. 시뮬레이션 설정 (Top 모듈 지정) set_property top tb_power_of_8 [get_filesets sim_1] # 4. 시뮬레이션 실행 (GUI 모드로 실행) launch_simulation 실행 방법 (터미널): 이제 터미널에서 아래 한 줄만 입력하면 Vivado 프로젝트가 생성되면서 시뮬레이션 GUI가 바로 뜹니다.Bashvivado -mode gui -source run_sim.tcl 2. 프로젝트 모드에서의 워크플로우 (중요)프로젝트 모드로 한 번 진입하면, 더 이상 터미널에서 명령어를 칠 필요가 없습니다.최초 실행: 위 명령어로 Vivado를 띄웁니다.코드 수정: 리눅스 외부 에디터(VS Code 등)나 Vivado 내부 에디터에서 .v 파일을 수정하고 저장합니다.즉시 반영 (Relaunch): Vivado 시뮬레이션 화면 상단의 'Relaunch Simulation' 아이콘을 클릭합니다.내부 동작: Vivado가 알아서 xvlog -> xelab -> xsim 과정을 백그라운드에서 다시 수행합니다.결과: 끄고 켤 필요 없이 약 5~10초 내에 수정된 파형이 업데이트됩니다.
- 1
- 2
- 39




