답변:
특별히 우아하지는 않지만 다른 변수를 사용할 수 있습니다.
wire[31:0] y;
assign y = func(A) ^ func(B);
assign x = y[15:0];
더 나은 방법은 함수를 사용하는 것입니다.
function [15:0] trunc_32_to_16(input [31:0] val32);
trunc_32_to_16 = val32[15:0];
endfunction
assign x = trunc_32_to_16(func(A) ^ func(B));
귀하의 예에서, 당신은 암시 적으로 비트를 자르고 있습니다.
잘림을 명시 적으로 만들면 시뮬레이션 / 린트 / 합성에서 경고를 제거 할 수 있습니다.
이 인라인을 수행하는 한 가지 방법은 캐스트 연산자를 사용하는 것입니다. 예 :
typedef logic [15:0] HALF_WORD;
assign x = HALF_WORD'((func(A) ^ func(B));
이 접근 방식은 삭제되는 모든 비트가 0이라는 컨텍스트에서 명백한 경우 의미가 있습니다.
비트 중 일부가 0이 아닌 경우 이전 답변 에서 제안 된 @dwikle과 같은 중간 네트를 계속 사용하는 것이 좋습니다 . 비트를 실제로 버리는 것이 더 분명하기 때문입니다. 여기 다시 참조하십시오.
wire[31:0] y;
assign y = func(A) ^ func(B);
assign x = y[15:0];
이것이 줄 수를 줄이는 데 도움이 될 것이라고 생각합니다.
wire [15:0] not_used ;
assign {not_used, x} = (func(A) ^ func(B));
그래도 할당에 유효한지 확실하지 않습니다.