Я написал поведенческую программу для множителя стенда (radix 2) с использованием концепции конечного автомата, я правильно получаю результаты во время моделирования программы с помощью modelsim, но когда i поместите его в fpga (спартанское 3), результаты не так ожидаются. Кто-то, пожалуйста, помогите мне с этим. Где я ошибся?Поведенческий код Verilog правильно моделируется, но не работает как ожидалось на FPGA
module booth_using_statemachine(Mul_A,Mul_B,Mul_Result,clk,reset);
input Mul_A,Mul_B,clk,reset;
output Mul_Result;
wire [7:0] Mul_A,Mul_B;
reg [7:0] Mul_Result;
reg [15:0] R_B;
reg [7:0] R_A;
reg prev;
reg [1:0] state;
reg [3:0] count;
parameter start=1 ,add=2 ,shift=3;
always @(state)
begin
case(state)
start:
begin
R_A <= Mul_A;
R_B <= {8'b00000000,Mul_B};
prev <= 1'b0;
count <= 3'b000;
Mul_Result <= R_B[7:0];
end
add:
begin
case({R_B[0],prev})
2'b00:
begin
prev <= 1'b0;
end
2'b01:
begin
R_B[15:8] <= R_B[15:8] + R_A;
prev <= 1'b0;
end
2'b10:
begin
R_B[15:8] <= R_B[15:8] - R_A;
prev <= 1'b1;
end
2'b11:
begin
prev <=1'b1;
end
endcase
end
shift:
begin
R_B <= {R_B[15],R_B[15:1]};
count <= count + 1;
end
endcase
end
always @(posedge clk or posedge reset)
begin
if(reset==1)
state <= start;
else
begin
case(state)
start:
state <= add;
add:
state <= shift;
shift:
begin
if(count>7)
state <= start;
else
state <=add;
end
endcase
end
end
endmodule
Я не получил ваш второй пункт. Не могли бы вы рассказать подробнее? –
Мое последнее редактирование объясняет это подробно? – Quonux
У меня есть следующая логика состояния (блок 2-го блока case, @ posedge clk), а логика вывода - блок первого блока. Этого достаточно? –