МАРСОХОД

Open Source Hardware Project

Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Error: fed by 5 non-global control signals

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7117

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
Добрый вечер.
Подскажите, пожалуйста, как решить проблему, Quartus II ругается и выдает такую ошибку:
"Error: ... number_cnt[0] fed by 5 non-global control signals -- only 4 control signals may be non-global"
(и соответственно такая же ошибка на number_cnt[1], number_cnt[2]...)
Если в коде закомментировать строку с асинхронной очисткой триггера number_cnt[0...11],
" if reset = '1' then
--number_cnt <= "000000000000"; "
то ошибка пропадает.
Возникает такой вопрос: а разве асинхронная очистка триггера не является глобальным сигналом управления?
И второй вопрос: как сделать неглобальный управляющий сигнал глобальным?
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7118

  • Meteor
  • Meteor аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 29
  • Спасибо получено: 16
Бегло посмотрел Ваш код и ничего не понял. Вот Вы написали
if(number_cnt(3 downto 0)="1001") then
if(number_cnt(7 downto 4)="1001")then
number_cnt(11 downto 8 )<=number_cnt(11 downto 8 )+"0001";
number_cnt(11 downto 4)<="00000000";
Это вообще как понимать? Сперва просите его увеличить старшую четверку на 1, и тут же говорите присвой нулевое значение.
Ну и на будущее, выкладывайте код текстом, а не картинкой - переписывать даже эти 4 строки уже морока.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Meteor.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7119

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
Да, извиняюсь, действительно есть ошибка, менялся принцип работы схемы и забыл во всех нужных местах изменить разряды, здесь должны младшие разряды обнуляться.
f(number_cnt(3 downto 0)="1001") then
if(number_cnt(7 downto 4)="1001")then
number_cnt(11 downto 8 )<=number_cnt(11 downto 8 )+"0001";
number_cnt(7 downto 0)<="00000000";
Попробую скомпилировать код с изменениями, но думаю вряд ли это поможет решить мою проблему, о результатах отпишусь.
Спасибо за участие)
p.s. да, хорошо, на будущее буду выкладывать текстом.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7120

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
Ошибка осталась.
Возможно не сказал главного, что если этот код компилировать как отдельный проект, то все компилируется хорошо, без ошибок,
но если его вставить как компонент в проекте, то собственно и выдает эту ошибку.
Так вот остается вопрос как же сделать неглобальный управляющий сигнал глобальным?

Library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity Number is
port ( CLK : in std_logic;
RESET : in std_logic;
SAVE : in std_logic;
addr : in std_logic_vector(8 downto 0);
NUMBER_in : in std_logic;
DELETE : in std_logic;
display_number : out std_logic_vector(11 downto 0);
addr_number_out : out std_logic_vector(6 downto 0)
);
end Number;
architecture Number_arch of Number is
signal addr_number_0 : std_logic_vector(6 downto 0);
signal addr_number_1 : std_logic_vector(5 downto 0);
signal state_number : std_logic;
signal cnt_state : std_logic_vector(9 downto 0);
signal number_cnt : std_logic_vector(11 downto 0);
signal temp : std_logic_vector(3 downto 0);
signal en_number : std_logic;
signal temp_addr : std_logic_vector(8 downto 0);
begin

en_number <= '1' when (addr = "010001000" or addr = "001001001" or addr = "001001010") else
'0';

number_proc_0: process(reset, clk, save)
begin
if reset = '1' then
number_cnt <= "000000000000";
cnt_state <= "0000000000";
state_number <= '0';
temp <= "0000";
elsif rising_edge(clk) then
temp_addr <= addr;
if temp_addr /= addr then
number_cnt <= "000000000000";
elsif (en_number = '1' and number_in = '1') then
if state_number = '0' then
number_cnt <= number_cnt(7 downto 0) & number_cnt(11 downto 8);
end if;
if temp = "1001" then
temp <= "0000";
else
temp <= temp + "0001";
end if;
state_number <= '1';
cnt_state <= "0000000000";
elsif state_number = '1' then
cnt_state <= cnt_state + "0000000001";
if cnt_state = "0000000001" then
number_cnt(3 downto 0) <= temp;
elsif cnt_state = "0000000011" then -- *** FOR MODELING ***
--if cnt_state = "1111111000" then
state_number <= '0';
temp <= "0000";
end if;
elsif (addr = "010001000" and save = '1') then
if number_cnt(3 downto 0) = "1001" then
if number_cnt(7 downto 4) = "1001" then
number_cnt(11 downto 8) <= number_cnt(11 downto 8) + "0001";
number_cnt(7 downto 0) <= "00000000";
else
number_cnt(7 downto 4) <= number_cnt(7 downto 4) + "0001";
number_cnt(3 downto 0) <= "0000";
end if;
else
number_cnt(3 downto 0) <= number_cnt(3 downto 0) + "0011";
end if;
elsif delete = '1' then
number_cnt <= number_cnt(3 downto 0) & number_cnt(11 downto 8) & "0000";
end if;
end if;
end process number_proc_0;

