Jump to content

    
Sign in to follow this  
Claw

Вывод на индикатор

Recommended Posts

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

Share this post


Link to post
Share on other sites
Как вывести полученное двузначное число ,допустим в результате перемножения, на 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 by WingLion

Share this post


Link to post
Share on other sites
реализация деления и умножения - не имеет значения для преобразования (таблично или на процессоре или еще как)

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

Share this post


Link to post
Share on other sites
Если писать не тестбенч, а реальное железо, то от операции деления я бы советовал отказаться по возможности.

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

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

Share this post


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

 

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

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

Share this post


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

 

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

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

Share this post


Link to post
Share on other sites
Преобразование из двоичного в двоично-десятичное.

 

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

 

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

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

 

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

Share this post


Link to post
Share on other sites
(не двоично)-десятичного в современных компьютерах и не бывает.

 

 

 

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

 

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

 

 

 

Share this post


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

 

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

 

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

Share this post


Link to post
Share on other sites
Зачем мне что-то смотреть, если я собственными лапами делал такие преобразователи десятками и программно и в железках?

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

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

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

Share this post


Link to post
Share on other sites
Гибче надо быть. :)

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

 

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

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

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

Share this post


Link to post
Share on other sites

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

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:

Share this post


Link to post
Share on other sites
Достаточно взглянуть на название подфорума, чтобы понять, что всякие DAA тут просто оффтопик.

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this