2015-02-18 3 views
0

Эта машина конечного состояния должна выступать в качестве контроллера для datapath, который содержит операторы, необходимые для вычисления GCD двух 4-битных чисел. Я довольно новичок в этом языке, и я знаю, что проблема - это, вероятно, отсутствующая полуплотность или, может быть, что-то с моими объявлениями, но я не могу понять, в чем проблема. Я продолжаю получать ошибки:Verilog FSM и экземпляр модуля

ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD/GCD FSM.v» Строка 44: Синтаксическая ошибка рядом с «если». ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD/GCD FSM.v» Строка 60: Ошибка синтаксиса около «=». ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD/GCD FSM.v» Строка 64: Синтаксическая ошибка около «=». ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD/GCD FSM.v» Строка 68: Синтаксическая ошибка около «;».

Я также открыт для любых советов относительно логики в целом, код FSM показан ниже:

module GCD_FSM(clk,data_in,reset,data_out,x_in,y_in,gcd_out,xgty,xlty,xequaly,go_in,xnew,ynew); 

    input clk, data_in, reset,go_in; 
    input reg[3:0] x_in,y_in,gcd_out; 
    output reg [1:0] data_out; 
    reg [3:0] x,y; 
    output reg[3:0] xnew,ynew; 
    output reg xgty,xlty,xequaly,cleango; 

    // Declare state register 
    reg [1:0]state; 

    // Declare states 
    parameter S0 = 0, S1 = 1, S2 = 2, S3 = 3, S4 =4; 

    /* Output depends only on the state 
    always @ (state) begin 
     case (state) 
      S0: 
       data_out = 2'b01; 
      S1: 
       data_out = 2'b10; 
      S2: 
       data_out = 2'b11; 
      S3: 
       data_out = 2'b00; 
      default: 
       data_out = 2'b00; 
     endcase 
    end 
    */ 


    // Determine the next state 
    always @ (posedge clk or posedge reset) begin 
     if (reset) 
      state <= S0; 
     else 
      case (state) 
       S0: 
        debounce start(.clock(clk),.noisy(go_in),.clean(cleango)); 
        if (cleango) 
         state <= S1; 
        else 
         state <= S0; 
       S1: 
        state <= S2; 
       S2: 

        if (xlty) 
         state <= S3; 
        else if(xgty) 
         state <= S4; 
        else if(xequaly) 
         state <= S5; 
       S3: 
        ripple_carry_adder_subtractor ysubx(.S(ynew),.C(carry),.V(overflow),.A(y),.B(x),.Op(1)); 
        y = ynew; 
        state <= S2; 
       S4: 
        ripple_carry_adder_subtractor xsuby(.S(xnew),.C(carry),.V(overflow),.A(x),.B(y),.Op(1)); 
        x = xnew; 
        state <= S2; 
       S5: 
        gcd_out = x; 
        state <= S0; 

      endcase 
    end 

endmodule 

ответ

1

несколько ошибок, которые я заметил:

  • линия 3, вам не хватает ; в конце: output reg[3:0] gcd_out
  • Переменные go_in и cleango не определены.
  • Модуль debounce не определен
+0

Спасибо за исправления! Тем не менее, все же получаются одинаковые коды ошибок. – Antoninus

+0

Вы можете опубликовать свой измененный код здесь или на http://www.edaplayground.com/ – Ari

+0

Я отредактировал свое оригинальное сообщение, чтобы отразить изменения, также debounce находится в отдельном модуле. – Antoninus

Смежные вопросы