
-
Что такое FPGA, как расшифровывается, принцип хранения конфигурации
-
Что такое CPLD, как расшифровывается, принцип программирования
-
Почему FPGA микросхемы нужно конфигурировать каждый раз после включения, а CPLD нет.
-
В чем состояло новшество компании Altera, когда они разработали CPLD
-
Мультиплексор, принцип работы, зачем применяется, как построить на логических элементах, как описать на VHDL
-
Сдвиговый регистр, как устроен, принцип работы, зачем применяется, как построить на логических элементах, как описать на VHDL
-
D-триггер, как работает, назвать назначение всех выводов
-
Регистр как устроен, принцип работы, зачем применяется, как описать на VHDL
-
Синхронные и асинхронные схемы, чем отличаются, почему предпочтение за синхронными схемами
-
Что такое конвейеризация, как и зачем применяется, к каким дополнительным эффектам приводит
-
Чем ограничена сверху максимальная тактовая частота сконфигурируемой ПЛИС
-
Что такое тактовая частота
-
Что такое speed grade
-
Что такое rising edge и falling edge
-
Сколько состояний у сигнала типа std_logic в VHDL, что это за состояния, каким физическим состояниям они соответствуют.
-
Z-состояние
-
Чем отличаются типы std_logic и std_ulogic
-
Какие языки программирования используются для ПЛИС? На каких уровнях работают.
-
Меандр
-
Почему для тактирования предпочтителен меандр
-
Если первая микросхема выставляет данные по высокому (низкому) фронту, то по какому фронту вторая должна их защелкивать?
-
Что такое времена Tsetup и Thold для триггера
-
Чем сигнал отличается от переменной
-
Что такое таблица истинности
-
Таблица истинности для логических функций and, or, xor, xnor, not
-
Для каких целей разрабатывались VHDL, Verilog
-
Как осуществляется подтягивание к напряжению питания, земле на цифровой линии
-
Какое физическое представление имеют состояния сигнала типа std_logic
-
Что такое LUT, DCM, КЛБ, блочная память
-
Что такое RAM и ROM память
-
Как передать данные из одного тактового домена в другой
-
Для каких целей в ПЛИС располагают DCM-модули
-
Для чего используется Z-состояние в ПЛИС
-
Создается ли под переменную регистр, под сигнал
-
В каких случаях предпочтительно использовать оператор case, а в каких if
-
Зачем для сигналов/переменных типа integer прописывают диапазон принимамых значений, какое максимальное (минимальное) значения может принимать сигнал типа integer
-
Как объявить сигнал в виде массива элементов типа integer (std_logic_vector)
-
Что такое банк выводов
-
Зачем выводы ПЛИС объединены в несколько банков
-
Для чего разные банки ПЛИС запитывают от разных напряжений
-
Почему тактовый сигнал надо подавать на специальные тактовые выводы ПЛИС
-
Что такое джиттер
-
Зачем применяется дублирование регистров
-
Какие две основные стратегии разводки используются компилятором
-
Почему питание кристаллов ПЛИС понижается от семейства к семейству
-
Какие режимы загрузки возможны для микросхем семейства Cyclone II
-
Зачем используется сжатие файла конфигурации
-
Из каких линий состоит интерфейс конфигурирования
-
Как выбирается частота конфигурирования в AS-режиме
-
Как ПЛИС сигнализирует о завершении состояния конфигурирования
-
Как ПЛИС сигнализирует о завершении состояния инициализации
-
Как заставить ПЛИС провести реконфигурацию
-
Что будет, если в процессе конфигурации произойдет ошибка
-
Что такое метастабильное состояние триггера
-
Почему нельзя рассчитывать на 100% использование ресурсов ПЛИС
-
Почему необходимо учитывать максимальную температуру окружающей среды проектируемого на ПЛИС устройства
-
Основные 3 ступени создания загрузочного файла ПЛИС, что на них происходит (Mapping, Placing and Routing, Bitstream Generation)
-
Что такое разрешающая таблица, для чего она используется, напишите разрешающую таблицу для типа std_logic
-
Зачем разные банки ввода/вывода иногда запитывают разным номинальным напряжением питания
-
Зачем в порты ввода/вывода встраивают подтягивающие резисторы
-
Зачем по питанию высокоскоростных микросхем ставят блокировочные конденсаторы
-
Почему блокировочные конденсаторы разного номинала
-
Какие основные правила размещения блокировочных конденсаторов
-
Достоинства и недостатки керамических конденсаторов
-
Достоинства и недостатки танталовых конденсаторов
-
Зачем по цепям питания устанавливают LC-фильтры и проходные фильтры
-
Какие два основных типа стабилизаторов питания существуют
-
Достоинства и недостатки линейных стабилизаторов
-
Достоинства и недостатки импульсных стабилизаторов
-
Почему сигнальные слои печатной платы обычно перемежают слоями земли
-
Почему сигнальные проводники на соседних слоях стараются делать взаимно перпендикулярными
-
Зачем на печатных платах применяют множество сплошных слоев земли и питания
-
Почему в настоящее время преобладают последовательные интерфейсы передачи данных, а не параллельные
-
Почему высокоскоростные линии должны иметь строго определенное номинальное волновое сопротивление
-
Что такое эквивалентный вентиль
-
Почему в новых разработках желательно применение новых семейств ПЛИС
-
Что такое метод троирования, как он помогает повысить радиационную стойкость
-
Каковы основные области применения ПЛИС
-
Почему вычислительная мощность ПЛИС в алгоритмах цифровой обработки значительно выше процессорной
Ниже приведены листинги программ на VHDL с заданиями к ним. Все ошибки, которые вы должны найти и поправить носят в большей или меньшей степени принципиальный характер. Это значит, что дело точно не в пропущенной точке с запятой, например.
-
Чем плох нижеприведенный код, как его можно улучшить:
signal data1, data2, data3 : std_logic_vector(3 downto 0);
…
process(clk)
begin
if rising_edge(clk) then
if (data1+data2+data3 = “000100”) then
…
end if;
end if;
end process;
-
Чем плох нижеприведенный код, как его можно улучшить:
signal data1, data2, data3 : std_logic_vector(3 downto 0);
…
process(clk)
variable result : std_logic_vector(5 downto 0);
begin
if rising_edge(clk) then
result := data1+data2+data3;
if (result = “001000”) then
…
end if;
end if;
end process;
-
Чем плох нижеприведенный код, как его можно улучшить:
signal data1, data2 : std_logic_vector(3 downto 0);
…
process(clk)
variable result : std_logic_vector(5 downto 0);
begin
if rising_edge(clk) then
result := data1+data2;
if (result = “000000”) then
…
end if;
end if;
end process;
-
Как можно упростить следующий код:
signal x1, x2 : std_logic;
…
process(clk)
begin
if rising_edge(clk) then
if (x1 = ‘0’) then
x2 <= ‘1’;
elsif ( x1 = ‘1’) then
x2 <= ‘0’;
end if;
end if;
end process;
-
Вася написал следующий код с целью получить максимальное быстродействие, почему он не достиг своей цели? помогите Васе:
signal data1, data2, data3, data4 : std_logic_vector(3 downto 0);
signal data_result : std_logic_vector(9 downto 0);
…
process(clk)
variable res1, res2 : std_logic_vector(4 downto 0);
variable result : std_logic_vector(9 downto 0);
begin
if rising_edge(clk) then
res1 := data1 + data2;
res2 := data3 + data4;
result := res1*res2;
data_result <= result;
end if;
end process;
-
Переделайте кривой код в нормальный:
signal counter : integer range 0 to 127;
process(clk)
begin
if rising_edge(clk) then
if (counter < 23) then
counter <= counter + 1;
else
counter <= 0;
end if;
…
end if;
end process;
-
Тут можно немного оптимизировать с целью уменьшения используемых ресурсов ПЛИС. Что?
process(clk)
variable integer;
begin
if rising_edge(clk) then
…
counter := counter + 1;
if (counter = 16) then
counter := 0;
end if;
…
end if;
end process;
-
Что скажет компилятор, увидев такой код? Почему он это скажет?
signal flag : std_logic;
signal counter integer range 0 to 127;
…
process(clk)
begin
if rising_edge(clk) then
counter <= counter + 1;
end if;
end process;
process(clk)
begin
if rising_edge(clk) then
flag <= '0';
if (counter = 127) then
counter <= 0;
flag <= '1';
end if;
…
end if;
end process;
-
Что скажет компилятор, увидев такой код? Почему он это скажет?
signal flag : std_logic;
…
process(clk)
variable counter integer range 0 to 127;
begin
if rising_edge(clk) then
counter := counter + 1;
if (counter = 127) then
counter := 0;
end if;
end if;
end process;
process(clk)
begin
if rising_edge(clk) then
flag <= '0';
if (counter = 127) then
flag <= '1';
end if;
…
end if;
end process;
-
Чем плох такой код с точки зрения быстродействия? Как его переписать?
signal a : std_logic_vector(2 downto 0);
…
process(clk)
begin
if rising_edge(clk) then
if (a = “110”) then
…
elsif (a = “101”) then
…
elsif (a = “100”) then
…
else
…
end if;
end if;
end process;
-
Попробуйте преобразовать код к более эффективному (подсказка: посмотрите двоичные значения чисел в условиях, можно изменить тип сигнала при необходимости)
signal a : integer range 0 to 63;
…
process(clk)
begin
if rising_edge(clk) then
if (a<=15) then -- <= знак меньше или равно, >= знак больше или равно
…
elsif (a > =16 and a<32) then
…
elsif (a > =32) then
…
end if;
end if;
end process;
signal a : std_logic_vector(2 downto 0);
…
-
Чему равно значение a в точке 2, если в точке 1 counter равен “000”?
signal counter : std_logic_vector(2 downto 0) :=”000”;
process(clk)
variable a : std_logic_vector(3 downto 0) := “000”;
begin
if rising_edge(clk) then
--точка 1
counter <= counter + 1;
case counter is
when “001” =>
a := “1100”;
when “010 =>
a := “1010”;
when others =>
a := “0110”
end case;
--точка 2
end if;
end process;
-
Чему равно значение a в точке 2, если в точке 1 counter равен “000”?
process(clk)
variable counter : std_logic_vector(2 downto 0) :=”000”;
variable a : std_logic_vector(3 downto 0) := “0000”;
begin
if rising_edge(clk) then
--точка 1
counter := counter + 1;
case counter is
when “001” =>
a := “1100”;
when “010 =>
a := “1010”;
when others =>
a := “0110”
end case;
--точка 2
end if;
end process;
-
Чему равно значение a в точке 2, если в точке 1 counter равен “001”?
ssignal a : std_logic_vector(3 downto 0) := “0000”;
process(clk)
variable counter : std_logic_vector(2 downto 0) :=”000”;
begin
if rising_edge(clk) then
--точка 1
counter := counter + 1;
case counter is
when “001” =>
a <= “1100”;
when “010 =>
a <= “1010”;
when others =>
a <= “0110”
end case;
--точка 2
end if;
end process;
-
Найдите ошибку в программе и исправьте
ENTITY dev is
PORT (
clk : in std_logic;
port1 : in std_logic_vector (3 downto 0);
port2 : out std_logic_vector (3 downto 0);
equ : out std_logic
);
END dev;
ARCHITECTURE Behavior OF dev IS
BEGIN
process(clk)
begin
if rising_edge(clk) then
port2 <= port1 xor “1100”;
if port2 = “0000” then
equ <= ‘1’;
else
equ <= ‘0’;
end if;
end if;
end process
END Behavior;