Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SignalTap 2 Logic Analyzer
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
Ensider
После того , как запускаю "Run".Идет бесконечное Waiting for clock.Нашел самом сообщение об ошибке в литературе: "Логический анализатор выполняет захват триггера включения или в запущенном времени и ожидает тактовый сигнал для перехода".Но толком и не понял.Дело в самом CLOCK?Или , что-то другое?На большинство форумах пишут , что виноват CLOCK , но испытав способы устранения, не пришел к успешному результату.Прошу помочь в сложившейся ситуации.
doom13
Проблема с сигналом тактирования для сигналтап, его нет, ищите причину.
Ensider
Цитата(doom13 @ Jun 28 2017, 07:02) *
Проблема с сигналом тактирования для сигналтап, его нет, ищите причину.

Т.е. я его , как-то некорректно указал в самой программе?

Я использовал обыкновенный делитель.Вот отрывок.

Код
always @(posedge ADC_CLK) begin  

                                              

    if (COUNT == (SYS_CLOCK_FREQ/2 - 1)) begin
        timer_2Hz <= 1'b1;                                  
        COUNT           <= '0;                                    
    end
    else begin
        COUNT           <= COUNT+1;                              
        timer_2Hz <= 1'b0;                                
    end
end
doom13
Покажите настройки сигнслтап
Ensider
Цитата(doom13 @ Jun 28 2017, 07:34) *
Покажите настройки сигнслтап


Вот прикладываю.Я вообще не понимаю почему не видит он его.
doom13
ADC_CLK вручную прописали или по нажатию кнопки выбрали, если вручную, то выбирайте из меню по нажатию кнопки.
Иначе смотрите наличие ADC_CLK.
Ensider
Цитата(doom13 @ Jun 28 2017, 07:46) *
ADC_CLK вручную прописали или по нажатию кнопки выбрали, если вручную, то выбирайте из меню по нажатию кнопки.
Иначе смотрите наличие ADC_CLK.

По нажатию.Таким образом.Он у меня прописан в теле модуля. Да и в Pin Planner.Что ещё может быть не так -то?
doom13
Судя по названию линий, АЦП у вас с SPI интерфейсом, а ADC_CLK - клок для SPI со стороны FPGA , т.е. не должен быть входом и Вы должны сами его сформировать.
Ensider
Цитата(doom13 @ Jun 28 2017, 07:57) *
Судя по названию линий, АЦП у вас с SPI интерфейсом, а ADC_CLK - клок для SPI со стороны FPGA , т.е. не должен быть входом и Вы должны сами его сформировать.

Я должен сам реализовать "клок"?
А таким образом реализовывать нельзя?

Код
reg DATA_TEMP [96:0];                                  // Разрядность даннных АЦП

reg RDY;

reg CNV ;

reg serial_data;

reg SERIAL_BIT;

reg TEMP [96:0];

reg COUNT;


always @(posedge ADC_CLK) begin  

                                              

    if (COUNT == (SYS_CLOCK_FREQ/2 - 1)) begin
        timer_2Hz <= 1'b1;                                  
        COUNT           <= '0;                                    
    end
    else begin
        COUNT           <= COUNT+1;                              
        timer_2Hz <= 1'b0;                                
    end
end
                                                                // Утверждают сигнал CNV
always @ (negedge ADC_CLK)
        begin
            if ((COUNT == 97) || (COUNT == 98))
                CNV = 1'b0;
            else
                CNV = 1'b1;
                     end
                    
                                                              // Чтение последовательных данных в 97-битовый регистр. После этого преобразовать его в параллельный, если счетчик равен 97 (конец потока данных)
                    
                       always @ (negedge ADC_CLK)
        
        begin
                         DATA_TEMP[CNV]   <= (serial_data);
            if (COUNT == 97)
                TEMP <= DATA_TEMP;
                     end
always_ff @(posedge ADC_CLK) begin
    if (timer_2Hz == 1'b1) begin
        timer_1Hz <= ~timer_1Hz;
    end
end
                    
            assign ADC_CNV = CNV ;
            
             
endmodule
doom13
Посмотрите доку на АЦП, сигнал АЦП соответствующий Вашему ADC_CLK является его входом.
Ensider
Цитата(doom13 @ Jun 28 2017, 08:19) *
Посмотрите доку на АЦП, сигнал АЦП соответствующий Вашему ADC_CLK является его входом.

Я это понял. Мне просто сказали организовать делитель с такой-то частотой.Я его организовал. Мне нужен клок , который непосредственно на FPGA идет? Что-то все перепуталось. И да если у меня его нет , как уже было сказано , его надо написать?
doom13
Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL.

Цитата(Ensider @ Jun 28 2017, 11:34) *
И да если у меня его нет , как уже было сказано , его надо написать?

Его нужно откуда-то взять, а это, как вариант, клоковая ножка FPGA, при условии что на нее подается сигнал тактирования.

И да, Ваш делитель - "не совсем делитель ", высокий уровень один такт ADC_CLK, все остальное время низкий.
spectr
Похоже что сигналтапу не хватает клоков, чтобы заполнить весь буфер. На АЦП, видимо, у вас идет клок, разрешаемый чипселектом, а не постоянно? В таком случае сделайте еще один такой же клок, но который будет работать постоянно. Тогда сигналтап от него заработает.
Ensider
Цитата(doom13 @ Jun 28 2017, 08:50) *
Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL.

Делитель с частотой 10 МHz. Это все через ALTPLL делается?
AVR
Должен быть постоянный клок, синхронный с данными, которые хочется захватить. Идет ли он извне или генерируется внутри, мне казалось это не принципиально.
В приведенном куске кода убрана шапка модуля - зачем? Чтоб труднее было помочь?
Ensider
Цитата(spectr @ Jun 28 2017, 09:23) *
Похоже что сигналтапу не хватает клоков, чтобы заполнить весь буфер. На АЦП, видимо, у вас идет клок, разрешаемый чипселектом, а не постоянно? В таком случае сделайте еще один такой же клок, но который будет работать постоянно. Тогда сигналтап от него заработает.

Это если прописать таким образом?Ниже:
Код
  always @ (posedge CLOCK_8)
        begin
            count <= count + 1;
        end


Цитата(AVR @ Jun 28 2017, 09:39) *
Должен быть постоянный клок, синхронный с данными, которые хочется захватить. Идет ли он извне или генерируется внутри, мне казалось это не принципиально.
В приведенном куске кода убрана шапка модуля - зачем? Чтоб труднее было помочь?


Если прописать вот так:

Код
  always @ (posedge CLOCK_8)
        begin
            count <= count + 1;
        end


Прикладываю с шапкой:

Код
//Проект АЦП связь с FPGA
                                                                                
                                                                                
                                                                                
localparam int unsigned DATA_TEMP            = 97;         //Сумма разрядносте 6 АЦП

localparam int unsigned SYS_CLOCK_FREQ        = 10000000;    // Частота ADC_CLK в герцах.

module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,

output ADC_CNV , SPICMISO , ADC_CLK );

logic            timer_2Hz;  
                                  
logic            timer_1Hz;

reg DATA_TEMP [96:0];                                  // Разрядность даннных АЦП

reg RDY;

reg CNV ;

reg serial_data;

reg SERIAL_BIT;

reg TEMP [96:0];

reg COUNT;


always @(posedge ADC_CLK) begin  

                                              

    if (COUNT == (SYS_CLOCK_FREQ/2 - 1)) begin
        timer_2Hz <= 1'b1;                                  // Этот сигнал будет выставляться в лог.1 на 1 такт с периодом 1/(SYS_CLOCK_FREQ/2), т.е.,
        COUNT           <= '0;                                     // с частотой 2 Гц. Счетчик cnt при этом сбрасывается.
    end
    else begin
        COUNT           <= COUNT+1;                               // В иных случаях счет разрешен,
        timer_2Hz <= 1'b0;                                // а сигнал таймера д.б. занулен.
    end
end
                                                                // Утверждают сигнал CNV
always @ (negedge ADC_CLK)
        begin
            if ((COUNT == 97) || (COUNT == 98))
                CNV = 1'b0;
            else
                CNV = 1'b1;
                     end
                    
                                                              // Чтение последовательных данных в 97-битовый регистр. После этого преобразовать его в параллельный, если счетчик равен 97 (конец потока данных)
                    
                       always @ (negedge ADC_CLK)
        
        begin
                         DATA_TEMP[CNV]   <= (serial_data);
            if (COUNT == 97)
                TEMP <= DATA_TEMP;
                     end
