RobFPGA 27 22 марта, 2019 Опубликовано 22 марта, 2019 · Жалоба Приветствую! По REG_CLK конечно же. В set_bits и clr_bits формируется битовая маска для rx_mailbox_busy_status которые нужно установить/сбросить в одном и том же такте. VAR_INTERFACE : process (REG_CLK) variable set_bits, clr_bits ... begin if (rising_edge(REG_CLK)) then set_bits := shift_left(set_rx_stat , mailbox_idx); clr_bits := shift_left(clr_rx_stat , mailbox_num); -- prioritet set выше чем clear rx_mailbox_busy_status <= (rx_mailbox_busy_status and (not clr_bits)) or set_bits; -- prioritet clear выше чем set -- rx_mailbox_busy_status <= (rx_mailbox_busy_status or set_bits) and (not clr_bits); end if; end process; Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 22 марта, 2019 Опубликовано 22 марта, 2019 · Жалоба 9 minutes ago, RobFPGA said: Приветствую! По REG_CLK конечно же. В set_bits и clr_bits формируется битовая маска для rx_mailbox_busy_status которые нужно установить/сбросить в одном и том же такте. VAR_INTERFACE : process (REG_CLK) variable set_bits, clr_bits ... begin if (rising_edge(REG_CLK)) then set_bits := shift_left(set_rx_stat , mailbox_idx); clr_bits := shift_left(clr_rx_stat , mailbox_num); -- prioritet set выше чем clear rx_mailbox_busy_status <= (rx_mailbox_busy_status and (not clr_bits)) or set_bits; -- prioritet clear выше чем set -- rx_mailbox_busy_status <= (rx_mailbox_busy_status or set_bits) and (not clr_bits); end if; end process; Удачи! Rob. получается на каждом клоке rx_mailbox_busy_status будет переписываться? не синхронизированно с флагами записи\чтения пакета? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 22 марта, 2019 Опубликовано 22 марта, 2019 · Жалоба Приветствую! Ох и ах ... смотрим - set_bits это std_logic_vector. Не нулевым он будет только тогда когда set_rx_stat будет равен '1'. А позиция где он будет не нулевым зависит от текущего значения mailbox_idx. Тоже самое и для clr_bits. Соответственно каждый такт в rx_mailbox_busy_status устанавливается бит с номером mailbox_idx если set_rx_stat ==1, или сбрасывается бит с номером mailbox_num если clr_rx_stat ==1. Если и set_rx_stat ==1 и clr_rx_stat ==1 и при этом mailbox_idx == mailbox_num то вам надо выбрать какой из сигналов (установка или сброс) имеет высший приоритет Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 22 марта, 2019 Опубликовано 22 марта, 2019 · Жалоба 10 minutes ago, RobFPGA said: Приветствую! Ох и ах ... смотрим - set_bits это std_logic_vector. Не нулевым он будет только тогда когда set_rx_stat будет равен '1'. А позиция где он будет не нулевым зависит от текущего значения mailbox_idx. Тоже самое и для clr_bits. Соответственно каждый такт в rx_mailbox_busy_status устанавливается бит с номером mailbox_idx если set_rx_stat ==1, или сбрасывается бит с номером mailbox_num если clr_rx_stat ==1. Если и set_rx_stat ==1 и clr_rx_stat ==1 и при этом mailbox_idx == mailbox_num то вам надо выбрать какой из сигналов (установка или сброс) имеет высший приоритет Удачи! Rob. спасибо. попробую. наверно приоритет установки выше чем приоритет очистки. лучше прочитать лишний пакет чем потерять пакет. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 22 марта, 2019 Опубликовано 22 марта, 2019 · Жалоба 9 часов назад, jenya7 сказал: Опишите проблему так: Надо сделать - и ПОДРОБНО описываете проблему. Моя реализация - скидываете полноценный код, а не "огрызки". Можно даже архивчик забабахать со всем. Столкнулся с проблемой - описываете проблему. Тогда Вы наиболее вероятно получите полноценный ответ на вопрос. А может ещё Вам подскажут альтернативную реализацию, которая может быть лучше Вашей. И в итоге Вы получите ответ на вопрос. И форум дополнится ещё толикой мудрости... Сейчас же лазить по форуму, вникать в "огрызки - нет никакого желания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба On 3/22/2019 at 10:04 PM, Flip-fl0p said: Опишите проблему так: Надо сделать - и ПОДРОБНО описываете проблему. Моя реализация - скидываете полноценный код, а не "огрызки". Можно даже архивчик забабахать со всем. Столкнулся с проблемой - описываете проблему. Тогда Вы наиболее вероятно получите полноценный ответ на вопрос. А может ещё Вам подскажут альтернативную реализацию, которая может быть лучше Вашей. И в итоге Вы получите ответ на вопрос. И форум дополнится ещё толикой мудрости... Сейчас же лазить по форуму, вникать в "огрызки - нет никакого желания. Так вот альтернативное решение - от RobFPGA. Альтернативное и лучшее, как мне кажеться, на данный момент. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 24 марта, 2019 Опубликовано 24 марта, 2019 · Жалоба 8 часов назад, jenya7 сказал: Так вот альтернативное решение - от RobFPGA. Альтернативное и лучшее, как мне кажеться, на данный момент. Вам виднее... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба On 3/22/2019 at 6:04 PM, jenya7 said: в симуляторе я проблемы не видел. она недавно вылезла при довольно серьезных стрессовых нагрузках на систему. кстати у себя воспроизвести проблему не получается. 1000 послал 1000 принял. на определенных таймингах я начинаю терять пакеты но лишние не вижу. Проблема уже решилась, но именно почему вы не заметили это в симуляторе: скорее всего у вас тест написан полностью детерменированный и ситуации одновременного досупа просто нет. Вы хоть 1е9 промоделируйте при таком подходе, всегда будет одно и тоже. Что бы избежать подобного надо делать тест со случаными длительностями пакетов, пауз между элементами пакета, между самим пакетами и т.д. Только в этом случае, вы сможете увидеть эту ошибку. Ну и еще лучше, не писать серьезные тесты для своей системы, самостоятельно. Этим, на уровне подсознания, обходите подводные камни Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба Приветствую! 23 hours ago, jenya7 said: Альтернативное и лучшее ... Увы - оно просто альтернативное - лучшее оно только для той малой части требований (одновременная обработка запросов на установку очистку флага за один такт) которая понятна из описанного вами. Насколько оно будет лучшее в конечной системе зависит от многих факторов - как например от числа слотов так и от структуры системы. Может быть и выгоднее делать сериализацию запросов и арбитраж обработки - либо с подтверждением как предлагал des00, либо с очередями запросов на FIFO. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 2 hours ago, RobFPGA said: Приветствую! Увы - оно просто альтернативное - лучшее оно только для той малой части требований (одновременная обработка запросов на установку очистку флага за один такт) которая понятна из описанного вами. Насколько оно будет лучшее в конечной системе зависит от многих факторов - как например от числа слотов так и от структуры системы. Может быть и выгоднее делать сериализацию запросов и арбитраж обработки - либо с подтверждением как предлагал des00, либо с очередями запросов на FIFO. Удачи! Rob. я работаю над версией с FIFO. у меня там тоже гемороя хватает. :). но если абстрагироваться от данной задачи - вами предложенный способ лучший для выставления\очистки бит в регистре. или я что то не понимаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба А если бы вы прислушались к совету описать все подробнее - то может быть и ещё варианты решения появились... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 10 minutes ago, Flip-fl0p said: А если бы вы прислушались к совету описать все подробнее - то может быть и ещё варианты решения появились... подробнее там такая простыня на 2000 строк. всю ее сюда вывалить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба Ну... Это в Ваших же интересах описать задачу наиболее полно. Но я ещё нигде не видел, чтобы для описания задачи требовалось 2000 строк. Не каждое ТЗ на изделие имеет столько... Но если надо - то выкладывайте Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 34 minutes ago, Flip-fl0p said: Ну... Это в Ваших же интересах описать задачу наиболее полно. Но я ещё нигде не видел, чтобы для описания задачи требовалось 2000 строк. Не каждое ТЗ на изделие имеет столько... Но если надо - то выкладывайте тогда мне надо подготовиться. 2000 это один модуль. а у меня их несколько. нужно собраться с мыслями как описать все это. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 25 марта, 2019 Опубликовано 25 марта, 2019 · Жалоба 7 часов назад, jenya7 сказал: тогда мне надо подготовиться. 2000 это один модуль. а у меня их несколько. нужно собраться с мыслями как описать все это. Вы лучше подробно опишите изначальную задачу. Затем, опишите алгоритм того, что было сделано. А дальше будет видно. Советую почитать: http://iosifk.narod.ru/nat_m3.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться