diff options
author | justanothercatgirl <sotov@twistea.su> | 2025-05-14 19:16:38 +0300 |
---|---|---|
committer | justanothercatgirl <sotov@twistea.su> | 2025-05-14 20:24:21 +0300 |
commit | 11508800cfaefc1c25a793760bf10d3fd997af80 (patch) | |
tree | 8ed58e143243415830f97ea74b9ba4613df23e85 /questions |
Diffstat (limited to 'questions')
-rw-r--r-- | questions/1-a.txt | 19 | ||||
-rw-r--r-- | questions/1-b.txt | 18 | ||||
-rw-r--r-- | questions/1-c.txt | 34 | ||||
-rw-r--r-- | questions/1-d.txt | 25 | ||||
-rw-r--r-- | questions/1-e.txt | 26 | ||||
-rw-r--r-- | questions/2-a.txt | 24 | ||||
-rw-r--r-- | questions/2-b.txt | 33 | ||||
-rw-r--r-- | questions/2-c.txt | 38 | ||||
-rw-r--r-- | questions/2-d.txt | 28 |
9 files changed, 245 insertions, 0 deletions
diff --git a/questions/1-a.txt b/questions/1-a.txt new file mode 100644 index 0000000..5bfff0e --- /dev/null +++ b/questions/1-a.txt @@ -0,0 +1,19 @@ +Просто модуль + +Требуется при помощи языка Verilog спроектировать модуль, который реализует две +булевых функции от переменных x1, x2 и x3, заданные своими столбцами значений: +z1 = (10011101) и z2 = (00010111). + +Имя модуля должно быть m_a. + +Входы модуля: три провода x1, x2 и x3. + +Выходы модуля: два провода z1 и z2. + +При проектировании модуля можно использовать только стандартные функциональные +элементы, такие как not, or и and. Другие конструкции и выражения языка Verilog +использовать запрещается. + +ИЗ ПЕРЕПИСКИ В ТЕЛЕГРАМЕ: +"Спасибо за информацию. Посмотрел, действительно, есть ошибка. В первой задаче +z1 = (01101101). Пожалуйста, учитывайте это исправление при решении задачи." diff --git a/questions/1-b.txt b/questions/1-b.txt new file mode 100644 index 0000000..c11324d --- /dev/null +++ b/questions/1-b.txt @@ -0,0 +1,18 @@ +Просто мультиплексор + +Требуется при помощи языка Verilog спроектировать мультиплексор 4-х 64-битных +шин проводов. + +Имя модуля должно быть mux64_4_2. + +Входы модуля: 64-битные шины проводов y0, y1, y2, y3 и 2-х битная шина проводов +x, которая выбирает одну из шин y по ее номеру. + +Выход модуля: 64-битная шина z. + +При проектировании модуля можно использовать стандартные функциональные +элементы, такие как not, or и and, и композицию модулей. Другие конструкции и +выражения языка Verilog использовать запрещается. Файл с описанием модуля +должен содержать не более 35 строк. + + diff --git a/questions/1-c.txt b/questions/1-c.txt new file mode 100644 index 0000000..048ca03 --- /dev/null +++ b/questions/1-c.txt @@ -0,0 +1,34 @@ +Арифметическое устройство + +Требуется при помощи языка Verilog спроектировать параметрическое +арифметическое устройство для выполнения операций сложения и умножения чисел с +фиксированной запятой. + +Имя модуля должно быть au. + +Параметры модуля: + + * WIDTH_1 - размер целой части числа (по умолчанию, 4 бита). + * WIDTH_2 - размер дробной части числа (по умолчанию, 4 бита). + +Входы модуля: + + * x_int, y_int - шины проводов размера WIDTH_1, которые задают целые части + входных аргументов x и y. + * x_frac, y_frac - шины проводов размера WIDTH_2, которые задают дробные + части входных аргументов x и y. + * operation - провод, задающий тип операции (0 - сложение, 1 - умножение). + +Выходы модуля: + + * zero - провод, который сигнализирует о том, что результат является 0. + * overflow - провод, который сигнализирует о том, что произошло переполнение. + * result_int - шина проводов размера WIDTH_1, которая выдает целую часть + результата операции. + * result_frac - шина проводов размера WIDTH_2, которая задает дробную часть + результата. + +Примечание: при выходе результирующего значения за пределы ширины целой части +происходит переполнение. + + diff --git a/questions/1-d.txt b/questions/1-d.txt new file mode 100644 index 0000000..8d1c15c --- /dev/null +++ b/questions/1-d.txt @@ -0,0 +1,25 @@ +Память с произвольным доступом + +Требуется при помощи языка Verilog спроектировать параметрический модуль памяти +с произвольным доступом. + +Имя модуля должно быть ram. + +Параметры модуля: + + * DATA_WIDTH размерность данных, хранимых в памяти (по умолчанию 8 бит). + * ADDR_WIDTH размер адреса (по умолчанию, 4 бита). + +Входы модуля: + + * data_in шина проводов размера DATA_WIDTH, используемая для подачи входной + информации в блок памяти. + * address шина размера ADDR_WIDTH, задающий адрес в памяти. + * провод clock, провод write_enable, который сигнализирует о том, будет ли + проводится запись в память или нет (при значении WRITE_ENABLE==1 в + момент прихода положительного фронта синхронизирующего сигнала clock). + +Выход модуля: data_out шина проводов размера DATA_WIDTH, которая выдает +значение элемента памяти по адресу, заданному входом address. + + diff --git a/questions/1-e.txt b/questions/1-e.txt new file mode 100644 index 0000000..0ec3126 --- /dev/null +++ b/questions/1-e.txt @@ -0,0 +1,26 @@ +Сдвиговый регистр + +Требуется при помощи языка Verilog спроектировать параметрический сдвиговый +регистр (https://en.wikipedia.org/wiki/Shift_register). + +Имя модуля должно быть shift_register. + +Параметры модуля: + + * WIDTH - количество бит, которые хранит регистр (по умолчанию, 8 бит). + * LENGTH - количество последовательно соединнех регистров (по умолчанию, 4). + +Входы модуля: + + * Шина проводов data_in размера WIDTH, поделюченная к первому регистру. + * Провод clock, осуществялющий синхронизацию по своему положительному фронту. + * Провод reset, осуществляющий сброс по своему положительному фронту. + +Выход модуля: шина проводов data_out размера WIDTH, подключенная к последнему +регистру. + +Рекомендация: при проектировании модуля можно спроектировать вспомогательный +модуль регистра, который в основном модуле будет многократно инстанцироваться +при помощи конструкции generate. + + diff --git a/questions/2-a.txt b/questions/2-a.txt new file mode 100644 index 0000000..e272b43 --- /dev/null +++ b/questions/2-a.txt @@ -0,0 +1,24 @@ +Дерево сумматоров + +Требуется при помощи языка Verilog спроектировать параметрический блок сложения +нескольких чисел. Схема сложения выполнена в виде дерева, когда нечетные по +номеру числа складываются с четными и к результирующим числам применяется такая +же схема, пока не получиться одно число. + +Имя модуля должно быть tree_adder. + +Парметры модуля: + + * WIDTH - размер числа (по умолчанию, 8 бит). + * SIZE - количество складываемых чисел (по умолчанию, 4). Для простоты + реализации, считается, что количество чисел является степенью двойки + (другими словами, дерево сложения является полным двоичным деревом). + +Вход модуля: data_in - шина проводов размера SIZE * WIDTH, представляющая собой +последовательную конкатенацию всех входных чисел. + +Выход модуля: data_out - шина проводов размера WIDTH, представляющая собой +результат сложения. + +При проектировании модуля игнорируется возможное переполнение. Считается, что +все промеужеточные числа и финальное число имеет размер WIDTH. diff --git a/questions/2-b.txt b/questions/2-b.txt new file mode 100644 index 0000000..837c2c3 --- /dev/null +++ b/questions/2-b.txt @@ -0,0 +1,33 @@ +Вычисление максимума + +Требуется при помощи языка Verilog спроектировать параметрический блок +вычисления максимума нескольких чисел и индекса исходного числа, на котором +достигается максимум. Схема вычисления выполнена в виде дерева, когда +последовательные пары чисел сравниваются и среди них выбирается максимальный. +Аналогичная схема применяется к результирующим числам, пока не получиться одно +число. + +Имя модуля должно быть max_argmax. + +Парметры модуля: + + * WIDTH - размер числа (по умолчанию, 8 бит). + * SIZE - количество уровней в дереве вычислений (по умолчанию, 2). При этом + количество чисел, для которых вычисляется максимум, равно 2 в степени + SIZE. + +Вход модуля: data_in - шина проводов размера (2**SIZE) * WIDTH, представляющая +собой последовательную конкатенацию всех входных чисел. + +Выход модуля: + + * data_max - шина проводов размера WIDTH, представляющая собой результат + сложения. + * argmax - шина проводов размера SIZE, представляющая собой номер числа, на + котором достигается максимум (числа нумерутся слева направо, нумерация + начинается с 0). + +Если максимальное значение достигается на нескольких числах, то argmax +возращает индекс последнего числа, на котором достигается максимум. + + diff --git a/questions/2-c.txt b/questions/2-c.txt new file mode 100644 index 0000000..d93b677 --- /dev/null +++ b/questions/2-c.txt @@ -0,0 +1,38 @@ +Требуется при помощи языка Verilog спроектировать параметрический блок +линейного классификатора. Данный блок получает на вход набор значений признаков +и их веса. Для каждого класса вычисляется сумма произведений значений признаков +на веса. Среди полученных значений находится максимум и в качестве результата +блок выдает индекс класса, на котором был достигнут максимум. + +Имя модуля должно быть linear_classifier. + +Параметры модуля: + + * WIDTH - размер чисел (по умолчанию, 8 бит). + * FEATURES - количество признаков (по умолчанию, 2). + * C_WIDTH - количество бит, которые используются для хранения индеска класса + (по умолчанию, 1). Считается, что число классов является степенью + двойки. + +Входы модуля: + + * features - шина проводов размера FEATURES * WIDTH, представляющая собой + последовательную конкатенацию значений входных признаков. + * weights - шина проводов размера (2**C_SIZE) * FEATURES * WIDTH, + представляющая собой последовательную конкатенацию значений весов + признаков для всех классов. + +Выходы модуля: + + * r_value - шина проводов размера WIDTH, представляющая собой результат + вычисления максимума. + * r_class - шина проводов размера C_WIDTH, представляющая собой индекс + класса, на котором достигается максимум (классы нумерутся слева + направо, нумерация начинается с 0). + +При проектировании модуля можно использовать модули tree_adder и max_argmax, +описанные в заданиях A и B, в качестве подмодулей (сами модули проектировать не +нужно, они будут автоматически использованы при проверке, если были +использованы). + + diff --git a/questions/2-d.txt b/questions/2-d.txt new file mode 100644 index 0000000..af53680 --- /dev/null +++ b/questions/2-d.txt @@ -0,0 +1,28 @@ +Систолический массив + +Требуется спроектировать на языке Verilog двухмерный систолический массив для +выполнения операции матричного умножения +https://gyires.inf.unideb.hu/KMITT/a52/ch04.html. + +Проектируемый модуль должен называться systolic_array. + +Параметры модуля: ROWS - количество рядов в массиве, COLUMNS - количество +столбцов в массиве, WIDTH - размерность шин аргументов. + +Входы модуля: clock - провод синхросигнала, reset - провод сигнала сброса +(сброс при выставлении значения 0), a - шина проводов ширины ROWS*WIDTH, +подающая значения вектора a (элементы вектора нумеруются справа налево), b - +шина проводов ширины COLUMNS*WIDTH, подающая значения вектора b (элементы +вектора нумеруются справа налево). Каждое значение векторов a и b имеет +размерность WIDTH. + +Выходы модуля: c - шина проводов ширины ROWS*COLUMNS*WIDTH, характеризующих +текущее состояние вычисляемой матрицы. Элементы матрицы нумеруются справа +налево и сверху вниз. Например, для матрицы размера 2 на 2 из 4-х битовых +значений шина с будет разбита следующим образом: 00: c[3 : 0], 01: c[7 : 4], +10: c[11: 8], 11: c[15:12]. + +Примечание: схема должна иметь асинхронный сброс, латентность вычислений +(количество тактов, требуемое для вычисления нового значения) равна 1. + + |