always_ff @(posedge ADC_CLK) begin
    if (timer_2Hz == 1'b1) begin
        timer_1Hz <= ~timer_1Hz;
    end
end
                    
            assign ADC_CNV = CNV ;
            
             
endmodule


Цитата(doom13 @ Jun 28 2017, 09:06) *
Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL.


Его нужно откуда-то взять, а это, как вариант, клоковая ножка FPGA, при условии что на нее подается сигнал тактирования.

И да, Ваш делитель - "не совсем делитель ", высокий уровень один такт ADC_CLK, все остальное время низкий.


Нужно прописать с постоянной на "высокий" ? Или сделать , как я привел уже пример? Ниже:

Код
  always @ (posedge CLOCK_8)
        begin
            count <= count + 1;
        end
doom13
top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется

, а то по коду модуля он выход, по рисунку выше - вход
Ensider
Цитата(doom13 @ Jun 28 2017, 09:52) *
top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется

, а то по коду модуля он выход, по рисунку выше - вход


Я учел , то что он является выходом и исправил.Вот этот код окончательный.
doom13
Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина
Код
...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

, но по коду ему ничего не присваивается, это вообще как?

Цитата(Ensider @ Jun 28 2017, 12:59) *
Я учел , то что он является выходом и исправил.Вот этот код окончательный.

Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.
От чего вы хотите тактировать SignalTap и АЦП?
Приведённый код и есть топ-модуль? ...

Есть такая интересная штука RTL Viewer (Tools->Netlist Viewers->RTL Viewer), можете посмотреть, какую схему собрал компилер на основе Вашего кода.
Ensider
Цитата(doom13 @ Jun 28 2017, 10:02) *
Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина
Код
...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

, но по коду ему ничего не присваивается, это вообще как?


Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.
От чего вы хотите тактировать SignalTap и АЦП?
Приведённый код и есть топ-модуль? ...

Я хотел сделать , как вы мне предложили.Использовать ALTPLL.Значит все таки можно тактировать от ADC_CLK? В данном случае , да. Я уже сам запутался. Я хотел сделать делитель , чтобы от него тактировалось все.Потом уже обработку и забор и сохранение данных в отведенный регистр. Это не грамотно написано?

Цитата(doom13 @ Jun 28 2017, 10:08) *
Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина
Код
...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

, но по коду ему ничего не присваивается, это вообще как?


Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.
От чего вы хотите тактировать SignalTap и АЦП?
Приведённый код и есть топ-модуль? ...

Есть такая интересная штука RTL Viewer (Tools->Netlist Viewers->RTL Viewer), можете посмотреть, какую схему собрал компилер на основе Вашего кода.

Бред какой-то собрал.Который имеет один выход.

Цитата(Ensider @ Jun 28 2017, 10:12) *
Я хотел сделать , как вы мне предложили.Использовать ALTPLL.Значит все таки можно тактировать от ADC_CLK? В данном случае , да. Я уже сам запутался. Я хотел сделать делитель , чтобы от него тактировалось все.Потом уже обработку и забор и сохранение данных в отведенный регистр. Это не грамотно написано?


Бред какой-то собрал.Который имеет один выход.


Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.
doom13
Внимание, объясняю ещё раз:
Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали.

Цитата(Ensider @ Jun 28 2017, 13:15) *
Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.

Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать.
Ensider
Цитата(doom13 @ Jun 28 2017, 10:22) *
Внимание, объясняю ещё раз:
Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали.


Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать.


Первое я уяснил.А тактовый сигнал подключить так , как вы посоветовали ? "Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL." ?
doom13
Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования sm.gif
XVR
У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет
Ensider
Цитата(XVR @ Jun 28 2017, 10:40) *
У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет

Я как слепой сидел и не замечал этот момент.Вот у меня этот генератор.22 пин отвечает за это.А я возился с этим ADC_CLK.

Цитата(doom13 @ Jun 28 2017, 10:39) *
Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования sm.gif

Нашел эту ножку.Листал документацию , видел , что CLK есть , но пин не указывался. Дошло , что нужно в приложении посмотреть.

Цитата(doom13 @ Jun 28 2017, 10:39) *
Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования sm.gif

Первые признаки жизни есть.Я решил сделать вот так:
Код
always @ (posedge CLK)
        begin
            COUNT <= COUNT + 1;
        end

Только вот странно , из-за не подключенных переменных у меня получилась такая прямая в SignalTap 2?
AVR
Причина проблемы ясна: клок брался из космоса, а в космос его никто не положил. Попытка делать синхронную схему без самого святого - без клока.
Ensider
Цитата(doom13 @ Jun 28 2017, 11:22) *
Внимание, объясняю ещё раз:
Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали.


Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать.


Можно обратиться за помощью?А почему , если SDO отвечает за передачу данных,его нельзя поставить на выход,относительно АЦП?Вот , что у меня получилось:
Клоки поступают на ADC_CLK потом все это идет на ADC_CNV, потом же должно идти на ADC_SDO , или я не совсем понял?
doom13
Что-то Вы совсем все плохо поняли. SDO - выходной пин АЦП, по тактовому сигналу ADC_CLK (SCLK) АЦП последовательно выдает на него биты текущего оцифрованного значения напряжения, Ваша задача принять и получить соответствующее значение. В теме про SPI-мастер про это говорили, Вам необходимо сформировать сигналы в соответствии с докой на АЦП (CNV, SCLK и т.д), там все разрисовано, что должно получиться.
1) CNV - старт преобразования напряжения в цифру, максимальная частота вроде 1МГц
2) По ADC_CLK, через какой-то интервал времени после CNV АЦП выдает валидные данные на линию SDO, а Вы их должны принять.
3) Далее обработка на ваше усмотрение.
Ensider
Цитата(doom13 @ Jun 28 2017, 18:11) *
Что-то Вы совсем все плохо поняли. SDO - выходной пин АЦП, по тактовому сигналу ADC_CLK (SCLK) АЦП последовательно выдает на него биты текущего оцифрованного значения напряжения, Ваша задача принять и получить соответствующее значение. В теме про SPI-мастер про это говорили, Вам необходимо сформировать сигналы в соответствии с докой на АЦП (CNV, SCLK и т.д), там все разрисовано, что должно получиться.
1) CNV - старт преобразования напряжения в цифру, максимальная частота вроде 1МГц
2) По ADC_CLK, через какой-то интервал времени после CNV АЦП выдает валидные данные на линию SDO, а Вы их должны принять.
3) Далее обработка на ваше усмотрение.


