
- •Введение в логическое проектирование аппаратуры Аннотация к курсу
- •Лекция 1 «Схемы без памяти» Введение
- •Схемы из функциональных элементов
- •Представление схем на языке Verilog Общая информация о языке
- •Модули, пример “Hello World”
- •Синтезируемое подмножество языка
- •Логические значения и операции над ними
- •Многоразрядные константы
- •Непрерывное присваивание
- •Операции над битовыми массивами
- •Инстанцирование модулей
- •Лекция 2 «Схемы с памятью» Введение
- •Абстрактный автомат
- •Структурный автомат
- •Триггеры
- •Описание схем с памятью на языке Verilog
- •Моделирование памяти
- •Процедурное присваивание
- •Always-блоки
- •Управляющие конструкции
- •Лекция 3 «Примеры проектирования на языке Verilog»
- •Лекция 4 «Дискретно-событийное моделирование» Введение
- •Дискретно-событийное моделирование аппаратуры Основные понятия
- •Цикл работы симулятора
- •Дельта-задержка
- •Занятие 5: Контрольная работа
Непрерывное присваивание
Комбинационные схемы обычно определяются с помощью конструкции непрерывного присваивания:
wire out;
assign out = in1 & in2;
wire out = in1 & in2;
В операторе непрерывного присваивания можно задавать величину задержку:
wire out;
assign #10 out = in1 & in2;
assign out = #10 in1 & in2;
wire #10 out;
assign out = in1 & in2;
Пример. Тактовый генератор.
assign clk = #10 ~clk;
Пример. Штрих Шеффера (вентиль НЕ-И).
module nand(out, in0, in1);
output out;
input in0, in1;
assign out = ~(in0 & in1);
endmodule /* nand */
Для задания единицы измерения времени используется директива `timescale единица / точность. Допускаются следующие значения {1 | 10 | 100} {s | ms | us | ns | ps}.
Пример. Использование директивы `timescale.
`timescale 10ps/1ps
assign #1.23 out = in1 & in2; // задержка 12 ps
Пример. Мультиплексор 4-в-1.
module mux4_1(out, in0, in1, in2, in3, sel0, sel1);
output out;
input in0, in1, in2, in3;
input sel1, sel0;
assign out = (~sel1 & ~sel0 & in0) |
(~sel1 & sel0 & in1) |
( sel1 & ~sel0 & in2) |
( sel1 & sel0 & in3);
endmodule /* mux4_1 */
Операции над битовыми массивами
val[i] — доступ к элементу;
val[i2:i1] — получение подмассива;
{val1, ..., valn} — конкатенация;
n{val} — повторение ({val, …, val}).
Инстанцирование модулей
Инстанцирование модулей рассмотрим на следующем примере.
module testbench;
reg clk;
wire [7:0] data;
count target(
.clk(clk),
.data(data)
);
initial begin
clk = 1'b0;
#10;
clk = 1'b1;
...
end
endmodule /* testbench */
Домашнее задание. Опишите на языке Verilog следующие модули:
1) 8-битный сумматор.
2) демультиплексор 1-в-4.
Лекция 2 «Схемы с памятью» Введение
На прошлой лекции нами были рассмотрены схемы без памяти, называемые также комбинационными схемами. Очевидно, что область применения таких схем ограничена. Они подходят для описания функций (преобразований данных), но не годятся для описания систем, поведение которых зависит от истории взаимодействия с окружением (так называемых реагирующих систем). Между тем, практически в любой аппаратуре присутствует управляющая логика (или явно выделенное устройство управления), отвечающая за обработку событий окружения и планированием запуска тех или иных функциональных блоков. В качестве примера можно привести устройство управления конвейером микропроцессора. Устройство получает на вход поток инструкций, разбивает инструкции на микрооперации и подает на функциональные блоки, синхронизируя их работу. Ключевое отличие реагирующих систем от систем преобразования данных заключается в том, что реагирующие системы работают в «бесконечном цикле».
Основной математической моделью реагирующих систем является (конечный) автомат. Автомат может быть абстрактным (если описывается только функциональность системы без определения ее структуры) и структурным (если детализируется способ кодирования состояний, входных и выходных символов). Напомним определения теории автоматов, которые нам потребуются в дальнейшем.