inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

설계독학's Verilog 마스터 Season 2 (실전 코테 끝판왕: 고난도 문제로 완성하는 이직 프리패스)

L2_P4 data_average 코드 리뷰 및 waveform 질문 드립니다.

2

정회운

작성한 질문수 3

0

`timescale 1ns / 1ps
module data_avg (
    input logic           clk,
    input logic           rstn,
    input logic [7:0]     i_data,
    input logic           i_valid,
    output logic [7:0]    o_data,
    output logic          o_valid
);

    //TODO
    logic [7:0] recent_data [0:3];
    logic [9:0] sum;
    logic [1:0] valid_count;

    // store recent 4 data when i_valid == 1
    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            for(integer i = 0; i < 4; i++) begin
                recent_data[i] <= 8'b0;
            end
        end
        else if(i_valid) begin // store data only when i_valid == 1
            recent_data[0] <= i_data;
            for(integer i = 1; i < 4; i++) begin
                recent_data[i] <= recent_data[i-1];    
            end
        end
        else begin // remain data when i_valid == 0
            recent_data[0:3] <= recent_data[0:3];
        end
    end

    // o_valid is high when valid_count == 4
    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            o_valid <= 1'b0;
            valid_count <= 2'b0;
        end
        else if(i_valid) begin
            if(valid_count == 3) begin
                o_valid <= 1'b1;
            end
            else if(valid_count < 3) begin
                o_valid <= 1'b0;
                valid_count <= valid_count + 1;
            end
        end
        else begin
            o_valid <= 1'b0;
        end
    end

    always_comb sum = recent_data[0] + recent_data[1] + recent_data[2] + recent_data[3];
    always_comb o_data = o_valid ? ( sum[1] == 1 ? (sum[9:2] + 1) : sum[9:2] ) : 8'b0;


endmodule
image.png


안녕하세요, 강의 잘 수강하고 있습니다.
Q1. 작성하신 부분과 꽤 다르게 counter로 설계하였는데 간단하게 리뷰 부탁드리며 counter로 설계할 때와 fsm으로 설계할 때의 장단점이 궁금합니다.
Q2. waveform에서 네번째 data가 들어온 바로 다음 rising edge 이후 valid와 average 값이 나와야 할 것 같은데 파형의 expected_data는 왜 한cycle이 더 delay돼서 나오는지 궁금합니다.

감사합니다.

verilog-hdl fpga system-verilog rtl

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 정회운님!

Q1. Counter로 설계할 때와 FSM으로 설계할 때의 장단점

Counter 설계의 장단점:

  • 장점:

    • 간단성: Counter는 추가적인 상태가 필요 없기 때문에 비교적 간단하고 이해하기 쉬운 구조입니다.
    • 자원 절약: 적은 자원으로 상태를 나타낼 수 있습니다. 특히 상태가 많지 않을 때 효율적입니다.
  • 단점:

    • 유연성 부족: 상태가 복잡하거나 분기 조건이 많을 경우, FSM에 비해 다루기 어렵습니다.
    • 확장성 한계: 상태가 많아지면 counter 방식은 구조가 복잡해질 수 있습니다.

FSM 설계의 장단점:

  • 장점:

    • 복잡한 제어: 다양한 상태와 조건을 처리할 수 있어 복잡한 제어 로직에 유리합니다.
    • 명확한 상태 구분: 상태가 명확하게 구분되므로 디버깅과 유지보수에 용이합니다.
  • 단점:

    • 자원 사용 증가: 상태가 많아질수록 자원 사용이 증가할 수 있습니다.
    • 복잡성 증가: 상태와 전이 조건이 많아지면 설계가 복잡해질 수 있습니다.

각 방식은 사용될 설계 환경과 요구 사항에 따라 선택해야 합니다. 간단한 제어에는 counter를, 복잡한 상태관리가 필요한 경우는 FSM을 사용하는 것이 일반적입니다.

Q2. Waveform에서의 delay

네 번째 데이터 입력 후 유효한 출력이 예상되는 한 사이클 뒤에 나오는 이유는 로직의 타이밍과 동기화에 관한 문제일 수 있습니다. 구체적으로 이유는 아래와 같습니다:

  1. 데이터전파 지연: always_ff 블록 내에서 데이터는 클럭의 상승 에지(posedge)에 반응하므로 그 다음 에지까지 데이터가 진행되기까지 시간이 필요합니다.

  2. Valid 신호의 지연: 마지막 데이터가 유효하다는 것을 확인한 후에 valid_count가 조건을 만족하여 o_valid가 설정되기 때문에 조건을 만족한 후에 완전히 적용되기까지 사이클의 지연이 생길 수 있습니다.

결국, 이 특성들은 동기식 설계의 일반적인 특성으로, 입력이 클럭의 포지티브 에지에 동기화되며 항상 한 사이클의 지연이 사실상 발생하게 됩니다.

이러한 파형 지연에 대해 깊이 있는 이해가 필요하다면, Verilog HDL에서의 설계 타이밍 관련 자료를 참고하시면 더욱 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드립니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Ubuntu 20.04.5 설치관련 문의드립니다

0

49

2

LV2-2 Patter Detector code review 부탁드립니다.

1

27

1

환경 설정하는 guide 최신화 부탁드립니다.

1

51

2

Arty A7-35T 구매 불가

0

48

2

git hub 404 error 도움 부탁드립니다.

1

49

2

LT스파이스 라이브러리 다운이 안됩니다.

0

41

2

어떤 방식으로 이 강의를 듣고 공부를 해야 하는지 고민 됩니다.

0

42

2

쿼터스 스케메틱에 대한 질문

0

35

2

실행 시 node or model name expected.

0

33

2

FIFO 질문

0

32

2

cache관련 질문 드립니다

0

50

1

수업자료내 출처 문의 드립니다.

0

41

2

보드 관련 질문 드립니다.

1

63

2

34장의 맛비 패턴 generator 관련 질문입니다!

1

62

2

34장과 35장에서 설계한 IP는 DDI의 구조를 설계한 것인가요?

1

59

1

HW가속기 설계에서 더 보완할 수 있는 방법이 있을까요?

1

68

2

환경설정 문

2

72

2

[HDL 32장-2부] 참고 링크 관련

1

77

2

강의 만료일 연장 신청

0

74

2

기초예제 파일 불러오기 문의

0

67

2

Zybo 환경에서 PL RTL UART 보드 검증 방법

0

64

2

혹시 별도의 자료가 있나요?

0

68

2

queue assignment pattern 문의 건

0

59

1

Mission 5 문의 건

0

85

2