0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
1

Реализация АЛУ на VHDL

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

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

Код
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;
Но тут тоже не все ясно. Вот в этой строчке
Код
temp := a + b;
он просто складывает два двоичных числа, для меня это не совсем понятно.
Дело в том, что недавно я смотрел книжку, и там для реализации сумматора на VHDL приводились сложные алгоритмы, в чем же тогда получается подвох? (вот пример алгоритма из книги)

Example 11.2 (Complete VHDL source code available). Kimerate a generic
n-digit base-B carry-chain adder:
Код
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2010, 00:39
Ответы с готовыми решениями:

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

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

Расчет и реализация КИХ фильтра на VHDL
Здравствуйте, У меня есть плата HELPER LMD-System c АЦП, ЦАП(в виде шим фильтра), cyclon 3. Я...

Выдает ошибку Error: VLM_0040: VHDL unit cannot be compiled as the target library name is not a legal VHDL identifier
выдает ошибку Error: VLM_0040: VHDL unit cannot be compiled as the target library name is not a...

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

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

Размерность результата для операций сложения-вычитания совпадает с размерностью операндов + флаг переноса/заёма. Для умножения разрядность результата равна сумме разрядностей операндов.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
10.05.2010, 19:16 4
Я так понимаю здесь вся соль в том, что при описании на VHDL каждая операция отображается в соответствующий схемотехнический элемент, и задача программиста в том, чтобы описать устройство, которое будет реализовано с минимальными аппаратными и временными затратами? Если рассуждать так, то полезно знать что во что отображается, как это узнать?
Размерность результата для операций сложения-вычитания совпадает с размерностью операндов + флаг переноса/заёма. Для умножения разрядность результата равна сумме разрядностей операндов.
Что для каждой операции разные выходы делать?
Они выглядят как программы, а не как описание железа.
А как выглядит описание железа?
считать результаты всех операций сразу, а потом MUXом выбрать нужный из них.
А если мне надо только одну операцию выполнить зачем считать все сразу?
-Убрал бы нафиг behavioral и написал бы все в orshitecture чтобы не тратить время на запуск последовательных операций.
Я думал, что behavioral это название архитектуры, разве не так? Если так то смысл не совсем понятен. Поясните пожалуйста.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
10.05.2010, 21:30 5
В VHDL, грубо говоря, есть 2 вида описания. В первом виде мы пишем какие логические блоки у нас есть и как они между собой соединеныю В таком случае порядок описания не имеет значения...все равно все блоки работают одновременно. Во втором виде мы описываем программу которая выполняется последовательно, строка за строкой...практически как программа для процессора. Пример такого способа есть в сумматоре который ты привел(цикл for).
Используя одновременный подсчет всех результатов ты экономишь время. У тебя за один такт будут выполняться все расчеты и вывод результата на порт. Когда ты начинаешь писать блоки с условиями, то ты тратишь время на проверку.
0
0 / 0 / 0
Регистрация: 28.01.2010
Сообщений: 39
10.05.2010, 21:34 6
Цитата Сообщение от 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 7
Спасибо. А как быть с представлением действительных чисел? Ведь тут есть операция деления, значит соответственно даже вводя целочисленные операнды можем получить на выходе не целый результат.
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
10.05.2010, 23:25 8
Цитата Сообщение от OtyxH
Спасибо. А как быть с представлением действительных чисел? Ведь тут есть операция деления, значит соответственно даже вводя целочисленные операнды можем получить на выходе не целый результат.
Это уже зависит от задания. Можно выводить только целую часть результата, можно выводить результат с фиксированой точкой, можно с плавающей точкой....тебе скорее всего нужен первый.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
11.05.2010, 22:57 9
Назрел вопрос. Если у меня код типа
Код
begin
операторы
process ( ...)
...
end process;
операторы;
end;
допустим исполняются операторы вне процесса и срабатывает процесс. Он будет исполняться параллельно вместе с этими операторами или какая последовательность выполнения операторов будет?
0
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 1,181
11.05.2010, 23:20 10
Процесс это отдельный блок в железке который срабатывает при определелнных условиях, вне зависимости от других процессов.
0
0 / 0 / 0
Регистрация: 01.02.2010
Сообщений: 86
12.05.2010, 20:33 11
Вопрос : допустим я реализовал сумматор и хочу через него реализовать вычитание операндов, в 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 12
Цитата Сообщение от 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 13
Можно сделать блок сложения-вычитания в виде конвейера. В случае вычитания операнд А задерживается в регистре на один такт, а операнд B преобразуется в (-B). В следующем такте они складываются. Таким образом время вычитания составит два такта, но быстродействие (тактовая частота) не уменьшится, поскольку преобразование операнда B происходит одновременно с суммированием предыдущих операндов. Правда это все целесообразно по большей части, если у вас поток чисел, которые нужно вычитать, вычитать и вычитать.
0
13.05.2010, 19:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.05.2010, 19:39
Помогаю со студенческими работами здесь

Реализация генератора шуму (Vhdl)
Приветствую! Задача: создать генератор шума с нормальным распределением. Получил ПСП с помощью...

Проектирование АЛУ
Проектирую в протеусе схему за книгой Бабич Н.П., Жуков И.А. - Компьютерная схемотехника. Методы...

Спроектировать АЛУ
Нужно спроектировать арифметико-логическое устройство (АЛУ) которое выполняет две операции:...

Универсальное АЛУ
Не могу понять как реализовано !Fвх в таблице и Pвх. Книга Марченко Основы...

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

Признаки формирующиеся в АЛУ
Здравствуйте, такой вопрос Каким образом формируются признаки в АЛУ? К примеру, каким образом...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru