Given an 8-bit input vector [7:0], reverse its bit ordering.
그냥 뒤집?으라는 문제
단순히 생각해서 [0:7]을 하면 오류가 난다. 뒤집어서 선언하는건 막아놨기 때문
일단 하나씩 이렇게 적어도 되긴한다.
module top_module(
input [7:0] in,
output [7:0] out
);
assign out = {in[0], in[1], in[2], in[3], in[4], in[5], in[6], in[7]};
endmodule
근데.. 많이 귀찮다
많아지면? 다 적을수는 없으니까 해결법 중 always
문안에 for 루프를 사용하는 것도 괜찮다.
module top_module(
input [7:0] in,
output [7:0] out
);
always @(*) begin
for (integer i = 0; i < 8; i = i + 1) begin
out[i] = in[7-i];
end
end
endmodule
아니면? generate
를 사용하는 것도 괜찮아 보인다.generate
문은 컴파일 타임에 작동하여 하드웨어 인스턴스를 생성한다.
인스턴스를 생성한다 -> 이말은 되게 추상적으로 들리는데,
C언어 같은언어에서 쓰는 "함수"를 인스턴스 한다,,, 같은 느낌??으로 일단은 이해했다.
module top_module(
input [7:0] in,
output [7:0] out
);
generate;
genvar i;
for (i = 0; i < 8; i = i + 1) begin : gen_block
assign out[i] = in[7-i];
end
endgenerate
endmodule
뭐.. 상황마다 쓸일이 있다고 생각은 하는데 정확히 어떤 상황에 써야할진 아직 잘 모르겠다.
나중에 generate
와 always@(*)
의 차이를 자세히 적어보겠다.