코드의 일부 구문을 수정할 수 있습니다. {} 연산자를 통해 신호 세트를 그룹화 할 수 있습니다.
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
프로세서에 대한 코드이며 플래그 (carry, overflow, zero 및 parity)를 추가하고 있으며 데이터 흐름 모델링을 사용해야합니다. 패리티 및 0이 (예를 들어) A 및 B 조작에 의해 영향을받는 동안 캐리 및 오버 플로우 플래그를 재설정하는 것이 그 의도입니다. – peregriuns19
간단한 데이터 흐름 모델링 예제를 사용하도록 코드가 업데이트되었습니다. –