해결된 질문
23.03.28 19:28 작성
·
284
1
기초가 너무 부족한 학생입니다.
reg signed [15:0] data [0:31];
16bit 데이터를 32개의 어레이로 선언하는 방식이 이것이 맞는지 궁금합니다.
사실 RTL anlysis를 통해서 schematic이 제대로 생성되었는지 확인하였는데, 다음 synthesis 과정에서 constraint wizard로 적절히 파일을 생성해준 다음 synthesis를 진행하였습니다.
그런데 error와 warning은 없는데 schematic이나 utilization 정보를 보면 터무니 없는 정보들이 나옵니다.
혹시 어떤 부분을 확인하면 도움이 될까요? 저는 개인적으로 어레이 선언한 부분이 잘못된 것인가해서 앞서 질문을 드렸는데 synthesis에서 에러는 안뜨고 전혀 엉뚱한 결과를 내서 디버깅중입니다. ㅜㅜ
답변 1
0
2023. 03. 28. 20:56
안녕하세요.
verilog가 버전에 따라서 문법이 다른 부분이 있습니다. verilog도 상위 Language(C, C++, 등)에서 지원하는 부분들을 지원하기 위해서 계속해서 업데이트 되는 것 같습니다.
그러나 저의 생각은 어려운 문법을 사용하는 것을 지양하는 것이 좋다고 생각합니다.
verilog는 엄밀히 말을 하면, HW(회로)를 설계하는 것과 같습니다. 그렇기 때문에 상위 Language와 같이 고급 기술(?)을 구사하면 프로그래머의 의도와 다르게 동작하는 경우가 많을 수 있고 이로 인해 오류가 발생하면 디버깅이 무척 어렵습니다.
제가 지금까지 20년 정도 verilog 프로그램을 하면서 배열을 사용한 적은 한번 있었습니다.
Test Bench를 구성할 때, Image Data를 파일에서 읽어와야 하는데 그때 한번 사용한 것 같습니다.
Test Bench를 제외하고, 실제로 합성하고, Implementation까지 진행하는 경우에는 배열을 사용하지 않았습니다.
자료를 찾아보니 배열을 선언하는 부분은 맞는 것 같은데, signed 가 지원하는 지는 잘 모르겠습니다.
제가 아는 지식에서는 signed, unsigned 로 선언하는 것은 잘못된 것 같습니다. 이 부분은 확인해 보시길 바랍니다. 그리고 signed, unsigned 연산에 관한 것은 강의 "Verilog를 이용한 FPGA 활용 기초" 강의에 자세한 설명이 있으니 참조하시길 바랍니다.
reg signed [15:0] data [0:31];
이 부분은 아래와 같이 수정해서 사용하시는 것을 추천 드립니다.
reg [15:0] data0, data1, data2, data3, data4, data5, data6, data7, data8, data9,
data10, data11, data12, data13, data14, data15, data16, data17, data18, data19,
data20, data21, data22, data23, data24, data25, data26, data27, data28, data29,
data30, data31 ;
사람마다 다를 수 있지만, 저는 이렇게 사용하는 것을 추천합니다.
감사합니다~!!