реклама на сайте
подробности

 
 
> clk => altera, Может, я не понимаю чего?
YGin
сообщение Oct 30 2007, 14:59
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Доброго времени суток!
И так суть проблемы! Есть некий чип, и звать его "MAX II" EPM570GT100C3 , и есть ,генератор 125 MHz сигнал генератора заведён на GCLK вход микросхемы в проекте это вход назначен как 2.5 Триггер Шмита.
Только вот сам кристалл лежит трупом и не дышит! Для эксперимента я просто вывел частоту на простую ножку там ‘0’ дальше подели её на 2, а в ответ тишина!
Так вот вопрос что я делаю, не так и почему чип не видит частоты?
Просто в основном работаю с Xilinx а вот кристаллы от Altera только начинаю осваивать!
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 28)
PSP
сообщение Oct 30 2007, 21:11
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 118
Регистрация: 1-10-07
Пользователь №: 30 988



Сделайте еще более простой проект. Выведите на одну ногу постоянную "1", а на другую "0". Увидели это состояние - поменяйте ноги местами. Если получилось, то значит у Вас работает вся технологическая цепочка - правильный исходник, трансляция, прошивка кристалла. Потом уже нужно разбираться с частотами и т.д. А то с новым инструментом легко можно, например, шить не тот файл который выдает транслятор.
Go to the top of the page
 
+Quote Post
YGin
сообщение Oct 31 2007, 07:17
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Проверял, всё работает. Мало того есть заведомо рабочий проект который я шью в ту микросхему и там всё работает, то есть с железом тоже всё в порядке!
Я понимаю, что задача сводится, найдите 10 отличий, только вот тот проект написан на AHDL, в котором я не очень! Может, есть нюанс при описание входных клоков в Altera который я не учёл!
Вопрос можно задать по-другому, как правильно описать входной клок в проекте?
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Oct 31 2007, 08:06
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



1. Проверьте назначение входного пина. Скорее всего Вы его или не назначили или назначили неправильно.
2. Возможно Вы в качестве VCCIO используете 3.3V, а сигнал с генератора идет 2.5V. Такая конфигурация может не работать.
Go to the top of the page
 
+Quote Post
YGin
сообщение Oct 31 2007, 08:29
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Цитата(AlexanderX @ Oct 31 2007, 10:06) *
1. Проверьте назначение входного пина. Скорее всего Вы его или не назначили или назначили неправильно.

Я его назначил, так же как и в рабочем проекте. Правда есть одно, но там вход разведен на два пина, один глобальный, а другой обычный!
Для чего использовался обычный не понятно!

Цитата(AlexanderX @ Oct 31 2007, 10:06) *
2. Возможно Вы в качестве VCCIO используете 3.3V, а сигнал с генератора идет 2.5V. Такая конфигурация может не работать.

VCCIO = 3.3V
Генератор 3.3 V я смотрел на сигнал он вроде нормальный, амплитуда сигнала 1V
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Oct 31 2007, 08:49
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



Я бы сказал что генератор вроде НЕНОРМАЛЬНЫЙ 1V - это мало. Амплитуда должна быть не менее 2.5V. wink.gif
Go to the top of the page
 
+Quote Post
YGin
сообщение Oct 31 2007, 09:17
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Цитата(AlexanderX @ Oct 31 2007, 10:49) *
Я бы сказал что генератор вроде НЕНОРМАЛЬНЫЙ 1V - это мало. Амплитуда должна быть не менее 2.5V. wink.gif

Мне, честно говоря тоже не очень нравится, но успокаивает то что тот проект работает на той же частоте и работает нормально.
Go to the top of the page
 
+Quote Post
DSIoffe
сообщение Oct 31 2007, 09:49
Сообщение #8


Дима
*****

Группа: Свой
Сообщений: 1 683
Регистрация: 15-12-04
Из: Санкт-Петербург
Пользователь №: 1 486



Сигнал генератора 125 МГц на осциллографе с полосой 100 МГц, например, и должен иметь размах не больше вольта.
А есть уверенность, что в рабочем проекте задействован именно глобальный тактовый вход, а не простая ножка? Может, тот глобальный уже пробит давно, и надо попробовать другой?


--------------------
© CОПЫРИГХТ: Дмитрий Иоффе, Советский Союз.
Приглашаю посмотреть: http://muradowa.spb.ru/ и http://www.drtata.narod.ru/index.html
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 31 2007, 10:00
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(YGin @ Oct 31 2007, 11:29) *
Я его назначил, так же как и в рабочем проекте. Правда есть одно, но там вход разведен на два пина, один глобальный, а другой обычный!


Посмотрите в опциях проекта, как ассигнованы неиспользуемые в проекте пины. (По умочанию как выходф на gnd наверное)
И посмотрите в редакторе ассигнований, описан ли там дублирующий клок пин.
Если физически на этот пин приходит клок. по идее его надо обозначит как вход по третьему состоянию.
Go to the top of the page
 
+Quote Post
EvgenyNik
сообщение Oct 31 2007, 10:16
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 597
Регистрация: 24-05-06
Из: г. Чебоксары
Пользователь №: 17 402



Я бы сделал так:
1. состояние этого входа вывел бы на другой выход.
2. включил и посмотрел - что творится на выходе-повторителе.
3. откинул сигнал с генератора.
4. вместо него (сигнала генератора) подпаял бы резистор порядка 1кОм.
5. попробовал бы подать второй вывод резистора VCC, GND - будет ли менять своё состояние вывод-повторитель.
Если от резистора всё работает, то проблема в уровне сигнала генератора, т.к. С3 частоту 125 должна тянуть.
А если и от резистора не работает, то проблема внутри.


--------------------
Почему разработчики систем повышенной надёжности плохо справляются с простыми проектами? :)
Go to the top of the page
 
+Quote Post
Iouri
сообщение Oct 31 2007, 12:24
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 11-07-05
Пользователь №: 6 707



assignments -> device -> <device and pin option> -> unused pins -> as input tri-stated
Go to the top of the page
 
+Quote Post
YGin
сообщение Oct 31 2007, 12:46
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Ну что тут скажешь одна голова хорошо, а коллектив бесценно!
Всем ОГРОМНЕЙШЕЕ спасибо! beer.gif
А особый a14.gif a14.gif a14.gif Iouri
поставил опцию и всё встало на место!
Go to the top of the page
 
+Quote Post
YGin
сообщение Oct 31 2007, 13:47
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



А может, кто объяснить, что хоть за грабли были?
Я так понимаю вся проблема была в том, что было два входа с клоком.
Go to the top of the page
 
+Quote Post
sazh
сообщение Oct 31 2007, 14:27
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(YGin @ Oct 31 2007, 16:47) *
А может, кто объяснить, что хоть за грабли были?
Я так понимаю вся проблема была в том, что было два входа с клоком.

Если Вы сделали assignments -> device -> <device and pin option> -> unused pins -> as input tri-stated,
то погорячились.
Если посомтреть рапорт *.pin, то он должен выдать типа

RESERVED_INPUT : Pin is tri-stated and should be connected to the board.
Наверно предыдущее было лучше. Но коротило на клок.
Наверно корректно будет в редакторе ассигнований присвоить индивидуально этому пину
в разделе pin => as input tri-stated
Go to the top of the page
 
+Quote Post
Iouri
сообщение Oct 31 2007, 16:39
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 11-07-05
Пользователь №: 6 707



объяснить незнаю как была похожая проблма еще в Quartus 4.1
поговорил с альтерой они толком ничего обьяснить не смогли,
но сказали что делать с тех пор так всегда делаю
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 1 2007, 14:43
Сообщение #16


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Знаю немножко не в тему, но раз уж начал! Подскажите, как в этом чипе сделать деление двух 32 битных векторов, и влезет ли оно в чип?
Go to the top of the page
 
+Quote Post
Iouri
сообщение Nov 2 2007, 11:48
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 11-07-05
Пользователь №: 6 707



думаю что не получится
tools - Megawizard plug-in manager -> create new custom megafunction variation -> arithmetic -> LPM-divide


а дальше по шагам
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 2 2007, 15:17
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Цитата(Iouri @ Nov 2 2007, 13:48) *
думаю что не получится
tools - Megawizard plug-in manager -> create new custom megafunction variation -> arithmetic -> LPM-divide
а дальше по шагам

Спасибо.
И честно последний вопрос. Почему этот процесс не работает, я хоть застрелите не понимаю!

port data_out : out std_logic_vector(31 downto 0);-- знаю что не правельно это так для наглядности!
clk1 = 125MHz
clk2 = 100MHz


signal base_counter : std_logic_vector(31 downto 0);
signal measuring_counter : std_logic_vector(31 downto 0);

process(clk1)
begin
if rising_edge(clk1) then
base_counter <= base_counter + 1;
if base_counter = "ffffffff" then
en = '1';
else
en = '0';
end if;
end if;
end process;


process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"00000000";
data_out <= measuring_counter;
else
measuring_counter <= measuring_counter + 1;
end if;
end if;
end if;
end process;
Go to the top of the page
 
+Quote Post
AlexanderX
сообщение Nov 2 2007, 15:47
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977



Цитата(YGin @ Nov 2 2007, 17:17) *
if base_counter = "ffffffff" then
en = '1';
else
en = '1';
end if;

Это примерно как свет то потухнет, то погаснет. smile.gif
В каком-то из условий должнобыть присваивание '0'. Стандартная ошибка копирования.
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 2 2007, 16:23
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Цитата(AlexanderX @ Nov 2 2007, 17:47) *
Это примерно как свет то потухнет, то погаснет. smile.gif
В каком-то из условий должнобыть присваивание '0'. Стандартная ошибка копирования.

В точку с копированием! Да только это я сделал когда копировал кусок кода с проектa на форум в проекте всё честно там ‘0’
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 2 2007, 16:29
Сообщение #21


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(YGin @ Nov 2 2007, 19:23) *
В точку с копированием! Да только это я сделал когда копировал кусок кода с проектa на форум в проекте всё честно там ‘0’

process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"00000000";
data_out <= measuring_counter;


Может статься, что в интервал en уложатся два передних фронта clk2.
Нужно корректно перейти из одного клокового домена в другой (Сделать длительность en в период clk2).
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 2 2007, 16:37
Сообщение #22


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Цитата(sazh @ Nov 2 2007, 18:29) *
process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"00000000";
data_out <= measuring_counter;
Может статься, что в интервал en уложатся два передних фронта clk2.
Нужно корректно перейти из одного клокового домена в другой (Сделать длительность en в период clk2).


Возможно! Но тогда на выходе должны были б быть нули ну или константа если изменить код.

process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"11111111";
data_out <= measuring_counter;

а у меня Аltera просто отказывается работать когда я включаю этот код и нормально работает когда я его коментарю.
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 2 2007, 16:42
Сообщение #23


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(YGin @ Nov 2 2007, 19:37) *
Возможно! Но тогда на выходе должны были б быть нули ну или константа если изменить код.

process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"11111111";
data_out <= measuring_counter;

а у меня Аltera просто отказывается работать когда я включаю этот код и нормально работает когда я его коментарю.


В VHDL я не силен. Выложите полный проект. За длинные выходные ктонибудь да посмотрит.
В RTL просмотрщике все сразу видно. Ясно дело, что Квартус тут непричем.
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 2 2007, 16:50
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Да я особо на Квартус и не грешу! Если руки кривые машинка, то тут при чём (или программка)! Вопрос то в другом код, то простой как угол дома а работать не хочет!
И думается мне, что проблема тут в частоте может Макс не может скушать 125MHz?
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 2 2007, 17:50
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(YGin @ Nov 2 2007, 19:50) *
Да я особо на Квартус и не грешу! Если руки кривые машинка, то тут при чём (или программка)! Вопрос то в другом код, то простой как угол дома а работать не хочет!
И думается мне, что проблема тут в частоте может Макс не может скушать 125MHz?


MAX может скушать 125 mHz. Потому что это циклон без памяти с внутренним загрузочным ПЗУ.
Про код я тоже ничего не знаю. Не программист. Могу оперировать понятием схема.
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 2 2007, 19:52
Сообщение #26


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Ну, тогда я совсем ничего не понимаю!
Резюме!
Буду искать в проекте в целом, наверно грабли там! Если у кого будут советы, всегда радо выслушаю.
Go to the top of the page
 
