Эта машина конечного состояния должна выступать в качестве контроллера для 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
Спасибо за исправления! Тем не менее, все же получаются одинаковые коды ошибок. – Antoninus
Вы можете опубликовать свой измененный код здесь или на http://www.edaplayground.com/ – Ari
Я отредактировал свое оригинальное сообщение, чтобы отразить изменения, также debounce находится в отдельном модуле. – Antoninus