Перейти к содержанию
    

Доступ к переменной из разных процессов.

Приветствую!

По 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 будет переписываться? не синхронизированно с флагами записи\чтения пакета?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

Ох и ах ...  смотрим - 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.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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.

 

спасибо. попробую. наверно приоритет установки выше чем приоритет очистки. лучше прочитать лишний пакет чем потерять пакет. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 часов назад, jenya7 сказал:

 

Опишите проблему так: 
Надо сделать                  - и ПОДРОБНО описываете проблему.
Моя реализация              - скидываете полноценный код, а не "огрызки". Можно даже архивчик забабахать со всем.
Столкнулся с проблемой - описываете проблему.
Тогда Вы наиболее вероятно получите полноценный ответ на вопрос. А может ещё Вам подскажут альтернативную реализацию, которая может быть лучше Вашей.
И в итоге Вы получите ответ на вопрос. И форум дополнится ещё толикой мудрости... Сейчас же лазить по форуму, вникать в "огрызки - нет никакого желания.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/22/2019 at 10:04 PM, Flip-fl0p said:

Опишите проблему так: 
Надо сделать                  - и ПОДРОБНО описываете проблему.
Моя реализация              - скидываете полноценный код, а не "огрызки". Можно даже архивчик забабахать со всем.
Столкнулся с проблемой - описываете проблему.
Тогда Вы наиболее вероятно получите полноценный ответ на вопрос. А может ещё Вам подскажут альтернативную реализацию, которая может быть лучше Вашей.
И в итоге Вы получите ответ на вопрос. И форум дополнится ещё толикой мудрости... Сейчас же лазить по форуму, вникать в "огрызки - нет никакого желания.

Так вот альтернативное решение - от RobFPGA.  Альтернативное и лучшее, как мне кажеться, на данный момент.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 часов назад, jenya7 сказал:

Так вот альтернативное решение - от RobFPGA.  Альтернативное и лучшее, как мне кажеться, на данный момент.

Вам виднее... 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 3/22/2019 at 6:04 PM, jenya7 said:

в симуляторе я проблемы не видел. она недавно вылезла при довольно серьезных стрессовых нагрузках на систему.

кстати у себя воспроизвести проблему не получается. 1000 послал 1000 принял. на определенных таймингах я начинаю терять пакеты но лишние не вижу.

Проблема уже решилась, но именно почему вы не заметили это в симуляторе: скорее всего у вас тест написан полностью детерменированный и ситуации одновременного досупа просто нет. Вы хоть 1е9 промоделируйте при таком подходе, всегда будет одно и тоже.

Что бы избежать подобного надо делать тест со случаными длительностями пакетов, пауз между элементами пакета, между самим пакетами и т.д. Только в этом случае, вы сможете увидеть эту ошибку. Ну и еще лучше, не писать серьезные тесты для своей системы, самостоятельно. Этим, на уровне подсознания, обходите подводные камни

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

23 hours ago, jenya7 said:

Альтернативное и лучшее ...

:blush: Увы - оно просто альтернативное - лучшее оно только для той малой части требований (одновременная обработка запросов на установку очистку флага за один такт) которая понятна из описанного вами. Насколько оно будет лучшее в конечной системе зависит от многих факторов - как например от числа слотов так и от структуры системы. Может быть и выгоднее делать сериализацию запросов и арбитраж обработки - либо с подтверждением как предлагал des00, либо с очередями запросов на FIFO.  

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, RobFPGA said:

Приветствую!

:blush: Увы - оно просто альтернативное - лучшее оно только для той малой части требований (одновременная обработка запросов на установку очистку флага за один такт) которая понятна из описанного вами. Насколько оно будет лучшее в конечной системе зависит от многих факторов - как например от числа слотов так и от структуры системы. Может быть и выгоднее делать сериализацию запросов и арбитраж обработки - либо с подтверждением как предлагал des00, либо с очередями запросов на FIFO.  

 

Удачи! Rob.

я работаю над версией с FIFO. у меня там тоже гемороя хватает. :).

но если абстрагироваться от данной задачи - вами предложенный способ лучший для выставления\очистки бит в регистре. или я что то не понимаю. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если бы вы прислушались к совету описать все подробнее -  то может быть и ещё варианты решения появились...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, Flip-fl0p said:

А если бы вы прислушались к совету описать все подробнее -  то может быть и ещё варианты решения появились...

подробнее там такая простыня на 2000 строк. всю ее сюда вывалить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну... Это в Ваших же интересах описать задачу наиболее полно. Но я ещё нигде не видел, чтобы для описания задачи требовалось 2000 строк. Не каждое ТЗ на изделие имеет столько...

Но если надо - то выкладывайте

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

34 minutes ago, Flip-fl0p said:

Ну... Это в Ваших же интересах описать задачу наиболее полно. Но я ещё нигде не видел, чтобы для описания задачи требовалось 2000 строк. Не каждое ТЗ на изделие имеет столько...

Но если надо - то выкладывайте

тогда мне надо подготовиться. 2000 это один модуль. а у меня их несколько. нужно собраться с мыслями как описать все это.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, jenya7 сказал:

тогда мне надо подготовиться. 2000 это один модуль. а у меня их несколько. нужно собраться с мыслями как описать все это.

Вы лучше подробно опишите изначальную задачу.

Затем, опишите алгоритм того, что было сделано.

А дальше будет видно.

Советую почитать: http://iosifk.narod.ru/nat_m3.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...