2016-08-18 2 views
-2
assign flag_temp[3:0] = ((op_dec == 5'b00000) ? flag_temp[3:0] : 
//ADD 
((op_dec == 5'b00001) ? flag_temp[3:0] :        
//SUB 
((op_dec == 5'b00010) ? flag_temp[1], flag_temp[3], flag_temp[0] = 1'b0, flag_temp[2] = 1'b0 : 
//MOV  
Status bits :- flag_ex[0] = carry; flag_ex[1] = zero; 
flag_ex[2] = overflow; flag_ex[3] = parity; 

캐리 및 오버플로 플래그를 재설정해야하지만 구문 및 치수 오류가 표시됩니다.Verilog 오류 : 별도의 벡터 인덱스 (차원 오류)에 대한 할당

답변

0

코드의 일부 구문을 수정할 수 있습니다. {} 연산자를 통해 신호 세트를 그룹화 할 수 있습니다.

wire [3:0] flag_temp; 
assign flag_temp [3:0] = (op_dec == 5'b00000) ? flag_temp[3:0] : 
       (op_dec == 5'b00001) ? flag_temp[3:0] : 
       (op_dec == 5'b00010) ? {flag_temp[1], flag_temp[3], flag_temp[0]} : {flag_temp[2]} ; 

비교할 수없는 중괄호가 있습니다. 두 개 (단 하나만 닫음) assign 문에 flag_temp [0] = 1'b0이라는 할당이 있습니다. 할당의 목적을 상회합니다. 또한 flag_temp가 할당되고 외부 값이 없습니다. . 할당이 남아있는 flag_temp 항상 "X"는 발생합니다

코드가 나에게 매우 명확하지 않습니다 의도를 그래서 더 의미있는 제안을 할 수 없습니다


업데이트 코드 -.. 을 다음은 일부 데이터 모델 기반 작업을 수행하는 샘플 코드입니다. 나머지 연산자는 유사한 행에 추가 할 수 있습니다.

특정 작업에 대해 변경되는 신호의 경우 값이 루프백되고 변경되는 작업의 경우 특정 플래그가 연결 "{}"연산자에 추가됩니다. last는 원래 값이 유지되는 기본값입니다.

reg [3:0] x ; 
reg [3:0] y; 
wire [3:0] sum; 
wire carry_i = 1 ; // driven to 1 for example 
wire zero ; 
assign {carr_o,sum} = x+y+carry_i ; 

assign flag_ex[3:0] = (op_dec == 5'b00000) ? { flag_ex[3],flag_ex[2],flag_ex[1],carr_o} : // ADD 
         (op_dec == 5'b00001) ? { flag_ex[3],flag_ex[2],flag_ex[1],carr_o}: // SUB 
         (op_dec == 5'b00010) ? { flag_ex[3],flag_ex[2],zero,flag_ex[0]}: // MOV 
         flag_ex[3:0]; //default 
+0

프로세서에 대한 코드이며 플래그 (carry, overflow, zero 및 parity)를 추가하고 있으며 데이터 흐름 모델링을 사용해야합니다. 패리티 및 0이 (예를 들어) A 및 B 조작에 의해 영향을받는 동안 캐리 및 오버 플로우 플래그를 재설정하는 것이 그 의도입니다. – peregriuns19

+0

간단한 데이터 흐름 모델링 예제를 사용하도록 코드가 업데이트되었습니다. –