Verilog 에서 포트로 넘길때 2차원 배열이 되지 않는다는 슬픈 진실이 있네 ㅜㅜ
일단 보통 합성할 때 합성툴에서 다 자동으로 해줄 듯 한데 이를 손으로 해야 한다니 일단 방법은 알아두자고
https://stackoverflow.com/questions/28623819/how-to-flatten-array-in-verilog
How to flatten array in Verilog
As Verilog does not allow to pass the array as input to module, so how can we flatten any array in Verilog. Suppose I have this array: parameter [31:0] A [0:31]; wire [31:0] B I want to pass this...
stackoverflow.com
// 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
[Verilog 문법] Generate문을 통한 반복 작업 줄이기
엔지니어라면, 누구나 한 번쯤 해봤을 법한 생각이 있다. 입력 spec을 넣어주면 자동으로 H/W를 뱉어주는 마법 같은 시스템 상상 속에서만 존재하는 이야기라고 생각할지도 모르지만, 이를 위한
dreamsailor.tistory.com
지금까지 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 |