Цель этой работы — освоить принципы представления отрицательных и положительных чисел в прямом коде, исследовать особенности арифметических операций в этом формате
Необходимо разработать на языке SystemVerilog комбинационный сумматор для выполнения сложения таких чисел с учётом знака, модуля, переполнения и нормализации нулевого результата.
Разрядность сумматора должна быть задана параметром SIZE. Заданы два входа слагаемых [SIZE-1:0]a и [SIZE-1:0]b, выходы суммы [SIZE-1:0]s и переполнения overflow. Представление всех чисел - sign-magnitude, см., например, https://en.wikipedia.org/w/index.php?title=Signed_number_representations#Sign%E2%80%93magnitude В представлении суммы должен выдаваться в нормализованной форме: только +0.
Предполагается, что студенты в достаточной мере знакомы с языком SystemVerilog и средой Vivado. Можно использовать все известные вам средства языка, как структурное, так и поведенческое описание схемы. Разумеется, можно и нужно задавать вопросы языковым моделям и преподавателю.
Для проверки корректности работы создайте тестбенч. Он должен содержать набор тестовых векторов, охватывающий сложение чисел одинакового и разного знака, получение нулевого результата, нормализацию нуля к +0, а также случай переполнения. Для каждого теста должны проверяться выходной код результата и флаг переполнения, с выводом диагностического сообщения при несовпадении ожидаемого и фактического значений. Если студент предпочитает wave diagrams в окне симулятора печати $display в консоли, так тоже можно. Хотя это методически менее правильно.
Что сдаётся: репозиторий GitHub Classroom, содержащий синтезированный и верифицированный проект.
Лабораторная работа считается выполненной, если:
- результат принимает корректные значения для всех комбинаций входов;
- проект синтезируется без ошибок;
- студент может устно объяснить ход решения.
- студент может исследовать свойства синтезированной схемы и общими словами охарактеризовать ее структуру.