2016-06-06 3 views
-2

함수는 다음과 같습니다. h posedge가 오면 count clk를 ​​시작하고 105로 카운트하면 r을 0으로 설정하고 517로 카운트하면 r을 1로 설정합니다. 600 이상이면 아무 것도하지 말라. h는주기적인 singal입니다.구문 오류를 피하기 위해 Verilog 코드를 수정하는 방법은 무엇입니까?

module make_counter(h, clk, P); 
     input wire h; 
     input wire clk; 
     output wire P; 
     reg r=1'b1; 
     reg[9:0] n=0; 

     always @(negedge clk) 
       always @(posedge h) 
       begin 
        n=0; 
       end 

       begin 
       if(n<600) 
        n=n+1'b1; 

       if(n==106) 
        r<=1'b0; 
       else if(n==517) 
        r<=1'b1; 
       else 
        ; 
       end 
     assign P=r; 
    endmodule 

오류 (10170) : Verilog HDL 구문 오류가 main.v (115) 근처에 "always"텍스트가 있습니다. 기대하는 ";"

오류 (10170) : "begin"텍스트 근처에 main.v (119)에 Verilog HDL 구문 오류가 있습니다. 기대 "endmodule"



ZHE 이미지는 내가 원하는 것입니다. flag1 시작 세트 n = 0, 그리고 카운트 clk; 플래그 2로 카운트하는 경우 P = 0으로 설정합니다. 빨간색 화살표에 셀 수를 설정하면 P = 1로 설정됩니다. 당신은 나쁜 코드의 일종이

답변

0

친구,

  • 대신 n
  • 사용 리셋의 전체 즉 cnt를 의미하는 변수 이름을 확인하고 않도록 항상 사용 항상 블록 내부에 차단하지 마십시오 선언

    module make_counter(h, clk, P); 
    input wire h; 
    input wire clk; 
    output wire P; 
    wire r; 
    reg[9:0] n=0; 
    
    
    always @ (posedge clk or posedge h) 
    begin 
        if(h & (n < 10'd600)) begin 
        n <= n + 1'd1; 
        end else begin 
        n <= n; 
        end 
    end 
    
    assign r = (n == 10'd105) ? 1'b0 : ((n == 10'd517) ? 1'b1 : 1'bx); 
    assign P = r; 
    
    endmodule 
    
에서 값 할당

당신이 언급하지 않았다면 n이 0에서 104와 106에서 516 사이이고> 517 인 경우 r의 값이어야합니까?

나는 무엇이든 될 것이라고 생각했습니다.

주목하고

+0

난 내 생각을 보여주기 위해 이미지를 추가하기위한 작동 말한다 ZHE 코드 내 생각 – hiwangliu

+0

ZHE 사례를 반영하지 않습니다 : N 516> 517 0 104과 106 사이이며, 주의 할 필요가 없다. – hiwangliu

+0

나는 혼란 스럽다. 당신의 생각은 분명하지 않습니다. 다이어그램을 그리고 –

관련 문제