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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Написание state machine, verilog, state machine, verilog
Evgeny72
сообщение Dec 1 2017, 07:35
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



Доброго всем дня!
Подскажите пожалуйста по state machine. Есть машина состояний:
Код
reg [1:0] out;
reg [1:0] state;

// Declare states
parameter
        S0 = 0,    
        S1 = 1,
        S2 = 2;

// Output depends only on the state
always @ (state)
begin
case (state)
    S0:
        out = 2'b01;
    S1:
        out = 2'b10;
    S2:
        out = 2'b11;
        
    default:
        out = 2'b00;
endcase
end

// Determine the next state
always @ (posedge CLK)
begin
if (RESET)
    state <= S0;
else
case (state)
    S0:
            state <= S1;
    S1:
            state <= S3;
    S3:
            state <= S3;
endcase
end


Как правильно написать на verilog, если мне необходимо чтобы состояние S0 сменилось на S1 через 20 периодов тактовой частоты? Насколько мне известно, описывается счетчик и 21 значение счетчика "приравнивается" (не совсем корректное слово) к состоянию S1. Как правильно это написать?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Dec 1 2017, 07:45
Сообщение #2


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

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



Я давно задавал такой-же вопрос:
https://electronix.ru/forum/index.php?showt...0167&st=165 (сообщение 168)
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Dec 1 2017, 08:16
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 870
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Если у вас при нахождении в состоянии S0 ничего, требующего управления от FSM не происходит, то не смешивайте количество тактов и FSM. Просто подавайте на FSM сигнал, по которому будет переход в нужное вам состояние (в примере ниже s0_to_s1):
Код
always @ (posedge CLK) begin
  if (RESET)
    state <= S0;
  else
    state <= nextstate;
end

always @* begin
  nextstate = state; // loopback
  case(state)
    S0 : begin
      if (s0_to_s1)
        nextstate = S1;
    end
    .....
  endcase
end


А счётчик тактов делайте отдельно. Один из вариантов уже предложил Flip-fl0p: сигнал выхода FSM в S0 предзагружает и запускает счётчик, который после каждый такт декрементируется. Когда счётчик досчитывает до нуля, формируется сигнал s0_to_s1 (ну его лучше осмысленно назвать, согласно функции, которую он в дизайне выполняет)

Сообщение отредактировал one_eight_seven - Dec 1 2017, 08:18
Go to the top of the page
 
+Quote Post
Mad_max
сообщение Dec 1 2017, 08:17
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 23-12-06
Из: Зеленоград
Пользователь №: 23 811



В гугле пишем

Clifford Cummings FSM

и читаем все паперы этого уважаемого мужчины.
Go to the top of the page
 
+Quote Post
one_eight_seven
сообщение Dec 1 2017, 08:28
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 870
Регистрация: 3-10-08
Из: Москва
Пользователь №: 40 664



Цитата(Mad_max @ Dec 1 2017, 11:17) *
В гугле пишем

Clifford Cummings FSM

и читаем все паперы этого уважаемого мужчины.

Полностью согласен насчёт трудов Клиффа Каммингза, однако стоит понимать, что у него написано как кодить FSM, чтобы не было проблем при синтезе, чтобы не было расхождений между симуляций и синтезом, чтобы не было глитчей на выходе, какие автоматы работают быстрее, какие медленнее. То есть, как правильно сделать FSM, когда уже знаешь, что ты хочешь от FSM. На вопрос: "А когда нужен FSM и как его разрабатывать?", - там ответа нет.

Но, как и Mad_max, призываю эти документы изучить, и кодить машины так, как там советуют, ибо это хрестоматийно, канонично, и сразу понятно всем, кто этим занимается.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Dec 1 2017, 08:48
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 920
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Чувак любит двухпроцессное описание КА и не любит однопроцессное. Это его право, разумеется. Но это не значит, что это абсолютная истина.
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Dec 1 2017, 08:55
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Mad_max @ Dec 1 2017, 12:17) *
В гугле пишем

Clifford Cummings FSM

и читаем все паперы этого уважаемого мужчины.


есть у меня сей труд. Прочитаю ещё раз. Код машины был выдернут из примеров Quartus и быстренько изменен только для того, чтобы задать вопрос.

