설계독학's Verilog 마스터 Season 2 (실전 코테 끝판왕: 고난도 문제로 완성하는 이직 프리패스)
안녕하세요. 에타님. 강의 잘 보고 있습니다. 실제 곱셈 연산은 어떻게 처리하는지 궁금해서 질문 드립니다. 컨볼루션 연산이나 딥러닝 가속기 등을 하드웨어로 구현할 때, 연산이 정확히 몇 사이클에 끝나는지 보장되어야 디자인을 할 수 있을 것으로 생각됩니다. 예를 들어 아래와 같은 연산 종속성이 있다고 가정하면 A단 : y1 = a1 * x1 + b1 B단 : y2 = a2 * y1 + b2 C단 : y3 = a3 * y2 + b3 이처럼 다음 단계의 연산이 전 단계의 연산을 기다려야하는 상황이라면 각 연산 사이클을 예측하고 디자인해야 할 텐데, 실제 실무에서는 이런 경우 어떻게 곱셈연산을 디자인하나요?
Stability와 Pole/ Zero 강의 후반부에 5-tr OTA구조와 CS 앰프가 결합된 구조라고 설명해주셨는데 제가 해석했을 때는 OTA와 SF가 결합된 구조처럼 보입니다ㅠㅠ. M5가 pmos면 CS로 보이긴하는데 pmos로 해석하면 되는건지 SF로 해석해야하는지 아니면 제가 잘못 해석하고 헷갈립니다ㅠ
설계독학's Verilog 마스터 Season 2 (실전 코테 끝판왕: 고난도 문제로 완성하는 이직 프리패스)
안녕하세요. 에타님. 강의 잘 보고 있습니다. [1. 질문 챕터] : [ LP2-10] CDC [2. 질문 내용] : src_r_edge를 사용하는 이유가 궁금합니다. 목적은 src_valid_toggle의 edge만 검출해서 사용하려는 것 같은데, 이유가 따로 있을까요? 바보같은 질문일 수도 있습니다. 메타안정성을 높이기 위해서 F/F을 직렬로 연결하는 것으로 이해했습니다. 두 클럭 도메인이 다른 시스템에서 데이터를 수신받는 F/F의 Setup time 혹은 Hold time을 만족하지 못하는 경우 플립플롭의 출력이 이상해지는 것으로 이해하고 있습니다. 그런데 F/F을 여러개 직렬로 달면 이 문제를 줄일 수 있다는게 잘 이해가되지 않습니다. 저 이상한 출력 값이 뒷 단의 F/F으로 넘어가지 않는건가요?
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 🙂 [1. 질문 챕터] : 1강 [2. 질문 내용] : vivado 오류로 인한 다운로드 불가. 오류명 : We cannot fulfill your request as your account has failed export compliance verification. [3. 시도했던 내용, 그렇게 생각하는 이유] : 모든 항목 잘 채웠는데,, 오류로 인해 다운로드가 안되고 있습니다. 이전 답글 내용보았을때 메일로 설치 파일 보내주셨던 이력 있어서 혹시 저도 가능한지 질문글 올리게 되었습니다 (기본정보가 포함되어 있어서 사진은 확인하시면 추후에 삭제하도록 하겠습니다) ------------------------------------------------------------------------- (2026.11.01) 저와 같은 오류를 겪고 계신 분들을 위해 진척사항 공유드립니다. Company 적는란에 특정 기업들은 회사 mail 아닐 시에 스크리닝에 걸리는 듯합니다. 저는 새로운 계정 만들어서 None으로 기입하였고 다운로드 완료하였습니다. 참고 부탁드립니다
설계독학's Verilog 마스터 Season 2 (실전 코테 끝판왕: 고난도 문제로 완성하는 이직 프리패스)
안녕하세요, 강의 잘 수강 중에 있습니다. L2_P12_priority_data_controller 코드 리뷰와 질문 몇가지만 받아주시면 감사합니다. `timescale 1ns / 1ps module priority_data_controller ( // input stream input logic clk, input logic reset, input logic [31:0] stream_a, input logic [31:0] stream_b, input logic [31:0] stream_c, input logic valid_a, input logic valid_b, input logic valid_c, // Output stream output logic [31:0] output_data, output logic valid ); localparam P_ABC = 2'b00; localparam P_BCA = 2'b01; localparam P_CAB = 2'b10; logic [1:0] state, n_state; // 1. Combi logic & Output logic always_comb begin case(state) P_ABC : begin if(valid_a) begin output_data = stream_a; valid = 1'b1; n_state = P_BCA; end else if(valid_b) begin output_data = stream_b; valid = 1'b1; n_state = P_CAB; end else if(valid_c) begin output_data = stream_c; valid = 1'b1; n_state = P_ABC; end else begin output_data = 32'b0; valid = 1'b0; n_state = P_ABC; end end P_BCA : begin if(valid_b) begin output_data = stream_b; valid = 1'b1; n_state = P_CAB; end else if(valid_c) begin output_data = stream_c; valid = 1'b1; n_state = P_ABC; end else if(valid_a) begin output_data = stream_a; valid = 1'b1; n_state = P_BCA; end else begin output_data = 32'b0; valid = 1'b0; n_state = P_BCA; end end P_CAB : begin if(valid_c) begin output_data = stream_c; valid = 1'b1; n_state = P_ABC; end else if(valid_a) begin output_data = stream_a; valid = 1'b1; n_state = P_BCA; end else if(valid_b) begin output_data = stream_b; valid = 1'b1; n_state = P_CAB; end else begin output_data = 32'b0; valid = 1'b0; n_state = P_CAB; end end default : begin output_data = 32'b0; valid = 1'b0; n_state = P_ABC; end endcase end // 2. Seq logic always_ff @(posedge clk or posedge reset) begin if(reset) begin state <= P_ABC; end else begin state <= n_state; end end endmodule Q1) 위처럼 FSM 방식으로 작성해도 문제없는지 궁금합니다. Q2) 이건 좀 추상적인 질문인데, 저 같은 경우는 위처럼 간단한 로직이라도 FSM을 사용해 combinational logic/sequential logic/output logic 이 세가지로 분리해서 작성하는게 편한 것 같습니다. 그런데 실무에서 rtl을 보면 모든 ip가 FSM으로만 설계되지는 않는 것 같고, 사용된다하더라도 윗 처럼 FSM logic을 세 부분으로 분리해서 작성하지는 더더욱 않더라구요. 학부 때는 FSM으로 로직을 짜는 것이 많은 장점이 있다고 배운 것 같은데, logic의 복잡도와 무관하게 위와 같은 코딩스타일을 고집하는게 좋지 않은 습관인지 궁금합니다. 또한, logic을 설계함에 있어 FSM을 사용할지 말지에 대한 기준이 궁금합니다.
설계독학's Verilog 마스터 Season 1 (실전 코딩 테스트 문제로 완성하는 디지털 설계 엔지니어의 커리어 도약)
에타님. 안녕하세요. 제가 많이 부족해서 매 강의마다 질문을 남기게 되네요... 메모리 리셋 관련된 질문입니다. [1. 질문 챕터] : L1-P16 clog2 [2. 질문 내용] : 메모리 rst에 초기화를 꼭 해야하나요? [3. 시도했던 내용, 그렇게 생각하는 이유] : 이 챕터에서 사용된 메모리는 BRAM으로 이해하고 있습니다. 두 가지 질문이 있는데요. BRAM은 따로 초기화해주지 않으면 쓰레기 값이 들어있나요? 그래서 따로 RTL에서 초기화 하고 싶은 값으로 초기화를 해줘야하나요? 만약 초기화를 따로 해줘야한다고 하면 보통 RTL 내에서 초기화를 하나요? Zynq와 같은 FPGA에서 PS로 초기화하는 방법을 사용해도 되나요? 이론에 있는 BRAM 코드를 schematic으로 보면 위처럼 나오는 반면, 모범 답안 코드의 schematic은 아래처럼 나옵니다. 초기화로 인해 로직이 추가된 것으로 보이는데 너무 비효율적으로 느껴져서 질문 드립니다.
설계독학's Verilog 마스터 Season 1 (실전 코딩 테스트 문제로 완성하는 디지털 설계 엔지니어의 커리어 도약)
에타님, 안녕하세요. 강의 잘 보고 있습니다. [1. 질문 챕터] : L1-P15 Priority encoder [2. 질문 내용] : RTL_ROM으로 합성되었다는 것이 어떤 의미인가요? AI 답변을 봤을 때는 LUT 형식으로 합성된 것으로 이해했습니다. 이 엔코더 예제로 예를 들면 아래와 같습니다. Address 0000, 0001 , Data 00 Address 0010, 0011, Data 01 Address 0100, ..., 0111, Data10 Address 1000, ..., 1111, Data 11 만약 그렇다고 하면 게이트로 합성되는 것보다 RTL_ROM으로 합성되는게 더 유리한건가요? [3. 시도했던 내용, 그렇게 생각하는 이유] : 일단 저는 Priority encoder를 아래처럼 구현했습니다. `timescale 1ns / 1ps module priority_encoder( input [3:0] in, output reg [1:0] out, output reg valid ); //TODO always @(*) begin valid = (in == 4'b0000) ? 1'b0:1'b1; if (in[3]) out = 2'b11; else if (in[2]) out = 2'b10; else if (in[1]) out = 2'b01; else out = 2'b00; end endmodule 그 후 schematic을 보는데 valid가 RTL_ROM으로 합성되어 있어요. 모범 답안 schematic이 궁금해서 봤는데 모범 답안 schematic은 두 로직 전부 RTL_ROM으로 합성되어 있습니다. ROM으로 합성되는게 유리하다고 판단한 이유는 게이트로 합성되면 발열(전력 소모)과 전송 지연 시간 등이 있기 때문입니다. 추가로 가끔 제가 구현한 예제가 시뮬레이션 실행에도 문제가 없고 결과도 PASS로 뜨는데 schematic을 실행했을 때 에러가 발생하는 경우가 있습니다. 이 경우 실제 합성 불가능해서 schematic 실행 시 에러가 발생하는 것인가요? L1-P13 Parallel processor 내용입니다. `timescale 1ns / 1ps module clock_divider #( parameter INPUT_FREQ = 100_000_000, // 입력 주파수 (Hz) parameter OUTPUT_FREQ = 25_000_000 // 출력 주파수 (Hz) )( input wire clk_in, // 입력 클럭 input wire rst_n, // 비동기 리셋 (액티브 로우) output reg clk_out // 출력 클럭 ); // 분주 비율 계산 localparam DIVIDE_RATIO = INPUT_FREQ / OUTPUT_FREQ; localparam COUNTER_WIDTH = $clog2(DIVIDE_RATIO); // 카운터 레지스터 reg [COUNTER_WIDTH-1:0] counter; //TODO always @(posedge clk_in or negedge rst_n) begin if (!rst_n) begin clk_out <= 1'b0; end else if (counter < (DIVIDE_RATIO / 2)) begin clk_out <= 1'b1; end else begin clk_out <= 1'b0; end end always @(posedge clk_in or negedge rst_n) begin if (!rst_n) begin counter <= 1'b0; end else begin counter <= counter + 'b1; end end endmodule 어디가 문제인지 찾지는 못했습니다.
설계독학's Verilog 마스터 Season 1 (실전 코딩 테스트 문제로 완성하는 디지털 설계 엔지니어의 커리어 도약)
안녕하세요. 에타님. 강의 잘 보고 있습니다. 감사합니다. 궁금한게 있습니다. [1. 질문 챕터] : Interrupt controller 문제 풀이 [2. 질문 내용] : 1. 새로운 인터럽트 요청 처리에서 interrupt_pending <= (interrupt_pending | interrupt_requests) & ~interrupt_mask; 를 사용한 이유. 2. 인터럽트 처리 완료 구문에서 interrupt_pending[current_interrupt] <= 0;를 쓴 이유. [3. 시도했던 내용, 그렇게 생각하는 이유] : interrupt_pending <= interrupt_requests & ~interrupt_mask; 와 무슨 차이가 있는지 이해가 잘 안됩니다. 굳이 0으로 내리지 않아도 interrupt_mask[current_interrupt] 비트가 1로 업데이트가 되어서 interrupt_pending <= (interrupt_pending | interrupt_requests) & ~interrupt_mask;로 처리가 될거라 생각하는데, 지우고 실행해보니까 기능에 오류가 있네요. 근데 무엇이 문제인지 이해가 안되서 질문 드립니다.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
안녕하세요 🙂 [1. 질문 챕터] : eg) 몇 장, 몇 분 몇 초 쯤. or 수강생 분들이 봤을 때 어디구나?! 할 수 있게 표기 부탁 드려요. [2. 질문 내용] : eg) 질문 내용을 자유롭게 작성해주시면 되겠습니다 🙂 [3. 시도했던 내용, 그렇게 생각하는 이유] : eg) 설치영상은 이렇게 시도했는데 안되더라 or 본인의 생각을 적어주세요. (실습 내용 중에 이해가 안되거나 잘못된 내용이 있는데, 이러 이러한 근거로 나는 이렇게 생각합니다.) 수고하십니다 맛비님 님이 제공해주신 시계 프로젝트를 진행하고 fpga 강의를 구매하려고 하는데 fpga 보드가 없어서 중고로 구매하려고 합니다.. 예전에는 중고 보드 구매시 정상동작을 검증하는 영상이 있었는데 지금은 볼 수가 없더라고요. 혹시 중고 보드를 검증할 수 있는 코드와 같은 것도 fpga 강의에서 제공되는지 궁금합니다
안녕하세요. test class의 constructor 부분을 보다가 궁금한 점이 있어 질문드립니다. 슬라이드 코드에서 아래와 같이 되어 있는데, this.din_if = this.din_if; this.dout_if = this.dout_if; 제가 이해한 바로는 function new() 의 argument로 전달받은 interface를 class 내부 member에 저장하려는 목적이라면, this.din_if = din_if; this.dout_if = dout_if; 처럼 작성되어야 할 것 같습니다. 혹시 슬라이드의 this.din_if = this.din_if; 부분은 오타인지, 아니면 제가 놓치고 있는 다른 의미가 있는지 확인 부탁드립니다.
강사님 안녕하세요, 자료를 보며 CODEX와 함께 작업을 진행하려고 했으나 연결이 잘 되지 않는 것 같아 문의드립니다. JTAG 케이블은 인식되지만 FPGA가 검색되지 않아 문의드립니다. 사용 환경 보드: HIL A35T v1.0, FPGA XC7A35T JTAG: Platform Cable USB II, 본체 표기 DLC10 PC: Windows 11 Home 25H2 프로그램: 강의 버전 Vivado 2018.3 및 추가 비교용 Vivado Lab 2026.1 JTAG USB는 허브를 통해 PC에 연결하고, 보드 USB-C 전원은 휴대폰 충전기로도 별도 공급해봤습니다. 현재 증상 Windows에서 Xilinx USB Cable 이 오류 없이 인식됩니다. JTAG 케이블의 STATUS LED는 녹색입니다. Vivado에서도 케이블은 인식되지만 FPGA 장치 목록이 비어 있습니다. 다음 오류가 발생합니다. Labtools 27-2269: No devices detected on target XSDB로 JTAG 응답을 직접 확인하면 다음 상태가 나옵니다. DR shift through all zeroes 입력 데이터를 0 또는 1로 바꿔도 읽어오는 256비트가 모두 0입니다. 확인한 사항 UART 어댑터와 외부 W5500 모듈을 분리한 최소 연결에서도 동일합니다. 보드 전원을 USB 허브에서 휴대폰 충전기로 변경해도 동일합니다. JTAG 속도 750kHz와 6MHz 모두 FPGA가 검색되지 않습니다. Vivado 2018.3과 Vivado Lab 2026.1에서 같은 증상이 재현됩니다. 현재 JTAG 연결 단계에서 막힌 상태이며, 케이블·보드 전원·보드 자체 중 어느 부분이 원인인지는 확인하지 못했습니다. 문의드리고 싶은 사항 이 보드에서 이런 증상이 나타날 때 우선 의심하는 원인은 무엇인가요? PC·드라이버 / JTAG 프로그래머·리본 / 보드 전원 / FPGA 상태 를 구분하는 권장 검사 순서가 있나요? 각 검사에서 정상이면 어떤 결과가 나와야 하고, 실패하면 어느 부분을 의심해야 하는지 알려주실 수 있나요? 감사합니다.
안녕하세요. 이번에 Testbench와 UVM 강의를 신청하게 된 수강생입니다. 제가 본업이 있다보니 강의를 수강을 못하고 있는데, UVM 강의의 경우 유효기간이 존재하더라고요 혹시 추후에 기간을 늘려주실 계획이 있으실지 문의드립니다. 다른 하나는 SV 기초 강의는 신청하지 않았는데, 따로 수강하지 않고 바로 TB강의로 넘어가도 될지 문의드립니다. (NPU 설계 및 Gate 10,000개 미만 프로젝트에서 IO PAD Insertion부터 Synthesis, Scan, ATPG, DA와 STA를 해본 경험은 보유하고 있습니다.) 인프런에 로드맵 기능이 있는것으로 아는데 그걸 열어주시면 더 좋을 것 같습니다. 더욱 양질의 강의가 올라오길 기대하겠습니다. 감사합니다.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
Chapter 16 코드 중 Step1 과 2를 아래 그림과 같이 합쳐서 사용하는 방식은 잘 쓰지 않나요? Localparam을 따로 설정하지 않고 직관적으로 state가 바뀌는게 더 잘 보이는 방식으로 따로 만들었는데 이러한 방식 잘 사용하지 않나요?(상세 문법 같은 건 틀렸을수도 있으니 흐름만 봐주십쇼) 두 질문 모두 모듈이 많아지거나 코드가 복잡해지면 검토(추적성)시에 힘들어서 그런건지 궁금합니다.
설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)
회로설계 3년차 현업자입니다. 회로설계를 하다보니 주 업무는 아니지만 같은 HW에 속하는 FPGA 로직 관련 업무는 간접적으로 많이 접하였고 이번기회에 자세히 배워보려고 강의 신청하였습니다. 저희사는 업무를 주로 윈도우 환경에서 2022.2 버전을 주로 사용하여 설계합니다. 실제 기능면에서는 다르지 않을 것 같은데 꼭 리눅스에서 진행할 필요가 있는지 질문 드립니다.