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

 
 
> Асинхронка в verilog
Lutovid
сообщение Jul 2 2017, 16:43
Сообщение #1


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

Группа: Свой
Сообщений: 101
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Всем привет!
Написал FSM разделив синхронку и асинхронку; то есть в одном always блоке синхронный процесс, во втором в списке чувствительности занесены все входные сигналы; Vivado 16.3 и 17.1 развели написанное мной ядро так, что сигналы из списка чувствительности воспринимаются как не законстрэйнченые клоки... Вопрос - это нормално и можно на это забить? Или где-то в коде косяк и такого не должно быть?
Что бы было понятнее про что я - я прикрепляю фотку (принсткрин сделать не могу сейчас, прошу прощения за качество)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
one_eight_seven
сообщение Jul 3 2017, 13:08
Сообщение #2


Знающий
****

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



Зачем вы мучаетесь сами и мучаете других подобным стилем кодирования?
Разве не проще что-то вроде:
Код
always @(posedge clk or negedge async_rst_n) begin : sequential_code
  if (!async_rst_n)
    state <= { WIDTH {1'b0}};
  else
    state <=  nextstate;
end

always @* begin : comb_block
  nextstate = state;  // store current state for loopbacks
  case (state)
      STATE0 : begin
         if      (go_state_1) nextstate = STATE1;
         else if (go_state_2) nextstate = STATE2;
         ...
      end
    ...
  endcase
end


Сообщение отредактировал one_eight_seven - Jul 3 2017, 13:13
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jul 3 2017, 13:41
Сообщение #3


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

Группа: Свой
Сообщений: 101
Регистрация: 24-02-14
Из: Москва
Пользователь №: 80 661



Цитата(one_eight_seven @ Jul 3 2017, 16:08) *
Зачем вы мучаетесь сами и мучаете других подобным стилем кодирования?
Разве не проще что-то вроде:
Код
always @(posedge clk or negedge async_rst_n) begin : sequential_code
  if (!async_rst_n)
    state <= { WIDTH {1'b0}};
  else
    state <=  nextstate;
end

always @* begin : comb_block
  nextstate = state;  // store current state for loopbacks
  case (state)
      STATE0 : begin
         if      (go_state_1) nextstate = STATE1;
         else if (go_state_2) nextstate = STATE2;
         ...
      end
    ...
  endcase
end

Вы про какой стиль? Вы привели пример описания конечного автомата, а я - описания асинхронного латча. Проблемы с сигналами fsm возникли из-за того, что я не правильно описал латч... С учетом того, что мой конечный автомат реализован по методу, который вы и описали, я Вас не понял.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 15:08
Рейтинг@Mail.ru


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