Jump to content

    

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

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

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

Share this post


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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites
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.

 

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

Share this post


Link to post
Share on other sites
9 часов назад, jenya7 сказал:

 

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

Share this post


Link to post
Share on other sites
On 3/22/2019 at 10:04 PM, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites
8 часов назад, jenya7 сказал:

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

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

Share this post


Link to post
Share on other sites
On 3/22/2019 at 6:04 PM, jenya7 said:

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

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

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

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

Share this post


Link to post
Share on other sites

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

23 hours ago, jenya7 said:

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
2 hours ago, RobFPGA said:

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

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

 

Удачи! Rob.

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
10 minutes ago, Flip-fl0p said:

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
34 minutes ago, Flip-fl0p said:

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

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

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

Share this post


Link to post
Share on other sites
7 часов назад, jenya7 сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this