number_proc_1: process(reset, clk, number_cnt)
begin
case number_cnt(11 downto 8) is
when "0000" =>
addr_number_0 <= "0000000";
when "0001" =>
addr_number_0 <= "1100100";
when others =>
addr_number_0 <= "1111111"; --* 200
end case;

case number_cnt(7 downto 4) is
when "0000" =>
addr_number_1 <= "000000";
when "0001" =>
addr_number_1 <= "000101";
when "0010" =>
addr_number_1 <= "001010";
when "0011" =>
addr_number_1 <= "001111";
when "0100" =>
addr_number_1 <= "010100";
when "0101" =>
addr_number_1 <= "011001";
when "0110" =>
addr_number_1 <= "011110";
when "0111" =>
addr_number_1 <= "100011";
when "1000" =>
addr_number_1 <= "101000";
when "1001" =>
addr_number_1 <= "101101";
when others =>
addr_number_1 <= "000000";
end case;
end process number_proc_1;

display_number <= number_cnt;
addr_number_out <= addr_number_0 + (addr_number_1 & '0') + ("000" & number_cnt(3 downto 0));

end Number_arch;
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7121

Вам точно сигнал "RESET" в этом модуле нужен? Может и без него будет работать.
Или сделать его синхронным.
Зацепите его , для начала , на "0"
Спасибо сказали: single

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от umarsohod.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7122

  • Meteor
  • Meteor аватар
  • Не в сети
  • Осваиваюсь на форуме
  • Осваиваюсь на форуме
  • Сообщений: 29
  • Спасибо получено: 16

single пишет: Ошибка осталась.
Возможно не сказал главного, что если этот код компилировать как отдельный проект, то все компилируется хорошо, без ошибок,
но если его вставить как компонент в проекте, то собственно и выдает эту ошибку.

Боюсь недосказанное и есть самое главное. Вы случайно (ну так бывает иногда) не объединяете одновременно выходы двух компонентов?
Или может у Вас "хитрая" математическая зависимость при назначении выхода компонента в сигнал. Причем настолько хитрая, что какие-то выходы перекрещиваются и одновременно назначаются одному и тому же биту.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7123

Ошибку дает фитер, нехватает ресурсов для разводки. Нужно разбираться с проектом целиком.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7124

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0

umarsohod пишет: Вам точно сигнал "RESET" в этом модуле нужен? Может и без него будет работать.
Или сделать его синхронным.
Зацепите его , для начала , на "0"


Спасибо, действительно синхронный сброс решил проблему.
А что сброс на '0' даст какое то преимущество?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7125

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0

Meteor пишет: Боюсь недосказанное и есть самое главное. Вы случайно (ну так бывает иногда) не объединяете одновременно выходы двух компонентов?
Или может у Вас "хитрая" математическая зависимость при назначении выхода компонента в сигнал. Причем настолько хитрая, что какие-то выходы перекрещиваются и одновременно назначаются одному и тому же биту.


На разных уровнях соединяю, к примеру выход компонента с выходом главного уровня, если мне этот выход компонента никак не нужно изменять в главном уровне, а просто нужно, чтобы этот выход был внешнем выходным интерфейсом схемы. (или это не совсем правильно?)
Да вроде никакой "хитрой" математической зависимости нет, а так конечно соединяю выход компонента с сигналом более верхнего уровня проекта, и вроде одновременное назначение одному и тому же биту тоже отсутствует.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Error: fed by 5 non-global control signals 1 год 7 мес. назад #7126

  • single
  • single аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 10
  • Спасибо получено: 0
Ни где не могу найти нормального объяснения что есть глобальный управляющий сигнал и не глобальный управляющий сигнал, как они реализуются в схеме, в коде и как вообще понять является сигнал глобальным или нет, может кто сможет объяснить или посоветовать хорошую литературу с описанием устройства ПЛИС??

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.196 секунд

facebook  GitHub  YouTube  Twitter
Вы здесь: Начало Forum Наш форум Обсуждаем Altera Quartus II Error: fed by 5 non-global control signals