Verilog 에서 포트로 넘길때 2차원 배열이 되지 않는다는 슬픈 진실이 있네 ㅜㅜ
일단 보통 합성할 때 합성툴에서 다 자동으로 해줄 듯 한데 이를 손으로 해야 한다니 일단 방법은 알아두자고
https://stackoverflow.com/questions/28623819/how-to-flatten-array-in-verilog
// 2차원 배열을 1차원 배열로
wire [32*32-1:0]One_D_array;
integer i;
for (i=0; i<32; i=i+1) assign One_D_array[32*i+31:32*i] = A[i];
// 역으로 변환해서 사용해라
wire [31:0]local_2D_array[0:31];
integer i;
for (i=0;i<32;i=i+1) assign local_2D_array[i] = input[32*i+31:32*i];
기본 골격은 위의 코드를 참고하면 된다.
실제 코드에 반영하려면
generate .. endgenerate 구문을 활용해야 한다.
//port 선언은 1차원 배열로 해둔다.
output wire [(5*8)-1:0] 1d_array,
// 모듈내에 구현 결과는
// 2차원 배열 선언
reg [7:0] 2d_array[4:0];
// assign 생성기
genvar i;
generate
for (i = 0; i < 5; i = i + 1) begin : flat_array
assign 1d_array[(i*8)+7:(i*8)] = 2d_array[i];
end
endgenerate
그냥 코드만 있어도 나중에 참고가 된다.
generate 구문 관련 글은 아래 링크를 참고하세요.
https://dreamsailor.tistory.com/25
지금까지 2차원 배열을 1차원 배열로 변환하는 Verilog 코드를 살펴봤다. 도움되겠쥬?
'IT > ASIC | FPGA' 카테고리의 다른 글
Verilog 기초 - case 문 (0) | 2024.02.15 |
---|---|
Xilinx Vivado - 다운로드 및 설치 (1) | 2024.02.13 |
Xilinx Vivado - FPGA 에 bit 생성해서 올리기 - 보드 테스트 (1) | 2024.02.02 |
Xilinx Vivado - 핀 할당 하기 Constraints 추가 (0) | 2024.02.02 |
Xilinx Vivado - FIFO Generator 로 사용자 FIFO 만들기 (0) | 2024.02.02 |