двоично-десятичный преобразователь BCD
двоично-десятичный преобразователь BCD
НА 8 входов подаётся 8-битовый двоичный код. в схеме исполmзуются 3 BCD схемы что преобразовывать числа от 0 до 255. на выходе должен быт двоично-десятичный код...
если вам нетрудно помогите пожалуйста написать код. не могу понять как связать эти три схемы BCD
если вам нетрудно помогите пожалуйста написать код. не могу понять как связать эти три схемы BCD
- Реклама
Re: двоично-десятичный преобразователь BCD
Микросхема 155ПР6 к вашим услугам.
- nick17
- Встал на лапы
- Сообщения: 134
- Зарегистрирован: Пт июн 26, 2009 06:40:07
- Контактная информация:
Re: двоично-десятичный преобразователь BCD
Для ПЛИС код?
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: двоично-десятичный преобразователь BCD
А может для МК? Или для ПЛИС? Или совсем для ПЗУ?
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
- Реклама
Re: двоично-десятичный преобразователь BCD
и используются три микросхемы ПР7.
Re: двоично-десятичный преобразователь BCD
А какой код вы хотите увидеть? внутренний ПР7 или их соединений? внутренний - увы, просто ПЗУ. так что обычный case...when. А соединений - через port map. это на VHDL. или надо на каком другом языке? курсач, да?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: двоично-десятичный преобразователь BCD
нужен VHDL код. да курсач.
Re: двоично-десятичный преобразователь BCD
такой должен быть примерно?
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity CNT_BCD is
port (
CLK: in STD_LOGIC;
RESET: in STD_LOGIC;
ENABLE: in STD_LOGIC;
FULL: out STD_LOGIC;
BCD_U: out STD_LOGIC_VECTOR (3 downto 0);
BCD_D: out STD_LOGIC_VECTOR (3 downto 0);
BCD_H: out STD_LOGIC_VECTOR (3 downto 0);
BCD_T: out STD_LOGIC_VECTOR (3 downto 0) );
end CNT_BCD;
architecture CNT_BCD of CNT_BCD is
signal COUNTER_U: INTEGER range 0 to 9;
signal COUNTER_D: INTEGER range 0 to 9;
signal COUNTER_H: INTEGER range 0 to 9;
signal COUNTER_T: INTEGER range 0 to 9;
signal IS_9999: STD_LOGIC;
begin
process (CLK, RESET)
begin
if RESET='1' then
COUNTER_U <= 0; COUNTER_D <= 0;
COUNTER_H <= 0; COUNTER_T <= 0;
elsif CLK='1' and CLK'event then
if ENABLE = '1' and IS_9999 = '0' then
if COUNTER_U = 9 then COUNTER_U <= 0;
if COUNTER_D = 9 then COUNTER_D <= 0;
if COUNTER_H = 9 then COUNTER_H <= 0;
COUNTER_T <= COUNTER_T + 1;
else COUNTER_H <= COUNTER_H + 1; end if;
else COUNTER_D <= COUNTER_D + 1; end if;
else COUNTER_U <= COUNTER_U + 1; end if;
end if; end if;
end process;
BCD_U <= CONV_STD_LOGIC_VECTOR(COUNTER_U,4);
BCD_D <= CONV_STD_LOGIC_VECTOR(COUNTER_D,4);
BCD_H <= CONV_STD_LOGIC_VECTOR(COUNTER_H,4);
BCD_T <= CONV_STD_LOGIC_VECTOR(COUNTER_T,4);
IS_9999 <= '1' when (COUNTER_U = 9 and COUNTER_D = 9 and COUNTER_H = 9 and COUNTER_T = 9) else '0';
FULL <= IS_9999;
end CNT_BCD;
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.STD_LOGIC_ARITH.all;
use IEEE.STD_LOGIC_UNSIGNED.all;
entity CNT_BCD is
port (
CLK: in STD_LOGIC;
RESET: in STD_LOGIC;
ENABLE: in STD_LOGIC;
FULL: out STD_LOGIC;
BCD_U: out STD_LOGIC_VECTOR (3 downto 0);
BCD_D: out STD_LOGIC_VECTOR (3 downto 0);
BCD_H: out STD_LOGIC_VECTOR (3 downto 0);
BCD_T: out STD_LOGIC_VECTOR (3 downto 0) );
end CNT_BCD;
architecture CNT_BCD of CNT_BCD is
signal COUNTER_U: INTEGER range 0 to 9;
signal COUNTER_D: INTEGER range 0 to 9;
signal COUNTER_H: INTEGER range 0 to 9;
signal COUNTER_T: INTEGER range 0 to 9;
signal IS_9999: STD_LOGIC;
begin
process (CLK, RESET)
begin
if RESET='1' then
COUNTER_U <= 0; COUNTER_D <= 0;
COUNTER_H <= 0; COUNTER_T <= 0;
elsif CLK='1' and CLK'event then
if ENABLE = '1' and IS_9999 = '0' then
if COUNTER_U = 9 then COUNTER_U <= 0;
if COUNTER_D = 9 then COUNTER_D <= 0;
if COUNTER_H = 9 then COUNTER_H <= 0;
COUNTER_T <= COUNTER_T + 1;
else COUNTER_H <= COUNTER_H + 1; end if;
else COUNTER_D <= COUNTER_D + 1; end if;
else COUNTER_U <= COUNTER_U + 1; end if;
end if; end if;
end process;
BCD_U <= CONV_STD_LOGIC_VECTOR(COUNTER_U,4);
BCD_D <= CONV_STD_LOGIC_VECTOR(COUNTER_D,4);
BCD_H <= CONV_STD_LOGIC_VECTOR(COUNTER_H,4);
BCD_T <= CONV_STD_LOGIC_VECTOR(COUNTER_T,4);
IS_9999 <= '1' when (COUNTER_U = 9 and COUNTER_D = 9 and COUNTER_H = 9 and COUNTER_T = 9) else '0';
FULL <= IS_9999;
end CNT_BCD;
Re: двоично-десятичный преобразователь BCD
Ну а сказать где у вас затык сложно? У телепатов уже рождественские каникулы наступили. IMHO проще попросить у кого из группы, кто лучше шарит, чтобы он за определенную сумму знаний сделал вам этот курсач.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: двоично-десятичный преобразователь BCD
я же прикреплял схему самого преобразователя, там же всё нарисовано в max plus II
в группе вот именно что никто по этому VHDL не шарит.
у всех это проблема
в группе вот именно что никто по этому VHDL не шарит.
у всех это проблема
- Meteor
- Друг Кота
- Сообщения: 3961
- Зарегистрирован: Пн июл 13, 2009 14:37:39
- Откуда: Московская область, наукоград.....
- Контактная информация:
Re: двоично-десятичный преобразователь BCD
Ну не такой код должен быть. Зачем тут счетчики?
Дешифратор должен работать без тактов (как я понимаю).
Следовательно, входы - шина 8 бит
Выходы: шина 12 бит.
Внутри надо "отделять" сотни, десятки и единицы друг от друга. Затем уже само преобразование.
Дешифратор должен работать без тактов (как я понимаю).
Следовательно, входы - шина 8 бит
Выходы: шина 12 бит.
Внутри надо "отделять" сотни, десятки и единицы друг от друга. Затем уже само преобразование.
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже
Re: двоично-десятичный преобразователь BCD
Вот полгода назад решал такую же задачку в лоб - полный аналог ПР7 получился :-) Соединяете три таких модуля по вашей схеме и имеете (почему-то точка не вводится)
С другой стороны - сделайте эту таблицу из 128-ми элементов и всё
Код: Выделить всё
entity bin2bcd is
Port ( arg : in STD_LOGIC_VECTOR (5 downto 0);
bcd : out STD_LOGIC_VECTOR (3 downto 0);
bcdh: out STD_LOGIC_VECTOR (3 downto 0));
end bin2bcd;
architecture Behavioral of bin2bcd is
signal decoded : STD_LOGIC_VECTOR (5 downto 0);
begin
process(arg)
begin
case arg(5 downto 1) is
when "00000" => decoded <= "000000";
when "00001" => decoded <= "000001";
when "00010" => decoded <= "000010";
when "00011" => decoded <= "000011";
when "00100" => decoded <= "000100";
when "00101" => decoded <= "001000";
when "00110" => decoded <= "001001";
when "00111" => decoded <= "001010";
when "01000" => decoded <= "001011";
when "01001" => decoded <= "001100";
when "01010" => decoded <= "010000";
when "01011" => decoded <= "010001";
when "01100" => decoded <= "010010";
when "01101" => decoded <= "010011";
when "01110" => decoded <= "010100";
when "01111" => decoded <= "011000";
when "10000" => decoded <= "011001";
when "10001" => decoded <= "011010";
when "10010" => decoded <= "011011";
when "10011" => decoded <= "011100";
when "10100" => decoded <= "100000";
when "10101" => decoded <= "100001";
when "10110" => decoded <= "100010";
when "10111" => decoded <= "100011";
when "11000" => decoded <= "100100";
when "11001" => decoded <= "101000";
when "11010" => decoded <= "101001";
when "11011" => decoded <= "101010";
when "11100" => decoded <= "101011";
when "11101" => decoded <= "101100";
when "11110" => decoded <= "110000";
when "11111" => decoded <= "110001";
when others => decoded <= "------";
end case;
end process;
bcd <= decoded (2 downto 0) & arg(0);
bcdh <= "0" & decoded(5 downto 3);
end Behavioral;А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: двоично-десятичный преобразователь BCD
код мне более менее понятен. Но на вход же подается 8 битовый двоичный код.
Re: двоично-десятичный преобразователь BCD
Вариант 1: Ну раз понятно, в чем проблемы отмасштабировать с 5 до 7 разрядов? младший разряд нет смысла обрабатывать.
Вариант 2: Я уже упомянул, что это соответствует вашей микросхеме 155ПР7 - можете командами port map соединить их в соотвествии с вашей схемой.
Вариант 3: Наверное изящнее выло бы написать формулы, типа младший БКД разряд это остаток от деления аргумента на 10... итд.
Вариант 2: Я уже упомянул, что это соответствует вашей микросхеме 155ПР7 - можете командами port map соединить их в соотвествии с вашей схемой.
Вариант 3: Наверное изящнее выло бы написать формулы, типа младший БКД разряд это остаток от деления аргумента на 10... итд.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: двоично-десятичный преобразователь BCD
т.е например будет
begin
process(arg)
begin
case arg(5 downto 1) is
when "0000000" => decoded <= "0000000000";
на схеме же 10 выходов?
или как?
вот я тупой...
begin
process(arg)
begin
case arg(5 downto 1) is
when "0000000" => decoded <= "0000000000";
на схеме же 10 выходов?
или как?
вот я тупой...
Re: двоично-десятичный преобразователь BCD
размерность не соблюдаете. если у вас аргумент 8-разрядный, то так и пишите case arg(7 downto 0) или (7 downto 1), если младший разряд в учет не берем. А что в библиотеках книжек нет?
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Re: двоично-десятичный преобразователь BCD
я понял. как мне написать соответствие этих кодов.
спасибо вам.
а начать мне описывать
entity bin2bcd is
Port ( arg : in STD_LOGIC_VECTOR (5 downto 0);
bcd : out STD_LOGIC_VECTOR (3 downto 0);
bcdh: out STD_LOGIC_VECTOR (3 downto 0));
end bin2bcd;
architecture Behavioral of bin2bcd is
signal decoded : STD_LOGIC_VECTOR (5 downto 0);
begin
process(arg)
begin
case arg(5 downto 1) is
или что здесь изменить, исходя что код 8 разрядный
спасибо вам.
а начать мне описывать
entity bin2bcd is
Port ( arg : in STD_LOGIC_VECTOR (5 downto 0);
bcd : out STD_LOGIC_VECTOR (3 downto 0);
bcdh: out STD_LOGIC_VECTOR (3 downto 0));
end bin2bcd;
architecture Behavioral of bin2bcd is
signal decoded : STD_LOGIC_VECTOR (5 downto 0);
begin
process(arg)
begin
case arg(5 downto 1) is
или что здесь изменить, исходя что код 8 разрядный
Re: двоично-десятичный преобразователь BCD
а число 4 в двоичной системе будет 00000100 а в двоично-десятичном 0100 что ли?


