Перейти к содержанию
    

Кстати, вместо того, чтобы что-то вычислять в двоичном коде, а потом преобразовывать в двоично-десятичный, можно попытаться сразу вычислять в двоично-десятичном.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как вывести полученное двузначное число ,допустим в результате перемножения, на 4-ёх разрядный 7-ми сегментный индикатор, используя десятичную систему счисления? Т.е., к примеру, вывести на индикатор результат произведения 9x9 = 81? Как отделить десятки от единиц и вывести их отдельно на каждый разряд?

 

variable q1 : integer;

variable q2 : integer;

q1 <= conv_integer(x_in) / 10 ; -- первая цифра

q2 <= conv_integer(x_in) - (q1 * 10); -- вторая цифра

 

-- реализация деления и умножения - не имеет значения для преобразования (таблично или на процессоре или еще как)

 

и последний шаг - преобразование цифры в семисегментный код - просто две таблицы. (или одна, если извернуться с мультиплексированием).

 

п.с. А можно и не делать деление/умножение, если важно только увидеть результат, а вывести восьмиразрядный код в шестнадцатеричном виде (две таблицы 4->7).

Изменено пользователем WingLion

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

реализация деления и умножения - не имеет значения для преобразования (таблично или на процессоре или еще как)

А вот с этим не согласен. Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности.

А то что? Человек (глядя на индикатор) устанет ждать пока железо поделит? :)

Вопрос только в ресурсах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А вот с этим не согласен. Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности.

 

А если возможности отказаться нет принципиально, как в данному случае? Преобразование в десятичное представление из двоичного ничем кроме деления не получишь. Будет это деление сделано таблично или через вычитание или через решение дифура пятого порядка, оно останется вычислением деления.

Даже, если ваша схема будет угадывать цифры десятичного представления, цифра 8 не перестанет быть результатом целочисленного деления числа 81 на 10.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если возможности отказаться нет принципиально, как в данному случае? Преобразование в десятичное представление из двоичного ничем кроме деления не получишь.

 

Преобразование из двоичного в двоично-десятичное. Можно и нужно без деления.

Все варианты уже давно разжеваны. И Ваш - самый далекий от изящества.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Преобразование из двоичного в двоично-десятичное.

 

(не двоично)-десятичного в современных компьютерах и не бывает.

 

Можно и нужно без деления.

Все варианты уже давно разжеваны. И Ваш - самый далекий от изящества.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

(не двоично)-десятичного в современных компьютерах и не бывает.

 

 

 

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

 

Все-таки посмотрите, что советуют. Хотя бы мою ссылку, а затем можно продолжить спор. Не все так однозначно, как Вы утверждаете.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Все-таки посмотрите, что советуют. Хотя бы мою ссылку, а затем можно продолжить спор. Не все так однозначно, как Вы утверждаете.

 

Зачем мне что-то смотреть, если я собственными лапами делал такие преобразователи десятками и программно и в железках?

 

И спор раздувать незачем. Смысла спорить нет. Я ведь упертый самодур, кодящий на AHDL/VHDL с 95-го года.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем мне что-то смотреть...

Вопросов больше не имею :)

 

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Зачем мне что-то смотреть, если я собственными лапами делал такие преобразователи десятками и программно и в железках?

И спор раздувать незачем. Смысла спорить нет. Я ведь упертый самодур, кодящий на AHDL/VHDL с 95-го года.

Гибче надо быть. :)

Вспомните, в микроЭВМ 8051 (и не только в ней) была команда десятичной коррекции DA A, благодаря которой можно было вычислять двоично-десятичный результат. Без деления. Аналогичный алгоритм показан в упомянутых ссылках.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гибче надо быть. :)

Вспомните, в микроЭВМ 8051 (и не только в ней) была команда десятичной коррекции DA A, благодаря которой можно было вычислять двоично-десятичный результат. Без деления. Аналогичный алгоритм показан в упомянутых ссылках.

 

A это и не алгоритм вовсе. А всего лишь ВАРИАНТ РЕАЛИЗАЦИИ, o чем я сразу сказал.

И гибкость тут ни при чем.

Достаточно взглянуть на название подфорума, чтобы понять, что всякие DAA тут просто оффтопик.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот, что в итоге получилось:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity Gun is
    Port ( clk : in bit;
           Op1 : out  unsigned(3 downto 0);--десятки
           Op2 : out  unsigned(3 downto 0));--единицы
end Gun;

architecture Behavioral of Gun is
signal O1: integer range 0 to 9;
signal O2: integer range 0 to 9;
signal Ans : unsigned(8 downto 0);--вектор в котором хранится число, из которого, собственно, нужно извлечь десятки и единицы
begin--line 46(см.ниже)
process(clk)
begin
if clk='1' and clk'event then
Ans<="001010001";--специально задала, чтобы посмотреть в modelsim
if to_integer(Ans)<10 then--ecли меньше 10, то
O2<=to_integer(Ans);--присваеваем единицам 
else
O1<=to_integer(Ans)/10;--находим число десятков
O2<=to_integer(Ans)-(O1*10);--единиц
end if;
end if;
end process;
Op1<=to_unsigned(O1,4);
Op2<=to_unsigned(O2,4);
end Behavioral;

 

В modelsim что-то пошло не так))

 

Cannot continue because of fatal error.

# HDL call sequence:

# Stopped at C:/Xilinx/modelsimproj/Gun.vhd 53 Process line__46

Может всё дело в преобразовании типов? Не сильна в этом признаюсь, но по моей логике всё вроде правильно (себя не похвалишь - никто не похвалит) :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаточно взглянуть на название подфорума, чтобы понять, что всякие DAA тут просто оффтопик.

Никакого офтопика! Еще как "в самую точку".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...