2016-06-30 1 views
1

모두.(Verilog) 변수를 인덱스로 사용하여 배열 요소에 어떻게 액세스합니까?

내가 인덱스로 입력을 사용하여 배열에서 요소에 액세스하려고 그리고 난이 오류가 계속 :

assign tagc[index] = tag; 

:

여기

cache.v:27: error: array 'tagc' index must be a constant in this context.

이야 어떻게 내가 할 노력하고있어 tagc는 1024 개의 regs의 배열입니다. index는 10 비트 입력입니다. 태그는 20 비트 입력입니다.

할 방법이 있습니까?

+1

우리는 어떤 상황과 어떤 당신이하려고하는 볼 필요가있다. 배열에서 동적으로 변하는 인덱스에 들어오는 신호를 할당하는 것은 전혀 유효하지 않은 것처럼 보입니다. – hexafraction

답변

1

두 가지 가능성 :

  1. 당신은 태그의 값을 반영하기 위해 tagc의 인덱스 위치를 지정하기 위해 노력하고, 당신이 인덱스를 필요로하는 경우는 상수 (파라미터, localparam, 또는`정의).

  2. tagc는 동적 변수 'index'에 의해 색인 된 위치에 태그 값을 저장하는 메모리로 사용됩니다. 이 경우 tagc의 업데이트를 트리거 할 이벤트를 결정한 후에 always 블록에서 할당을 수행해야합니다.

0

일반적으로 동적 색인을 사용하는 배열 할당은 시간이 지정된 절차 블록에서 수행됩니다.

always @(posedge clk) begin 
    tagc[index] <= tag; 
end 

래칭을 사용하여 수행 할 수도 있습니다. 사용 가능 신호를 사용하고 index이 사용 가능으로 변경되지 않았는지 확인하십시오.

always @* begin 
    if (enable) begin 
    tagc[index] <= tag; 
    end 
end 

또는 다른 래치 옵션 :

integer i; 
always @* begin 
    for(i=0; i<PARAM_SIZE_OF_TAG; i=i+1) 
    if (index==i) tagc[i] <= tag; 
    end 
end 

참고 : tagcreg로 정의해야합니다하지 않는 wire 유형

관련 문제