scelikr 0 6 августа, 2017 Опубликовано 6 августа, 2017 · Жалоба Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код: 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"." Что не так? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 6 августа, 2017 Опубликовано 6 августа, 2017 (изменено) · Жалоба Сам подход. Всё описать можно гораздо компактнее. В 15 раз. Зачем применяете тип BIT ? Где идет описание ENTITY ? Изменено 6 августа, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scelikr 0 6 августа, 2017 Опубликовано 6 августа, 2017 · Жалоба Сам подход. Всё описать можно гораздо компактнее. В 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; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 7 августа, 2017 Опубликовано 7 августа, 2017 (изменено) · Жалоба На выход 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; Изменено 7 августа, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба Так. Стоп. А библиотеку Вы объявили ? LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба Так. Стоп. А библиотеку Вы объявили ? LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; Зачем, если она не используется? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба Зачем, если она не используется? Да, действительно здесь не надо, ошибся. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба Что не так?Вангую, что типа integer в железе не существует. Переделайте его на массив bit_vector, коль скоро вы используете bit. Но лучше использовать std_logic и std_logic_vector. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Burenkov 0 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба В тестбенче очевидно не так подали сигнал на вход input. Скиньте код тестбенча Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
scelikr 0 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба А в каких случаях тогда используется integer? Даже без подачи сигнала не запускается симуляция Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 7 августа, 2017 Опубликовано 7 августа, 2017 · Жалоба Здравствуйте! Начал осваивать ПЛИС, хотел сделать простенький проект для управления семисегментным индикатором. Вот код: 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"." Что не так? Не так с самого начала подготовки и создания проекта. Прежде чем рисовать файлы сделайте блок-схему устройства, распишите где какие сигналы и шины... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
canny 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А в каких случаях тогда используется integer? Даже без подачи сигнала не запускается симуляция Integer используется, но вы работаете с железом. И там есть только проводки. А они не понимают что такое integer. Они понимают 0 и 1. Поэтому вам нужно уходить на типы bit, bit_vector, а еще лучше на std_logic. А integer придется переводить в указанные типы. Если вы это не сделеаете - за вас это сделает компилятор. Давайте попробуем переписать программу на std_logic? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба А в каких случаях тогда используется integer? Даже без подачи сигнала не запускается симуляция Мой совет -- начните с Verilog. Прошу без холиваров, сугубо ИМХО. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 9 августа, 2017 Опубликовано 9 августа, 2017 · Жалоба Мой совет -- начните с Verilog. Прошу без холиваров, сугубо ИМХО. Язык это средство... главное понимание схемотехники... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 10 августа, 2017 Опубликовано 10 августа, 2017 · Жалоба Давайте попробуем переписать программу на std_logic?Давайте не будем называть схему программой? Мой совет -- начните с Verilog. Прошу без холиваров, сугубо ИМХО. А удержаться от того, чтобы не высказать своё ИМХО, сил нет, да? Почему-то именно вериложники этим страдают. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться