ViKo 1 27 октября, 2011 Опубликовано 27 октября, 2011 · Жалоба Кстати, вместо того, чтобы что-то вычислять в двоичном коде, а потом преобразовывать в двоично-десятичный, можно попытаться сразу вычислять в двоично-десятичном. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WingLion 0 29 октября, 2011 Опубликовано 29 октября, 2011 (изменено) · Жалоба Как вывести полученное двузначное число ,допустим в результате перемножения, на 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). Изменено 29 октября, 2011 пользователем WingLion Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Claw 0 29 октября, 2011 Опубликовано 29 октября, 2011 · Жалоба WingLion спасибо Вам! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба реализация деления и умножения - не имеет значения для преобразования (таблично или на процессоре или еще как) А вот с этим не согласен. Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности. А то что? Человек (глядя на индикатор) устанет ждать пока железо поделит? :) Вопрос только в ресурсах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WingLion 0 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба А вот с этим не согласен. Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности. А если возможности отказаться нет принципиально, как в данному случае? Преобразование в десятичное представление из двоичного ничем кроме деления не получишь. Будет это деление сделано таблично или через вычитание или через решение дифура пятого порядка, оно останется вычислением деления. Даже, если ваша схема будет угадывать цифры десятичного представления, цифра 8 не перестанет быть результатом целочисленного деления числа 81 на 10. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 3 30 октября, 2011 Опубликовано 30 октября, 2011 · Жалоба А если возможности отказаться нет принципиально, как в данному случае? Преобразование в десятичное представление из двоичного ничем кроме деления не получишь. Преобразование из двоичного в двоично-десятичное. Можно и нужно без деления. Все варианты уже давно разжеваны. И Ваш - самый далекий от изящества. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WingLion 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Преобразование из двоичного в двоично-десятичное. (не двоично)-десятичного в современных компьютерах и не бывает. Можно и нужно без деления. Все варианты уже давно разжеваны. И Ваш - самый далекий от изящества. Про изящество я ни слова не утверждал. Я показывал всего лишь принцип, к которому сводится любой вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба (не двоично)-десятичного в современных компьютерах и не бывает. Про изящество я ни слова не утверждал. Я показывал всего лишь принцип, к которому сводится любой вариант. Все-таки посмотрите, что советуют. Хотя бы мою ссылку, а затем можно продолжить спор. Не все так однозначно, как Вы утверждаете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WingLion 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Все-таки посмотрите, что советуют. Хотя бы мою ссылку, а затем можно продолжить спор. Не все так однозначно, как Вы утверждаете. Зачем мне что-то смотреть, если я собственными лапами делал такие преобразователи десятками и программно и в железках? И спор раздувать незачем. Смысла спорить нет. Я ведь упертый самодур, кодящий на AHDL/VHDL с 95-го года. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
barabek 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Зачем мне что-то смотреть... Вопросов больше не имею :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Зачем мне что-то смотреть, если я собственными лапами делал такие преобразователи десятками и программно и в железках? И спор раздувать незачем. Смысла спорить нет. Я ведь упертый самодур, кодящий на AHDL/VHDL с 95-го года. Гибче надо быть. :) Вспомните, в микроЭВМ 8051 (и не только в ней) была команда десятичной коррекции DA A, благодаря которой можно было вычислять двоично-десятичный результат. Без деления. Аналогичный алгоритм показан в упомянутых ссылках. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WingLion 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Гибче надо быть. :) Вспомните, в микроЭВМ 8051 (и не только в ней) была команда десятичной коррекции DA A, благодаря которой можно было вычислять двоично-десятичный результат. Без деления. Аналогичный алгоритм показан в упомянутых ссылках. A это и не алгоритм вовсе. А всего лишь ВАРИАНТ РЕАЛИЗАЦИИ, o чем я сразу сказал. И гибкость тут ни при чем. Достаточно взглянуть на название подфорума, чтобы понять, что всякие DAA тут просто оффтопик. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Claw 0 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Вот, что в итоге получилось: 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 Может всё дело в преобразовании типов? Не сильна в этом признаюсь, но по моей логике всё вроде правильно (себя не похвалишь - никто не похвалит) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 31 октября, 2011 Опубликовано 31 октября, 2011 · Жалоба Достаточно взглянуть на название подфорума, чтобы понять, что всякие DAA тут просто оффтопик. Никакого офтопика! Еще как "в самую точку". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться