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

Оператор when - else в VHDL

Здравствуйте все!

Я хотел получить из входных импульсов парафазный сигнал. Написал вот такой код:

library ieee;
use ieee.std_logic_1164.all;
entity when_test is
  port (
    clock: in std_logic;
    outp: out std_logic;
    outn: out std_logic
  );
end when_test;
architecture behavioral of when_test is
begin
  outp <= clock;
  outn <= '1' when clock = '0' else '1';
end behavioral;

Инверсию я сделал с помощью оператора when - else. На том месте, где я хотел получить инверсный сигнал (outn), постоянный высокий уровень.

Подскажите, пожалуйста, где я ошибся? На всякий случай прикладываю проект для Questa Sim.

Заранее признателен.

when_test.zip

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


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

опечатка, надо так:

outn <= '1' when clock = '0' else '0';

 

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


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

4 hours ago, DSIoffe said:

Спасибо! Ведь полдня на это таращился.

не проще было написать

clk_i <= not(clk);

Изменено пользователем Maverick_

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


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

14 минут назад, Maverick_ сказал:

не проще было написать

Проще. Но не люблю писать not про std_logic :) И мне проще воспринимать мой вариант примерно в 23 часа с выключающимся мозгом...

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


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

23 часа назад, DSIoffe сказал:

Но не люблю писать not про std_logic :

А почему если не секрет ? Поделитесь опытом :blush:

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


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

11 часов назад, Flip-fl0p сказал:

А почему если не секрет ? Поделитесь опытом :blush:

Потому что not - это про булевский тип, где только два значения, а про std_logic - это упрощение жизни, и где-то описано, как именно оно реализовано, и надо знать (и помнить), как именно, чтобы иногда не наступать на загадочные грабли. После общения с пакетами numeric_std и прочими я написал себе преобразования из натуральных чисел в std_logic_vector и обратно, и с тех пор в заголовках текстов на VHDL у меня не бывает чужих пакетов, кроме ieee.std_logic_1164 :)

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


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

57 минут назад, DSIoffe сказал:

Потому что not - это про булевский тип

Ничего подобного.

Это функция, перегруженная для разных типов аргументов.

57 минут назад, DSIoffe сказал:

После общения с пакетами numeric_std и прочими я написал себе преобразования из натуральных чисел в std_logic_vector и обратно

:facepalm:

57 минут назад, DSIoffe сказал:

и с тех пор в заголовках текстов на VHDL у меня не бывает чужих пакетов, кроме ieee.std_logic_1164

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

Видимо, велосипедоизобретательство неискоренимо.

Изменено пользователем andrew_b

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


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

2 минуты назад, andrew_b сказал:

Это функция, перегруженная для разных типов аргументов.

Это теперь она такое, а в моё время это был булевский оператор :) И не надо было думать, как она работает для каждого типа.

3 минуты назад, andrew_b сказал:

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

Ага, принёс 89 строк кода. Не переломился :) Стандартные носить тяжелее :)

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


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

6 минут назад, DSIoffe сказал:

Это теперь она такое, а в моё время это был булевский оператор

Да ладно. std_logic был уже в '87.

7 минут назад, DSIoffe сказал:

Стандартные носить тяжелее

Их вообще носить не надо. Они есть в каждом САПРе.

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


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

Насколько я знаю библиотека Use.numeric_std.all и 1164 допускаются для использования в стандартах, остальные библиотеки нет.

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


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

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

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

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

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

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

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

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

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

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