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

 
 
> Множественный доступ к одному сигналу, Проблема (VHDL)
Muscat
сообщение Apr 12 2010, 12:13
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



В начале пути изучения VHDL, пишу простенькую программу следующего содержания

По приходу инициирующего сигнала запускается чтение битов из последовательной памяти. Инициируются клоки ROM-request, считываются данные по падающему фронту,которые затем выдаются на шину вывода,и далее устанавливается флаг Ready в положение '1'.

Собственно с этим и возникла проблема.
Сигнал объявляется в entity как

ready: inout STD_LOGIC:='0';

Далее в процессе ROM_clockong он ставится в положение 1

if (j=7) then ready<='1';

Ну и в процессе Read_complete, по приходу заднего фронта с шины, означающее что данные прочитаны, он снова сбрасывается в 0

ready<='0';

Если убрать процеес Read_complete, то все выполняется прекрасно, как надо (см. Graph2)

Если этот процесс раскомментировать, то сигнал получает значение Х (явно неопределенный).

Таким образом суть проблемы.
Если в сигнал Ready могут писать 2 процесса, то возникает ошибка. Если один — все в порядке. Прочитал про resolved и solved сигналы, но у меня то как раз вроде все правильно — STD_Logic resolved типа,в него могут писать разные процессы, STD_uLogic – solved, если описать ready так, то компилятор сам напомнит об этом.
Starter.vhd : (89, 0): Signal "ready" has two sources, but is not resolved signal

Что я делаю не так?


В мануалах приводятся примеры, в которых несколько процессов одновременно обращаются в переменной, в этом случае для решения конфликта один из них присваивает 1 или 0, другой слабые - H или L. Но в моем то случае происходит изменение сигнала в разное время.


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Muscat
сообщение Apr 12 2010, 20:23
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Друзья, я дебил и не понимаю прописных истин?

Так можно ли организовать работу многих процессов на одну общую шину, или надо делать мукс, в который придут все это внешние сигналы с каждого процесса и который сам решит, что ему выставить на выход?


--------------------
Because it's there
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Apr 13 2010, 04:35
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 975
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Muscat @ Apr 12 2010, 23:38) *
надо делать мукс, в который придут все это внешние сигналы с каждого процесса и который сам решит, что ему выставить на выход?
Бинго! Естественно, нужен некий арбитр.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Apr 14 2010, 04:16
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(andrew_b @ Apr 13 2010, 08:50) *
Бинго! Естественно, нужен некий арбитр.


В стандарте VHDL 2006 появились новые операторы: force, release; Они как раз и предназначены для включения и выключения драйвера для сигнала. Но Activ-HDL 8.1 похоже это не поддерживает.
Пример должен выглядеть так:
Код
library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity temp is
    port(
      a    : out std_logic
    );
end temp;


architecture temp of temp is


begin        
    
pr_a: process begin
    
              wait for 100 ns;
    a<= force  out '1';
    
    a<='1';
    
    wait for 400 ns;
    
    a<= release out;
    wait;
end process;    


end temp;


В этом примере сигнал a должен включится через 100 ns, выставить 1, а затем отключиться через 400 nc;
Эти операторы предназначены для работы со сложными типами данных, в которых трудно сделать функцию resolved. И предназначены в первую очередь для моделирования.
Go to the top of the page
 
+Quote Post



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

 


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


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