2014-04-23 1 views
-3

나는 20 시간 단위의 지연이있는 녹색, 노란색, 빨간색 신호등 FSM 코드를 작성하려고합니다. 그것은 녹색 - 노랑 - 빨강 - 노랑 - 녹색에서갑니다. 이것은 내 코드이며 지연에 '반복'을 사용하는 동안 오류가 발생합니다.Verilog 컴파일러 오류 : 근처 ";": 구문 오류, 예기치 않은 ';'

오류 :

Error: C:/Users/Desktop/Design/tlights.v(33): near ";": syntax error, unexpected ';'
Error: C:/Users/Desktop/Design/tlights.v(37): near ";": syntax error, unexpected ';'
Error: C:/Users/Desktop/Design/tlights.v(44): near ";": syntax error, unexpected ';'

`define delay 20; 
module tlights(clk, rst, y); 

input clk, rst; 
output [1:0]y; 
reg [1:0]y; 
reg [1:0] cs,ns; 
integer p; 

parameter red = 2'd2; 
parameter orange = 2'd1; 
parameter green = 2'd0; 

parameter s0 = 2'd0; 
parameter s1 = 2'd1; 
parameter s2 = 2'd2; 


[email protected](posedge clk or negedge rst) 
begin 
if(!rst) 
begin 
    cs<=s0; 
end 
else 
    cs<=ns; 
end 

[email protected](cs) 
begin 
case(cs) 
     s0: begin 
      repeat (`delay) @(posedge clk); // <-- Error here 
       ns=s1; 
      end 
     s1: begin 
      repeat (`delay) @(posedge clk); // <-- Error here 
      if (p==0) 
        ns =s2; 
       else 
       ns=s0; 
      end 
     s2: begin 
       repeat (`delay) @(posedge clk); // <-- Error here 
       ns<=s1; 
       end 
     default: ns<=s0; 
     endcase 
    end 

    [email protected] (cs) 
    begin 
    case(cs) 
     s0:begin 
      y<=2'b00; 
      p<=0; 
     end 
     s1:y<=2'b01; 
     s2:begin 
     y<=2'b10; 
     p<=1; 
     end   
    endcase 
end 
endmodule 
+0

가까운 투표 수를 검토하는 사람들에게. 버그는 "간단한 인쇄"이며, 정의에 따라 본질적으로 디버깅하기가 어렵습니다. 컴파일러는 매크로가 사용되는 라인의 오류만을 명시하고 매크로 자체의 오류에 대해서는 적중을 거의주지 않습니다. 중복 된 질문이없는 한이 질문을 열어 두는 것이 좋습니다. – Greg

답변

1

문제는 `define 문이다. `define은 C/C++에서 #define과 유사합니다. 명령문은 리터럴 대체를 수행하며 종료자는 세미콜론이 아니라 줄의 끝입니다. repeat (`delay)repeat (20;)을 의미합니다. ;을 제거하면 시뮬레이션됩니다.

수정이 있더라도 합성되지 않습니다. combingational 논리에서는 차단 문 (@, #wait)을 사용할 수 없습니다. 합성이 가능하려면 카운터에 플립 플롭을 추가해야합니다. 당신의 다음 상태와 다음 카운터 조합 논리는 다음과 같이 보일 것이다 :

always @* begin 
    // default value 
    ns = cs; 
    next_counter = counter + 1; 
    // update value 
    case(cs) 
    s0: begin 
     if (counter >= `delay) begin 
     ns = s1; 
     next_counter = 0; 
     end 
    end 
    /* ... */ 
    endcase 
end 

는 또한, 할당 기억

은 ( <=) 비 차단 퍼. 결합 논리 할당을위한 블로킹 ( =).

+0

세미콜론없이 시도했습니다. 그것은 작동하지 않았다. 같은 오류가 발생합니다. – user3563040

+0

*** @ 그렉 ***, : 세미 콜론으로도 컴파일 할 수 있었고, ___'delay 20___를 변경하면 제공 할 수있었습니다. ___ 매개 변수 지연 = 20___. 따라서 오류가 세미콜론과 관련이 있는지 확실하지 않습니다. – user3563040

+0

http://www.edaplayground.com/x/Nr, 내가 한 모든 것은 세미콜론을 주석 처리 한 것입니다. '매개 변수'는 더 낫다, 정의하는 것은 적어도 어수선하게해야하는 세계적인 공간이다. – Greg

관련 문제