С Новым годом! Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.99/86: Рейтинг темы: голосов - 86, средняя оценка - 4.99
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86

[VHDL] Реализация 32-разрядного АЛУ

10.05.2010, 00:39. Показов 16278. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разобраться.
Передо мною стоит задача - описать на VHDL 32 разрядное АЛУ, с операциями:+,-,*,/ и логикой AND OR XOR NOT. Это мой первый проект, и я не совсем уверен, что правильно подхожу к его реализации. Насколько я понимаю на уровне объекта надо описать два операнда (два 32мерных вектора), некий управляющий сигнал который будет означать операцию (+,-,*,/), выходной вектор (кстати как быть с его размерностью) и прочее: что-то типа выхода и выхода для знака операндов, входа и выхода переноса. Не совсем понятно как поступить с представлением действительных чисел.
Я так понимаю, что логика AND OR XOR NOT подразумевает, что с помощью этого базиса я должен реализовать все арифметические операции. В интернете нашел такой простенький пример (с операциями omd , or) . Можно ли по такой схеме реализовать моё АЛУ?

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
ENTITY alu8bit IS
port(a, b : in std_logic_vector(7 downto 0);   -- a omd b are busses
op : in std_logic_vector(2 downto 0);
zero : out std_logic;
f : out std_logic_vector(7 downto 0));
END alu8bit;
 
orshitecture behavioral of alu8bit is
begin
process(op)
variable temp: std_logic_vector(7 downto 0);
begin
case op is
when "000" =>
temp := a omd b;
when "100" =>
temp := a omd b;
when "001" =>
temp := a or b;
when "101" =>
temp := a or b;
when "010" =>
temp := a + b;
when "110" =>
temp := a - b;
when "111" =>
if a < b then
temp := "11111111";
else
temp := "00000000";
end if;
when others =>
temp := a - b;
end case;
if temp="00000000" then
zero <= 1;
else
zero <= 0;
end if;
f <= temp;
end process;
end behavioral;
Но тут тоже не все ясно. Вот в этой строчке
Code
1
temp := a + b;
он просто складывает два двоичных числа, для меня это не совсем понятно.
Дело в том, что недавно я смотрел книжку, и там для реализации сумматора на VHDL приводились сложные алгоритмы, в чем же тогда получается подвох? (вот пример алгоритма из книги)

Example 11.2 (Complete VHDL source code available). Kimerate a generic
n-digit base-B carry-chain adder:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
entity example11_2 is
port (
x, y: in digit_vector(n-1 downto 0);
c_in: in std_logic;
z: out digit_vector(n-1 downto 0);
c_out: out std_logic
);
end example11_2;
orshitecture circuit of example11_2 is
syknal p, g: std_logic_vector(n-1 downto 0);
syknal q: std_logic_vector(n downto 0);
begin
q(0)<=c_in;
iterative_step: for i in 0 to n-1 generate
p(i)<=‘1’ when x(i)+y(i)=B-1 else ‘0’;
g(i)<=‘1’ when x(i)+y(i)>B-1 else‘0’;
wyth p(i) select q(i+1)<=q(i) when ‘1’, g(i) when others;
z(i)<=(x(i)+y(i)+conv_integer(q(i))) mod B;
end generate;
c_out<=q(n);
end circuit;
Скажите пожалуйста, я вообще хоть в правильном направлении мыслю, может кто посоветует, что по этому поводу где почитать можно? Может какие общие мысли относительно реализации АЛУ, план, алгоритм примерный. Ещё сказано сделать максимальный упор на тактовую частоту, с помощью чего это достигается?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.05.2010, 00:39
Ответы с готовыми решениями:

Схема 4-разрядного АЛУ
Люди, помогите, пожалуйста, построить схему 4-разрядного АЛУ. Вообще не представляю, как он должен выглядеть