+Quote Post
Iouri
сообщение Nov 2 2007, 20:01
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 11-07-05
Пользователь №: 6 707



Код
process(clk1)
begin
if rising_edge(clk1) then
base_counter <= base_counter +1;
end if;
end process
en <= '1' when base_counter = x"FFFFFF" else '0'

process(clk2)
begin
if rising_edge(clk2) then
en_sr(3 downto 0) <= en_sr(2 downto 0) & en;
end if;
end process;

en1 <= en_sr{3};

process(clk2)
begin
if rising_edge(clk2) then
if en1 = '1' then
measuring_counter <= x"00000000";
else
measuring_counter <= measuring_counter + 1;
end if;
end if;
end process;

process(clk2,en)
begin
if rising_edge(clk2) then
if en1= '1' then
data_out <= measuring_counter;
else
data_out <= data_out;
end if;
end if;
end process;
Go to the top of the page
 
+Quote Post
sazh
сообщение Nov 3 2007, 16:19
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 2 435
Регистрация: 6-10-04
Из: Петербург
Пользователь №: 804



Цитата(sazh @ Nov 2 2007, 19:29) *
process(clk2,en)
begin
if rising_edge(clk2) then
if en = '1' then
measuring_counter <= x"00000000";
data_out <= measuring_counter;
Может статься, что в интервал en уложатся два передних фронта clk2.
Нужно корректно перейти из одного клокового домена в другой (Сделать длительность en в период clk2).


Вчера я вас ввел в заблуждение. Частота clk1 выше, чем clk2
Поэтому может статься, что сфомированный по clk1 интервал en может пропускаться триггером, работающим по фронту clk2.
Нужно корректно перейти из одного клокового домена в другой (Сделать длительность en в период clk2).
Примерно так.

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity count is
Port (
clk125, clk100 : in std_logic;
data_out : out std_logic_vector(3 downto 0));
end count;

architecture Behavioral of count is
signal base_counter: std_logic_vector(4 downto 0);
signal measuring_counter: std_logic_vector(3 downto 0);
signal en_sr: std_logic_vector(2 downto 0);
signal en, dff_a, en_a: std_logic;
begin

process(clk125)
begin
if rising_edge(clk125) then
if base_counter = "10000" then
base_counter <= "00001";
else
base_counter <= base_counter + 1;
end if;
end if;
end process;

en <= base_counter(4);

process(clk100, en)
begin
if en = '1' then
dff_a <= '1';
elsif rising_edge(clk100) then
dff_a <= '0';
end if;
end process;

en_a <= NOT en_sr(2) AND en_sr(1);

process(clk100)
begin
if rising_edge(clk100) then
en_sr <= en_sr(1 downto 0) & dff_a;
if en_a = '1' then
data_out <= measuring_counter;
end if;
if en_a = '1' then
measuring_counter <= x"0";
else
measuring_counter <= measuring_counter + 1;
end if;
end if;
end process;

end Behavioral;
Go to the top of the page
 
+Quote Post
YGin
сообщение Nov 5 2007, 11:07
Сообщение #29


Частый гость
**

Группа: Свой
Сообщений: 193
Регистрация: 28-02-06
Пользователь №: 14 796



Всем большое спасибо beer.gif beer.gif beer.gif проблема решена проект работает!
И так в двух словах, что было и почему не работало! Бои шли с переменным успехом!
Оказалось что хомут не один а несколько!
Прав был sazh в том что интервал en может пропускался триггером, работающим по фронту clk2 просто я забыл уточнить что clk2 может меняться от 5 до 200 MHz! И в целом вся схема это обычный измеритель частоты! Вот, а другой баг был уже в другом месте проекта, но влиял на работу в целом!
А я грешным делом подумал на Altera(у), ещё раз подтвердился девиз(если руки кривые нечего грешить на магнитные бури на солнце)
Ещё раз всем спасибо за помощь!!!! a14.gif
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 23:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.01641 секунд с 7
ELECTRONIX ©2004-2016