설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
왠지 전부 최신버전으로 다시 설치하고 싶어 전부 삭제하고 재설치해보았습니다. 굵은 글씨는 제가 재설치하는 동안 시행착오를 거쳐 깨달은 것들입니다. 기본 작업 1. sudo passwd: root 계정의 비밀번호를 설정. 우분투를 설치하고 커맨드창에서 설정한 비번은 사용자 계정의 비번임 반드시 root 계정의 비번은 따로 또 설정해야됨 2. ls -al: 현재 폴더 내의 파일 및 폴더 list 출력 3. pwd: 현재 폴더 경로 확인. 4. mkdir tools: 현재 폴더안에 "tools" 라는 폴더를 생성 Vivado를 설치할 경로임 5. explorer.exe . : WSL의 파일시스템을 Windows 폴더로 open한후 설치파일 복사 6. rm Xilinx_Unified_2020.2_1118_1232_Lin64.bin:Zone.Identifier : explorer.exe의 폴더로 파일을 복사하면 생기는 불필요 파일. 이를 삭제 7. sudo apt-get update sudo apt upgrade -y : 운영체제에서 사용 가능한 패키지들과 그 버전에 대한 정보를 업데이트하는 명령어 8. sudo apt install gcc -y: gcc (c언어 컴파일러) 설치 9. sudo apt install unzip -y: unzip 설치 10. sudo apt-get install libtinfo5 libncurses5 libxrender1 -y sudo apt install libncurses5-dev libncursesw5-dev -y : Vivado 구동을 위한 library 설치 11. sudo apt-get install language-pack-en-base : 영어 언어팩이 설치가 안되어 있는 경우도 있음 그 경우 Vivado가 실행이 안됨 (이를 확인하는 방법: locale -a) 12. sudo apt-get install openjdk-18-jdk : 설치안하면 Vivado 설치 중 99%중에 java.lang.UnsatisfiedLinkError 이 에러가 일어나 설치가 강제로 취소되어 모든게 물거품이 됨 command line으로 Vivado 설치 1. su: root 계정으로 전환 반드시 root 계정으로 전환해야됨 안하면 앞으로 생성할 계정 토큰파일과 Config 파일이 이상한 경로에 저장됨 2. ./ Xilinx_Unified_2022.2_1014_8888_Lin64.bin -- -b AuthTokengen : xilinx 계정 토큰 생성 3. ./ Xilinx_Unified_2022.2_1014_8888_Lin64.bin -- -b ConfigGen : config 파일 생성 4. vi /root/.Xilinx/install_config.txt: 생성된 config 파일을 편집함. A. WSL환경에서 USB연결을 자체적으로 지원하지 않기 때문에 WSL에서 FPGA에 Upload하는건 무리임 zynq7000빼고 [FPGA 보드 이름]: 1에서 1을 전부 0으로 만들어 줌( https://learn.microsoft.com/ko-kr/windows/wsl/connect-usb WSL으로 USB연결 가능하네요) ( https://www.inflearn.com/questions/755388/wsl%EC%83%81%EC%97%90-usb%EC%97%B0%EA%B2%B0%ED%95%B4%EC%84%9C-fpga%EC%97%90-bitstream-upload-%ED%95%98%EB%8A%94-%EB%B2%95 제가 해봤습니다) B. 설치 경로를 /home/[사용자 계정]/tools/xilinx로 설정함 앞글자를 대문자 X(Xilinx)로 설정하면 settings64.sh를 찾을 수 없다는 오류가 뜰거임 vivado install 시작 ./ Xilinx_Unified_2022.2_1014_8888_Lin64.bin -- -a XilinxEULA,3rdPartyEULA -b Install -c /root/.Xilinx/install_config.txt 설치 실패후 우분투 삭제하고 다시 설치하고 싶을 때 1. Ubuntu 22.04를 프로그램 추가/제거에서 제거하기 2. 마이크로소프트 스토어에서 설치도중 오류가 발생하면 C:\Users\[사용자 계정]\AppData\Local\Packages에서 CanonicalGroupLimited.Ubuntu22.04LTS로 시작하는 폴더를 파워셀에서 rd /s /q 명령어를 이용하여 강제 삭제 하면 됨 Vivado 설치가 완료되면 1. exit: root 계정 종료 2. vi ~/.bashrc: vi 에디터로 .bashrc를 열음 맨 밑에서 (명령모드에서 shift + G 누르면 맨 하단으로 내려간 다음 입력모드로 전환) source /home/kiyoshi/tools/xilinx/Vivado/2022.2/settings64.sh 를 추가함 A. 위 명령은 설치한 Vivado의 환경을 잡아주는 shell script (export 등)가 들어있음 B. .bashrc 파일: terminal open 시 자동으로 실행되는 명령어가 들어있음. 3. logout: WSL에서 나간 다음 다시 WSL 실행해 보고 bash에러가 나는지 확인 4. vivado: Vivado를 gui환경에서 실행해서 잘 설치 되었는지 확인 잘못된 정보 있으면 피드백 부탁드립니다. 감사합니다!
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
안녕하세요 맛비님 해당 Code를 Schemetic을 했을 때 Flip Flop을 보고 의문이 생겼습니다. 제가 알기로 D Flip Flop은 입력으로 CLK와 D(입력)를 받아 출력 Q 를 내보낸다고 알고 있습니다. 하지만 schemetic을 띄웠을 때 위와 같이 Filp Flop에 CLK, D 뿐만이 아니라, RST가 붙은 경우도 있고, SET과 RST 둘 모두가 붙은 경우도 봤습니다. Q) SET or RST이 붙어있는 Flip Flop은 D F/F인가요? 아니면 J-K F/F인가요? (J = Set 역할, K = Reset 역할) D F/F에 게이트들이 추가적으로 붙은 D F/F인가요? J-K(S-R) F/F이 아니라면 이유가 무엇인지 궁금합니다. 감사합니다
안녕하십니까 현재 수업을 듣고있는 학생인데요. 선생님 수업 실습중에 STM32CubeMX을 이용하여 STM32F405ZGT6의 코딩중에, 미들웨어 FreeRtos와 USB_Device가 같이 이용 하지 못하는건지 궁금합니다. Generate Code를 누르면 USB Device의 코드가 없어집니다.
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요, 좋은 강의 감사합니다. 1. MAC을 늘렸을 때 더 빠르게 연산이 된다고 하시면서 M(CO)에 동그라미 치셨는데 MAC과 M의 관계에 대해 직관적으로 연관짓기가 어려워서 어떤 관계인지에 대해 질문드립니다. 그리고 MAC은 연산량이라고 이해했는데, 연산량이 늘면 성능이 더 안좋아지는 것이 아닌가요?! 질문드립니다! weight 개수를 CO+edge개수 라고 생각하면 될까요? HW 설계에서 나눗셈이 resource가 왜 많이 드는지 궁금합니다. 단순하게 생각해보면 소수점 처리 때문일까 싶은데, 어떤 컨셉인지 궁금해서 질문드립니다. 알렉스넷처럼 batch가 2 이상인 모델은 병렬 연산을 요함으로 batch 1인 모델보다 많은 자원을 사용한다는 것이고, 이는 성능과 비용의 trade off 라고 이해하면 될까요?
설계독학맛비's 실전 AI HW 설계를 위한 바이블, CNN 연산 완전정복 (Verilog HDL + FPGA 를 이용한 가속기 실습)
안녕하세요 좋은 강의 감사합니다. 1. 강의내용 중 stride를 설명하실 때 output 피쳐맵의 크기가 X/stride, Y/stride로 일반화가 가능하기 때문에 stride가 1이면 input output featuremap 크기가 동일하다고 설명 해주셨는데, 만약 stride가 1일 때, padding이 없다면 X-2, Y-2만큼의 output feature map이 생기지 않나요? padding이 없다면 컨볼루션 할 때 미정의 값으로 연산을 해야할 것 같아서요..! 2.아래의 그림에서 output 채널의 크기는 예시에서 임의로 주어진 것인지 궁금합니다! output 채널의 크기인 24개 만큼의 depth가 weight에 있다고 가정한 예시일까요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님 고생많으십니다. 맛비님께서 알려주신 코드는 위와 같으며, 위와 같이 설계할 경우 예를 들어 c_state 가 A 일 때 output 이 B가 된다고 가정한다면, n_state가 A로 바뀌면 다음 clock에 c_state는 A가 됩니다. 이 때 바로 output이 B가 되지 않습니다. output은 그 다음 clock에 B가 c_state가 A가 됨을 알아차리고 B가 됩니다. 이렇게 Timing 적으로 출력값이 밀릴 바에 위 사진처럼 바꾸는 것은 어떨까요? (n_state를 없애는 겁니다) 위로 했을 때의 문제점과 문제가 있다면 clock이 안밀리고 위 예시에서 n_state가 바뀔 때 output이 바뀌도록 설계하려면 어떻게 해야할까요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님 BRAM의 데이터를 Read할 때 Testbench에서 address를 1씩 증가시켜서 읽어보면 address와 read data가 동클락에 나오는 걸 방지하기 위해 r_valid로 1 cycle delay 시켜주는 것으로 이해했습니다. 하지만 주소를 생성하는 모듈 ((ex) address를 0부터 15까지 1씩 증가하면서 BRAM에 address를 보내주는 모듈) 과 BRAM을 연결해 Testbench에서 address를 1씩 증가시키지 않고 알아서 address를 BRAM으로 보내주어 시뮬레이션을 돌려보니, r_valid가 존재하지 않아도 read할 때 자동으로 1 cycle delay 미뤄줍니다. 이 이유를 혹시 아실까요?
설계독학맛비's 실전 FPGA를 이용한 HW 가속기 설계 (LED 제어부터 Fully Connected Layer 가속기 설계까지)
AXI Interface 코드 리뷰를 진행하고 있는데, axi_awready , axi_wready 신호를 생성하는 과정에서 조건문에 ~axi_awready, ~axi_wready 같은 조건들이 ready 신호를 1 clock tick으로 생성하려고 의도한 게 맞는지 궁금합니다!
안녕하세요 강의를 수강하면서 강사님은 이러한 내용들을 어떻게 공부하셨는지 궁금했습니다. 각종 MCU를 활용함에 있어서 인터럽트나 ADC, PWM 등의 사용법을 알려면 각 MCU별 example을 스터디 하는 것이 최선인가요?? stm 의Cube MX처럼 친철한 툴을 사용하지 못할때(예를들어, ESP나 NRF) 간단한 인터럽트를 사용하더라도 다양한 문제가 생길 것 같은데 이럴때 강사님만의 팁이 있을까요??
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
강의시간 14:49로 넘어가는 과정에서 문제가 생겼는데 어떻게 해결해야할지 모르겠습니다 에러 내용은 다음과 같습니다 ERROR: Installer could not be started. Could not initialize class java.awt.Graph icsEnvironment$LocalGE java.lang.NoClassDefFoundError: Could not initialize class java.awt.GraphicsEnvi ronment$LocalGE
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님. 다음과 같은 코드를 보면 always문 안에는 *(asterisk) 로 combination circuit 즉, clock에 의존하지 않습니다. 제가 알기로 무어(MOORE) 머신은 output이 현재 state 에만 의존한다. 클럭 엣지에 의해서만 output이 바뀐다.로 이해하였고, 밀리(MEALY) 머신은 output이 현재 state와 input에 의존한다. 클럭의 한 사이클을 기다리지 않고 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 알고 있습니다. 그럼 위 코드는 clock에 의존하지않고, 1. 현재 상태 = S_IDLE 일 때 현재 입력이 i_run=1이면 clock에 관계없이 바로 output, 즉 다음 상태가 S_RUN으로 되고, 2.현재 상태 = S_RUN 일 때 현재 입력이 is_done=1이면 clock에 관계없이 바로 output, 즉 다음 상태가 S_DONE으로 되고, 3.현재 상태 = S_DONE일 때 현재 입력에 상관없지만 clock에 관계없이 바로 output, 즉 다음 상태가 S_IDLE로 됩니다. c_state는 clock에 의존하여 변하지만, "밀리(MEALY) 머신은 output이 현재 state와 input에 의존한다. 클럭의 한 사이클을 기다리지 않고 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 알고 있습니다." 에서 n_state는 같은 사이클에서 입력을 바로 출력에 반영한다. 라고 보이므로, MEALY 머신이 아닌가요? 인터넷에서는 FSM이 MOORE 머신이라고 나와서 질문드립니다!
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 올려주신 bram 가이드를 보고 generate address interface with 32bits를 체크하고 single port ram을 ip로 생성해서 사용해봤어요 사용해보니 주소가 0~3, 4~7 이렇게는 같은 주소로 덮어 씌워지더라고요 그래서 주소를 4씩 늘려줘서 데이터를 쓰고 읽어봣더니 정상 동작 하더라고요 주소가 왜 4씩 늘려줘서 데이터를 써줘야하는지에 대해서 찾아보는데 잘 안찾아져서요 그 이유에 대해서 설명을 좀 듣고 싶어요 아니면 또 관련된 가이드가 있을까요
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 강의 잘 듣고 있습니다. verilog는 c, 파이썬 처럼 막 연습문제 같은것들이 아무래도 인터넷 상에 잘 알려져 있지 가 않아서 어려움이 있습니다. 논리회로설계 수업 때 mips architecture alu를 약식으로 만들었었는데 이런 RTL 연습문제? 예제? 프로젝트? 같은것들을 풀어보고 설계해보고 싶은데 어디서 찾을 수 있는지 혹시 알려주시면 감사하겠습니다
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 다른 분께 남겨주신 if-else문과 case문의 차이에 대한 답변을 봤는데, case문은 우선순위가 없다는 말에 대해 혼란이 생겨 질문 남깁니다. 기존에 verilog를 학습했을때, verilog의 case문은 C의 switch case문과는 다르게 각각의 조건에 break가 있는 것과 같다. 그래서 맨 위 조건부터 우선순위가 있다고 알고있었는데요. 예를 들어 아래의 모듈의 시뮬레이션 결과로 sel=4'b0011인 경우에 out=a가 나옵니다. 따라서, case문에서 맨 위 조건부터 우선순위가 있다고 생각했습니다. module priorityencoder( input [2:0] a, input [2:0] b, input [2:0] c, input [2:0] d, input [3:0] sel, output reg [2:0] out ); always@(*) begin case(1'b1) sel[0] : out = a; sel[1] : out = b; sel[2] : out = c; sel[3] : out = d; default : out = 3'b0; endcase end endcase end endmodule 그런데, 남겨주신 답변에 case문에는 우선순위가 없다고 하셔서 조금 혼란이 생겼는데.. 말씀하신 'case문에 우선순위가 없다'는 말은, 코드상의(=function상의 ) 우선순위를 말하는 것이 아닌 합성에서 생기는 우선순위(?) 가 없다는 말로 생각하면 될까요? (위의 예시 모듈을 합성하면 아래 그림처럼, if-else로 적으면 mux chain형태로 합성되고 case로 적으면 하나의 mux로 합성됨을 확인하긴했습니다..) 그러면 이렇게 case문이 합성된 회로(위 그림의 아래의 회로)는 그럼.. function적으로는 우선순위가 있는데 형태는 우선순위가 없는(??)것.. 인건가요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 맛비님의 코드 습관?을 보면 매번 reg 데이터를 assign으로 할당하여 wire로 데이터를 내보내는데요(즉, output) 저는 공부할 때 데이터를 내보낼땐 reg 데이터로 내보내는 것이 좋다고 알고 있습니다. 물론 reg 데이터를 바로 assign문에 할달이 되서 로직이 생긴다거나 그러진 않을 것 같지만 (제 눈엔 assign으로 코에서에 o_cnt로 내보내나 cnt로 내보내나 차이가 없다고 보입니다) 어떤 코드 스타일에 습관을 들이는게 좋을지 궁금하여 질문드립니다.(저의 경우는 cnt를 바로 내보내는 스타일입니다) 좀 질문이 횡설수설한거 같아 질문이 이해가 안된다면 제가 다시 질문하겠습니다. 감사합니다
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. factor 에 관한 내용에 대한 질문입니다. 자리수 에 대한 내용으로 이해했습니다. 그런데 제가 가지고 있는 ISO14229 에서는 아예 MSB, LSB 로 다른 바이트로 나눠서 보내주는거 같네요 이런 분야가 처음인지라 설명 부탁 드려봅니다. 감사합니다.