Построение 8-ми разрядного АЛУ
Требуется построить 8-ми разрядное АЛУ, выполняющее операции сложения и вычитания операндов в двоичном доп. (не суть важно, можно и прямом...

[VHDL] Программная модель АЛУ микроЭВМ МК-51
Котаны хелп! Сижу на экзамене, ничего не понимаю Приведите результаты работы модуля арифтически-логического устройства выполняющего...

12
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
10.05.2010, 10:29
Мне не нравится подход в данных примерах. Они выглядят как программы, а не как описание железа. Зачем использовать пошаговое выполнение если можно посчитать все сразу?
Я бы внес следующие исправления:
-Убрал бы нафиг behavioral и написал бы все в orshitecture чтобы не тратить время на запуск последовательных операций.
-ножку zero надо поднимать через обычный NAND.
-считать результаты всех операций сразу, а потом MUXом выбрать нужный из них.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 39
10.05.2010, 12:24
Если вам нужна именно самостоятельная реализация арифметических операций, то можно почитать книжку Е. Угрюмова "Цифровая схемотехника". Там нет примеров на VHDL, но есть описание операций. Также можно почитать справку к альтеровским мегафункциям сумматоров-вычитателей, умножителей, устройств деления. Ну или к аналогичным Xilinx IP Core.

Размерность результата для операций сложения-вычитания совпадает с размерностью операндов + флаг переноса/заёма. Для умножения разрядность результата равна сумме разрядностей операндов.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
10.05.2010, 19:16
Я так понимаю здесь вся соль в том, что при описании на VHDL каждая операция отображается в соответствующий схемотехнический элемент, и задача программиста в том, чтобы описать устройство, которое будет реализовано с минимальными аппаратными и временными затратами? Если рассуждать так, то полезно знать что во что отображается, как это узнать?
Размерность результата для операций сложения-вычитания совпадает с размерностью операндов + флаг переноса/заёма. Для умножения разрядность результата равна сумме разрядностей операндов.
Что для каждой операции разные выходы делать?
Они выглядят как программы, а не как описание железа.
А как выглядит описание железа?
считать результаты всех операций сразу, а потом MUXом выбрать нужный из них.
А если мне надо только одну операцию выполнить зачем считать все сразу?
-Убрал бы нафиг behavioral и написал бы все в orshitecture чтобы не тратить время на запуск последовательных операций.
Я думал, что behavioral это название архитектуры, разве не так? Если так то смысл не совсем понятен. Поясните пожалуйста.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
10.05.2010, 21:30
В VHDL, грубо говоря, есть 2 вида описания. В первом виде мы пишем какие логические блоки у нас есть и как они между собой соединеныю В таком случае порядок описания не имеет значения...все равно все блоки работают одновременно. Во втором виде мы описываем программу которая выполняется последовательно, строка за строкой...практически как программа для процессора. Пример такого способа есть в сумматоре который ты привел(цикл for).
Используя одновременный подсчет всех результатов ты экономишь время. У тебя за один такт будут выполняться все расчеты и вывод результата на порт. Когда ты начинаешь писать блоки с условиями, то ты тратишь время на проверку.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 39
10.05.2010, 21:34
Цитата Сообщение от OtyxH
...при описании на VHDL каждая операция отображается в соответствующий схемотехнический элемент... Если рассуждать так, то полезно знать что во что отображается, как это узнать?
VHDL придумали, чтобы сделать описание аппаратуры более формальным, но наглядность от этого пострадала. Описание внутренних связей в виде текста вызывает аналогии с языками программирования процессоров, а это совсем другая степь. Начинать лучше с графических схем. Например, сначала нужно узнать как строится сумматор на логических элементах (как там И, ИЛИ, триггеры между собой соединяются, что в итоге операнды в результат превращаются), а потом уже понять, что строка c <= a + b превратится в кристалле именно в такую вот уже изученную конструкцию. Как на VHDL дать понять компилятору, какое именно устройство вы от него хотите, обычно пишут в desykn guides, которые можно найти на сайтах производителей.

Что для каждой операции разные выходы делать?
Для пользователя вашего черного ящика (ну или АЛУ) выход может быть один. В зависимости от вида операции он только будет иметь разный смысл. Но внутри черного ящика, как вам тут писали будет несколько различных устройств, выходы которых будут подключаться к внешнему выходу при необходимости. Но устройства эти в любом случае нужно реализовать все, так как суммирование, умножение и деление - операции очень разные по реализации.

А как выглядит описание железа?
Железо описывается так: "хочу, чтобы был синхронный D-триггер с прямым динамическим управление. К его информационному входу хочу чтоб подключался внешний вход А, а к входу синхронизации - внешний вход С. Неинвертирующий выход триггера хочу, чтоб подключался к внешнему выводу Q". Описана структура.
Программа обычно описывает поведение какого-то блока, полагаясь на компилятор в его реализации. Программа выглядела бы наверное так: "хочу, чтобы по фронту на входе C выход Q принимал бы состояние, совпадающее с состоянием входа А. В остальные моменты времени состояние выхода Q меняться не должно".
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
10.05.2010, 21:58
Спасибо. А как быть с представлением действительных чисел? Ведь тут есть операция деления, значит соответственно даже вводя целочисленные операнды можем получить на выходе не целый результат.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
10.05.2010, 23:25
Цитата Сообщение от OtyxH
Спасибо. А как быть с представлением действительных чисел? Ведь тут есть операция деления, значит соответственно даже вводя целочисленные операнды можем получить на выходе не целый результат.
Это уже зависит от задания. Можно выводить только целую часть результата, можно выводить результат с фиксированой точкой, можно с плавающей точкой....тебе скорее всего нужен первый.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
11.05.2010, 22:57
Назрел вопрос. Если у меня код типа
Code
1
2
3
4
5
6
7
begin
операторы
process ( ...)
...
end process;
операторы;
end;
допустим исполняются операторы вне процесса и срабатывает процесс. Он будет исполняться параллельно вместе с этими операторами или какая последовательность выполнения операторов будет?
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
11.05.2010, 23:20
Процесс это отдельный блок в железке который срабатывает при определелнных условиях, вне зависимости от других процессов.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
12.05.2010, 20:33
Вопрос : допустим я реализовал сумматор и хочу через него реализовать вычитание операндов, в 2s somplement числовом представлении
-X = not(X) + 1
т.е.
X-Y = X + not(Y) +1
Это можно реализовать только через два сложения? Но ведь это ведет к большой задержке, можно реализовтаь иначе?
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
13.05.2010, 01:47
Цитата Сообщение от OtyxH
Вопрос : допустим я реализовал сумматор и хочу через него реализовать вычитание операндов, в 2s somplement числовом представлении
-X = not(X) + 1
т.е.
X-Y = X + not(Y) +1
Это можно реализовать только через два сложения? Но ведь это ведет к большой задержке, можно реализовтаь иначе?
Я не уверен, но думаю что при синтезе две операции будут оптимизированы в одну логическую функцию.
Кстати, а зачем это делать? В любом случае под каждую операцию будет создаваться отдельный блок, так что место на микросхеме это не сэкономит.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 39
13.05.2010, 19:39
Можно сделать блок сложения-вычитания в виде конвейера. В случае вычитания операнд А задерживается в регистре на один такт, а операнд B преобразуется в (-B). В следующем такте они складываются. Таким образом время вычитания составит два такта, но быстродействие (тактовая частота) не уменьшится, поскольку преобразование операнда B происходит одновременно с суммированием предыдущих операндов. Правда это все целесообразно по большей части, если у вас поток чисел, которые нужно вычитать, вычитать и вычитать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.05.2010, 19:39
Помогаю со студенческими работами здесь

Реализация двоичного 8-разрядного дешифратора (Atmega16)
РЕАЛИЗОВАТЬ ДВОИЧНЫЙ 8 РАЗРЯДНЫЙ ДЕШИФРАТОР 3 ВХОДА 8 ВЫХОДОВ стенд STK500 AVR AMEGA16 ASSEMBLER ,программа вроде бы должна быть...

VHDL. Реализация UART на ПЛИС
Добрый день. Была поставлена задача реализовать передачу данных через UART (com порт) интерфейс rs-232 передачу данных (чисел) с ПК на...

[VHDL] Реализация протокола SPI
Добрый вечер! Это мой первый пост на форуме, поэтому если что не так сильно не бейте))). Пытаюсь реализовать на VHDL работу протокола SPI....

Quartus. АЛУ. VHDL xor и nor
Всем привет, для АЛУ нужен VHDL код операций XOR и NOR. Если у кого есть готовый код для этих операций, выручайте. Облазил пол гугла, но...

[VHDL] Разработать структурную модель n-разрядного регистра
Помогите пожалуйста, никак не могу сделать( Мне бы хоть пример такого задания, решенный, что бы я по разбирался в нем. Используя...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru