2015-02-07 2 views
0

나는 덧셈/뺄셈에 필요한 부호없는 8 비트 숫자가 거의 없다. 예 아래 :합계 결과의 너비를 정의하는 방법은 무엇입니까?

h_tmp <= signed(r4(calc_cnt - 2) + r4(calc_cnt - 1) + r4(calc_cnt) + 
             r4(calc_cnt + 1) + r4(calc_cnt + 2) - 
             r2(calc_cnt - 2) - r2(calc_cnt - 1) - r2(calc_cnt) - 
             r2(calc_cnt + 1) - r2(calc_cnt + 2)); 

나는 13 비트 폭 결과는 내가 가지고있는 번호를 확인 것을 알고, 그래서 내가 서명 (0 downto 12)와 같은 h_tmp를 정의했다. 이제, 합성 후 나는 다음과 같은 경고가

Width mismatch. <h_tmp> has a width of 13 bits but assigned expression is 8-bit wide. 

신디사이저 계산의 8 비트 전체의 결과를, 내가 잘못 무슨 짓을 추론 것으로 보인다 있나요? 가산/감산 (+/-)가 가정

답변

1

ieee.numeric_std 패키지 (또는 ieee.std_logic_arithieee.std_logic_unsigned), 가산 결과 길이에 기초한다/감산 최장의 인수이다.

그래서 추가/뺄셈 체인의 모든 인수는 13 비트 결과에 할당 심지어 을 통해 긴 가 다음 모든 추가 8 비트 추가/빼기로 만들어진 8 비트, 경우.

그래서 ieee.numeric_std 패키지에 대해 다음과 같이 에 결과의 길이를 첫 번째 인수의 크기 조정과 함께 추가/뺄셈 체인을 시작 : 패키지 conv_unsigned를 사용

h_tmp <= signed(resize(r4(calc_cnt - 2), h_tmp'length) + r4(calc_cnt - 1) ... 

ieee.std_logic_arith하십시오.

관련 문제