Перейти к содержанию
    

Глючит XC9572

Есть следующий код на VHDL(Он не есть цель, просто очень упрощеныый тест):

----------------------------------------------------------------------------------
-- Company: 
-- Engineer: 
-- 
-- Create Date:    12:42:33 05/30/2008 
-- Design Name: 
-- Module Name:    main_test - Behavioral 
-- Project Name: 
-- Target Devices: 
-- Tool versions: 
-- Description: 
--
-- Dependencies: 
--
-- Revision: 
-- Revision 0.01 - File Created
-- Additional Comments: 
--
----------------------------------------------------------------------------------
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity main_test is
    Port ( clock : in  STD_LOGIC;
           data : in  STD_LOGIC_VECTOR(3 downto 0);
              led : out std_logic_vector(3 downto 0) := "0000");
end main_test;

architecture Behavioral of main_test is
begin
    process(clock)
    begin
        if clock'event and clock = '1' then
            case data is
                when "0000" =>
                    led <= "1000";
                when "0001" =>
                    led <= "0001";
                when "0010" =>
                    led <= "0100";
                when "0011" => 
                    led <= "0010";
                when "0100" =>
                    led <= "1001";
                when "0101" =>
                    led <= "0110";
                when "0110" =>
                    led <= "1110";
                when "0111" =>
                    led <= "0111";
                when "1000" =>
                    led <= "1111";
                when others =>
                    led <= "0000";
            end case;
        end if;
    end process;
    

end Behavioral;

 

Сигнал clock заведен на вывод GCK, данные подведены одинаковыми по длине проводами(формируются пиком).

Работаю с CPLD следующим образом:

выставляю данные, жду два такта работы пика(кварц 10 МГц), "дергаю" вверх clock, "дергаю" клок вниз. Потом жду 4 секунды и повторяю процедуру.

Т.е. имеем жуткий duty cycle.

Может ли это быть причиной того, что cpld некоторые команды не ловит, а некоторые заменяет другими? Или у меня есть ошибка в куске кода?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Непонятна суть проблемы. С симуляторе глючит или в железе или вы ISP пытаетесь реализовать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Непонятна суть проблемы. С симуляторе глючит или в железе или вы ISP пытаетесь реализовать?

 

В симуляторе - работает отлично. что этот псевдотест, что сама нужная vhdl'ина.

в железе - ни то, ни другое не работает.

хотя признаюсь честно - в симуляторе гонял только с клоком у которого duty cycle был 50%.

 

есть немного опасаний на тему работоспособности железки, поэтому решил уточнить - всё ли правильно написано. не зарыто ли где какой-нить собаки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В симуляторе - работает отлично. что этот псевдотест, что сама нужная vhdl'ина.

в железе - ни то, ни другое не работает.

Надеюсь, все неиспользованные пины опцией программирования к GND внутренне притянуты? Или внешними pull-up резисторами к Vcc? XC9500 крайне плохо "висячие" входы переносит. И греется при этом и глючит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Надеюсь, все неиспользованные пины опцией программирования к GND внутренне притянуты? Или внешними pull-up резисторами к Vcc? XC9500 крайне плохо "висячие" входы переносит. И греется при этом и глючит.

Притянуты програмно к GND.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть следующий код на VHDL(Он не есть цель, просто очень упрощеныый тест):

 

Сигнал clock заведен на вывод GCK, данные подведены одинаковыми по длине проводами(формируются пиком).

Работаю с CPLD следующим образом:

выставляю данные, жду два такта работы пика(кварц 10 МГц), "дергаю" вверх clock, "дергаю" клок вниз. Потом жду 4 секунды и повторяю процедуру.

Т.е. имеем жуткий duty cycle.

Может ли это быть причиной того, что cpld некоторые команды не ловит, а некоторые заменяет другими? Или у меня есть ошибка в куске кода?

 

Этот упрощенный тест Вам ничего не дает. Он рабочий.(Мультиплексор - регистр).

Если Вы только его конкретно в железе реализуете, с чего ему не работать?

Анализировать надо полный текст. Наверно дело в считывании с этого регистра в другой, внутренним клоком cpld.

(Если что то не работает в железе, дело не в выбранном пакете и кристалле. Дело всегда в ошибках в проекте. (длина проводников при частоте 10 мгц в пределах платы не влияет на работоспособность платы))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Этот упрощенный тест Вам ничего не дает. Он рабочий.(Мультиплексор - регистр).

