реклама на сайте
подробности

 
 
> Сброс конечного автомата фронтом reset. [Решено за 30 мин.], Как сбросить именно фронтом ресета, а не лог.1 ресета?
flammmable
сообщение Jun 5 2018, 12:16
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848



Код
input clk;
input reset;
reg [2:0]state;

initial
begin
state <= 3;
end

always @(posedge clock or posedge reset) begin
if (reset) begin
  state <= 0;
end
else begin
  case (state)
   0:
    begin
     state <= 1;
    end
   1:
    begin
     state <= 2;
    end
   2:
    begin
     state <= 3;
    end
   3:
    begin
     //Остановиться
    end
end
end


Когда мы зажмем reset - конечный автомат переинициализируется (state сбросится в ноль по фронту reset-а). Но заработает автомат по первому фронту clk после того, как мы отпустим reset.
Подскажите пожалуйста, возможно ли сделать так, что бы автомат сбросился по фронту reset-а и заработал бы по следующему фронту clk?

Сообщение отредактировал flammmable - Jun 5 2018, 16:23
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
flammmable
сообщение Jun 5 2018, 12:32
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-06-18
Пользователь №: 104 848



Перефразирую.
Приведенный в первом посте код работает так:
1) нажимаем кнопку - автомат сбрасывается по фронту reset-а
2) держим кнопку - автомат сбрасывается по каждому фронту clk, т.к. условие if(reset) выполняется
3) отпускаем кнопку - ничего не происходит
4) следующий фронт clk запускает автомат т.к. работает условие по ветви else

Почему я его привел? Потому, что таков пример сброса конечного автомата в руководствах, до которых я пока дотянулся - таков.

Данный пример меня не устраивает.

Хотелось бы:
1) нажимаем кнопку - автомат сбрасывается по фронту reset-а
2) по следующему фронту clk автомат начинает работу

Но я пока не пойму как такое реализовать. И возможно ли.
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jun 5 2018, 12:38
Сообщение #3


В поисках себя...
****

Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(flammmable @ Jun 5 2018, 15:32) *
Перефразирую.
Приведенный в первом посте код работает так:
1) нажимаем кнопку - автомат сбрасывается по фронту reset-а
2) держим кнопку - автомат сбрасывается по каждому фронту clk, т.к. условие if(reset) выполняется
3) отпускаем кнопку - ничего не происходит
4) следующий фронт clk запускает автомат т.к. работает условие по ветви else

Почему я его привел? Потому, что таков пример сброса конечного автомата в руководствах, до которых я пока дотянулся - таков.

Данный пример меня не устраивает.

Хотелось бы:
1) нажимаем кнопку - автомат сбрасывается по фронту reset-а
2) по следующему фронту clk автомат начинает работу

Но я пока не пойму как такое реализовать. И возможно ли.

Тогда, как было сказано, выше - на частоте clk детектируете необходимый фронт схемой, называемой детектор фронта (первая ссылка в гугле по запросу "детектор фронта FPGA"), и по этому событию синхронно сбрасываете автомат. Но перед этим необходимо поставить андидребезг на кнопку, ведь сброс то с кнопки подается.
P.S. А какими руководствами Вы пользуетесь ? Просто любопытно.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 05:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01399 секунд с 7
ELECTRONIX ©2004-2016