Jump to content

    
Sign in to follow this  
DSIoffe

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

Recommended Posts

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

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

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
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

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this