7 декабря 23:59 (UTC + 3).
Все шаблоны модулей находятся в calculator.v
.
В данном задании запрещено использование встроенных логических примитивов и арифметических операций, всю логику необхидимо реализовывать самостоятельно с помощью транзисторов, либо использовать заранее реализованные модули из файла с шаблоном.
Реализовать АЛУ (модуль alu
в calculator.v
),
поддерживающее операции с 4-битными целыми числами в представлении дополнение до 2.
Кодирование операций представлено в табличке:
Op | Control |
---|---|
a & b | 000 |
a | b | 001 |
a + b | 010 |
not used | 011 |
a & !b | 100 |
a | !b | 101 |
a - b | 110 |
slt | 111 |
a & !b = a & (not b)
a | !b = a | (not b)
slt
- установить самый младший бит результата равным 1, если a < b
, остальные биты остаются нулями.
Реализовать игрушечный регистровый файл (модуль register_file
в calculator.v
),
имеющий четыре 4-битных регистра. Чтение из регистрового файла происходит асинхронно,
запись происходит на спаде сигнала синхронизации (clk
).
К сожалению, структурная реализация последовательных схем на verilog'е дело весьма нетривиальное
(нужно аккуратно разбираться с задержками всех составных частей вашей схемы). Поэтому
в качестве схемы, используемой для хранения бита информации рекомендуется использовать модуль
d_latch
(который реализован императивно). Данный модуль предоставляет возможность асинхронно
читать содержимое ячейки и изменять ее состояние на спаде сигнала clk
при наличии 1
на входе
we
.
Изначально все регистры хранят нули.
Реализовать калькулятор (модуль calculator
в calculator.v
).
Данный модуль должен уметь выполнять операции, реализуеммые АЛУ. Первым операндом является значение одного из регистров, вторым является 4-битная целочисленная константа, результат записывается в один из регистров (на спаде сигнала синхронизации). Изначально все регистры хранят нули.
Также содержимое регистра операнда должно отдаваться наружу по выходной шине (асихронно). Входные и выходные порты этого модуля описаны в больших подробностях в файле с шаблоном.
Пример использования калькулятора можно найти в calculator_test.v
.
Обратите внимание, что он не покрывает все возможные сценарии использования. Можете изменять
данный файл как угодно по своему усмотрению
Необходимо отправить решение в гугл-форму.
Для решения части необходимо использовать шаблон calculator.v
, файл с Вашим решением должен называться
calculator.v
. Изменять имена и сигнатуру модулей (количество, порядок и названия портов) запрещено.