FPGA 연산 관련 질문
546
작성한 질문수 3
안녕하세요 맛비님. 질문 드릴것이 있습니다!
a-b <0과 같은 연산을 if문의 조건에 쓸 경우 FPGA에서는 어떻게 되는지 궁금합니다!
구체적으로는 예를 들어 4bit연산에서 a = 0011(3), b = 0101(5)인 경우 a - b = 1110(-2)로 연산 결과가 나올것이라고 생각이 됩니다. 그런데 -2는 설계자가 해석하는 것이고 FPGA위에서는 bit 그대로 1110이 나올 것인데 1110 < 0 이 성립이 되지 않을 것 같다?라는 궁금증이 생겼습니다.
(만약 1110그대로 해석하여 1110 < 0이 성립이 되지 않는다면 c = a - b으로 미리 assign을 해두고 c의 bit수를 5bit로 하여 msb가 변하는 조건으로 조건문을 완성시키면 되는 것일까요?)
답변 2
2
예를 들면 제가 제공해드린 환경을 사용하셔서 다음처럼 Test 해보시면 됩니다.
(제공해드린 환경의 강력함? 을 느끼실 수 있을꺼에요)
Test 환경
bit extension (8b -> 9b) 을 통해서 overflow / underflow 이슈는 해결한 상태에서 Test
input vector 는
input_a : d'10
input_b : d'20
Case 1. signed result
wire signed [8:0] result;
assign result = {1'b0,i_value_a} - {1'b0, i_value_b};
wire is_minus = (result < 0) ? 1 : 0;


Case 2. unsigned result
wire [8:0] result;
assign result = {1'b0,i_value_a} - {1'b0, i_value_b};
wire is_minus = (result < 0) ? 1 : 0;


결론
result 의 "minus 연산 결과값"은 signed / unsigned type 에 무관하게 동일함
result 의 type 에 따라서 is_minus 의 결과가 달라짐.
이는 비교기 (result < 0) 가 signed / unsigned type 에 영향이 있음을 알 수 있다.
0
안녕하세요 :)
해당 내용은 Verilog HDL 강의에서 이야기를 해서, 큰 맥락만 말씀드리면
Sigend / Unsigned
Overflow / Underflow
를 고려하시면 답이 되실 것 같습니다.
연산 결과는 직접 확인이 가능하실 것 같아요. (제공해드린 simulation 환경)
즐공하세요 :)
UART0, 1 중 선택
1
51
2
datamoverbram모듈질문
1
63
2
vitis 설치엣 alveo kria versal 등 옵션을 끄고 설치를 했습니다.
1
96
2
vitis 설치 관련 질문 있습니다!
1
84
2
FPGA 공식문서 읽는법
1
95
2
보드 추가의 클릭창이 없습니다.
1
70
2
Edit in IP Packager에서 코드 수정 후 IP 수정하면 simulation에서 수정된 코드로 작동이 안됩니다
1
81
2
BRAM의 Read / Write를 다 수행했는지 확인할 때 사용되는 num_cnt / i_num_cnt 관련 질문
1
106
1
Vitis 코드 작성
1
130
2
vivado 및 vitis 리눅스 환경 설치 관련 질문드립니다.
1
290
3
[9장 led 점등 시간 제어 불가]
1
81
2
Platform Invalid 오류
1
145
3
WSL 설치 관련 문의드립니다!!
1
96
2
Vivado 툴, 파일 질문드립니다!
1
150
2
9장 LED 점등 안됨
1
109
3
Edit in IP Packager 이후에
1
82
1
Fpga 로직
1
89
2
pmu-fw is not running
1
126
2
Create Project에 대해서 궁금해요
1
89
2
장치관리자 USB 포트
1
98
2
FPGA 7장 AXI_LITE I/F질문
1
89
1
bram mover에서 합성할때
1
77
2
타이밍 위반 질문
1
78
2
rvalid 초기화
1
66
2





