Например TDA7294

Форум РадиоКот • Просмотр темы - РОН: переключение контекста VHDL (Quartus)
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт дек 23, 2025 08:38:30

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


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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: РОН: переключение контекста VHDL (Quartus)
СообщениеДобавлено: Сб ноя 24, 2012 15:39:16 
Родился
Аватар пользователя

Зарегистрирован: Вт мар 27, 2012 21:13:19
Сообщений: 7
Рейтинг сообщения: 0
Написал, регистр общего назначения для АЛУ, потом дописал переключение контекста при прерывании: при переходе входного сигнала INTA в высокое состояние - значение регистров сохраняется в дополнительном регистре (reg_buff), при спаде сигнала - наоборот, данные из буферного регистра записываются в РОНы.
Код РОН:
Код:
LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
USE ieee.numeric_std.all;

ENTITY ron IS
   PORT
  (
      clk        : IN   std_logic;
      INTA      : IN   std_logic;
      DATA_IN      : IN   std_logic_vector (11 DOWNTO 0);
      ADR_REG1   : IN   std_logic_vector (3 DOWNTO 0);
      ADR_REG2   : IN   std_logic_vector (3 DOWNTO 0);
      WE         : IN   std_logic;
      DATA_OUT1   : OUT   std_logic_vector (11 DOWNTO 0);
      DATA_OUT2   : OUT   std_logic_vector (11 DOWNTO 0)
  );
END ron;
ARCHITECTURE arh OF ron IS
   type registr is array (0 to 15) of std_logic_vector(11 downto 0);
   signal reg : registr;
   signal reg_buff : registr;
BEGIN
PROCESS(clk)
BEGIN      
IF (clk'event AND clk = '1') THEN
   IF (WE = '1') THEN
      reg(to_integer(unsigned(ADR_REG2)))<=DATA_IN;
   ELSE
      DATA_OUT1<=reg(to_integer(unsigned(ADR_REG1)));
      DATA_OUT2<=reg(to_integer(unsigned(ADR_REG2)));      
   END IF;      
END IF;   
      if(rising_edge(INTA)) then
         reg_buff<=reg;
      end if;
      if(FALLING_EDGE(INTA)) then
         reg<=reg_buff;
      end if;
END PROCESS;

END arh;


Но к моему сожалению переключение не работает, Quartus выдаёт след. ошибки:
Что можно с этим сделать?

    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][0] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][1] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][2] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][3] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][4] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][5] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][6] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][7] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][8] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][9] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][10] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[15][11] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][0] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][1] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][2] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][3] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][4] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][5] because its behavior depends on the edges of multiple distinct clocks
    Error (10820): Netlist error at ron.vhd(36): can't infer register for reg[14][6] because its behavior depends on the edges of multiple distinct clocks



Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: РОН: переключение контекста VHDL (Quartus)
СообщениеДобавлено: Сб ноя 24, 2012 16:07:43 
Друг Кота
Аватар пользователя

Карма: 9
Рейтинг сообщений: 96
Зарегистрирован: Пн июл 13, 2009 14:37:39
Сообщений: 3961
Откуда: Московская область, наукоград.....
Рейтинг сообщения: 0
Первое, что бросилось - два разных фронта
Цитата:
PROCESS(clk)
BEGIN
IF (clk'event AND clk = '1') THEN

Тут реакция на тактовый сигнал.
Цитата:
if(rising_edge(INTA)) then

А тут на фронт. В процессе Вы не указали что INTA является "отслеживаемым", только CLK.
На вашем бы месте я сделал так. Назначил буфер variable inta_v:std_logic_vector(1 downto 0);
Далее описал реакцию.
inta_v(1):=inta_v(0);
inta_v(0):=INTA;
if(inta_v="01")then
Вот тут реакция на событие.

_________________
Загружая на вход компьютера "мусор", на выходе получим "мусор^32".
PS. Не работаю с: Proteus, Multisim, EWB, Micro-Cap... не спрашивайте даже


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: РОН: переключение контекста VHDL (Quartus)
СообщениеДобавлено: Сб ноя 24, 2012 16:41:56 
Родился
Аватар пользователя

Зарегистрирован: Вт мар 27, 2012 21:13:19
Сообщений: 7
Рейтинг сообщения: 0
Meteor, да полностью с вами согласен, но приведённая вами реакция на событие не подойдёт для моего случая, т.к. я забыл упомянуть, что сигнал INTA "висит" на протяжении всего прерывания.
Попробую задать переменную которая будет хранить предыдущее значение сигнала INTA, а затем сравнивать его с текущим.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: РОН: переключение контекста VHDL (Quartus)
СообщениеДобавлено: Сб ноя 24, 2012 19:14:25 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1398
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7321
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А кто мешает ввести еще один сигнал, с помощью которого контролировать перепады INTA?

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


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

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


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

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


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

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


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