Сделал через PLL клоки.У меня правильно получилось?

Код
localparam int unsigned DATA_TEMP            = 97;         //Сумма разрядносте 6 АЦП

module NOKIA (input  ADC_SDO ,INCLK0,INCLK1,

output ADC_CNV , CLK_10MHz , CLK_80MHz , CLK_20MHz , CLK_100MHz , CLK_40MHz );

reg DATA_TEMP [96:0];                                  // Разрядность даннных АЦП

reg CNV ;

reg serial_data;

reg TEMP [96:0];

reg COUNT;

PLL PLL_CLK(
        .inclk0(INCLK0),
       .inclk1(INCLK1),
        .c0(CLK_10MHz),
        .c1(CLK_80MHz),
        .c2(CLK_20MHz),
        .c3(CLK_100MHz),
        .c4(CLK_40MHz)
        );


После этого надо работать с CNV?
doom13
Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом.
XVR
Цитата
Сделал через PLL клоки.У меня правильно получилось?
Крайне не рекомендуется делать кучу клоков без особенной на то необходимости. Сигналы, пересекающие клоковые домены, требуют особой синхронизации (в случае зависимых клоков с PLL будет немного проще, но лучше без этого обойтись)
Используйте сигналы Enable, которые будут выбирать в схеме когда переключаться, но само переключение делайте на самом быстром клоке.
Ensider
Цитата(doom13 @ Jun 29 2017, 10:11) *
Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом.


Да.Научился.Обычное присвоение сигнала,через assign. Там разве так же нужно присвоить?

Код
always @ (negedge INCLK0)
        begin
            if ((COUNT == 97) || (COUNT == 98))
                CNV = 1'b0;
            else
                CNV = 1'b1;
                     end


Утверждение сигнала у меня тут идет.Но как его связать , для меня затруднительно.


Цитата(XVR @ Jun 29 2017, 10:22) *
Крайне не рекомендуется делать кучу клоков без особенной на то необходимости. Сигналы, пересекающие клоковые домены, требуют особой синхронизации (в случае зависимых клоков с PLL будет немного проще, но лучше без этого обойтись)
Используйте сигналы Enable, которые будут выбирать в схеме когда переключаться, но само переключение делайте на самом быстром клоке.


Убрал лишний клок на входе и пару на выходе.
AVR
Цитата(doom13 @ Jun 29 2017, 13:11) *
Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом.

Сурово, но справедливо sm.gif

А еще я бы автору темы посоветовал воспользоваться симулятором Modelsim Altera Starter Edition, он бесплатный.
К SignalTap прибегают только тогда, когда схема уже работает в целом отлично, но нужно выяснить какие-то проблемы.
Но очевидно что на таком этапе как в этой теме - начинать надо с симулятора. Научиться писать тестбенчи, и только после этого пытаться работать с более сложными вещами.

При этом я понимаю, как сильно хочется пропустить этот этап освоения и кинуться в бой, но не удалось.
Ensider
Цитата(AVR @ Jun 29 2017, 10:32) *
Сурово, но справедливо sm.gif

А еще я бы автору темы посоветовал воспользоваться симулятором Modelsim Altera Starter Edition, он бесплатный.
К SignalTap прибегают только тогда, когда схема уже работает в целом отлично, но нужно выяснить какие-то проблемы.
Но очевидно что на таком этапе как в этой теме - начинать надо с симулятора. Научиться писать тестбенчи, и только после этого пытаться работать с более сложными вещами.

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


Спасибо,за направление. Но неужели ничего из того , что я пишу не верно.
doom13
SPI-мастер для похожего АЦП, отличие в том, что тут АЦП 8-ми канальное и для него задаётся конфигурация.
Если подключить к Вашему, думаю, всё должно заработать, но опрашивать будет только один канал на Вашей плате.
Разбирайтесь!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.