Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЛИС_20_01_15_1 / Список доп. вопросов_2014+.doc
Скачиваний:
28
Добавлен:
12.02.2015
Размер:
80.38 Кб
Скачать
  1. Что такое FPGA, как расшифровывается, принцип хранения конфигурации

  2. Что такое CPLD, как расшифровывается, принцип программирования

  3. Почему FPGA микросхемы нужно конфигурировать каждый раз после включения, а CPLD нет.

  4. В чем состояло новшество компании Altera, когда они разработали CPLD

  5. Мультиплексор, принцип работы, зачем применяется, как построить на логических элементах, как описать на VHDL

  6. Сдвиговый регистр, как устроен, принцип работы, зачем применяется, как построить на логических элементах, как описать на VHDL

  7. D-триггер, как работает, назвать назначение всех выводов

  8. Регистр как устроен, принцип работы, зачем применяется, как описать на VHDL

  9. Синхронные и асинхронные схемы, чем отличаются, почему предпочтение за синхронными схемами

  10. Что такое конвейеризация, как и зачем применяется, к каким дополнительным эффектам приводит

  11. Чем ограничена сверху максимальная тактовая частота сконфигурируемой ПЛИС

  12. Что такое тактовая частота

  13. Что такое speed grade

  14. Что такое rising edge и falling edge

  15. Сколько состояний у сигнала типа std_logic в VHDL, что это за состояния, каким физическим состояниям они соответствуют.

  16. Z-состояние

  17. Чем отличаются типы std_logic и std_ulogic

  18. Какие языки программирования используются для ПЛИС? На каких уровнях работают.

  19. Меандр

  20. Почему для тактирования предпочтителен меандр

  21. Если первая микросхема выставляет данные по высокому (низкому) фронту, то по какому фронту вторая должна их защелкивать?

  22. Что такое времена Tsetup и Thold для триггера

  23. Чем сигнал отличается от переменной

  24. Что такое таблица истинности

  25. Таблица истинности для логических функций and, or, xor, xnor, not

  26. Для каких целей разрабатывались VHDL, Verilog

  27. Как осуществляется подтягивание к напряжению питания, земле на цифровой линии

  28. Какое физическое представление имеют состояния сигнала типа std_logic

  29. Что такое LUT, DCM, КЛБ, блочная память

  30. Что такое RAM и ROM память

  31. Как передать данные из одного тактового домена в другой

  32. Для каких целей в ПЛИС располагают DCM-модули

  33. Для чего используется Z-состояние в ПЛИС

  34. Создается ли под переменную регистр, под сигнал

  35. В каких случаях предпочтительно использовать оператор case, а в каких if

  36. Зачем для сигналов/переменных типа integer прописывают диапазон принимамых значений, какое максимальное (минимальное) значения может принимать сигнал типа integer

  37. Как объявить сигнал в виде массива элементов типа integer (std_logic_vector)

  38. Что такое банк выводов

  39. Зачем выводы ПЛИС объединены в несколько банков

  40. Для чего разные банки ПЛИС запитывают от разных напряжений

  41. Почему тактовый сигнал надо подавать на специальные тактовые выводы ПЛИС

  42. Что такое джиттер

  43. Зачем применяется дублирование регистров

  44. Какие две основные стратегии разводки используются компилятором

  45. Почему питание кристаллов ПЛИС понижается от семейства к семейству

  46. Какие режимы загрузки возможны для микросхем семейства Cyclone II

  47. Зачем используется сжатие файла конфигурации

  48. Из каких линий состоит интерфейс конфигурирования

  49. Как выбирается частота конфигурирования в AS-режиме

  50. Как ПЛИС сигнализирует о завершении состояния конфигурирования

  51. Как ПЛИС сигнализирует о завершении состояния инициализации

  52. Как заставить ПЛИС провести реконфигурацию

  53. Что будет, если в процессе конфигурации произойдет ошибка

  54. Что такое метастабильное состояние триггера

  55. Почему нельзя рассчитывать на 100% использование ресурсов ПЛИС

  56. Почему необходимо учитывать максимальную температуру окружающей среды проектируемого на ПЛИС устройства

  57. Основные 3 ступени создания загрузочного файла ПЛИС, что на них происходит (Mapping, Placing and Routing, Bitstream Generation)

  58. Что такое разрешающая таблица, для чего она используется, напишите разрешающую таблицу для типа std_logic

  59. Зачем разные банки ввода/вывода иногда запитывают разным номинальным напряжением питания

  60. Зачем в порты ввода/вывода встраивают подтягивающие резисторы

  61. Зачем по питанию высокоскоростных микросхем ставят блокировочные конденсаторы

  62. Почему блокировочные конденсаторы разного номинала

  63. Какие основные правила размещения блокировочных конденсаторов

  64. Достоинства и недостатки керамических конденсаторов

  65. Достоинства и недостатки танталовых конденсаторов

  66. Зачем по цепям питания устанавливают LC-фильтры и проходные фильтры

  67. Какие два основных типа стабилизаторов питания существуют

  68. Достоинства и недостатки линейных стабилизаторов

  69. Достоинства и недостатки импульсных стабилизаторов

  70. Почему сигнальные слои печатной платы обычно перемежают слоями земли

  71. Почему сигнальные проводники на соседних слоях стараются делать взаимно перпендикулярными

  72. Зачем на печатных платах применяют множество сплошных слоев земли и питания

  73. Почему в настоящее время преобладают последовательные интерфейсы передачи данных, а не параллельные

  74. Почему высокоскоростные линии должны иметь строго определенное номинальное волновое сопротивление

  75. Что такое эквивалентный вентиль

  76. Почему в новых разработках желательно применение новых семейств ПЛИС

  77. Что такое метод троирования, как он помогает повысить радиационную стойкость

  78. Каковы основные области применения ПЛИС

  79. Почему вычислительная мощность ПЛИС в алгоритмах цифровой обработки значительно выше процессорной

Ниже приведены листинги программ на VHDL с заданиями к ним. Все ошибки, которые вы должны найти и поправить носят в большей или меньшей степени принципиальный характер. Это значит, что дело точно не в пропущенной точке с запятой, например.

  1. Чем плох нижеприведенный код, как его можно улучшить:

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;

  1. Чем плох нижеприведенный код, как его можно улучшить:

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;

  1. Чем плох нижеприведенный код, как его можно улучшить:

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;

  1. Как можно упростить следующий код:

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;

  1. Вася написал следующий код с целью получить максимальное быстродействие, почему он не достиг своей цели? помогите Васе:

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;

  1. Переделайте кривой код в нормальный:

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;

  1. Тут можно немного оптимизировать с целью уменьшения используемых ресурсов ПЛИС. Что?

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;

  1. Что скажет компилятор, увидев такой код? Почему он это скажет?

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;

  1. Что скажет компилятор, увидев такой код? Почему он это скажет?

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;

  1. Чем плох такой код с точки зрения быстродействия? Как его переписать?

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;

  1. Попробуйте преобразовать код к более эффективному (подсказка: посмотрите двоичные значения чисел в условиях, можно изменить тип сигнала при необходимости)

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

  1. Чему равно значение 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;

  1. Чему равно значение 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;

  1. Чему равно значение 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;

  1. Найдите ошибку в программе и исправьте

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;