Skip to content

Latest commit

 

History

History
75 lines (51 loc) · 4.69 KB

hw2.md

File metadata and controls

75 lines (51 loc) · 4.69 KB

Домашнее задание 2

Дедлайн

7 декабря 23:59 (UTC + 3).

Условие

Все шаблоны модулей находятся в calculator.v.

В данном задании запрещено использование встроенных логических примитивов и арифметических операций, всю логику необхидимо реализовывать самостоятельно с помощью транзисторов, либо использовать заранее реализованные модули из файла с шаблоном.

Часть 1

Реализовать АЛУ (модуль 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, остальные биты остаются нулями.

Часть 2

Реализовать игрушечный регистровый файл (модуль register_file в calculator.v), имеющий четыре 4-битных регистра. Чтение из регистрового файла происходит асинхронно, запись происходит на спаде сигнала синхронизации (clk).

К сожалению, структурная реализация последовательных схем на verilog'е дело весьма нетривиальное (нужно аккуратно разбираться с задержками всех составных частей вашей схемы). Поэтому в качестве схемы, используемой для хранения бита информации рекомендуется использовать модуль d_latch (который реализован императивно). Данный модуль предоставляет возможность асинхронно читать содержимое ячейки и изменять ее состояние на спаде сигнала clk при наличии 1 на входе we.

Изначально все регистры хранят нули.

Часть 3

Реализовать калькулятор (модуль calculator в calculator.v).

Данный модуль должен уметь выполнять операции, реализуеммые АЛУ. Первым операндом является значение одного из регистров, вторым является 4-битная целочисленная константа, результат записывается в один из регистров (на спаде сигнала синхронизации). Изначально все регистры хранят нули.

Также содержимое регистра операнда должно отдаваться наружу по выходной шине (асихронно). Входные и выходные порты этого модуля описаны в больших подробностях в файле с шаблоном.

Пример использования калькулятора можно найти в calculator_test.v. Обратите внимание, что он не покрывает все возможные сценарии использования. Можете изменять данный файл как угодно по своему усмотрению

Формат сдачи

Необходимо отправить решение в гугл-форму.

Для решения части необходимо использовать шаблон calculator.v, файл с Вашим решением должен называться calculator.v. Изменять имена и сигнатуру модулей (количество, порядок и названия портов) запрещено.