Лабораторная работа № 1. Исследование дешифратора. Цель работы: получение основных навыков проектирования схем в редакторе пакета Quartus. Изучение функционирования простейшего КЦУ. Задание на работу в лаборатории. 1. Зайдя в свою директорию, на рабочем столе правой клавишей мыши создать кнопку запуска. В открывшемся окне возле кнопки Имя записать Quartus , а возле кнопки Команда активировать Просмотреть и указать путь (файловая система/afs/dcti.sut.ru/soft/quartus). Затем нажать ОК, на рабочем столе появится ярлык Quartus. Пользуясь созданной кнопкой запустить пакет Quartus 7.1. 2.Открыть проект. Для этого в окне File верхнего меню выбрать New project wizard, проверить путь к проекту до папки пользователя, создать в ней папку для работы в лаборатории в течении семестра, например …/homes/students/m0./m0.n../xx, объявить имя проекта и файла верхнего уровня, нажать Next. Окно добавления внешних файлов пока проигнорировать, Next. Выбрать тип кристалла: Cyclone – верхнее окно меню, EP1C6T144C8 – нижнее окно меню. Нажать FINISH. 3. Открыть файл VHDL- редактора. Для этого проделать следующий путь: File – New – VHDL File. При таком выборе откроется окно редактора. На открывшемся поле записать программу функционирования дешифратора на 3 входа. Обратите внимание на то, что в программе имя устройства –dec. Замените его в соответствии с именем вашего проекта или файла верхнего уровня. Программа 1 library ieee; use ieee.std_logic_1164.all; entity dec is port( adr_i: in bit_vector(2 downto 0); data_out: out bit_vector(7 downto 0) ); end dec; architecture BBB of dec is begin p0: process (adr_i) begin case adr_i is when "000"=>data_out<="00000001"; when "001"=>data_out<="00000010"; when "010"=>data_out<="00000100"; when "011"=>data_out<="00001000"; when "100"=>data_out<="00010000"; when "101"=>data_out<="00100000"; when "110"=>data_out<="01000000"; when "111"=>data_out<="10000000"; end case; end process; end ; 5.Сохранить и откомпилировать полученный файл. Путь к компилятору: Processing – Start Compilation, или соответствующий значок верхнего меню редактора. Если компилятор указывает на ошибки, обратиться к преподавателю или лаборанту. 6. Построить временные диаграммы работы устройства. Для этого открыть файл временных диаграмм File – New – Others Files – Vector Waveform File. C помощью двух кликов мышью с левой стороны от вертикальной оси открыть окно Insert Node or Bus, выбрать в нем кнопку Node Finder. В разделе Filter выбрать Pins all, затем нажать List и проверить наличие списка выводов схемы в левом окне. Перенести список в правую часть с помощью кнопки >>, нажать OK. Временные интервалы – клик на обозначении вывода, обращение к опции C бокового меню, выбор в открывшемся окне пути Timing, установка временного интервала в ns. (20ns, 40ns, 80ns). Сохранить файл и обратиться к симулятору: Processing – Start Simulation или соответствующий значок верхнего меню редактора. При получении сообщения об ошибках обратиться к преподавателю или лаборанту. Если симуляция прошла без ошибок, проанализировать полученные диаграммы. Отчет должен содержать программу устройства и диаграммы его работы. В качестве проверки полученных знаний попробуйте самостоятельно составить программу работы шифратора на 4 входа и проанализировать временные диаграммы этого устройства. Внимание! При записи программы по образцу, указанному выше необходимо запись bit_vector заменить на std_logic_vector, adr_i на y_i и data_out на adr_out и, т.к. оператор требует записи всех комбинаций, последняя строка описания поведения устройства имеет следующий вид: when others=>adr_out<=”ZZ” Лабораторная работа № 2. Исследование работы демультиплексора. Цель работы: изучение принципов работы демультиплексора. Написание простейшей программы на VHDL. Постановка задачи. На примере демультиплексора на 3 адресных входа рассмотреть принцип функционирования данного типа КЦУ. Выходы устройства соединить со светодиодной панелью макета , адресные входы и информацию подключить к тумблерам. Имена адресных входов: Аdr_i[2..0], информационного входа - D, выходов Y[7..0], Рекомендуемые интервалы для временных диаграмм: Аdr_i[0] –40нс, Аdr_i[1] –80нс, Аdr_i[2] –160нс, D – 15нс. Порядок выполнения работы. Запустить Quartus 7.1. (/afs/dcti.sut.ru/soft/quartus). Открыть новый проект, прописав его в свою директорию ../homes/students/m0.../m0...n.../xx Создать файл VHDL File и записать в него программу для демультиплексора на 3 адресных входа по образцу, записанному в Прогр.1. Сохранить и откомпилировать файл. Открыть редактор временных диаграмм. Построить диаграммы работы устройства, следуя записанным рекомендациям. Выводы записывать в файл временных диаграмм списком. Для получения списка выводов шины кликнуть на знак + возле ее обозначения. Продемонстрировать временные диаграммы преподавателю. Вызвать планировщик (Pin Planer) и произвести разводку выводов схемы, руководствуясь схемой панели макета. В нижней части полученного окна будет представлен список выводов, в верхней – внешний вид кристалла. Против наименования каждого элемента списка в позиции Location двумя кликами мышью вызвать список выводов кристалла. Затем выбрать один для соединения с выводом устройства в соответствии с выданной схемой макета. (Или левой клавишей мыши отметить название вывода и, не отпуская клавиши, переместить его на ножку кристалла). Например: Аdr_i[0], Аdr_i[1], Аdr_i[2] соединяем с выводами 42, 40 и 38, D – с выводом 48, а выходы Y[7..0] – c выводами 57, 53, 51, 49, 47, 41, 39 и 37. Скомпилировать файл. Результат разводки продемонстрировать преподавателю! Вызвать программатор (Tools - Programmer). С помощью клавиши– Hardware Setup выбрать адаптер – Byteblaster MV. В строке с именем загружаемого файла поставить галочку на пункте Program/Configure. Убедится в том, что макет подключен и запустить программатор (клавиша Start). Результат работы продемонстрировать преподавателю. Отчет по данной работе должен содержать схему устройства, программу и графики работы. Программа. 2. library ieee; use ieee.std_logic_1164.all; entity dms is port( adr_i: in bit_vector(2 downto 0); d: in bit; data_out: out bit_vector(7 downto 0) ); end dms; architecture BBB of dms is begin process (adr_i) begin data_out(0)<=(not(adr_i(0)))and(not(adr_i(1)))and (not(adr_i(2)))and(d); data_out(1)<=(adr_i(0))and(not(adr_i(1)))and (not(adr_i(2)))and(d); data_out(2)<=(not(adr_i(0)))and(adr_i(1))and (not(adr_i(2)))and(d); data_out(3)<=(adr_i(0))and(adr_i(1))and(not(adr_i(2)))and(d ); data_out(4)<=(not(adr_i(0)))and(not(adr_i(1)))and(adr_i(2)) and(d); data_out(5)<=(adr_i(0))and(not(adr_i(1)))and(adr_i(2))and(d ); data_out(6)<=(not(adr_i(0)))and(adr_i(1))and(adr_i(2))and(d ); data_out(7)<=(adr_i(0))and(adr_i(1))and(adr_i(2))and(d); end process; end ; Лабораторная работа № 3 Проектирование 4-разрядного сумматора. Цель работы: Получение навыков работы в пакете Quartus; построение многоуровнего проекта, изучение функционирования простейшего КЦУ. Задание на работу в лаборатории. Построить схему четырехразрядного сумматора, взяв за основу схемы полусумматора и полного одноразрядного сумматора. В редакторе временных диаграмм задать форму входных сигналов и получить диаграммы выходов. Порядок выполнения работы. 4. Через ярлык на рабочем столе произвести загрузку пакета Quartus. 5. Создать новый проект в своей папке xx, назвав его summ. 6. Открыть VHDL файл и записать в него прогр. 1. Сохранить файл под именем add1 и установить его старшим в иерархии проекта. Для этого проделать путь от верхнего меню View –> Utility Windows –> Project Navigator. В левой верхней части экрана откроется окно навигатора. Список файлов открывается средней клавишей (Files). VHDL – файлы относятся файлам, образующим проект. Чтобы установить файл старшим в иерархии, необходимо выбрать его и кликом правой клавишей мыши выбрать Set a Top-Level Entity. 7. Откомпилировать файл. Во время компиляции обращайте внимание на сообщения компилятора, где указывается имя проекта и компилируемого файла. Эта информация всегда поможет вам избежать ошибок. 8. Пользуясь методикой работы 1, открыть файл временных диаграмм и построить диаграммы полусумматора, взяв интервал для a1 - 20ns, а для b1 – 30ns. Сохранить файл. Для симуляции временного файла надо воспользоваться строчкой Simulator Tool меню Processing. Через поиск найти название последнего временного файла и нажать Start. Просмотреть результат, нажав в том же окне справа Simulator Report. Проанализируйте полученный результат, запишите задержку. 9. Открыть новый VHDL файл и записать в него прогр. 2. Сохранить файл под именем add11 и установить его старшим в иерархии проекта. Откомпилировать файл. 10. Построить временные диаграммы одноразрядного сумматора, взяв интервалы для a1 - 20ns, для b1 – 30ns, для c1 – 50ns. Проанализировать результат симуляции. 11.Открыть новый VHDL файл и записать в него прогр. 3. Сохранить файл под именем add4 и установить его старшим в иерархии проекта. Откомпилировать файл. 12.Построить временные диаграммы четырехразрядного сумматора. При построении воспользуйтесь клавишей бокового меню, позволяющей изображать произвольные временные интервалы, на ней изображены два фронта со стрелкой в две стороны. Число a установить равным 10 на интервале 30ns и, затем, на интервале 50ns равным 3. Число b установить равным 7 на интервале 50ns и, затем на интервале 50ns равным 13. Для появления всех разрядов шины на диаграмме кликнуть на + возле имени шины. Проанализируйте результат симуляции. 13. Создать библиотечный модуль 4-разрядного сумматора. Для этого открыть VHDL-файл с прогр. 3, в меню File выберите последовательно Create/Update и Create Symbol Files for Current File. 14. Далее вам необходимо включить в свой проект два файла периферийных устройств. Имена файлов multiplexor, decoder. Все файлы лежат в папке материалы. Ваши действия: File – Open производите поиск afs – dcti.sut.ru – matherials – sk -3kurs – далее до списка файлов. Выбираете multiplexor, записываете в проект – File – Save As и производите поиск согласно пути к своему проекту, указанному в верхней строке экрана. Для записанного файла создайте библиотечный модуль. Аналогичные действия проделайте для файла decoder. 15. Открыть файл графического редактора File – New – Block Diagram/Schematic File. Двумя кликами мыши в поле листа вызвать библиотеку символов и последовательно вывести на лист редактора модули add4, multiplexor, decoder. Кроме этих символов вывести из библиотеки на лист символы gnd, input и output. Входы модуля add4 a[3..0], b[3..0] соединить с примитивами input, выходы суммы S[3..0] со входами data0[…..] модуля multiplexor, а выход c вывести и назвать линию c[0]. К примитиву gnd подвести 3 линии, поименовав их c[1], c[2] и c[3]. Вход data1 модуля multiplexor вывести и поименовать шину c[3..0]. Вход clk модуля multiplexor вывести через input. Выходы модуля multiplexor columns[3..0], определяющие количество используемых сегментных индикаторов, вывести и поименовать линию col[3..0], а выходы outputdata[] соединить со входами indata[3..0] модуля decoder. В таблицу значений параметров модуля multiplexor в строке значений WIDTH заменить 15 на 4. Для обозначения количества индикаторов взять отдельный примитив output. Выходы модуля decoder соединить с примитивом output. Поименовать входы и выходы полученного устройства. Для этого необходимо произвести два клика на названии pin name примитива input и output. Название может не совпадать с именем выводов модулей, но должно содержать одинаковое количество переменных. Например: A[3..0], B[3..0] для обозначения входов, COL[1..0], OUT[8..0] – для обозначения выходов. 16. Созданный файл графического редактора сохранить под именем проекта summ, установить старшим в иерархии и откомпилировать. 17. Открыть Pin Planner и произвести разводку выводов. Входы A[3..0] и B[3..0] соединить с тумблерами (38, 40, 42, 48; 50, 52, 56, 58), вход clk с генератором тактовой частоты макета(16). Выходы COL[1..0] с питанием индикаторов (109, 110), а выходы OUT[8..0] с сегментами, начиная с нулевого (74, 73, 72, 70, 61, 79, 75, 69, 71). Откомпилировать файл планировщика. 18. Подключить макет. Вызвать программатор и, убедившись что загружен нужный файл, подключен требуемый тип кристалла и ByteBlaster, поставить галочку в клетку Program/Configure и нажать Start. Продемонстрировать преподавателю работу устройства на макете. Программа. 3.1 library ieee; use ieee.std_logic_1164.all; entity add1 is port(a1,b1:in BIT;c1,s1:out BIT); end add1; architecture struct_1 of add1 is begin s1<= ((a1 and (not b1)) or ((not a1) and b1)); c1<= a1 and b1; end struct_1; Программа. 3.2 library ieee; use ieee.std_logic_1164.all; entity add11 is port(a2,b2,c1:in BIT;c2,s2:out BIT); end add11; architecture struct_1 of add11 is begin s2<=(a2 xor b2) xor c1; c2<= (a2 and b2) or ((a2 xor b2)and c1); end struct_1; Программа.3.3 library ieee; use ieee.std_logic_1164.all; entity add4 is port(a,b:in bit_vector(3 downto 0); s:out bit_vector(3 downto 0); c : out bit); end add4; architecture structural of add4 is component add1 port(a1,b1:in BIT;c1,s1:out BIT); end component; component add11 port (c1,a2,b2:in BIT; c2,s2:out BIT); end component; signal c_in: bit_vector(2 downto 0); begin p0: add1 port map(a1=>a(0),b1=>b(0),c1=>c_in(0),s1=>s(0)); p1: add11 port map(c1=>c_in(0),a2=>a(1),b2=>b(1),c2=>c_in(1),s2=>s(1)); p2: add11 port map(c1=>c_in(1),a2=>a(2),b2=>b(2),c2=>c_in(2),s2=>s(2)); p3: add11 port map(c1=>c_in(2),a2=>a(3),b2=>b(3),c2=>c,s2=>s(3)); end structural; Отчет должен содержать программы работы устройств с их названиями и временными диаграммами их работы. Лабораторная работа № 4. Исследование работы триггера. Цель работы: изучение принципов функционирования простейшего конечного автомата. Постановка задачи. На примере простейшей ячейки асинхронного RSтриггера и двух синхронных триггеров, D-триггера и JK-триггера, изучить назначение входов и принципы функционирования устройства. Для этого в пакете Quartus записать программы функционирования устройств на языке VHDL, а затем построить временные диаграммы. Рекомендуемые интервалы времени: RS-триггер: s – 80 нс с начальным уровнем 1, r – 50нс с начальным уровнем 0. D – триггер: для сигналов синхронизации – 20нс, информационного D-входа – 90нс с начальным уровнем 1, для s – входа при базовом уровне 1 короткий 0 от 110 до 130 нс, для r – входа при базовом уровне 1 короткий 0 от 270 до 290 нс. JK – триггер: для сигналов синхронизации – 20нс, информационных JKвходов J– 110нс с начальным уровнем 1 и K - 70 нс с начальным уровнем 0, , для s – входа при базовом уровне 1 короткий 0 от 150 до 170 нс, для r – входа при базовом уровне 1 короткий 0 от 30 до 50 нс. . Порядок выполнения работы. 1.Загрузить Quartus, создать проект. 2. Открыть VHDL файл, записать программу 4.1, отражающую работу асинхронного RS- триггера. 3. Сохранить файл, установить его старшим в иерархии и откомпилировать. 4. Открыть редактор временных диаграмм. Построить диаграммы работы. Интервалы выбрать из списка рекомендованных. Зарисовать диаграммы в отчет. 5. Открыть новый VHDL файл, записать программу 4.2, отражающую работу D – триггера. 6. Сохранить файл под другим именем, установить его старшим в иерархии и откомпилировать. 7. Открыть редактор временных диаграмм. Построить диаграммы работы . Интервалы выбрать из списка рекомендованных. Зарисовать диаграммы в отчет. 8. Открыть новый VHDL файл, записать программу 4.3, отражающую работу JK – триггера. 9. Дать имя файлу и сохранить его, установить старшим в иерархии и откомпилировать. 10. . Открыть редактор временных диаграмм. Построить диаграммы работы . Интервалы выбрать из списка рекомендованных. Зарисовать диаграммы в отчет. При получении временных диаграмм для каждого типа триггера результаты демонстрировать преподавателю. Отчет должен содержать программы работы устройств , подкрепленные проверкой на временной диаграмме. Программа 4.1 library ieee; use ieee.std_logic_1164.all; entity trs is generic (delay:time:=2 ns); port( r,s: in std_logic; q,nq: out std_logic ); end trs; architecture arch of trs is signal p,np: std_logic; begin process (r,s) begin if r='0' and s='0' then p<='1' after delay; np<='1' after delay; elsif r='0' and s='1' then p<='0' after 2*delay; np<='1' after delay; elsif r='1' and s='0' then p<='1' after delay; np<='0' after 2*delay; elsif r='1' and s='1'then p<='X'; np<='X'; end if; end process; q<=p; nq<=np; end arch; Программа 4.2 library ieee; use ieee.std_logic_1164.all; entity tr is port( data_i: in std_logic; clk_i: in std_logic; s : in std_logic; r : in std_logic; data_out: out std_logic ); end tr; architecture arch of tr is begin process (clk_i,s,r) begin if r='0' then data_out<='0'; elsif s='0' then data_out<='1'; elsif(rising_edge(clk_i)) then data_out <= data_i; end if; end process; end arch; Программа4.3 library ieee; use ieee.std_logic_1164.all; entity trjk2 is port( clk,s,r,j,k: in std_logic; data_out: out std_logic ); end trjk2; architecture arch of trjk2 is signal q: std_logic; begin process (clk,r,s) begin if r='0' then q<='0'; elsif s='0' then q<='1'; elsif(rising_edge(clk)) then if(j='1') then if(k='0') then q<='1'; elsif(k='1')then q<=(not(q)); end if; elsif (j='0') then if(k='0') then q<=(q or '0'); elsif (k='1') then q<='0'; end if; end if; end if; end process; data_out<=q; end arch; Лабораторная работа № 5. Исследование счетчиков. Цель работы: изучение функционирования схем синхронных счетчиков. Сравнительный анализ синхронных счетчиков. В работе предлагаются для изучения VHDL - программы двоичных четырехразрядных счетчиков: суммирующего, вычитающего и реверсивного. По диаграммам работы проверяется порядок счета счетчиков. Реверсивный счетчик проектируется для работы в кристалле Cyclone EP1C6T144C8. Порядок выполнения работы. Создать новый проект, открыть VHDL- файл и записать программу 5.1, отражающую функционирование синхронного суммирующего счетчика. Сохранить файл и установить его старшим в иерархии. Откомпилировать файл. Построить временные диаграммы работы счетчика, задав интервал синхроимпульсов 20нс. Сохраненный временной(.vwf) файл не хранится по умолчанию в корзине симулятора, поэтому симуляция должна следовать по пути: Processing – Simulator Tool – через поиск … находите необходимый файл – Start. По окончании симуляции нажмите Report и проанализируйте результат.. Открыть новый VHDL - файл и записать программу 5.2, отражающую функционирование синхронного вычитающего счетчика. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать. По методике, изложенной в п.2 построить временные диаграммы работы счетчика, задав интервал синхроимпульсов 20нс. Открыть новый VHDL - файл и записать программу 5.3, отражающую функционирование синхронного реверсивного счетчика. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать. Построить временные диаграммы работы счетчика. Тактовая частота аналогична первому варианту, интервал реверса – 650нс. Вернувшись в файл VHDL, cоздать библиотечный модуль реверсивного счетчика. Из папки материалы, пользуясь методикой, описанной в п. лабораторной работы №3 записать в свой проект 3 файла antiring, multiplexor и decoder и создать для каждого библиотечный модуль. В новом файле графического редактора объединить модули счетчика с вновь созданными модулями периферийных устройств. Синхросигнал завести от кнопки через модуль antiring, выходы счетчика соединить со входами data0[..] модуля multiplexor, вход clk модуля multiplexor обозначить теми же буквами, что записаны в примитиве input для входа clock модуля antiring. Выходы columns модуля multiplexor поименовать col[3..0], отдельно вывести output, назвав его col[0]. В таблице изменить WIDTH на 4, выходы данных модуля multiplexor связать со входами данных модуля decoder. Выходы модуля decoder вывести через output. Реверс установить от любого тумблера через input. Сохранить файл, установить его старшим в иерархии и откомпилировать. Произвести разводку в кристалл для полученного проекта. Контакты кнопки – pin 59, 60. Запрограммировать кристалл и убедиться в правильности работы схемы. Отчёт должен содержать: программы функционирования счётчиков и временные диаграммы их работы. Программа 5.1 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt44 is port( clk: in std_logic; ena : in std_logic; res : in std_logic; q: out std_logic_vector(3 downto 0) ); end cnt44; architecture arch of cnt44 is signal cnt: std_logic_vector(3 downto 0); begin process (clk,res) begin if (res = '0') then cnt<=(others=>'0'); elsif(rising_edge(clk)) then if(ena ='1') then cnt <=cnt + "0001"; end if; end if; end process; q <= cnt; end arch; Программа 5.2 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt441 is port( clk: in std_logic; ena : in std_logic; res : in std_logic; q: out std_logic_vector(3 downto 0) ); end cnt441; architecture arch of cnt441 is signal cnt: std_logic_vector(3 downto 0); begin process (clk,res) begin if (res = '0') then cnt<=(others=>'0'); elsif(rising_edge(clk)) then if(ena ='1') then cnt <=cnt - "0001"; end if; end if; end process; q <= cnt; end arch; Программа 5.3 llibrary ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cnt442 is port( clk: in std_logic; ena : in std_logic; res : in std_logic; rev : in std_logic; q: out std_logic_vector(3 downto 0) ); end cnt442; architecture arch of cnt442 is signal cnt: std_logic_vector(3 downto 0); begin process (clk,res) begin if (res = '0') then cnt<=(others=>'0'); elsif(rising_edge(clk)) then if(ena ='1') then if (rev ='0') then cnt <=cnt + "0001"; elsif (rev='1') then cnt <=cnt - "0001"; end if; end if; end if; end process; q <= cnt; end arch; Лабораторная работа № 6. Исследование регистров. Цель работы: знакомство с работой параллельных и последовательных регистров. В работе предлагаются для изучения регистры сдвига на 8 разрядов последовательный и последовательно-параллельный . А также параллельный четырехразрядный регистр (буферный и защелка) . Порядок выполнения работы. Последовательные регистры. Создать проект. Открыть новый VHDL- файл и записать программу 6.1, отражающую функционирование последовательного регистра на 8 разрядов. Сохранить файл, установить его старшим в иерархии и откомпилировать. Открыть редактор временных диаграмм. Изобразить диаграммы при интервалах синхроимпульса – 20нс, данные –при базовом уровне «0» на интервалах от 10нс до 50 нс уровень «1» и от 130нс до 200нс уровень «1». Зарисовать полученные диаграммы, записать задержки. (для изображения отдельных интервалов необходимо воспользоваться иконкой бокового меню, показанной на рисунке) 19.Открыть новый VHDL- файл и записать программу 6.2, отражающую функционирование последовательно-параллельного регистра на 8 разрядов. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать. 20.По методике, изложенной в п.2, построить временные диаграммы для последовательно-параллельного регистра. 21.Открыть новый VHDL- файл и записать программу 6.3, отражающую функционирование параллельного регистра на 4 разряда. Сохранить файл под новым именем, установить его старшим в иерархии и откомпилировать. 22.Построить диаграмму работы устройства при следующих параметрах: синхронизация – 20нс; данные – D0,D2 – 35нс, D1,D3 – 50нс; ena – 170нс; ctrl – 200нс. 23.Создать библиотечный модуль устройства. Отчет должен содержать программы работы исследуемых устройств и их временные диаграммы. Программа 6.1 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity regsdv is port(clk,d_in:in std_logic; d_out:out std_logic); end regsdv; architecture bb of regsdv is signal shift: std_logic_vector (6 downto 0); begin process (clk) variable i: integer range 7 downto 0; begin if(rising_edge(clk)) then shift(0)<=d_in; for i in 1 to 6 loop shift(i)<=shift(i-1); end loop; d_out<=shift(6); end if; end process; end bb; Программа 6.2 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity regsdv1 is port(clk,d_in:in std_logic; d_out:out std_logic_vector (7 downto 0)); end regsdv1; architecture bb of regsdv1 is signal shift: std_logic_vector (7 downto 0); begin process (clk) variable i: integer range 7 downto 0; begin if(rising_edge(clk)) then shift(0)<=d_in; for i in 1 to 7 loop shift(i)<=shift(i-1); end loop; end if; end process; d_out<=shift; end bb; Программа 6.3 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity reg4 is port( data_i: in std_logic_vector(3 downto 0); clk_i: in std_logic; ena : in std_logic; ctrl : in std_logic; data_out: out std_logic_vector(3 downto 0) ); end reg4; architecture arch of reg4 is signal regist: std_logic_vector(3 downto 0); begin process (clk_i) begin if(rising_edge(clk_i)) then if(ena ='1') then regist <= data_i; end if; end if; end process; data_out <= regist when ctrl = '1' else "ZZZZ"; end arch;