2013-08-17 11 views
0

Verilog HDL에서 32 비트 Parallel in-Parallel 출력을 구현하려고합니다.Verilog에서 PIPO 구현

pipo.v:10: error: answer['sd31:'sd0] is not a valid l-value in pipo. 
pipo.v:4:  : answer['sd31:'sd0] is declared here as wire. 
pipo.v:16: error: answer['sd31:'sd1] is not a valid l-value in pipo. 
pipo.v:4:  : answer['sd31:'sd1] is declared here as wire. 
Elaboration failed 

문제가 무엇입니까 : 여기

module pipo(input_seq, answer,reset, clock); 
    input [31:0] input_seq; 
    input  reset,clock; 
    output [31:0] answer; 

    always @ (reset) 
    begin 
     if(!reset) 
      begin 
      answer[31:0]<=1'b0; 
      end 
    end 

    always @ (posedge clock) 
    begin 
     answer[31:1]<=input_seq[30:0]; 
    end 

endmodule 

그러나이 (iverilog를 사용하여) 다음과 같은 오류 로그에 이르게 ... 내가 작성한 코드입니다?

+2

레지스터의 리셋 로직과 레지스터의 클록 킹 로직을 별도의 블록으로 분할해서는 안됩니다. 하나의 블록'always @ (posedge clock 또는 negedge reset)'이 있어야합니다. 디자인에서 플립 플롭을 모델링하는 올바른 방법이 아닌 리셋이 어서 트되는 동안 클록 토글이 발생하면 클로킹 블럭이 계속 실행됩니다. – Tim

답변

5

answer을 (를) 레지스터로 사용하고 있지만 와이어로 선언되었습니다. Wire은 두 점을 연결하는 요소이므로 운전 강도가 없습니다. 반면에 reg은 가치와 운전 강도를 저장할 수 있습니다.

answerreg으로 변경하면 도움이됩니다.

+1

[EDA 놀이터] (http://www.edaplayground.com/s/4/82)에서 테스트 벤치가있는 작업 코드는 다음과 같습니다. –

-1

콤보 논리를 설명 할 때 차단 할당을 사용하는 것이 좋습니다.

always @ (reset) 
    begin 
    if(!reset) 
     begin 
     answer[31:0]=1'b0; //blocking assignment 
     end 
    end 

About this block: 

always @ (posedge clock) 
    begin 
    answer[31:1]<=input_seq[30:0]; 
    end 

당신은 출력 output reg [31:0] answer함으로써 오류를 수정 할 수 있으며 이것은 당신이 항상 차단에 출력을 할당 할 수 있습니다.