inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

18

정회운

작성한 질문수 2

1

`timescale 1ns / 1ps
module pattern_detector_no_fsm (
    input logic     clk,
    input logic     rstn,
    input logic     i_in,
    output logic    o_flag
);

    //TODO
    logic [2:0] recent_data;
    logic before_flag;

    // store recent 4-bit
    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            recent_data <= 3'b0;
        end
        else begin
            recent_data[0] <= i_in;
            for(int i = 1; i < 3; i++) begin
                recent_data[i] <= recent_data[i-1];
            end
        end
    end

    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            before_flag <= 1'b0;
        end
        else if(recent_data == 3'b101) begin
            before_flag <= 1'b1;
        end
        else begin
            before_flag <= 1'b0;
        end
    end

    always_comb o_flag = before_flag & i_in ? 1'b1 : 1'b0;

endmodule

module pattern_detector_fsm (
    input logic     clk,
    input logic     rstn,
    input logic     i_in,
    output logic    o_flag
);

    //TODO
    `define INIT      1'b0
    `define TARGET    1'b1

    logic [2:0] recent_data;
    logic state;
    logic next_state;

    // store recent 4-bit
    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            recent_data <= 3'b0;
        end
        else begin
            recent_data[0] <= i_in;
            for(int i = 1; i < 3; i++) begin
                recent_data[i] <= recent_data[i-1];
            end
        end
    end

    // FSM
    // 1. comb part
    always_comb begin
        case(state)
        `INIT :
            if(recent_data == 3'b101) begin
                next_state = `TARGET;
            end
            else begin
                next_state = `INIT;
            end
        `TARGET :
            if(recent_data == 3'b101) begin
                next_state = `TARGET;
            end
            else begin
                next_state = `INIT;
            end
        default : next_state = `INIT;
        endcase
    end

    // 2. seq part
    always_ff @(posedge clk or negedge rstn) begin
        if(!rstn) begin
            state <= `INIT;
        end
        else begin
            state <= next_state;
        end
    end

    // 3. output part
    always_comb o_flag = (state == `TARGET) & (i_in == 1'b1) ? 1'b1 : 1'b0;

endmodule

안녕하세요, 코드 리뷰 원할 경우 남기면 리뷰 해주신다고 하셔서 질문 드립니다.

1) no fsm
1011이 됐을 때 다음 rising edge가 아닌 바로 1이 나와야 하기 때문에 101만 저장하여 비교한 후, 최종 출력에 i_in을 and 처리하여 101 + 1 일 경우만 o_flag가 나오도록 했습니다.


2) fsm

1과 비슷한 방법으로 하였는데 강의처럼 fsm의 input을 1이 아닌 3bit(101 target)로 하여,

상태를 2개로 축소시켜 작성하였습니다.


간단하게 리뷰 부탁드립니다!

verilog-hdl fpga system-verilog rtl

답변 1

0

ETA

안녕하세요 정회운님.

우선 열심히 하시는 모습에 박수를 드립니다!

1), 2)의 답 모두 문제에 한에서 정상 동작 하는 데는 문제 없어 보입니다.

피드백드릴 것은 거의 없지만 몇 가지만 드리자면 ( 주관적인 의견이라 가볍게 들어주세요)

1. no fsm 코드의 before_flag와 2)fsm 코드의 state 가 같은 신호처럼 느껴지네요.

fsm 코드가 FSM 으로 잘 작성 한 것 이기에 중요한 피드백은 아닙니다.


2. 면접관 분들이 주석에 대해서 물어볼 수 있습니다. TODO 혹은 store recent 4-bit 에 대해서 어떻게 대답할지 한번 고민해보면 좋을 것 같습니다.


3. fsm 코드에 STATE의 경우 실무에선 나중에 다른 모듈과의 define 충돌 방지를 위해서 localparam 으로 사용하는 것을 선호합니다. 하지만 해당 문제 내에선 define 을 써도 문제 되지는 않습니다!


4. 이건 no fsm 모범 답안 도 대응 하지 못하는 것인데요. 다만 fsm 코드에선 모범답안만 쉽게 대응 할수있는 질문을 하나 드리겠습니다. 면접관이 질문하신다고 생각하시고 한번만 고민해보시면 도움이 되실꺼에요.

질문 : 만약 패턴이 1011이 아니라 0000 혹은 0001 이면 어디를 수정 하실건가요?

(의도 : 범용적으로 사용할 수 있게 작성되었는지 (현재 코딩한 것에서 최소한의 수정으로 대응 가능한지)

(패턴이 0000 혹은 0001 일 경우 위험한 것이 리셋이 풀린 직후 패턴이 4번이 들어오지 않았는데 플레그가 뜰 수 있습니다)

전반적으로 잘 작성하셨기 때문에 위에 드린 4개의 피드백은 참고만하시길 바랍니다.

앞으로도 끝까지 완강 응원하겠습니다! 감사합니다.

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

0

31

2

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

1

46

2

Arty A7-35T 구매 불가

0

46

2

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

1

49

2

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

0

38

2

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

0

41

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

56

1

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

1

66

2

환경설정 문

2

72

2

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

1

76

2

강의 만료일 연장 신청

0

74

2

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

0

65

2

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

0

63

2

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

0

68

2

queue assignment pattern 문의 건

0

59

1

Mission 5 문의 건

0

85

2

Zynq z7 FPGA single-ended 관련

0

72

1