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

 
 
> Сброс конечного автомата фронтом 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:40
Сообщение #2


Участник
*

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


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

Группа: Участник
Сообщений: 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
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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