|
clk => altera, Может, я не понимаю чего? |
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 28)
|
Oct 31 2007, 08:29
|

Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Oct 31 2007, 14:27
|
Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 2 2007, 15:17
|

Частый гость
 
Группа: Свой
Сообщений: 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;
|
|
|
|
|
Nov 2 2007, 15:47
|
Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 21-07-05
Из: Киев
Пользователь №: 6 977

|
Цитата(YGin @ Nov 2 2007, 17:17)  if base_counter = "ffffffff" then en = '1'; else en = '1'; end if; Это примерно как свет то потухнет, то погаснет.  В каком-то из условий должнобыть присваивание '0'. Стандартная ошибка копирования.
|
|
|
|
|
Nov 2 2007, 16:23
|

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

|
Цитата(AlexanderX @ Nov 2 2007, 17:47)  Это примерно как свет то потухнет, то погаснет.  В каком-то из условий должнобыть присваивание '0'. Стандартная ошибка копирования. В точку с копированием! Да только это я сделал когда копировал кусок кода с проектa на форум в проекте всё честно там ‘0’
|
|
|
|
|
Nov 2 2007, 16:29
|
Гуру
     
Группа: Свой
Сообщений: 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).
|
|
|
|
|
Nov 2 2007, 16:37
|

Частый гость
 
Группа: Свой
Сообщений: 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 просто отказывается работать когда я включаю этот код и нормально работает когда я его коментарю.
|
|
|
|
|
Nov 3 2007, 16:19
|
Гуру
     
Группа: Свой
Сообщений: 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;
|
|
|
|
|
Nov 5 2007, 11:07
|

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

|
Всем большое спасибо  проблема решена проект работает! И так в двух словах, что было и почему не работало! Бои шли с переменным успехом! Оказалось что хомут не один а несколько! Прав был sazh в том что интервал en может пропускался триггером, работающим по фронту clk2 просто я забыл уточнить что clk2 может меняться от 5 до 200 MHz! И в целом вся схема это обычный измеритель частоты! Вот, а другой баг был уже в другом месте проекта, но влиял на работу в целом! А я грешным делом подумал на Altera(у), ещё раз подтвердился девиз(если руки кривые нечего грешить на магнитные бури на солнце) Ещё раз всем спасибо за помощь!!!!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|