В приведенном ниже коде показан конечный автомат, в котором контроллер представляет собой отдельный модуль данных, чтобы найти GCD двух 4-разрядных чисел. В настоящее время я получаю следующие ошибки, и я не уверен, почему, может быть, из-за некоторого синтаксиса, о котором я сейчас знаю:Контроллер Verilog FSM и датапат
ОШИБКА: HDLCompiler: 806 - "D:/Xilinx Stuff/GCD123/Controller.v" Строка 48: Синтаксическая ошибка около ";". ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD123/Controller.v» Строка 59: Синтаксическая ошибка рядом с «;». ОШИБКА: HDLCompiler: 806 - «D:/Xilinx Stuff/GCD123/Controller.v» Линия 62: Синтаксическая ошибка около «;».
код, где erros встречаются ниже:
module Controller(start,reset,x_sel,y_sel,xlty,xgty,xequaly,clk);
input start,clk, reset, xlty, xgty,xequaly;
output x_sel,y_sel;
// Declare state register
reg [1:0]state;
// Declare states
parameter S0 = 0, S1 = 1, S2 = 2, S3 = 3, S4 = 4;
debounce startd(.clock(clk),.noisy(start),.clean(clean_start));
always @ (posedge clk or posedge reset) begin
if (reset)
state <= S0;
else
case (state)
S0:
if (clean_start)
state <= S1;
else
state <= S0;
S1:
x_sel <= 0;
y_sel <= 0;
state <= S2;
S2:
if (xlty)
state <= S3;
else if(xgty)
state <= S4;
else if(xequaly)
state <= S5;
S3:
y_sel <= 1;
state <= S2;
S4:
x_sel <= 1;
state <= S2;
S5:
state <= S0;
endcase
end
endmodule
линии, которые имеют ошибки являются y_sel <= 0;
в состоянии S1, state <= S2;
в состоянии S4 и state <= S2;
в состоянии S3.
В дополнение к 'начать/end' выходных портов' 'x_sel' и y_sel' должны быть объявлены как' reg' параметров. Также 'S5' должен находиться в списке' parameter'. – Amir
Спасибо, это решило мою проблему. @Amir x_sel и y_sel в основном служат в качестве выделенных строк для 2 отдельных мультиплексоров, которые реализованы в отдельном модуле datapath. Контроллер здесь просто устанавливает их как высокие, так и низкие, в зависимости от того, что он хочет делать. Объявляли бы их как параметры reg, чтобы они могли выполнять эту функцию? – Antoninus
Все параметры, которые назначены в блоке 'always', должны быть объявлены как параметр' reg'. Если он всегда чувствителен к 'clk', эти параметры синхронны с' clk'. Это означает, что линии выбора мультиплексоров синхронны с 'clk' и меняются на' clk', поднимающемся или падающем фронте. – Amir