Проектирование компьютерного технического устройства
Методическое пособие - Компьютеры, программирование
Другие методички по предмету Компьютеры, программирование
? выхода Error:
OK<= not (Error) (4.2)
Входные данные описаны, как вектор типа std_logic_vector разрядностью 9 бит.
Старший бит входных данных - бит четности.
Если Error равен 1, то входные данные нечетны, что остановит действие всего проекта.
Текст программы моделирования приведен в приложении. Результаты моделирования приведены ниже.
Рисунок 4.8 - Результаты моделирования блока проверки на нечетность
Блок шифратор. В заголовке объекта проектирования (entity) указаны входные и выходные сигналы данных блока:
Data: std_logic_vector (3 downto 0);: std_logic_vector (9 downto 0).
Входные данные Data имеют разрядность 4 бит, так как нам минимально необходимо всего лишь они, с помощью которых мы определяем коэффициент деления частоты. Выходной сигнал К имеет разрядность 10 бит, так как это минимальное число бит необходимое для представления коэффициента деления частоты в двоичной форме.
Архитектура состоит из одного процесса. При описании процесса будем использовать список чувствительности, содержащий все входные сигналы интерфейса устройства, так как временные параметры приостановки процесса отсутствуют. Для реализации выбора нужного коэффициента деления в структуре процесса используем оператор case. Он реализует 8 условий, при котором коэффициент равен определенному числу, представленному в двоичной форме:
when "0001" => K K <= "1011011100";
when "1000" => K <= "1010000100";
when "1001" => K null;
Текст программы моделирования приведен в приложении. Результаты моделирования приведены ниже.
Рисунок 4.9 - Результаты моделирования блока Шифратор
Глядя на рисунок 4.9, можно сказать, что данный блок работает правильно.
Описание проекта на ЯОА
Весь проект состоит из множества файлов, которые мы объединяем при помощи одного, BlackPack.vhdl, он то и является верхней частью иерархии. Данный файл состоит из компонентов, которые мы объединяем в один файл с помощью операторов port map, которые и являются связывающими файлы нижней иерархии. Вышеуказанный файл является реализацией на языке описания аппаратуры спецификации всего устройства. Он состоит из entity, в котором описаны все входные и выходные сигналы данного продукта:
: in STD_LOGIC;: in STD_LOGIC;: in STD_LOGIC_VECTOR (8 downto 0);: out STD_Logic;: out STD_LOGIC.
Данное описание в данном разделе проекта соответствует его спецификации, поэтому для подробной информации можно посмотреть таблицы 4.1 и 4.2.
Далее идет соединение блоков:
m1: rg port map (Str=>Str, DataRG=>Data, DataOut_RG=>Data_in, Reset=>Reset);
m2: mod2 port map (Str=>Str, Data_mod => Data_in, OK => OK);: GI port map (OK => OK, F => Clk);_k1 OutData);
Сигналы N_k1 и N_k2 являются промежуточными, которые приобретают значения старших четырех бит информации и младших соответственно.
Пример моделирования одного из наборов представлен на рис. 4.10. На вход поступает такой набор - Str (строб ввода), на который поступает сигнал тактовой частоты 65 МГц, Reset (сброс) устанавливает данное устройство в начальное состояния, когда он равен 1, а потом при установлении в 0 данное устройство начинает свою работу, и Data, которые и являются информационными данными, которые заносятся в регистр, после которого данные присваиваются переменной Data_in. Информационные данные поступают на блок проверки на нечетность, и если входные данные являются нечетным числом, то сигнал ОК равен 1, иначе 0. Этот сигнал дает старт для работы генератора импульсов clk с частотой 65 МГц. Импульсы с данной частотой поступают на управляемый делитель частоты. А параллельно с этим информационные данные разделяются на два полубита N_k1 и N_k2.
N_k1 <= Data_in(7)& Data_in(6)& Data_in(5)& Data_in(4);_k2 <= Data_in(3)& Data_in(2)& Data_in(1)& Data_in(0);
С помощью сигнала N_k1, который поступает на шифратор, определяется коэффициент деления частоты, D_K. Значение D_K поступает на управляемый делитель частоты, на выходе которого имеем сигнал clk_out, который представляет собой clk/D_K. Теперь с этого момента синхроимпульсом для распределителя является clk_out. После того, как сигнал Ready стал равен 1, это означает то, что распределитель импульсов готов к формированию сигнала Data_n2. Этот сигнал поступает на блок дизъюнкторов, где собственно и формируются импульсные последовательности, результатом его работы является сигнал Data_m. Он поступает на коммутатор импульсов, где при помощи сигнала N_k2 и определяется какой импульсной последовательности и будет равен выходной сигнал OutData.
Рисунок 4.10 - Пример моделирования
Глядя на рисунок 4.10 можно сказать, что данное устройство работает правильно.
Полный текст (в теле пояснительной записки приводить полный текст не надо - его выносят в приложения).
Str,DataRG=>Data,DataOut_RG=>Data_in,Reset=>Reset);:mod2portmap(Str=>Str,Data_mod=>Data_in,OK=>OK);:GIportmap(OK=>OK,F=>Clk);_k1<=Data_in(7)&Data_in(6)&Data_in(5)&Data_in(4);_k2<=Data_in(3)&Data_in(2)&Data_in(1)&Data_in(0);:Kodportmap(Data_Kod=>N_k1,K=>D_K);:UDCportmap(Clk_in=>Clk,K_in=>D_K,Clk_out=>Clk_out);:Rasp_impportmap(Clk=>Clk_out,Ready=>Ready,DataOut_R=>Data_n2);:BlockDportmap(Data_B=>Data_n2,DataOut_B=>Data_m);:Kom_impportmap(Data_N=>N_k2,Data_BD=>Data_m,DataOut_K=>OutData);osn;.vhdlIEEE;IEEE.std_logic_1164.a