Необходимые материалы для лекции Logisim-04zip и Quartus-04.zip.
Основным составным элементом любого процессора, определяющего его возможности является регистр.
Регистром называется последовательностное устройство, предназначенное для приёма, хранения, сдвига (простых преобразований) данных в двоичном коде. Базовыми элементами регистра являются триггеры, которые дополняются комбинационными логическими элементами для реализации различных связей между триггерами и управления приёмом/ передачей информации. Разрядность регистра определяется количеством триггеров, применяемых для его реализации.
Под простыми преобразованиями понимают сдвиг чисел на заданное количество разрядов, а также преобразования последовательного кода в параллельный или параллельного в последовательный.
Регистры классифицируют:
По функциональным свойствам (по виду выполняемых функций):
По способу ввода и вывода информации:
В параллельном регистре на тактируемых D-триггерах код подается на информационные входы всех триггеров и записывается с приходом тактового импульса. В литературе параллельные регистры на D-триггерах называют регистры-защелки. На рисунке 4.1.а приведена функциональная схема простейшего регистра защелки на 4 триггерах (4-х разрядный параллельный регистр). На рисунке 4.1.б приведено его условное графическое обозначение, где D0-D3 - входы данных. С - тактовый вход управления записью в регистр. Q0-Q3 - выходы данных. Условное буквенное обозначение регистров - RG.
(рис 4.1)
Преимуществом приведенного регистра является то, что не требуется предварительная очистка его триггеров. Перевод в состояние логических "1" ли "0" осуществляется за один такт прямым и инверсным сигналом на входе D.
Параллельные регистры обладают следующими свойствами:
Помимо управления записью в регистр может существовать потребность в управлении выходами регистра. Это может потребоваться при работе нескольких регистров с одной шиной. Исходя из знаний о комбинационной логике можно предположить, что для управления выходом можно использовать логический элемент "И" (AND)/ "И-НЕ". В литературе [1] можно найти схемы с управлением выходом на данном элементе (как показано на рисунке 4.2). Но это категорически неверно.
(рис 4.2)
Проверить данное утверждение можно на практике, реализовав схему регистра, подобного приведенному на рисунке выше в среде Logisim Evolution. Для этого реализуем три четырёхразрядных регистра. Создав новый файл, добавим в него новую схему и назовем ее d_reg. В новой схеме разместим четыре D-триггера вертикально и объединим все тактовые входы (рисунок 4.4.а). Объединенный вход подключим к элементу вход. Метке входа присвоим имя С (рисунок 4.4.б).
(рис 4.3)
Далее необходимо добавить входы данных. Для проектируемого регистра будет использоваться один многоразрядный вход. В свойстве "Биты данных" элемента вход задается разрядность - 4, свойству метки задается "DIN" (рисунок 4.4).
(рис 4.4)
К входу необходимо подключить элемент шины, который собирает множество сигнальных проводов в единый графический элемент с соответствующей разрядностью. Данный элемент имеет наименование "Разветвитель" и находится в разделе "Проводка". Для входа DIN разветвителю необходимо определить разрядность в свойстве "Разрядность входа" - 4, также задать 4 свойству "Веерный выход". В свойстве "Внешний вид" выбрать "Леворукий", а в свойстве "Направление" - "Восток". Остальные свойства оставить неизменными (рисунок 4.5).
(рис 4.5)
Далее будут выполнены соединения входов D каждого триггера в разветвитель как показано на рисунке 4.6. Верхний триггер будет определяется младшим и подключается к проводу 0, а нижний - старший, подключается к проводу 3 разветвителя.
(рис 4.6)
Далее прямые выходы Q триггеров подключим к предварительно размещенным четырем двухвходовым элементам "И". Один вход каждого элемента "И" будет объединен и подключен к добавленному входу EN_O. Выходы элементов "И" заведем также в шину (разветвитель). В данном случае разветвителю необходимо изменить свойство "Направление" на "Запад".
Следующим шагом требуется разместить выход с разрядность 4. Свойству "Метка" присвоить - "DOUT". Входы S и R триггеров оставить неподключенными. Итоговая функциональная схема регистра защелки приведена на рисунке 4.7.
(рис 4.7)
Перейдя в редактор внешнего вида, сформируем графическое обозначение регистра (рисунок 4.8).
(рис 4.8)
На главной схеме проекта построим схему, которая отражает задачу записи данных с выходов двух регистров в третий посредством общей шины, но предварительно выход первого регистра подключим к отдельному выходу для проверки работоспособности схемы. Промоделируем запись в регистры, а также чтение из них (рисунок 4.9).
(рис 4.9)
После объединения выходных шин двух регистров R1 и R2 система моделирования сформирует ошибку (рисунок 4.10).
(рис 4.10)
Система предполагает, что при возникновении лог. "1" на одном из выходов регистра R2, при наличии управляющего сигнала на входе Out_R2, ток потечет помимо входа регистра R3 на соответствующий выход первого регистра, на котором присутствует сигнал лог. "0". Тем самым в цепи возникает короткое замыкание. Исходя из этого, регистры защелки не могут применять в качестве элементов управления выходом обычные вентили "И". Для объединения подобных регистров в схемотехнике применяются мультиплексоры либо шинные формирователи.
При проектировании регистров, если требуется добавить управление чтением данных, применяются специальные элементы с третьим состоянием (Z) - управляемые буферы. На этих же элементах строятся микросхемы, именуемые шинными формирователями [2].
Третье состояние элемента - состояние с высоким импедансом, то есть обратный ток, который может протекать в направлении данного элемента ничтожно мал и не приводит к выходу из строя схемы. На рисунке 4.11 приведена схема элемента с третьим состоянием. На примере данного элемента можно объяснить работу управляемых буферов. При лог. "1" на входе Z транзистор VT3 открыт, ток с выхода логического элемента стекает через диоды, тем самым закрывая транзисторы VT1 и VT2, разрывая связь логического элемента с выходом Y.
(рис 4.11)
Изменим внутреннее устройство регистра, заменив вентили на управляемые буферы. В среде Logisim Evolution данные узлы находятся в блоке "Элементы", там имеется буфер как с прямым, так и с инверсным выходом. Измененная схема приведена на рисунке 4.12. Сохранив изменения в схеме регистра, вернемся на главную схему проекта и пронаблюдаем, что ошибка с подключением регистров в общую шину исчезла (рисунок 4.13).
(рис 4.12)
(рис 4.13)
Ярким примером применения управляемых буферов являются микроконтроллеры, в которых выводы могут назначаться входами/выходами или быть двунаправленными в зависимости от выполнения программы, меняя свое назначение в моменте ее работы.
В среде Logisim Evolution смоделируем упрощенное управление выводом, на примере микроконтроллера Microchip. В данных микроконтроллерах имеется регистр TRIS (регистры именуются по именам портов TRISA, TRISB и т.д), управляющий направлением работы вывода, и регистр PORT (регистры именуются по именам портов PORTA, PORTB), который принимает или передает данные. Если в регистре TRIS какой-либо бит установлен в "1", то вывод работает на вход и данные с вывода поступают в соответствующий триггер регистра PORT и наоборот. На рисунке 4.14 приведена функциональная схема управления выводами микроконтроллера с применением управляющих буферов.
(рис 4.14)
В среде Logisim Evolution регистр находится в разделе "Память" и представляет собой регистр - защелку (рисунок 4.15). Он имеет следующие входы/выходы: 1 - вход данных; 2 - управляющий сигнал разрешения записи WE - write enable; 3 - управляющий сигнал Clock; 4- R - управляющий сигнал сброса (reset); 5 - прямые выходы данных Q.
Запись в регистр может осуществляться при наличии сигнала WE (лог. "1") и сигнала Clock. В свойствах элемента можно выбрать различные варианты срабатывания регистра на данные сигналы: "Передний фронт", "Задний фронт", "Высокий уровень", "Низкий уровень". В свойстве "Биты данных" задается разрядность регистра (по умолчанию 8).
(рис 4.15)
На рисунке 4.16 приведена эквивалентная функциональная схема данного регистра, срабатывающая по переднему фронту сигнала Clock.
(рис 4.16)
В листинге 4.1 приведен код на языке Verilog HDL, описывающий представленный на рисунке 4.16 регистр.
module parallel_reg (
input wire [7:0] D, // Параллельный вход данных
input wire Clock, //Синхросигнал
input wire R, // Асинхронный сброс
input wire WE, // Вход управления записи
output reg [7:0] Q // Выходные данные
);
// Процесс, описывающий поведение регистра
always @(posedge Clock or posedge R) begin
if (R) begin
Q <= 8'b0; // Асинхронный сброс: выход в 0
end else begin
if (WE) begin
Q <= D; // Запись данных при фронте Clock и наличии WE
end
end
end
endmodule
В ядре процессора регистры - параллельные. Они мультиплексируются в шины, а адресуются блоком управления (дешифратором или демультиплексором).
В практической работе 3 необходимо выполнить проектирование регистрового банка памяти.
Сдвиговый регистр - это регистр, содержимое которого при подаче управляющего сигнала "сдвиг" сдвигается в сторону старших либо в сторону младших разрядов. Сдвиговые регистры применяются для преобразования последовательного кода в параллельный и наоборот. Сдвиговые регистры применяются при организации передачи данных. На рисунке 4.17 показан пример последовательно-параллельного регистра со сдвигом в сторону старших разрядов (вправо), реализованный в среде Logisim Evolution. На функциональной схеме входы имеют следующее назначение:
Триггеры объединяются следующим образом: прямой выход младшего триггера подключается к входу D старшего триггера. В сдвиговых регистрах старший триггер может иметь дублирующий Q выход SDO - serial data output, последовательный выход данных.
(рис 4.17)
Для закрепления информации предлагается реализовать описываемый регистр. К нему подключить инструмент цифровой осциллятор (осциллограф) для наблюдения операции сдвига. В качестве тестового сигнала будет подан сигнал "1" на вход SDI. Перед вторым тактом он будет снят. В итоге на последнем такте синхросигнала двоичный код на выходе регистра должен иметь вид 1000. На рисунках 4.18 - 4.20 показано начало, промежуточное значение и окончание процесса моделирования. Провода, идущие к осциллографу, для информативности подписаны инструментом "Редактировать текст". Свойство осциллографа "Количество входов" задано равным 5.
(рис 4.18)
(рис 4.19)
(рис 4.20)
Обычно при создании параллельно-последовательных сдвиговых регистров, параллельные входы данных подключаются к асинхронным входам установки (S) и сброса (R) триггеров. Для параллельной записи в регистр добавляется дополнительный вход управления, обозначаемый обычно PE - parallel enable, разрешение записи. Управление входами данных обычно реализуется на двухвходовых логических элементах "И" (AND) или И-НЕ (NAND).
Запись в регистр параллельного кода в данном примере не зависит от проводимых операций сдвига. На рисунке 4.21 приведена функциональная схема параллельно-последовательного регистра.
(рис 4.21)
Существуют реверсивные сдвигающие регистры, сдвигающие в сторону старших или младших разрядов в зависимости от управляющих сигналов. На рисунке 4.22 приведена функциональная схема такого регистра, где входы имеют следующие обозначения:
Принцип работы регистра следующий. Зафиксировать сигнал управления DSR лог. "1". Подать сигнал на вход DSI и синхросигналы на вход С. Логическая 1 в триггерах будет смещаться в сторону старших разрядов. Если снять сигнал с входа DSR и DSI и подать сигнал на вход DSL, то можно пронаблюдать обратный процесс.
У последнего триггера в схеме управления сдвигом влево один из входов элемента "И" подключен к лог. "0", что обеспечит очистку регистра при сдвиге данных влево.
(рис 4.22)
В листинге 4.2 приведен код на языке Verilog HDL четырехразрядного сдвигового регистра, функционирующего аналогично, приведённого на рисунке 4.22.
module shift_register (
input wire C, // Синхровход
input wire R, // Асинхронный сброс (активный высоки уровень)
input wire DSI, // Входные данные для сдвига
input wire DSL, // Управляющий сигнал сдвига влево
input wire DSR, // Управляющий сигнал сдвига вправо
output reg [3:0] Q // 4-разрядный выход
);
always @(posedge C or posedge R) begin
if (R)
begin
Q <= 4'b0000; // Сброс регистра
end
else begin
if (DSL !DSR)
begin
// Сдвиг влево
Q <= {Q[2:0], DSI}; // Сдвинуть влево и добавить d_in
end
else if (DSR !DSL)
begin
// Сдвиг вправо
Q <= {DSI, Q[3:1]}; // Сдвинуть вправо и добавить бит по //линии DSI
end
// Если оба сигнала неактивны, значение регистра остается без изменений
end
end
endmodule
На рисунке 4.23 приведено RTL представление данного регистра.
(рис 4.23)
В листинге 4.3 приведен код для тестирования сдвигового регистра. На рисунке 4.24 приведен результат симуляции в ModelSim.
`timescale 1ns / 1ps
module testbench; // Тестовый стенд для сдвигового регистра
reg C; // Синхросигнал
reg R; // Асинхронный сброс
reg DSI; // Входные данные для сдвига
reg DSL; // Управляющий сигнал сдвига влево
reg DSR; // Управляющий сигнал сдвига вправо
wire [3:0] Q; // Выход регистра
// Связывание с тестируемым модулем
shift_register uut (
.C(C),
.R(R),
.DSI(DSI),
.DSL(DSL),
.DSR(DSR),
.Q(Q)
);
// Генерация синхросигнала
initial begin
C = 0;
forever #5 C = ~C; // синхросигнал с периодом 10 нс
end
// Блок тестовых векторов
initial begin
// Начальные значения
R = 1; //сброс
DSI = 0;
DSL = 0;
DSR = 0;
// Снять сброс
#10;
R = 0;
// Тестирование сдвига влево
$display("Тест сдвига влево:");
DSI = 1; DSL = 1; DSR = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0001
DSI = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0010
DSI = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 0101
// Тестирование сдвига вправо
$display("Тест сдвига вправо:");
DSL = 0; DSR = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 1010
DSI = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0100
DSI = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 0010
// Завершение симуляции
$finish;
end
endmodule
(рис 4.24)
В разделе "Память" среды Logisim Evolution находится сдвиговый регистр (рисунок 4.25). Сигналы данного регистра:
1 - R, reset, асинхронный вход сброса;
2 - M2, вход управления параллельной загрузкой в регистр, уровень срабатывания лог. "1";
3-М1 - вход управления сдвигом вправо, уровень срабатывания лог "1";
4 - входы данных. Вывод 1 является последовательным входом данных, остальные образуют параллельный вход данных;
5 - параллельный выход данных.
При одновременной подаче лог. 1 на входы М1/М2 сдвиг не осуществляется, осуществляется параллельная загрузка данных.
(рис 4.25)
В микропроцессорных системах сдвиговые и многофункциональные регистры применяются для организации обмена данных в блоках обеспечения взаимодействия с периферийными устройствами.
В лабораторной работе необходимо выполнить проектирование многофункционального регистра.
Изучив, приведенную ниже информацию, используя SR триггеры построить четырехразрядный регистр с управляющими входами, позволяющими в зависимости от кодовой комбинации осуществлять:
Схожим по техническим характеристикам с указанным в задании является регистр К155ИР1 (аналог SN7495).
Микросхемы К155ИР1, КМ155ИР1 (7495) - представляют собой четырехразрядный, сдвиговый регистр. Он имеет последовательный вход данных Sl (вывод 1), четыре параллельных входа D0-D3 (выводы 2-5), а также четыре выхода Q0-Q3(выводы 13-10) от каждого из триггеров. Регистр имеет два тактовых входа C1 и C2. От любого из пяти входов данных код поступит на выходы синхронно с отрицательным перепадом, поданным на выбранный тактовый вход.
Вход разрешения параллельной загрузки PE служит для выбора режима работы регистра К155ИР1, КМ155ИР1 (7495). Если на вход PE дается напряжение высокого уровня, разрешается работа тактовому входу C2. В момент прихода на этот вход отрицательного перепада тактового импульса в регистр загружаются данные от параллельных входов D0-D4.
Если на вход PE подано напряжение низкого уровня, разрешается работа тактовому входу C1. Отрицательные фронты последовательности тактовых импульсов сдвигают данные от последовательного входа Sl на выход Q0, затем на Ql, Q2 и Q3, (вправо). Сдвиг данных по регистру влево получится, если соединить выход Q3 и вход D2, Q2 и D1, Q1 и D0, Регистр надо перевести в параллельный режим, подав на вход PE напряжение высокого уровня. Напряжение на входе регистра К155ИР1, КМ155ИР1 (7495) PE можно менять только если на обоих тактовых входах уровни низкие. Однако если на входе C1 напряжение низкого уровня, перемена сигнала на входе PE от низкого уровня к высокому не меняет состояния выходов.
Условно-графическое обозначение приведено на рисунке 4.26.
(рис 4.26)
Схема функциональная регистра К155ИР1 приведена на рисунке 4.27, SN7495 на рисунке 4.29. На рисунке 4.28 приведена таблица состояний для регистра К155ИР1, на рисунке 4.30 для SN7495.
(рис 4.27)
(рис 4.28)
(рис 4.29)
(рис 4.30)
Для выполнения поставленной задачи необходимо создать новый файл в среде Logisim Evolution. Сохранить файл под именем SN7495. Далее нажать кнопку "Добавить схему". Созданную схему переименовать в ANDOR в этой схеме будет спроектирован коммутатор. Далее на схеме ANDOR разместить два двухвходовых элемента "И". В свойстве "Размер элемента" выбрать "Узкий". Разместить двухвходовой элемент "ИЛИ-НЕ". Выходы с элементов "И" подключить к входам "ИЛИ-НЕ". Добавить четыре входа данных и подключить их к элементам "И". Добавит один выход данных, его получить к выходу элемента "ИЛИ-НЕ". Схема функциональная проектируемого блока приведена на рисунке 4.31.
(рис 4.31)
Далее выбрать инструмент "Редактирование внешнего вида". Система автоматически сформировала внешний вид, но его необходимо привести к компактному виду. На рисунке 4.32 показан внешний вид элемента на начальном этапе изменения, на рисунке 4.33 с измененными размерами (уменьшен по ширине, добавлены подписи контактов).
(рис 4.32)
(рис 4.33)
После создания графического обозначения элемента ANDOR необходимо вернуться на главную схему main, которую рекомендуется переименовать в SN7495. На ней разместить элементы ANDOR.
Разместим на поле схемы четыре триггера SR. Триггеры разместим вертикально: верхний младший, нижний старший. Напротив каждого триггера разместим блок ANDOR. Входы S каждого триггера подключим через инвертор к выходу ANDOR. Входы R подключим напрямую. Прямые выходы Q каждого триггера подключим к верхним входам элемента ANDOR. К выходам Q каждого триггера подключим элемент выход. Меткам зададим имена Q0-Q4. Второй вход верхних блоков "" элементов ANDOR объединим инвертором и подключим к входу РЕ. Вход PE имеет повторитель сигнала, реализованный на инверторах. Если первый инвертор обеспечивает последовательную загрузку данных при логическом 0 на данном входе, то с выхода второго инвертора сигнал поступает на объединённый вход нижнего блока "" элементов ANDOR, тем самым разрешает запись данных в триггеры с входов D0-D4. Данные входы подключены к вторым входам нижних блоков "" элементов ANDOR. Входы синхронизации триггеров управляются также блоком ANDOR. В зависимости от уровня сигнала PE работает либо верхний, либо нижний элемент блока ANDOR, обеспечивая разрешение записи в регистр с входов D0-D3, либо осуществляя последовательный сдвиг. Функциональная схема приведена на рисунке 4.34.
(рис 4.34)
По окончании моделировании схемы регистра следует перейти в редактор внешнего вида и оформить УГО как показано на рисунке 4.35.
(рис 4.35)
Далее добавим новую схему, которую назовем TEST. Данную схему назначим главной, выбрав ее в иерархическом списке схем. Кликнув правой кнопкой мыши по имени схемы, вызовем ниспадающее меню и выберем "Сделать главной схемой".
Далее реализуем схему моделирования, приведенную на рисунке 4.36. Результат моделирования должен совпадать с таблицей истинности, приведенной на рисунке 4.30.
(рис 4.36)
Самостоятельно
(рис 4.37)
Реализовать регистровую память на параллельных регистрах в среде Logisim Evolution с заданными по вариантам параметрами. На рисунке 4.38 приведен пример организации регистровой памяти 4х8. Входы данных D регистров объединены. Выходы данных Q мультиплексируются четырехпортовым восьмиразрядным мультиплексором D6. Адресация записи в регистры памяти осуществляется дешифратором D1, выходы которого подключаются к входам управления записи WE регистров D2-D5. Сигнал WE управляет записью в регистры. При уровне лог. "1" осуществляется запись. Данные регистров снимаются с соответствующего регистра через мультиплексор D6. Адрес для чтения из регистровой памяти задается на шине ADDRESS
(рис 4.38)
| № варианта | Емкость регистрового банка памяти (разрядность порта Х кол-во регистров) |
|---|---|
| 1,7,13,19 | 2х8 |
| 2,8,14,20 | 16х8 |
| 3,9,15,21 | 32х4 |
| 4,10,16,22 | 4x16 |
| 5,11,17,23 | 8x8 |
| 6,12,18,24 | 8x32 |
В листинге 4.4 приведен код на языке Verilog HDL, описывающий рассмотренный банк регистровой памяти. На рисунке 4.39 приведен его RTL вид.
module Regfile ( // описываем входы и выходы их параметры
input wire C,
input [1:0] ADDRESS,
input wire [7:0] D,
input wire WE,
output wire [7:0] Q
);
reg [7:0] registers [0:7];// создаем регистры
assign Q = registers[ADDRESS];// подключаем выходы к регистрам
always @(posedge C) begin // в случае фронта по синхровходу
if (WE) begin // если присутсвует разрешение записи
registers[ADDRESS] <= D;//записываем данные с шины данных входа
end
end
endmodule
(рис 4.39)
В процессорах регистры организовываются в регистровые банки схожим образом, но с более сложными схемотехническими решениями и описанием на языках аппаратуры.
Необходимые материалы для лекции Logisim-04zip и Quartus-04.zip.
Основным составным элементом любого процессора, определяющего его возможности является регистр.
Регистром называется последовательностное устройство, предназначенное для приёма, хранения, сдвига (простых преобразований) данных в двоичном коде. Базовыми элементами регистра являются триггеры, которые дополняются комбинационными логическими элементами для реализации различных связей между триггерами и управления приёмом/ передачей информации. Разрядность регистра определяется количеством триггеров, применяемых для его реализации.
Под простыми преобразованиями понимают сдвиг чисел на заданное количество разрядов, а также преобразования последовательного кода в параллельный или параллельного в последовательный.
Регистры классифицируют:
По функциональным свойствам (по виду выполняемых функций):
По способу ввода и вывода информации:
В параллельном регистре на тактируемых D-триггерах код подается на информационные входы всех триггеров и записывается с приходом тактового импульса. В литературе параллельные регистры на D-триггерах называют регистры-защелки. На рисунке 4.1.а приведена функциональная схема простейшего регистра защелки на 4 триггерах (4-х разрядный параллельный регистр). На рисунке 4.1.б приведено его условное графическое обозначение, где D0-D3 - входы данных. С - тактовый вход управления записью в регистр. Q0-Q3 - выходы данных. Условное буквенное обозначение регистров - RG.
(рис 4.1)
Преимуществом приведенного регистра является то, что не требуется предварительная очистка его триггеров. Перевод в состояние логических "1" ли "0" осуществляется за один такт прямым и инверсным сигналом на входе D.
Параллельные регистры обладают следующими свойствами:
Помимо управления записью в регистр может существовать потребность в управлении выходами регистра. Это может потребоваться при работе нескольких регистров с одной шиной. Исходя из знаний о комбинационной логике можно предположить, что для управления выходом можно использовать логический элемент "И" (AND)/ "И-НЕ". В литературе [1] можно найти схемы с управлением выходом на данном элементе (как показано на рисунке 4.2). Но это категорически неверно.
(рис 4.2)
Проверить данное утверждение можно на практике, реализовав схему регистра, подобного приведенному на рисунке выше в среде Logisim Evolution. Для этого реализуем три четырёхразрядных регистра. Создав новый файл, добавим в него новую схему и назовем ее d_reg. В новой схеме разместим четыре D-триггера вертикально и объединим все тактовые входы (рисунок 4.4.а). Объединенный вход подключим к элементу вход. Метке входа присвоим имя С (рисунок 4.4.б).
(рис 4.3)
Далее необходимо добавить входы данных. Для проектируемого регистра будет использоваться один многоразрядный вход. В свойстве "Биты данных" элемента вход задается разрядность - 4, свойству метки задается "DIN" (рисунок 4.4).
(рис 4.4)
К входу необходимо подключить элемент шины, который собирает множество сигнальных проводов в единый графический элемент с соответствующей разрядностью. Данный элемент имеет наименование "Разветвитель" и находится в разделе "Проводка". Для входа DIN разветвителю необходимо определить разрядность в свойстве "Разрядность входа" - 4, также задать 4 свойству "Веерный выход". В свойстве "Внешний вид" выбрать "Леворукий", а в свойстве "Направление" - "Восток". Остальные свойства оставить неизменными (рисунок 4.5).
(рис 4.5)
Далее будут выполнены соединения входов D каждого триггера в разветвитель как показано на рисунке 4.6. Верхний триггер будет определяется младшим и подключается к проводу 0, а нижний - старший, подключается к проводу 3 разветвителя.
(рис 4.6)
Далее прямые выходы Q триггеров подключим к предварительно размещенным четырем двухвходовым элементам "И". Один вход каждого элемента "И" будет объединен и подключен к добавленному входу EN_O. Выходы элементов "И" заведем также в шину (разветвитель). В данном случае разветвителю необходимо изменить свойство "Направление" на "Запад".
Следующим шагом требуется разместить выход с разрядность 4. Свойству "Метка" присвоить - "DOUT". Входы S и R триггеров оставить неподключенными. Итоговая функциональная схема регистра защелки приведена на рисунке 4.7.
(рис 4.7)
Перейдя в редактор внешнего вида, сформируем графическое обозначение регистра (рисунок 4.8).
(рис 4.8)
На главной схеме проекта построим схему, которая отражает задачу записи данных с выходов двух регистров в третий посредством общей шины, но предварительно выход первого регистра подключим к отдельному выходу для проверки работоспособности схемы. Промоделируем запись в регистры, а также чтение из них (рисунок 4.9).
(рис 4.9)
После объединения выходных шин двух регистров R1 и R2 система моделирования сформирует ошибку (рисунок 4.10).
(рис 4.10)
Система предполагает, что при возникновении лог. "1" на одном из выходов регистра R2, при наличии управляющего сигнала на входе Out_R2, ток потечет помимо входа регистра R3 на соответствующий выход первого регистра, на котором присутствует сигнал лог. "0". Тем самым в цепи возникает короткое замыкание. Исходя из этого, регистры защелки не могут применять в качестве элементов управления выходом обычные вентили "И". Для объединения подобных регистров в схемотехнике применяются мультиплексоры либо шинные формирователи.
При проектировании регистров, если требуется добавить управление чтением данных, применяются специальные элементы с третьим состоянием (Z) - управляемые буферы. На этих же элементах строятся микросхемы, именуемые шинными формирователями [2].
Третье состояние элемента - состояние с высоким импедансом, то есть обратный ток, который может протекать в направлении данного элемента ничтожно мал и не приводит к выходу из строя схемы. На рисунке 4.11 приведена схема элемента с третьим состоянием. На примере данного элемента можно объяснить работу управляемых буферов. При лог. "1" на входе Z транзистор VT3 открыт, ток с выхода логического элемента стекает через диоды, тем самым закрывая транзисторы VT1 и VT2, разрывая связь логического элемента с выходом Y.
(рис 4.11)
Изменим внутреннее устройство регистра, заменив вентили на управляемые буферы. В среде Logisim Evolution данные узлы находятся в блоке "Элементы", там имеется буфер как с прямым, так и с инверсным выходом. Измененная схема приведена на рисунке 4.12. Сохранив изменения в схеме регистра, вернемся на главную схему проекта и пронаблюдаем, что ошибка с подключением регистров в общую шину исчезла (рисунок 4.13).
(рис 4.12)
(рис 4.13)
Ярким примером применения управляемых буферов являются микроконтроллеры, в которых выводы могут назначаться входами/выходами или быть двунаправленными в зависимости от выполнения программы, меняя свое назначение в моменте ее работы.
В среде Logisim Evolution смоделируем упрощенное управление выводом, на примере микроконтроллера Microchip. В данных микроконтроллерах имеется регистр TRIS (регистры именуются по именам портов TRISA, TRISB и т.д), управляющий направлением работы вывода, и регистр PORT (регистры именуются по именам портов PORTA, PORTB), который принимает или передает данные. Если в регистре TRIS какой-либо бит установлен в "1", то вывод работает на вход и данные с вывода поступают в соответствующий триггер регистра PORT и наоборот. На рисунке 4.14 приведена функциональная схема управления выводами микроконтроллера с применением управляющих буферов.
(рис 4.14)
В среде Logisim Evolution регистр находится в разделе "Память" и представляет собой регистр - защелку (рисунок 4.15). Он имеет следующие входы/выходы: 1 - вход данных; 2 - управляющий сигнал разрешения записи WE - write enable; 3 - управляющий сигнал Clock; 4- R - управляющий сигнал сброса (reset); 5 - прямые выходы данных Q.
Запись в регистр может осуществляться при наличии сигнала WE (лог. "1") и сигнала Clock. В свойствах элемента можно выбрать различные варианты срабатывания регистра на данные сигналы: "Передний фронт", "Задний фронт", "Высокий уровень", "Низкий уровень". В свойстве "Биты данных" задается разрядность регистра (по умолчанию 8).
(рис 4.15)
На рисунке 4.16 приведена эквивалентная функциональная схема данного регистра, срабатывающая по переднему фронту сигнала Clock.
(рис 4.16)
В листинге 4.1 приведен код на языке Verilog HDL, описывающий представленный на рисунке 4.16 регистр.
module parallel_reg (
input wire [7:0] D, // Параллельный вход данных
input wire Clock, //Синхросигнал
input wire R, // Асинхронный сброс
input wire WE, // Вход управления записи
output reg [7:0] Q // Выходные данные
);
// Процесс, описывающий поведение регистра
always @(posedge Clock or posedge R) begin
if (R) begin
Q <= 8'b0; // Асинхронный сброс: выход в 0
end else begin
if (WE) begin
Q <= D; // Запись данных при фронте Clock и наличии WE
end
end
end
endmodule
В ядре процессора регистры - параллельные. Они мультиплексируются в шины, а адресуются блоком управления (дешифратором или демультиплексором).
В практической работе 3 необходимо выполнить проектирование регистрового банка памяти.
Сдвиговый регистр - это регистр, содержимое которого при подаче управляющего сигнала "сдвиг" сдвигается в сторону старших либо в сторону младших разрядов. Сдвиговые регистры применяются для преобразования последовательного кода в параллельный и наоборот. Сдвиговые регистры применяются при организации передачи данных. На рисунке 4.17 показан пример последовательно-параллельного регистра со сдвигом в сторону старших разрядов (вправо), реализованный в среде Logisim Evolution. На функциональной схеме входы имеют следующее назначение:
Триггеры объединяются следующим образом: прямой выход младшего триггера подключается к входу D старшего триггера. В сдвиговых регистрах старший триггер может иметь дублирующий Q выход SDO - serial data output, последовательный выход данных.
(рис 4.17)
Для закрепления информации предлагается реализовать описываемый регистр. К нему подключить инструмент цифровой осциллятор (осциллограф) для наблюдения операции сдвига. В качестве тестового сигнала будет подан сигнал "1" на вход SDI. Перед вторым тактом он будет снят. В итоге на последнем такте синхросигнала двоичный код на выходе регистра должен иметь вид 1000. На рисунках 4.18 - 4.20 показано начало, промежуточное значение и окончание процесса моделирования. Провода, идущие к осциллографу, для информативности подписаны инструментом "Редактировать текст". Свойство осциллографа "Количество входов" задано равным 5.
(рис 4.18)
(рис 4.19)
(рис 4.20)
Обычно при создании параллельно-последовательных сдвиговых регистров, параллельные входы данных подключаются к асинхронным входам установки (S) и сброса (R) триггеров. Для параллельной записи в регистр добавляется дополнительный вход управления, обозначаемый обычно PE - parallel enable, разрешение записи. Управление входами данных обычно реализуется на двухвходовых логических элементах "И" (AND) или И-НЕ (NAND).
Запись в регистр параллельного кода в данном примере не зависит от проводимых операций сдвига. На рисунке 4.21 приведена функциональная схема параллельно-последовательного регистра.
(рис 4.21)
Существуют реверсивные сдвигающие регистры, сдвигающие в сторону старших или младших разрядов в зависимости от управляющих сигналов. На рисунке 4.22 приведена функциональная схема такого регистра, где входы имеют следующие обозначения:
Принцип работы регистра следующий. Зафиксировать сигнал управления DSR лог. "1". Подать сигнал на вход DSI и синхросигналы на вход С. Логическая 1 в триггерах будет смещаться в сторону старших разрядов. Если снять сигнал с входа DSR и DSI и подать сигнал на вход DSL, то можно пронаблюдать обратный процесс.
У последнего триггера в схеме управления сдвигом влево один из входов элемента "И" подключен к лог. "0", что обеспечит очистку регистра при сдвиге данных влево.
(рис 4.22)
В листинге 4.2 приведен код на языке Verilog HDL четырехразрядного сдвигового регистра, функционирующего аналогично, приведённого на рисунке 4.22.
module shift_register (
input wire C, // Синхровход
input wire R, // Асинхронный сброс (активный высоки уровень)
input wire DSI, // Входные данные для сдвига
input wire DSL, // Управляющий сигнал сдвига влево
input wire DSR, // Управляющий сигнал сдвига вправо
output reg [3:0] Q // 4-разрядный выход
);
always @(posedge C or posedge R) begin
if (R)
begin
Q <= 4'b0000; // Сброс регистра
end
else begin
if (DSL !DSR)
begin
// Сдвиг влево
Q <= {Q[2:0], DSI}; // Сдвинуть влево и добавить d_in
end
else if (DSR !DSL)
begin
// Сдвиг вправо
Q <= {DSI, Q[3:1]}; // Сдвинуть вправо и добавить бит по //линии DSI
end
// Если оба сигнала неактивны, значение регистра остается без изменений
end
end
endmodule
На рисунке 4.23 приведено RTL представление данного регистра.
(рис 4.23)
В листинге 4.3 приведен код для тестирования сдвигового регистра. На рисунке 4.24 приведен результат симуляции в ModelSim.
`timescale 1ns / 1ps
module testbench; // Тестовый стенд для сдвигового регистра
reg C; // Синхросигнал
reg R; // Асинхронный сброс
reg DSI; // Входные данные для сдвига
reg DSL; // Управляющий сигнал сдвига влево
reg DSR; // Управляющий сигнал сдвига вправо
wire [3:0] Q; // Выход регистра
// Связывание с тестируемым модулем
shift_register uut (
.C(C),
.R(R),
.DSI(DSI),
.DSL(DSL),
.DSR(DSR),
.Q(Q)
);
// Генерация синхросигнала
initial begin
C = 0;
forever #5 C = ~C; // синхросигнал с периодом 10 нс
end
// Блок тестовых векторов
initial begin
// Начальные значения
R = 1; //сброс
DSI = 0;
DSL = 0;
DSR = 0;
// Снять сброс
#10;
R = 0;
// Тестирование сдвига влево
$display("Тест сдвига влево:");
DSI = 1; DSL = 1; DSR = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0001
DSI = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0010
DSI = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 0101
// Тестирование сдвига вправо
$display("Тест сдвига вправо:");
DSL = 0; DSR = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 1010
DSI = 0;
#10;
$display("Выход: %b", Q); // Ожидается: 0100
DSI = 1;
#10;
$display("Выход: %b", Q); // Ожидается: 0010
// Завершение симуляции
$finish;
end
endmodule
(рис 4.24)
В разделе "Память" среды Logisim Evolution находится сдвиговый регистр (рисунок 4.25). Сигналы данного регистра:
1 - R, reset, асинхронный вход сброса;
2 - M2, вход управления параллельной загрузкой в регистр, уровень срабатывания лог. "1";
3-М1 - вход управления сдвигом вправо, уровень срабатывания лог "1";
4 - входы данных. Вывод 1 является последовательным входом данных, остальные образуют параллельный вход данных;
5 - параллельный выход данных.
При одновременной подаче лог. 1 на входы М1/М2 сдвиг не осуществляется, осуществляется параллельная загрузка данных.
(рис 4.25)
В микропроцессорных системах сдвиговые и многофункциональные регистры применяются для организации обмена данных в блоках обеспечения взаимодействия с периферийными устройствами.
В лабораторной работе необходимо выполнить проектирование многофункционального регистра.
Изучив, приведенную ниже информацию, используя SR триггеры построить четырехразрядный регистр с управляющими входами, позволяющими в зависимости от кодовой комбинации осуществлять:
Схожим по техническим характеристикам с указанным в задании является регистр К155ИР1 (аналог SN7495).
Микросхемы К155ИР1, КМ155ИР1 (7495) - представляют собой четырехразрядный, сдвиговый регистр. Он имеет последовательный вход данных Sl (вывод 1), четыре параллельных входа D0-D3 (выводы 2-5), а также четыре выхода Q0-Q3(выводы 13-10) от каждого из триггеров. Регистр имеет два тактовых входа C1 и C2. От любого из пяти входов данных код поступит на выходы синхронно с отрицательным перепадом, поданным на выбранный тактовый вход.
Вход разрешения параллельной загрузки PE служит для выбора режима работы регистра К155ИР1, КМ155ИР1 (7495). Если на вход PE дается напряжение высокого уровня, разрешается работа тактовому входу C2. В момент прихода на этот вход отрицательного перепада тактового импульса в регистр загружаются данные от параллельных входов D0-D4.
Если на вход PE подано напряжение низкого уровня, разрешается работа тактовому входу C1. Отрицательные фронты последовательности тактовых импульсов сдвигают данные от последовательного входа Sl на выход Q0, затем на Ql, Q2 и Q3, (вправо). Сдвиг данных по регистру влево получится, если соединить выход Q3 и вход D2, Q2 и D1, Q1 и D0, Регистр надо перевести в параллельный режим, подав на вход PE напряжение высокого уровня. Напряжение на входе регистра К155ИР1, КМ155ИР1 (7495) PE можно менять только если на обоих тактовых входах уровни низкие. Однако если на входе C1 напряжение низкого уровня, перемена сигнала на входе PE от низкого уровня к высокому не меняет состояния выходов.
Условно-графическое обозначение приведено на рисунке 4.26.
(рис 4.26)
Схема функциональная регистра К155ИР1 приведена на рисунке 4.27, SN7495 на рисунке 4.29. На рисунке 4.28 приведена таблица состояний для регистра К155ИР1, на рисунке 4.30 для SN7495.
(рис 4.27)
(рис 4.28)
(рис 4.29)
(рис 4.30)
Для выполнения поставленной задачи необходимо создать новый файл в среде Logisim Evolution. Сохранить файл под именем SN7495. Далее нажать кнопку "Добавить схему". Созданную схему переименовать в ANDOR в этой схеме будет спроектирован коммутатор. Далее на схеме ANDOR разместить два двухвходовых элемента "И". В свойстве "Размер элемента" выбрать "Узкий". Разместить двухвходовой элемент "ИЛИ-НЕ". Выходы с элементов "И" подключить к входам "ИЛИ-НЕ". Добавить четыре входа данных и подключить их к элементам "И". Добавит один выход данных, его получить к выходу элемента "ИЛИ-НЕ". Схема функциональная проектируемого блока приведена на рисунке 4.31.
(рис 4.31)
Далее выбрать инструмент "Редактирование внешнего вида". Система автоматически сформировала внешний вид, но его необходимо привести к компактному виду. На рисунке 4.32 показан внешний вид элемента на начальном этапе изменения, на рисунке 4.33 с измененными размерами (уменьшен по ширине, добавлены подписи контактов).
(рис 4.32)
(рис 4.33)
После создания графического обозначения элемента ANDOR необходимо вернуться на главную схему main, которую рекомендуется переименовать в SN7495. На ней разместить элементы ANDOR.
Разместим на поле схемы четыре триггера SR. Триггеры разместим вертикально: верхний младший, нижний старший. Напротив каждого триггера разместим блок ANDOR. Входы S каждого триггера подключим через инвертор к выходу ANDOR. Входы R подключим напрямую. Прямые выходы Q каждого триггера подключим к верхним входам элемента ANDOR. К выходам Q каждого триггера подключим элемент выход. Меткам зададим имена Q0-Q4. Второй вход верхних блоков "" элементов ANDOR объединим инвертором и подключим к входу РЕ. Вход PE имеет повторитель сигнала, реализованный на инверторах. Если первый инвертор обеспечивает последовательную загрузку данных при логическом 0 на данном входе, то с выхода второго инвертора сигнал поступает на объединённый вход нижнего блока "" элементов ANDOR, тем самым разрешает запись данных в триггеры с входов D0-D4. Данные входы подключены к вторым входам нижних блоков "" элементов ANDOR. Входы синхронизации триггеров управляются также блоком ANDOR. В зависимости от уровня сигнала PE работает либо верхний, либо нижний элемент блока ANDOR, обеспечивая разрешение записи в регистр с входов D0-D3, либо осуществляя последовательный сдвиг. Функциональная схема приведена на рисунке 4.34.
(рис 4.34)
По окончании моделировании схемы регистра следует перейти в редактор внешнего вида и оформить УГО как показано на рисунке 4.35.
(рис 4.35)
Далее добавим новую схему, которую назовем TEST. Данную схему назначим главной, выбрав ее в иерархическом списке схем. Кликнув правой кнопкой мыши по имени схемы, вызовем ниспадающее меню и выберем "Сделать главной схемой".
Далее реализуем схему моделирования, приведенную на рисунке 4.36. Результат моделирования должен совпадать с таблицей истинности, приведенной на рисунке 4.30.
(рис 4.36)
Самостоятельно
(рис 4.37)
Реализовать регистровую память на параллельных регистрах в среде Logisim Evolution с заданными по вариантам параметрами. На рисунке 4.38 приведен пример организации регистровой памяти 4х8. Входы данных D регистров объединены. Выходы данных Q мультиплексируются четырехпортовым восьмиразрядным мультиплексором D6. Адресация записи в регистры памяти осуществляется дешифратором D1, выходы которого подключаются к входам управления записи WE регистров D2-D5. Сигнал WE управляет записью в регистры. При уровне лог. "1" осуществляется запись. Данные регистров снимаются с соответствующего регистра через мультиплексор D6. Адрес для чтения из регистровой памяти задается на шине ADDRESS
(рис 4.38)
| № варианта | Емкость регистрового банка памяти (разрядность порта Х кол-во регистров) |
|---|---|
| 1,7,13,19 | 2х8 |
| 2,8,14,20 | 16х8 |
| 3,9,15,21 | 32х4 |
| 4,10,16,22 | 4x16 |
| 5,11,17,23 | 8x8 |
| 6,12,18,24 | 8x32 |
В листинге 4.4 приведен код на языке Verilog HDL, описывающий рассмотренный банк регистровой памяти. На рисунке 4.39 приведен его RTL вид.
module Regfile ( // описываем входы и выходы их параметры
input wire C,
input [1:0] ADDRESS,
input wire [7:0] D,
input wire WE,
output wire [7:0] Q
);
reg [7:0] registers [0:7];// создаем регистры
assign Q = registers[ADDRESS];// подключаем выходы к регистрам
always @(posedge C) begin // в случае фронта по синхровходу
if (WE) begin // если присутсвует разрешение записи
registers[ADDRESS] <= D;//записываем данные с шины данных входа
end
end
endmodule
(рис 4.39)
В процессорах регистры организовываются в регистровые банки схожим образом, но с более сложными схемотехническими решениями и описанием на языках аппаратуры.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.