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

Quartus - ошибка симуляции

Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код:

    port (input : in natural range 0 to 15;
            a, b, c, d, e, f, g : out bit);
end segment7;

architecture transform of segment7 is
begin
    process (input)
        begin
        case input is
            when 0 => 
                g <= '0';
                a <= '1';
                b <= '1'; 
                c <= '1'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1';    
            when 1 => 
                a <= '0'; 
                b <= '1'; 
                c <= '1'; 
                d <= '0'; 
                e <= '0'; 
                f <= '0'; 
                g <= '0';
            when 2 => 
                a <= '1'; 
                b <= '1'; 
                c <= '0'; 
                d <= '1'; 
                e <= '1'; 
                f <= '0'; 
                g <= '1'; 
            when 3 => 
                a <= '1'; 
                b <= '1'; 
                c <= '1'; 
                d <= '1'; 
                e <= '0'; 
                f <= '0'; 
                g <= '1';
            when 4 => 
                a <= '0'; 
                b <= '1'; 
                c <= '1'; 
                d <= '0'; 
                e <= '0'; 
                f <= '1'; 
                g <= '1';
            when 5 => 
                a <= '1'; 
                b <= '0'; 
                c <= '1'; 
                d <= '1'; 
                e <= '0'; 
                f <= '1'; 
                g <= '1';
            when 6 => 
                a <= '1'; 
                b <= '0'; 
                c <= '1'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
            when 7 => 
                a <= '1'; 
                b <= '1'; 
                c <= '1'; 
                d <= '0'; 
                e <= '0'; 
                f <= '0'; 
                g <= '0';
            when 8 => 
                a <= '1'; 
                b <= '1'; 
                c <= '1'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
            when 9 => 
                a <= '1'; 
                b <= '1'; 
                c <= '1'; 
                d <= '1'; 
                e <= '0'; 
                f <= '1'; 
                g <= '1';
            when 10 => 
                a <= '1'; 
                b <= '1'; 
                c <= '1'; 
                d <= '0'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
            when 11 => 
                a <= '0'; 
                b <= '0'; 
                c <= '1'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
            when 12 => 
                a <= '1'; 
                b <= '0'; 
                c <= '0'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1'; 
                g <= '0';
            when 13 => 
                a <= '0'; 
                b <= '1'; 
                c <= '1'; 
                d <= '1'; 
                e <= '1'; 
                f <= '0'; 
                g <= '1';
            when 14 => 
                a <= '1'; 
                b <= '0'; 
                c <= '0'; 
                d <= '1'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
            when 15 => 
                a <= '1'; 
                b <= '0'; 
                c <= '0'; 
                d <= '0'; 
                e <= '1'; 
                f <= '1'; 
                g <= '1';
        end case;
    end process;
end transform;

 

при симуляции ошибка: "Fatal: (vsim-3807) Types do not match between component and entity for port "input"."

Что не так?

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


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

Сам подход. Всё описать можно гораздо компактнее. В 15 раз.

Зачем применяете тип BIT ?

Где идет описание ENTITY ?

 

Изменено пользователем Flip-fl0p

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


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

Сам подход. Всё описать можно гораздо компактнее. В 15 раз.

На выход 8-и разрядную шину и 16 предопределенных кодов?

Зачем применяете тип BIT ?

А какой еще тип применить для переменной имеющий состояния либо 1 либо 0?

Где идет описание ENTITY ?

Первая строчка не скопировалась. Там:

entity segment7 is    
    port (input : in natural range 0 to 15;
            a, b, c, d, e, f, g : out bit);
end segment7;

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


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

На выход 8-и разрядную шину и 16 предопределенных кодов?

 

А какой еще тип применить для переменной имеющий состояния либо 1 либо 0?

 

Первая строчка не скопировалась. Там:

entity segment7 is    
    port (input : in natural range 0 to 15;
            a, b, c, d, e, f, g : out bit);
end segment7;

А вообще код рабочий, проверял в Modelsim и Quartus. Посмотрите, чтобы название файла соответствовало имени ENTITY.

Вот мой код, который я применяю для работы с индикаторами:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

ENTITY BIN_TO_7SEG IS
   GENERIC
   (
       EFFECTIVE_VALUE : STD_LOGIC := '1'        -- Если в разряде 1 тогда сегмент горит
   );
   PORT
   (
       BIN         : IN   STD_LOGIC_VECTOR(3 DOWNTO 0);
       SEGM        : OUT  STD_LOGIC_VECTOR(6 DOWNTO 0)
   );
END ENTITY;

ARCHITECTURE RTL OF BIN_TO_7SEG IS
--    Соответствие номеру разряда, зажигаемому сегменту
--         0
--       ▀▀▀▀▀
--     █       █
--   5 █       █ 1
--     █   6   █
--       ▀▀▀▀▀
--     █       █
--   4 █       █ 2
--     █       █
--       ▀▀▀▀▀
--         3
   CONSTANT HEX0  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1000000"; -- 0 Константы для удобства. Можно без них
   CONSTANT HEX1  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1111001"; -- 1
   CONSTANT HEX2  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0100100"; -- 2
   CONSTANT HEX3  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0110000"; -- 3
   CONSTANT HEX4  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0011001"; -- 4
   CONSTANT HEX5  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0010010"; -- 5
   CONSTANT HEX6  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000010"; -- 6
   CONSTANT HEX7  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1111000"; -- 7
   CONSTANT HEX8  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000000"; -- 8
   CONSTANT HEX9  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0011000"; -- 9
   CONSTANT HEXA  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0001000"; -- A
   CONSTANT HEXB  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000011"; -- B
   CONSTANT HEXC  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "1000110"; -- C
   CONSTANT HEXD  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0100001"; -- D
   CONSTANT HEXE  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0000110"; -- E
   CONSTANT HEXF  : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0001110"; -- F
   CONSTANT ERROR : STD_LOGIC_VECTOR(6 DOWNTO 0) := "0111111"; -- -
BEGIN
   EFFECTIVE_VALUE_ZERRO_PROC : IF (EFFECTIVE_VALUE = '0') GENERATE     --  Зажигаем сегменты логическим нулем
       CONVERT_BINARY_TO_7SEGMENT : PROCESS
       (
           BIN
       )
       BEGIN
           CASE BIN IS        --0123456
               WHEN X"0"   => SEGM <= HEX0; -- 0
               WHEN X"1"   => SEGM <= HEX1; -- 1
               WHEN X"2"   => SEGM <= HEX2; -- 2
               WHEN X"3"   => SEGM <= HEX3; -- 3
               WHEN X"4"   => SEGM <= HEX4; -- 4
               WHEN X"5"   => SEGM <= HEX5; -- 5
               WHEN X"6"   => SEGM <= HEX6; -- 6
               WHEN X"7"   => SEGM <= HEX7; -- 7
               WHEN X"8"   => SEGM <= HEX8; -- 8
               WHEN X"9"   => SEGM <= HEX9; -- 9
               WHEN X"A"   => SEGM <= HEXA; -- A
               WHEN X"B"   => SEGM <= HEXB; -- B
               WHEN X"C"   => SEGM <= HEXC; -- C
               WHEN X"D"   => SEGM <= HEXD; -- D
               WHEN X"E"   => SEGM <= HEXE; -- E
               WHEN X"F"   => SEGM <= HEXF; -- F
               WHEN OTHERS => SEGM <= ERROR;-- ERROR
           END CASE;
       END PROCESS;
   END GENERATE;

   EFFECTIVE_VALUE_ONE_PROC : IF (EFFECTIVE_VALUE = '1') GENERATE        --  Зажигаем сегменты логической единицей
       CONVERT_BINARY_TO_7SEGMENT : PROCESS
       (
           BIN
       )
       BEGIN
           CASE BIN IS        --0123456
               WHEN X"0"   => SEGM <= NOT HEX0; -- 0
               WHEN X"1"   => SEGM <= NOT HEX1; -- 1
               WHEN X"2"   => SEGM <= NOT HEX2; -- 2
               WHEN X"3"   => SEGM <= NOT HEX3; -- 3
               WHEN X"4"   => SEGM <= NOT HEX4; -- 4
               WHEN X"5"   => SEGM <= NOT HEX5; -- 5
               WHEN X"6"   => SEGM <= NOT HEX6; -- 6
               WHEN X"7"   => SEGM <= NOT HEX7; -- 7
               WHEN X"8"   => SEGM <= NOT HEX8; -- 8
               WHEN X"9"   => SEGM <= NOT HEX9; -- 9
               WHEN X"A"   => SEGM <= NOT HEXA; -- A
               WHEN X"B"   => SEGM <= NOT HEXB; -- B
               WHEN X"C"   => SEGM <= NOT HEXC; -- C
               WHEN X"D"   => SEGM <= NOT HEXD; -- D
               WHEN X"E"   => SEGM <= NOT HEXE; -- E
               WHEN X"F"   => SEGM <= NOT HEXF; -- F
               WHEN OTHERS => SEGM <= NOT ERROR;-- ERROR
           END CASE;
       END PROCESS;
   END GENERATE;
END ARCHITECTURE;

Изменено пользователем Flip-fl0p

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


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

Так. Стоп. А библиотеку Вы объявили ?

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

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


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

Так. Стоп. А библиотеку Вы объявили ?

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

Зачем, если она не используется?

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


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

Зачем, если она не используется?

Да, действительно здесь не надо, ошибся.

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


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

Что не так?
Вангую, что типа integer в железе не существует. Переделайте его на массив bit_vector, коль скоро вы используете bit. Но лучше использовать std_logic и std_logic_vector.

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


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

А в каких случаях тогда используется integer?

Даже без подачи сигнала не запускается симуляция

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


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

Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код:

    port (input : in natural range 0 to 15;
            a, b, c, d, e, f, g : out bit);
......end transform;

 

при симуляции ошибка: "Fatal: (vsim-3807) Types do not match between component and entity for port "input"."

Что не так?

Не так с самого начала подготовки и создания проекта.

Прежде чем рисовать файлы сделайте блок-схему устройства, распишите где какие сигналы и шины...

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


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

А в каких случаях тогда используется integer?

Даже без подачи сигнала не запускается симуляция

 

Integer используется, но вы работаете с железом. И там есть только проводки. А они не понимают что такое integer. Они понимают 0 и 1. Поэтому вам нужно уходить на типы bit, bit_vector, а еще лучше на std_logic. А integer придется переводить в указанные типы. Если вы это не сделеаете - за вас это сделает компилятор.

 

Давайте попробуем переписать программу на std_logic?

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


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

А в каких случаях тогда используется integer?

Даже без подачи сигнала не запускается симуляция

 

Мой совет -- начните с Verilog.

Прошу без холиваров, сугубо ИМХО.

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


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

Мой совет -- начните с Verilog.

Прошу без холиваров, сугубо ИМХО.

Язык это средство...

главное понимание схемотехники...

 

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


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

Давайте попробуем переписать программу на std_logic?
Давайте не будем называть схему программой?

 

Мой совет -- начните с Verilog.

Прошу без холиваров, сугубо ИМХО.

А удержаться от того, чтобы не высказать своё ИМХО, сил нет, да? Почему-то именно вериложники этим страдают.

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


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

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

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

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

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

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

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

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

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

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