Сумма: часть с конечным автоматом с именем «WaitS2» увеличивает значение «count» только один раз.
Я пытаюсь управлять ультразвуковыми датчиками HC-SR04 в systemverilog. Как я видел в таблице данных, этот датчик создает сигнал «триггер», который создает звук, и после генерации звукового датчика создает логическое «эхо», мне нужно подсчитать время, поэтому я создаю конечный автомат, который вы можете видеть в коде, но проблема в том, что count ++ не работает так хорошо, как ожидалось, он только увеличивает переменную count один раз, независимо от того, как долго длится эхо-сигнал
Я использовал другой модуль под названием 32-битный сумматор из интернета, который ничего не менял. Я изменил все операторы на неблокирующие операторы, это не сработало. Я даже пробовал поменять count++
на count = count + 1
не получилось
module sensorFSM(
input logic echo , clk ,reset,
output logic trig,
output logic[31:0] distance,
output logic[1:0] presentState
);
/*typedef enum logic[1:0] {BeginS , WaitS , ReturnS } states;
states presentState , nextState;
*/
logic[31:0] count , count1;
logic[1:0] BeginS , WaitS, WaitS2 , ReturnS , nextState;
assign BeginS = 2'b00;
assign WaitS = 2'b01;
assign WaitS2 = 2'b10;
assign ReturnS = 2'b11;
// clk and state change
always_ff @( posedge clk )
begin
if ( reset == 1'b1 )
presentState <= BeginS;
else
presentState <= nextState;
end
// real state changes
always_comb
begin
case(presentState)
BeginS:
begin
trig = 1'b1;
count = 32'b0;
nextState = WaitS;
end
WaitS:
begin
trig = 1'b0;
distance = 32'b0;
//#5000;
nextState = WaitS2;
end
WaitS2:
begin
if( echo == 1 )
begin
if ( count < 24'b101100111000000100100000 )
begin
// here is the problem count is only incrementing
//once
count++;
nextState = WaitS2;
end
else
begin
distance = count;
nextState = BeginS;
end
end
else // echo == 0
begin
nextState = ReturnS;
end
end
ReturnS:
begin
//count = count / 1470;
distance = count;
nextState = BeginS;
end
default:
nextState = BeginS;
endcase
end
endmodule
Я ожидаю, что симуляция будет насчитывать около 1 мили, но всегда выводит 1, но я вижу, что состояние с именем «WaitS2» присутствует в течение длительного времени, когда также активно эхо.