해결된 질문
작성
·
558
1
hdl-bits Mt2015 lfsr - HDLBits (01xz.net) 풀다가 궁금해서 문의 드립니다.
문제 풀어나가는 방식 두 가지(1번 vs 2번,3번)중에서 어떤 방식이 더 좋은 방식이고 실제로
현업에서는 어떤 방식을 많이 사용하는지 궁금합니다?
//1번
module top_module (
input [2:0] SW, // R
input [1:0] KEY, // L and clk
output [2:0] LEDR); // Q
d_ffs f0 (.i_0(LEDR[2]),.i_1(SW[0]),.clk(KEY[0]),.L(KEY[1]),.q(LEDR[0]));
d_ffs f1 (.i_0(LEDR[0]),.i_1(SW[1]),.clk(KEY[0]),.L(KEY[1]),.q(LEDR[1]));
d_ffs f2 (.i_0(LEDR[1]^LEDR[2]),.i_1(SW[2]),.clk(KEY[0]),.L(KEY[1]),.q(LEDR[2]));
endmodule
module d_ffs(
input i_0,
input i_1,
input clk,
input L,
output q
);
always @(posedge clk) begin
q <= (L ? i_1 : i_0);
end
endmodule
//2번
module top_module (
input [2:0] SW, // R
input [1:0] KEY, // L and clk
output [2:0] LEDR); // Q
reg [2:0] LEDR_next;
always@(*)begin
if(KEY[1])begin
LEDR_next = SW;
end
else begin
LEDR_next[0] = LEDR[2];
LEDR_next[1] = LEDR[0];
LEDR_next[2] = LEDR[2] ^ LEDR[1];
end
end
always@(posedge KEY[0])begin
LEDR <= LEDR_next;
end
endmodule
//3번
module top_module (
input [2:0] SW, // R
input [1:0] KEY, // L and clk
output [2:0] LEDR); // Q
wire L;
wire clk;
wire [2:0] R;
reg [2:0] Q;
assign R = SW;
assign clk = KEY[0];
assign L = KEY[1];
always @(posedge clk) begin
if(L) Q <= R;
else Q <= {Q[2]^Q[1], Q[0], Q[2]};
end
assign LEDR = Q;
endmodule
답변 1
1
안녕하세요 :)
강의에서 다루지 않은 내용으로 답변의 정확도가 떨어질 수 있습니다. (강의에서 다룬 내용의 질문을 부탁드려요)
1,2,3 번 정답은 없고요. 회사마다 코딩 가이드 룰이 있습니다.
저라면, 2번 혹은 3번입니다.
즐공하세요 :)
그렇군요 감사합니다!