2016-07-12 3 views
0

3 비트 디지털 입력 핀 값에 따라 Verilog에서 매개 변수 값을 변경하고 싶습니다. 다음은 내 Verilog 코드 샘플입니다. 나는이 오류 얻을 컴파일하면Verilog에서 매개 변수 값 변경

paramter real C_IP=0; 

always @ (reg_DACIP) 
    begin 
    case (reg_DACIP) 
     3'b000 : C_IP = 0.8; 
     3'b001 : C_IP = 0.6; 
     3'b010 : C_IP = 0.4; 
     3'b011 : C_IP = 0.2; 
     3'b100 : C_IP = 0.0; 
     3'b101 : C_IP = -0.2; 
     3'b110 : C_IP = -0.4; 
     3'b111 : C_IP = -0.6; 
    endcase 
end 

는 :

ncvlog: *E,PANOTL: A parameter is not a legal lvalue [3.10(IEEE)]. 
     3'b001 : C_IP = 0.6; 

을 나는 Verilog를 매개 변수가 상수위한 이해, 따라서 시뮬레이션 동안 변경할 수 없습니다. 그러나이 문제에 대해 가장 좋은 해결 방법은 무엇입니까?

답변

3

매개 변수는 상수 여야하며 주변에는 경로가 없습니다. 매개 변수는 다른 매개 변수의 함수가 될 수 있습니다. 매개 변수는 모듈 인스턴스에서 #() 또는 defpram을 통해 컴파일/생성 시간에 다른 상수로 변경할 수 있습니다 (감가 상각을 위해 defpram이 계획 됨). 매개 변수는 파생 된 매개 변수가 컴파일/작성 중에 변경되면 새 값으로 업데이트됩니다. 다른 파라미터로부터 유도 된 파라미터의 예 : 레지스터이어야

// nested conditional statement 
parameter real C_I P = PARAM_DACIP==3'b000 ? 0.8 : 
         PARAM_DACIP==3'b001 ? 0.6 : 
         PARAM_DACIP==3'b010 ? 0.4 : 
         PARAM_DACIP==3'b011 ? 0.2 : 
         PARAM_DACIP==3'b100 ? 0.0 : 
         PARAM_DACIP==3'b101 ? -0.2 : 
         PARAM_DACIP==3'b110 ? -0.4 : -0.6; 

// simple expression 
parameter real C_IP = 0.2*(3'b100-PARAM_DACIP); 

// pure static function (i.e. output only determined from input) 
// Note: not all simulators/synthesizers support this 
function real calc_C_IP(input [2:0] DACIP); 
begin 
    case (DACIP) 
    3'b000 : calc_C_IP = 0.8; 
    3'b001 : calc_C_IP = 0.6; 
    3'b010 : calc_C_IP = 0.4; 
    3'b011 : calc_C_IP = 0.2; 
    3'b100 : calc_C_IP = 0.0; 
    3'b101 : calc_C_IP = -0.2; 
    3'b110 : calc_C_IP = -0.4; 
    3'b111 : calc_C_IP = -0.6; 
    endcase 
end 
endfunction 
parameter real C_IP = calc_C_IP(PARAM_DACIP); 

reg_DACIP 있다면, C_IP이 매개 할 수 없다. 당신은 그것을 만들 참고로 일반 real

수 있습니다 real는 합성

+0

감사 그렉 없습니다. 함수 예제에서 PARAM_DACIP이란 무엇입니까? DACIP는 내 코드에서 3 비트 논리 입력 핀입니다. calc_C_IP 함수에 어떻게 전달합니까? – sanforyou

+0

또한 첫 번째 중첩 된 조건문 솔루션에서 PARAM_DACIP은 무엇입니까? 어떻게 3 비트 DACIP 입력 핀과 관련시킬 수 있습니까? – sanforyou

+0

@Sandeep, 원래 코드에서'reg' 타입이라고 가정 한'reg_DACIP'을 사용했는데, 나의 예제에서'reg_'를'PARAM_'으로 변경하여 레지스터가 아니라 매개 변수로 사용했습니다. 당신은'PARAM_DACIP'가'parameter [2 : 0] PARAM_DACIP = 3'b100;'(또는 다른 값)으로 정의되었다고 가정합니다. – Greg

관련 문제