본문 바로가기
HW Design/HDLBits

[HDLBits 해설] Vector 2

by 한PU 2024. 1. 22.
728x90
반응형

문제 링크 : https://hdlbits.01xz.net/wiki/Vector2

 

문제

32-bit input과 output이 있다.

각 신호는 4-byte씩 끊어서 볼 수 있다. input의 byte 순서를 반대로 output 에 저장하라.

 

AaaaaaaaBbbbbbbbCcccccccDddddddd => DdddddddCcccccccBbbbbbbbAaaaaaaa

 

Module 선언

module top_module( 
    input [31:0] in,
    output [31:0] out );//

    // assign out[31:24] = ...;

endmodule
728x90

 

내 풀이

module top_module( 
    input [31:0] in,
    output [31:0] out );

    assign out [31:24] = in [7:0];
    assign out [23:16] = in [15:8];
    assign out [15:8] = in [23:16];
    assign out [7:0] = in [31:24];

endmodule

 

결과

나이스!

반응형

풀이

무식한 풀이로 짰다. 지금은 32bit / 4byte = 4줄이지만, 좀만 늘어나도 무식하게는 못 만들 것이다.

 

for문을 이용하여 코드를 reusable 하게 설계해보겠다.

module top_module( 
    input [31:0] in,
    output reg [31:0] out
);

genvar i;
generate
    for (i = 0; i < 4; i = i + 1) begin : byte_reverser
        always @(*) begin
            out[8*i +: 8] = in[8*(3-i) +: 8];
        end
    end
endgenerate

endmodule

 

for 문을 구조적으로 생성하기 위해 generate 구문을 이용하였다.

for문 옆에 : byte_reverser는 label 이다. 없으면 컴파일 오류 발생.

728x90
반응형

'HW Design > HDLBits' 카테고리의 다른 글

[HDLBits 해설] Vector 1  (0) 2024.01.22
[HDLBits 해설] Vector0  (0) 2024.01.18
[HDLBits 해설] 7458  (0) 2024.01.18