LV2-2 Patter Detector code review 부탁드립니다.
18
작성한 질문수 2
`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개로 축소시켜 작성하였습니다.
간단하게 리뷰 부탁드립니다!
답변 1
0
안녕하세요 정회운님.
우선 열심히 하시는 모습에 박수를 드립니다!
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





