Jump to content

    

Оператор 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

Share this post


Link to post
Share on other sites

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

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

 

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
4 hours ago, DSIoffe said:

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

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

clk_i <= not(clk);

Edited by Maverick_

Share this post


Link to post
Share on other sites
14 минут назад, Maverick_ сказал:

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

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

Share this post


Link to post
Share on other sites
23 часа назад, DSIoffe сказал:

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

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

Share this post


Link to post
Share on other sites
11 часов назад, Flip-fl0p сказал:

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

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

Share this post


Link to post
Share on other sites
57 минут назад, DSIoffe сказал:

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

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

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

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

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

:facepalm:

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

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

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

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

Edited by andrew_b

Share this post


Link to post
Share on other sites
2 минуты назад, andrew_b сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites
6 минут назад, DSIoffe сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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