Introduction
안녕하세요. 설계독학의 맛비입니다.
현) Global Top10 Fabless 기업에서 HW IP 설계하고 있습니다.
반도체 설계관련 이야기들을 주제로 영상과 글을 쓰고 있습니다.
설계독학 유튜브, 설계독학 블로그, 맛비 블로그 (네이버)
Courses
Reviews
- Design Self-study Taste's Practical Verilog HDL Season 2 (AMBA AXI4 Complete Conquest)
2233123123
·
Design Dokhak Matbi's practical FPGA-based HW accelerator design (from LED control to fully connected layer accelerator design)Design Dokhak Matbi's practical FPGA-based HW accelerator design (from LED control to fully connected layer accelerator design)- Design Self-study Taste's Practical Verilog HDL Season 2 (AMBA AXI4 Complete Conquest)
- Design Self-study Taste's Practical Verilog HDL Season 2 (AMBA AXI4 Complete Conquest)
- Design Self-study Taste's Practical Verilog HDL Season 1 (From Clock to Internal Memory)
Posts
Q&A
Unsigned 연산 결과인 156이 -100의 2의 보수가 되는 원리가 궁금합니다.
안녕하세요 🙂 AI 인턴이 답을 잘 달아주었는데요.Unsigned로 연산한 결과인 156이 signed 연산의 결과인 -100의 2의 보수가 되는 이유 를 질문하신 걸로 이해했습니다.기본 개념을 먼저 보시면,1. Signed와 Unsigned의 차이Unsigned: 모든 비트를 숫자로 해석.예: 8-bit에서 11001000은 unsigned로 200.Signed: MSB를 부호 비트로 사용.MSB가 0이면 양수, 1이면 음수.예: 8-bit에서 11001000은 signed로 -56 (-(256 - 200)).2. 2의 보수 표현법Signed 연산에서 음수를 표현하는 방식:음수 -X는 2의 보수로 표현.2의 보수 = 모든 비트를 뒤집고 +1.예: -100의 8-bit 표현은 10011100.=================여기서 핵심은, 8bit 는 signed 일때 range : -128 ~ 127unsigned 일때 range : 0 ~ 255 이며, 이것은 Signed 타입 일때의 해석과, unsigned type 일때의 해석이 다르다, 그리고 8 bit 는 순환 한다는 것입니다. Unsigned 연산 결과 156이 Signed 결과 -100의 2의 보수가 되는 원리핵심 원리: 이 관계는 이진수의 모듈러 연산 특성 때문입니다.모든 연산은 고정된 비트수(예: 8-bit)에서 수행되고, 오버플로우는 무시됩니다.따라서 8-bit에서는 숫자가 0~255로 순환(modulo 256).이 때문에 Signed와 Unsigned에서 결과 해석이 달라지더라도 이진수는 동일.MSB의 역할:MSB는 Signed 연산에서 음수 여부를 나타내는 부호 비트로 사용.Unsigned에서는 MSB도 단순 숫자로 간주.모듈러 연산의 순환:8-bit에서 가능한 값은 0~255로 순환:100에서 200을 뺀 결과는 156.Unsigned 156은 Signed로 -100.[결론]Unsigned 연산 결과 156은 Signed 연산의 결과 -100과 2의 보수 관계에 있습니다.이는 고정된 비트수에서의 모듈러 연산 특성과 Signed/Unsigned 해석 방식의 차이 때문입니다.즐공하세요 🙂
- 0
- 2
- 43
Q&A
재설치 관련 질문
안녕하세요 🙂 환경 부분은 중간에 잘못된 부분까지 들어가면, 개인환경 종속적인 부분이 많아서 제대로 답변 드리기 어려운데요.초기에는 200G 여유공간이 필요하시만 설치가 제대로 끝나면, 50G 내외 같아요.그 외 재설치 부분은 GPT 답변을 참고해서 만든 링크 첨부드립니다. (해본적은 없는데, 맞는말 같아서 참고만 부탁드립니다.)https://aifpga.tistory.com/entry/Vivado-on-WSL-%EC%9E%AC%EC%84%A4%EC%B9%98-%EA%B4%80%EB%A0%A8-%EC%A7%88%EB%AC%B8즐공하세요 🙂
- 1
- 2
- 34
Q&A
13장 질문있습니다.
안녕하세요 🙂 FPGA 보드의 Uart 문제 같아보이는데요.이 부분은 특별히? 생각나는 방법은 없는 것 같은데요.GPT 답변 첨부드립니다. 안녕하세요! 질문 주셔서 감사합니다. 사진을 보니 Vitis Serial Terminal에서 출력된 문자가 깨져 보이는 현상이 나타난 것으로 보입니다. 이는 주로 UART 설정이 맞지 않거나 코드에서 올바른 데이터를 전송하지 않는 경우에 발생할 수 있습니다. 아래에서 문제를 해결하기 위한 몇 가지 방법을 제안드립니다.1. UART 설정 확인Vitis Serial Terminal에서 UART 설정이 ZCU104 보드의 설정과 일치하는지 확인하세요.일반적인 UART 설정:Baud rate: 115200 (사진에서도 동일하게 보임)Data bits: 8Parity: NoneStop bits: 1Flow control: None설정이 다를 경우, Serial Terminal에서 올바르게 수정 후 다시 실행해 보세요.2. 코드 확인코드에서 UART로 데이터를 전송하는 부분을 점검하세요.UART 초기화 코드가 누락되거나, 올바르지 않은 데이터가 전송될 수 있습니다.예제 코드:c코드 복사#include "xuartps.h" XUartPs Uart_Ps; // UART 초기화 함수 void UartInit() { XUartPs_Config *Config = XUartPs_LookupConfig(XPAR_PS7_UART_1_DEVICE_ID); XUartPs_CfgInitialize(&Uart_Ps, Config, Config->BaseAddress); XUartPs_SetBaudRate(&Uart_Ps, 115200); } // 메시지 전송 함수 void SendMessage(const char *msg) { XUartPs_Send(&Uart_Ps, (u8 *)msg, strlen(msg)); }3. Vitis Serial Terminal 외 다른 터미널 소프트웨어 사용Tera Term, Putty, 또는 CoolTerm과 같은 다른 터미널 소프트웨어를 사용하여 동일한 UART 출력을 확인해 보세요.간혹 Vitis Serial Terminal에서만 깨지는 경우가 있으므로, 다른 터미널로 테스트해 보시면 문제를 더 정확히 파악할 수 있습니다.4. ZCU104 핀 연결 확인보드의 UART 핀이 올바르게 연결되어 있는지 확인하세요.ZCU104의 경우, JTAG-UART 포트나 USB UART 포트를 통해 PC와 통신하므로, 연결이 올바른지 점검하세요.5. Vitis 디버깅 기능 활용코드에서 디버깅 메시지를 삽입하여 문제가 발생하는 위치를 확인하세요.예:c코드 복사printf("UART initialized successfully\n"); printf("Data being sent: %d\n", some_data);6. Hardware ResetZCU104 보드의 리셋 버튼을 눌러 하드웨어를 초기화한 후 다시 시도해 보세요.또한, Vitis 프로젝트를 클린 빌드(Clean Build)한 후 재빌드 및 재배포를 진행해 보세요.
- 1
- 2
- 59
Q&A
Data형태에 따른 AI가속기 구현 질문
안녕하세요 🙂 입력 데이터가 FP32, BP16 등과 같은 부동소수점 데이터일 경우, 해당 데이터형을 지원하는 연산 장치(ALU)를 설계하거나 외부에서 가져와 사용하게 됩니다. 설계 방안은 다음과 같습니다:부동소수점 데이터의 경우 IEEE 754 표준에 따라 덧셈/곱셈 연산기를 설계해야 합니다.이를 위해 정밀도와 연산 속도 요구 사항에 맞는 가감산기 및 곱셈기 등을 RTL로 직접 설계하거나, 오픈소스 IP 또는 상용 IP를 사용하는 방식을 고려합니다.예를 들어, BF16을 사용하는 경우 FP32보다 간소화된 연산기를 설계할 수 있어 전력과 면적을 절감할 수 있습니다. 말씀해주신 full FP 를 쓰는 방법도 있지만, 정확도를 최대한 유지하면서 Int 를 가져가는게 PPA 측면에서 유리하기 때문에, Mixed precision 방식을 많이 사용하는 것 같습니다.즐공하세요 🙂
- 1
- 1
- 19
Q&A
8강 AXI4_Lite (zcu104)
안녕하세요 🙂 error 발생원인은, 저 부분에 대해서 강의에도 언급하였지만 Xilinx tool 자체의 버그라서, 강의와 다른 버전 + 보드를 사용했을때는 개인적인 해결이 필요해보이는데요.근본 원인에 대해서는 makefile 을 직접 열어서 보셔야할 것 같습니다.(사진)====캡쳐해주신 내용을 보았을때, makefile 의 error 는 있지만, binary 생성은 정상적으로 된 것 같고요.(사진) 다음 error 는 요구하는 path 에 .xsa 파일이 없어서 그런 것 같은데요.(사진)과정 중에 .xsa 를 생성했잖아요? 그것을 해당 경로에 넣어보시면 해결이 되지 않을까 (이름까지 맞춰주시고) 생각이 듭니다.즐공하세요 🙂
- 1
- 3
- 42
Q&A
CH4 설정하는 핀이 bank0인지 bank1인지는 어떻게 확인하나요
안녕하세요 🙂아 말씀해주신게 맞는 것 같아요! (제대로 확인하신 것 같고요)bank1 은 아무런 효과가 없네요 ㄷㄷ; (잘 동작했던 이유가 bank0 기본 설정이 3.3 V 였나봅니다)이 부분은 notion 문서를 수정해 두겠습니다.bank0 을 건드리는게 맞습니다.즐공하세요 🙂
- 1
- 2
- 33
Q&A
fpga4강 serial terminal
안녕하세요 🙂 최근에 2024.1 을 설치해봐서 확인해봤는데요.serial terminal 을 못찾겠네요..? 허허.. (어떻게 찾으신거지..? ㄷㄷ)====터미널은 꼭 vitis 에서 하라는 법은 없어서요. (터미널 접속 방법은 많아서, 꼭 vitis terminal 안쓰셔도 됩니다.)Verilog S1 에서 설치한 환경을 갖고 계시다면, mobaXterm 사용하셔도 됩니다.session 클릭serial 클릭com port 설정 (FPGA 에 맞게)baud rate : 115200OK(사진) 당연히 FPGA 에 실행이 먼저 되어 있으셔야 하고요 (녹색불 먼저 들어와 있어야함)이후에 위 과정으로 terminal open 하셔서 해보시겠어요?
- 1
- 2
- 26
Q&A
강의 연장 요청이 가능할까요?
안녕하세요 🙂수강기간은 1년으로 모든 수강생과 동일한 조건이라고 생각해요.그 부분은 양해를 부탁 드립니다.즐공하세요 🙂
- 1
- 2
- 63
Q&A
13장 강의 수강 후 질문드려요~
안녕하세요 🙂 네 물론 가능해보입니다.설정방법은 Verilog 코드에서 특정 주소의 값을 비교하시어, on / off 신호를 생성하시고.LED 에 연결해주시면 될 것 같아요.
- 1
- 2
- 46
Q&A
ready신호와 valid신호가 handshake일어나는 부분
안녕하세요 🙂 Valid / Ready Handshake I/F 는 Valid 와 Ready 가 1이 될때, 유효한 data (valid_data) 를 전달하겠다 라는 Rule 입니다.즉, 이 rule 을 지키면서 설계하는건 설계자의 몫이에요. rule 은 정해졌고 어떻게 설계할꺼냐, 의 이슈는 설계자의 몫입니다.따라서 "동시에 1 이여야만 된다라는 내용이 있으려면 적어도 and gate가 하나는 있어야하지 않나요?"원하시는 방법인 and gate 를 쓰셔서 구현하셔도 되고요. 제가 드린 실습코드 처럼 구현하셔도 됩니다.rule 은 정답이 있지만 구현 방법에는 정답이 없다고 말씀드리고 싶어요.즐공하세요 🙂
- 1
- 2
- 31