작성
·
447
1
안녕하세요 맛비님. 질문 드릴것이 있습니다!
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 해보시면 됩니다.
(제공해드린 환경의 강력함? 을 느끼실 수 있을꺼에요)
bit extension (8b -> 9b) 을 통해서 overflow / underflow 이슈는 해결한 상태에서 Test
input vector 는
input_a : d'10
input_b : d'20
wire signed [8:0] result;
assign result = {1'b0,i_value_a} - {1'b0, i_value_b};
wire is_minus = (result < 0) ? 1 : 0;
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 환경)
즐공하세요 :)