Цитата(Flip-fl0p @ Dec 1 2017, 11:45) *
Я давно задавал такой-же вопрос:
https://electronix.ru/forum/index.php?showt...0167&st=165 (сообщение 168)


там пример описан на VHDL, я с ним не дружу. Спасибо, попытаюсь разобраться.

написал следующим образом:
Код
//Counter
reg[X:0] counter;
always @(posedge CLK)
begin
    if (RESET)
        counter <= 0;
        else
            counter <= counter + 1'b1;
end

...

S0:
            begin
                if ((counter[X:0] == значение счетчика))
                    state <= S1;
                else
                    state <= S0;
            end


в симуляторе работает.

Сообщение отредактировал Evgeny72 - Dec 1 2017, 11:37
Go to the top of the page
 
+Quote Post
g700
сообщение Dec 1 2017, 12:52
Сообщение #8





Группа: Участник
Сообщений: 14
Регистрация: 22-06-17
Из: Санкт-Петербург
Пользователь №: 97 789



Посмотрите здесь в главе 8.
http://read.pudn.com/downloads166/sourceco...d%20Edition.pdf
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Jan 11 2018, 06:22
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



прилагаю файл state machine от компании Altera. В файле top описан счетчик (здесь его описание не привожу) и соединения его со state machine. В файле ссылка на видео с которого была списана машина состояний. Сделал подобным образом, все работает. Может кому пригодится в следующий раз.
Прикрепленные файлы
Прикрепленный файл  state_machine.v ( 2.68 килобайт ) Кол-во скачиваний: 23
 
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 11 2018, 06:44
Сообщение #10


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

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



Я бы названия состояниям автомата дал более осмысленные. Это сегодня Вы помните. А что будет через пару месяцев ?
Ну и разделил логику переключения автомата и логику формирования выходных состояний в разные блоки. Так нагляднее код, хоть и больше. Но это не обязательно.
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Jan 11 2018, 06:56
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Flip-fl0p @ Jan 11 2018, 09:44) *
Я бы названия состояниям автомата дал более осмысленные. Это сегодня Вы помните. А что будет через пару месяцев ?
Ну и разделил логику переключения автомата и логику формирования выходных состояний в разные блоки. Так нагляднее код, хоть и больше. Но это не обязательно.

У себя в проекте я все описал, в файле приведено лишь то, что на видео от Альтеры. rolleyes.gif
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 11 2018, 07:07
Сообщение #12


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

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



Цитата(Evgeny72 @ Jan 11 2018, 09:56) *
У себя в проекте я все описал, в файле приведено лишь то, что на видео от Альтеры. rolleyes.gif

Так у альтеры все шаблоны легко найти в Quartus. Edit -> Insert template->...
Там много чего интересного есть rolleyes.gif
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Jan 11 2018, 07:17
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Flip-fl0p @ Jan 11 2018, 10:07) *
Так у альтеры все шаблоны легко найти в Quartus. Edit -> Insert template->...
Там много чего интересного есть rolleyes.gif

да, есть template. Этого там нет. В файле есть ответ на мой же вопрос и ради чего была создана тема: ...если мне необходимо чтобы состояние S0 сменилось на S1 через 20 периодов тактовой частоты?

Сообщение отредактировал Evgeny72 - Jan 11 2018, 07:30
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Jan 11 2018, 07:23
Сообщение #14


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

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



Цитата(Evgeny72 @ Jan 11 2018, 10:17) *
да, есть template. Этого там нет.

Там тоже самое, но другими словами (стилем) описано....

Сообщение отредактировал Flip-fl0p - Jan 11 2018, 07:24
Go to the top of the page
 
+Quote Post
Evgeny72
сообщение Jan 11 2018, 07:32
Сообщение #15


Участник
*

Группа: Участник
Сообщений: 64
Регистрация: 4-01-14
Пользователь №: 79 899



Цитата(Flip-fl0p @ Jan 11 2018, 10:23) *
Там тоже самое, но другими словами (стилем) описано....


Ткните носом в template с учетом выше сказанного - если мне необходимо чтобы состояние S0 сменилось на S1 через 20 периодов тактовой частоты? А вообще - в спам "уходим".

Сообщение отредактировал Evgeny72 - Jan 11 2018, 07:32
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th June 2018 - 04:36
Рейтинг@Mail.ru


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