2014-12-17 2 views
0

하나의 입력과 하나의 출력을 가지고 있습니다. 입력이 100 틱 (100 사이클)이면 출력을 1로 설정하려고합니다.Verilog : 신호가 100 tick 동안 활성화되어 있는지 확인하십시오.

module check_100(
    input wire clock, 
    input wire reset, 
    input wire in_a, 
    output reg out_a); 

reg[10:0] counter; 

always @(posedge clock) begin 
    counter <= counter + 1; 
    if(in_a && (counter == 100)) begin 
     out_a <= 1; 
    end 
end 

그러나 제대로 작동하지 않는 것 같습니다. 신호가 100 틱/사이클인지 여부를 확인하는 좋은 방법입니까?

감사합니다. :)

+0

왜 카운터가 11 비트입니까? 당신은 단지 100으로 계산하기 위해 7 비트가 필요합니다. – toolic

답변

0

한 가지 방법은 count == 100 일 때 연속 할당을 사용하여 출력을 설정하는 것입니다. 입력이 낮아지면 카운터가 재설정됩니다. 조회수 100에 도달하면 카운트 값을 유지하십시오.

module check_100(
    input wire clock, 
    input wire reset, 
    input wire in_a, 
    output wire out_a 
); 

reg [10:0] counter; 

assign out_a = counter == 100; 

always @(posedge clock) begin 
    if (reset) begin 
     counter <= 0; 
    end else if (!in_a) begin 
     counter <= 0; 
    end else if (counter < 100) begin 
     counter <= counter + 1; 
    end 
end 

endmodule 
+0

불행히도, 나는 out_a에 counter> = 100을 할당 할 수 없습니다. 자일링스가 오류를 발생시킵니다. – xEscape

+0

@xEscape 어떤 오류가 발생합니까? 또한 'out_a'를 높이 유지하려는 경우 카운터가 어설 션된 경우 카운터를 중지해야합니다. 그렇지 않으면 카운터가 오버플로 될 때 카운터가 어설 션됩니다. 'else if (! out_a) begin counter <= 카운터 + 1; 종료 ' – Unn

+0

오류 : 처리 중 check_100.vCont_12_0 치명적인 오류 : ISim :이 응용 프로그램은 복구 할 수없는 예외적 인 조건을 발견했습니다. 줄 12는 할당 줄입니다. – xEscape