Например TDA7294

Форум РадиоКот • Просмотр темы - Не могу выразить словами на VHDL
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вс окт 12, 2025 19:16:05

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 22 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Не могу выразить словами на VHDL
СообщениеДобавлено: Ср окт 31, 2012 12:44:21 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7314
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А может кто поможет с такой проблемой: описываю константу, но хочу, чтобы эта константа имела другое значение, если переменная объявленная через generic имеет значение отличное от 0.
Код:
entity device is
    generic (tailless : integer := 0);
    Port ( clk : in  STD_LOGIC;
           anode : out  STD_LOGIC_VECTOR (3 downto 0);
           cathode : out  STD_LOGIC_VECTOR (7 downto 0));
end device;

architecture Behavioral of device is

signal clk_div : std_logic_vector (9 downto 0) := (others => '0');
signal data    : std_logic_vector (3 downto 0) := (others => '0');

constant digit_0:std_logic_vector := "0111111";
constant digit_1:std_logic_vector := "0000110";
constant digit_2:std_logic_vector := "1011011";
constant digit_3:std_logic_vector := "1001111";
constant digit_4:std_logic_vector := "1100110";
constant digit_5:std_logic_vector := "1101101";
constant digit_6:std_logic_vector := "1111101";
constant digit_7:std_logic_vector := "0000111";

Так вот хочется, чтобы константа digit_7 имела другое значение, если tailless равно, скажем, 1.

объявить еще одну константу и дальше делать подмену, тоже как-то некузяво. Как тут вставить?
Код:
   with data select
   cathode(6 downto 0) <= digit_0 when "0000",
                          digit_1 when "0001",
                          digit_2 when "0010",
                          digit_3 when "0011",
                          digit_4 when "0100",
                          digit_5 when "0101",
                          digit_6 when "0110",
                          digit_7 when "0111",
                          digit_8 when "1000",
                          digit_9 when "1001",

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Не могу выразить словами на VHDL
СообщениеДобавлено: Вс ноя 25, 2012 11:44:22 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7314
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
uldemir писал(а):
У меня есть еще вопрос. Сделал пол-года назад проект - всё работает. Одно но - исходник содержит полторы тысячи строк. Нельзя ли как "уплотнить"? Дело в том, что куски однообразные. Здесь написана работа с устройством 1-wire. Модулю посылаются сигналы что передавать сброс, "1" или "0", а затем ожидается пока слот отработает, потом следующий бит. Беда в том, что сигнал state проходит почти все 256 состояний и в этом case каждое состояние расписать муторно. А еще муторнее это читать. Можно ли как-то объединить их циклом, что-ли?
Частичное решение нашел. Для совершенно одинаковых ветвей можно объединить одной строчкой:
Спойлер
Код:
-- Send 0xCC - Skip ROM      
      when X"22" =>
         dataout <= Skip_ROM(0);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"24" =>
         dataout <= Skip_ROM(1);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"26" =>
         dataout <= Skip_ROM(2);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"28" =>
         dataout <= Skip_ROM(3);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"2A" =>
         dataout <= Skip_ROM(4);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"2C" =>
         dataout <= Skip_ROM(5);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"2E" =>
         dataout <= Skip_ROM(6);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"30" =>
         dataout <= Skip_ROM(7);
         wr_res <= '1';
         ow_run <= '1';
         state <= state+1;

      when X"23" | X"25" | X"27" | X"29" | X"2B" | X"2D" | X"2F" | X"31" =>
         if ow_run = '0' then
            state <= state+1;
         end if;

В результате исходник усох до 8-ми сотен строк.

_________________
А люди посмотрят и скажут: "Собаки летят. Вот и осень."


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 22 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y