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

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


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 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
Flip-fl0p
сообщение Jun 5 2018, 12:22
Сообщение #2


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

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



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

Так Вы сами себе противоречите.
Т.е мы сбрасываем автомат по фронту, и начинаем работать когда кнопка отпущена. А зачем тогда фронт ?
Go to the top of the page
 
+Quote Post
novikovfb
сообщение Jun 5 2018, 12:28
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 490
Регистрация: 29-09-11
Пользователь №: 67 450



Может, лучше сделать определение фронта reset по фронтам clk и при получении фронта (был 0 стало 1) сбрасывать автомат и признак наличия фронта?
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jun 5 2018, 12:32
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 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
Сообщение #5


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

Группа: Свой
Сообщений: 657
Регистрация: 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
iosifk
сообщение Jun 5 2018, 12:39
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 3 923
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(flammmable @ Jun 5 2018, 15:32) *
Но я пока не пойму как такое реализовать. И возможно ли.

До сих пор Вы говорили об Асинхронном Сбросе, а Вам нужен Синхронный Сброс.



--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jun 5 2018, 12:40
Сообщение #7


Участник
*

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



Цитата(novikovfb @ Jun 5 2018, 15:28) *
Может, лучше сделать определение фронта reset по фронтам clk и при получении фронта (был 0 стало 1) сбрасывать автомат и признак наличия фронта?

О, спасибо! Хорошая идея.

Я, правда, надеялся, что есть способ элегантнее.
В смысле, я надеялся что будет различие между кодом
Код
always @(posedge clock or posedge reset) begin
if (reset) begin
  state <= 0;
и кодом
Код
always @(posedge clock or reset) begin
if (reset) begin
  state <= 0;
а так же кодом
Код
always @(posedge clock) begin
if (reset) begin
  state <= 0;
Но видимо они все сработают одинаково.
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Jun 5 2018, 12:42
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



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


В приведенном вами коде описан асинхронный сброс, он работает не по фронту, а по уровню. Posedge в описании используется для корректной симуляции.

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

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


Выделите фронт reset'а и подайте в качестве сброса на автомат выход этого детектора.

Сообщение отредактировал Tausinov - Jun 5 2018, 12:44
Go to the top of the page
 
+Quote Post
flammmable
сообщение Jun 5 2018, 12:48
Сообщение #9


Участник
*

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



Всем огромное спасибо! Интересно, как здесь поддерживается такой порядок, что участники обращаются на "Вы" и столь стремительно спешат на помощь по не слишком серьезному поводу?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jun 5 2018, 12:48
Сообщение #10


Гуру
******

Группа: Модераторы
Сообщений: 3 923
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(flammmable @ Jun 5 2018, 15:40) *
Но видимо они все сработают одинаково.

Конечно нет...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Tausinov
сообщение Jun 5 2018, 12:49
Сообщение #11


Частый гость
**

Группа: Участник
Сообщений: 135
Регистрация: 19-10-13
Пользователь №: 78 795



Цитата(flammmable @ Jun 5 2018, 15:40) *
В смысле, я надеялся что будет различие между кодом
Код
always @(posedge clock or posedge reset) begin
if (reset) begin
  state <= 0;
и кодом
Код
always @(posedge clock or reset) begin
if (reset) begin
  state <= 0;
а так же кодом
Код
always @(posedge clock) begin
if (reset) begin
  state <= 0;
Но видимо они все сработают одинаково.


Первый вариант - асинхронный сброс, не требует наличия клока, но может привести к неприятным последствиям, если неправильно с ним обращаться.
Второй вариант выдаст ошибку при синтезе, т.к. такое описание не является корректным с точки зрения используемых примитивов, а в симуляции приведет
к лишнему срабатыванию ветки else при заднем фронте сброса.
Третий вариант - синхронный сброс, без присутствия клока он работать не будет вообще.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd June 2018 - 23:54
Рейтинг@Mail.ru


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