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