реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Quartus - ошибка симуляции
scelikr
сообщение Aug 6 2017, 18:15
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 9-07-17
Пользователь №: 98 032



Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код:
Код
    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"."
Что не так?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 6 2017, 19:38
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(scelikr @ Aug 6 2017, 21:15) *

Сам подход. Всё описать можно гораздо компактнее. В 15 раз.
Зачем применяете тип BIT ?
Где идет описание ENTITY ?


Сообщение отредактировал Flip-fl0p - Aug 6 2017, 19:38
Go to the top of the page
 
+Quote Post
scelikr
сообщение Aug 6 2017, 20:26
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 9-07-17
Пользователь №: 98 032



Цитата
Сам подход. Всё описать можно гораздо компактнее. В 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;
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 7 2017, 05:05
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(scelikr @ Aug 6 2017, 23:26) *
На выход 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.
Вот мой код, который я применяю для работы с индикаторами:
CODE
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 - Aug 7 2017, 05:06
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 7 2017, 07:03
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Так. Стоп. А библиотеку Вы объявили ?
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 7 2017, 07:29
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 832
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(Flip-fl0p @ Aug 7 2017, 10:03) *
Так. Стоп. А библиотеку Вы объявили ?
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;

Зачем, если она не используется?
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Aug 7 2017, 07:34
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 430
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140



Цитата(andrew_b @ Aug 7 2017, 10:29) *
Зачем, если она не используется?

Да, действительно здесь не надо, ошибся.
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 7 2017, 07:35
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 832
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(scelikr @ Aug 6 2017, 21:15) *
Что не так?
Вангую, что типа integer в железе не существует. Переделайте его на массив bit_vector, коль скоро вы используете bit. Но лучше использовать std_logic и std_logic_vector.
Go to the top of the page
 
+Quote Post
Burenkov Sergey
сообщение Aug 7 2017, 11:52
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 67
Регистрация: 10-01-13
Пользователь №: 75 145



В тестбенче очевидно не так подали сигнал на вход input. Скиньте код тестбенча
Go to the top of the page
 
+Quote Post
scelikr
сообщение Aug 7 2017, 13:45
Сообщение #10





Группа: Новичок
Сообщений: 3
Регистрация: 9-07-17
Пользователь №: 98 032



А в каких случаях тогда используется integer?
Даже без подачи сигнала не запускается симуляция
Go to the top of the page
 
+Quote Post
iosifk
сообщение Aug 7 2017, 14:22
Сообщение #11


Гуру
******

Группа: Модераторы
Сообщений: 3 707
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(scelikr @ Aug 6 2017, 21:15) *
Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код:
Код
    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"."
Что не так?

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
canny
сообщение Aug 9 2017, 06:49
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 8-07-09
Пользователь №: 51 060



Цитата(scelikr @ Aug 7 2017, 16:45) *
А в каких случаях тогда используется integer?
Даже без подачи сигнала не запускается симуляция


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

Давайте попробуем переписать программу на std_logic?
Go to the top of the page
 
+Quote Post
des333
сообщение Aug 9 2017, 19:50
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 111
Регистрация: 19-07-08
Из: Санкт-Петербург
Пользователь №: 39 079



Цитата(scelikr @ Aug 7 2017, 16:45) *
А в каких случаях тогда используется integer?
Даже без подачи сигнала не запускается симуляция


Мой совет -- начните с Verilog.
Прошу без холиваров, сугубо ИМХО.


--------------------
Go to the top of the page
 
+Quote Post
Maverick
сообщение Aug 9 2017, 20:36
Сообщение #14


я только учусь...
******

Группа: Модераторы
Сообщений: 3 394
Регистрация: 29-01-07
Из: Украина
Пользователь №: 24 839



Цитата(des333 @ Aug 9 2017, 22:50) *
Мой совет -- начните с Verilog.
Прошу без холиваров, сугубо ИМХО.

Язык это средство...
главное понимание схемотехники...


--------------------
If it doesn't work in simulation, it won't work on the board.

"Ты живешь в своих поступках, а не в теле. Ты — это твои действия, и нет другого тебя" Антуан де Сент-Экзюпери повесть "Маленький принц"
Go to the top of the page
 
+Quote Post
andrew_b
сообщение Aug 10 2017, 05:26
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 832
Регистрация: 30-12-04
Из: Воронеж
Пользователь №: 1 757



Цитата(canny @ Aug 9 2017, 09:49) *
Давайте попробуем переписать программу на std_logic?
Давайте не будем называть схему программой?

Цитата(des333 @ Aug 9 2017, 22:50) *
Мой совет -- начните с Verilog.
Прошу без холиваров, сугубо ИМХО.
А удержаться от того, чтобы не высказать своё ИМХО, сил нет, да? Почему-то именно вериложники этим страдают.
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th December 2017 - 16:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01387 секунд с 7
ELECTRONIX ©2004-2016