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

 
 
> Асинхронка в 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
Ответов
masics
сообщение Jul 3 2017, 09:26
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 21-02-05
Из: Melbourne, Australia
Пользователь №: 2 779



Скорее всего это latches.
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jul 3 2017, 12:55
Сообщение #3


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

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



Цитата(masics @ Jul 3 2017, 12:26) *
Скорее всего это latches.

Вы праввы
Я посчитал, что вот это
Код
always @(*) begin
    if (header_formatter_ready)
        header_formatter_ready_latch <= 1'b1;
    else if (ascii_header_dataout_rd_en || reset_header_config)
        header_formatter_ready_latch <= 1'b0;
    else
        header_formatter_ready_latch <= header_formatter_ready_latch;
end

синтезируется как LDCE
Код
   LDCE #(
      .INIT(1'b0) // Initial value of latch (1'b0 or 1'b1)
   ) LDCE_inst (
      .Q(header_formatter_ready_latch),      // Data output
      .CLR(ascii_header_dataout_rd_en || reset_header_config),  // Asynchronous clear/reset input
      .D(1'b1),      // Data input
      .G(1'b1),      // Gate input
      .GE(header_formatter_ready)     // Gate enable input
   );

Мне было не очевидно, что на самом деле это не так
Сейчас уже вижу, что приоритеты ресета в двух кусках разные
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 3 2017, 13:45
Сообщение #4


Гуру
******

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



Цитата(Lutovid @ Jul 3 2017, 15:55) *
Код
always @(*) begin
    if (header_formatter_ready)
        header_formatter_ready_latch <= 1'b1;
    else if (ascii_header_dataout_rd_en || reset_header_config)
        header_formatter_ready_latch <= 1'b0;
    else
        header_formatter_ready_latch <= header_formatter_ready_latch;
end

синтезируется как LDCE

Мне было не очевидно, что на самом деле это не так
Сейчас уже вижу, что приоритеты ресета в двух кусках разные

На самом деле в любом case, если не определить все состояния, появятся латчи. Чтобы этого не произошло, надо определить состояние по "умолчанию"...


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Lutovid
сообщение Jul 3 2017, 13:46
Сообщение #5


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

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



Цитата(iosifk @ Jul 3 2017, 16:45) *
На самом деле в любом case, если не определить все состояния, появятся латчи. Чтобы этого не произошло, надо определить состояние по "умолчанию"...

В моем примере else разве не определяет состояния "по умолчанию"? Если речь идет об fsm, то там default поле, естественно, есть
Go to the top of the page
 
+Quote Post
iosifk
сообщение Jul 3 2017, 13:59
Сообщение #6


Гуру
******

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



Цитата(Lutovid @ Jul 3 2017, 16:46) *
В моем примере else разве не определяет состояния "по умолчанию"? Если речь идет об fsm, то там default поле, естественно, есть

Я не внимательно вчитался в Ваш код, наверное потому и не понял...
Просто я так никогда не делаю:
always @(*) begin
if (header_formatter_ready)
header_formatter_ready_latch....

Если у Вас есть автомат, то зачем вот это always @(*) ? У Вас что, какие-то сигналы могут меняться "между фронтами клоков"? В любом случае, должен быть автомат, который определяет, кому и когда что можно делать. И должны быть регистры, счетчики и все прочее, которые получают от автомата сигналы на разрешение записи, сдвига, обнуления и т.д.


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post



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

 


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


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