Если Вы только его конкретно в железе реализуете, с чего ему не работать?

Я когда сталкиваюсь с чем-то странным сначала ищу ошибки у себя.

Но раз вы говорите, что тест полностью рабочий - значит дело в CPLD, есть сомнения на тему того что она в адекватном состоянии, судя по всему они оправдались.

Завтра сделаю следующую макетку и буду проверять заново.

 

Анализировать надо полный текст. Наверно дело в считывании с этого регистра в другой, внутренним клоком cpld.

Никакого дальнейшего считывания нет на самом деле. Этот тест почти полностью покрывает задачу. Тут FSM несколько проще и нет каскадирования. Проект сам по себе - хитрый "расширитель" IO для пика.

 

(Если что то не работает в железе, дело не в выбранном пакете и кристалле. Дело всегда в ошибках в проекте. (длина проводников при частоте 10 мгц в пределах платы не влияет на работоспособность платы))

Там меньше 10 мгц - у пиков 16й серии 4 такта на одну команду, так что быстрее чем 2.5 мгц дергать ногой не могу принципиально.

Не может ли быть проблемы в длительности импульса? 0.4 мкс?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Но раз вы говорите, что тест полностью рабочий - значит дело в CPLD, есть сомнения на тему того что она в адекватном состоянии, судя по всему они оправдались.

Завтра сделаю следующую макетку и буду проверять заново.

Никакого дальнейшего считывания нет на самом деле. Этот тест почти полностью покрывает задачу. Тут FSM несколько проще и нет каскадирования. Проект сам по себе - хитрый "расширитель" IO для пика.

Там меньше 10 мгц - у пиков 16й серии 4 такта на одну команду, так что быстрее чем 2.5 мгц дергать ногой не могу принципиально.

Не может ли быть проблемы в длительности импульса? 0.4 мкс?

 

Врядли дело в самой cpld. Это флеш с практически бескрайним количеством перепрограммирования.

Если не сожгли, зачем заново что то паять. Трудно что то сказать по вашему описанию системы.

У Вас машина состояний на cpld. И нет клока для работы этой машины состояний. CPLD должна работать практически при при нулевой частоте общени с пиком.

Пик пишет. Пик читает. Простая регистровая структура.

Наверно с пика надо начинать. Что он на самом деле выдает. Это данные, сопровождаемые клоком.

Может помехи в линии. Желательно пассивный уровень клока пика делать 1. Активный нулем.

Т.Е. данные фиксировать в cpld по перепаду из 1 в ноль и не держать клок долго в нуле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Врядли дело в самой cpld. Это флеш с практически бескрайним количеством перепрограммирования.

Если не сожгли, зачем заново что то паять. Трудно что то сказать по вашему описанию системы.

Она прошла очень грубый цикл монтажа-демнотажа + стоит на паршивой макетке.

да и, имхо, 200 мА - для неё как-то многовато.

 

У Вас машина состояний на cpld. И нет клока для работы этой машины состояний. CPLD должна работать практически при при нулевой частоте общени с пиком.

Может помехи в линии. Желательно пассивный уровень клока пика делать 1. Активный нулем.

Т.Е. данные фиксировать в cpld по перепаду из 1 в ноль и не держать клок долго в нуле.

Какая разница машине состояний с какой частотой ей работать?

На тему клока спасибо, несколько облегчило жизнь. Стало работать несколько лучше. Точнее начала признаки жизни подавать :)

Помехи вполне возможны - попробую землю в шлейфе пустить через один провод, на всякий случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Помехи вполне возможны - попробую землю в шлейфе пустить через один провод, на всякий случай.

 

Ну вот и шлейф появился. Витой парой каждый разряд данных, клок с gnd.

Если плоский кабель, через каждый сигнальный - gnd.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот и шлейф появился. Витой парой каждый разряд данных, клок с gnd.

Если плоский кабель, через каждый сигнальный - gnd.

Плоский кабель. Завтра попробую землю через каждый сигнальный подцепить..

Вообще выглядит всё так:

две макетки, сделаны утюгом.

одна с 16м пиком, другая с CPLDхой.

соединены плоским шлейфом, + земля и питание монтажным проводом.

на CPLD на каждом выводе питания блокировоная емкость, 100 нан.

большая часть ног никуда не подключена, в настройках ISE стоит, что не используемые ноги притягиваются к земле.

запитано всё от одного нормального БП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...