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

Коммутировать несколько входов на один выход.

Есть два входа - пин и команда с микроконтролера.
В обычном режиме вход скомутирован на выход но если пришла команда с микроконтролера - выход отключается от входа и получает значение пришедшее с контролера.
Напрашивается мукс для комутации. Но тут есть еще одно условие - сигнал со входа на выход должен прийти за пару наносекунд.
Есть мукс который работает без тактирования?

in_out.png

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


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

1 hour ago, bambr said:

Такое не подойдет?


assign out =  (control)? in : command ; 

 

а как это описать в VHDL?

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


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

1 hour ago, bambr said:

спасибо. только я не очень понимаю. если это не в процессе

X <= A when (SEL = '1') else B;

какой будет propagation delay? по клоку или ограниченный логическим элементом?

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


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

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

1 hour ago, jenya7 said:

... Напрашивается мукс для комутации. Но тут есть еще одно условие - сигнал со входа на выход должен прийти за пару наносекунд.
Есть мукс который работает без тактирования? ...

 
 
 

В FPGA ваше условие не выполнить - типичное время задержки на входных - выходных пинах ~3-5 ns,  плюс задержки на роутинг и комутацию - так что задержки вряд ли будут < 8-10 ns.

Удачи! Rob.

 

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


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

26 minutes ago, jenya7 said:

спасибо. только я не очень понимаю. если это не в процессе


X <= A when (SEL = '1') else B;

какой будет propagation delay? по клоку или ограниченный логическим элементом?

Никакой разницы между 

X <= A when (SEL = '1') else B;

и 

process(all)
begin
    if (sel = '1') then
        x <= a ;
    else
        x <= b ;
    end if;
end process;

У нас нет.

А вот с задержкой распространения чуть сложнее. Т.к эта задержка сильно зависит от конкретной FPGA. Но 2..3 нс. слишком много. В FPGA большие задержки от физического входа (ножки) до самой матрицы. Как и наоборот, от матрицы до выхода.

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


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

1 hour ago, Flip-fl0p said:

Никакой разницы между 


X <= A when (SEL = '1') else B;

и 


process(all)
begin
    if (sel = '1') then
        x <= a ;
    else
        x <= b ;
    end if;
end process;

У нас нет.

А вот с задержкой распространения чуть сложнее. Т.к эта задержка сильно зависит от конкретной FPGA. Но 2..3 нс. слишком много. В FPGA большие задержки от физического входа (ножки) до самой матрицы. Как и наоборот, от матрицы до выхода.

а Вы уверенны что X <= A when (SEL = '1') else B; будет клокироваться? выражение ведь не в процессе.


 

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


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

20 minutes ago, jenya7 said:

а Вы уверенны что X <= A when (SEL = '1') else B; будет клокироваться? выражение ведь не в процессе.



 

Что значит термин клокироваться ?

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


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

26 minutes ago, jenya7 said:

а Вы уверенны что X <= A when (SEL = '1') else B; будет клокироваться? выражение ведь не в процессе.



 

Там оба варианта асинхронные.

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


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

у меня в топ ентити

F_LPTG_IN  : in std_logic_vector(12 downto 0);
F_LPTG_OUT : out std_logic_vector(12 downto 0);

в архитектуре

signal sel     : std_logic := '0';
signal cpu_out : std_logic := '0';
 -----------------------------------------------------------------------------
 
begin
	 
F_LPTG_OUT(0) <= F_LPTG_IN(0) when (sel = '1') else cpu_out;

компилирую. смотрю в RTL Viewer - пины остались неподключенные.

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


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

1 hour ago, _sda said:

А sel как формируется? В тексте нет.

я его никуда не подключил. может это и есть причина

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


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

29 minutes ago, jenya7 said:

я его никуда не подключил. может это и есть причина

Это и есть причина.

Sel не формируется. Поэтому выражение не выполняется. Поэтому всегда у нас работает ветка когда sel = 0 т.е на выход присваивается константа.

Вот только странно. В первом сообщении нужен обычный мультиплексор. А сейчас Вы хотите, чтобы он тактировался, т.е чтобы где-то ещё стоял триггер. 

Так как вам надо то сделать ?

 

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


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

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

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

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

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

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

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

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

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

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