Jump to content
    

SignalTap 2 Logic Analyzer

Похоже что сигналтапу не хватает клоков, чтобы заполнить весь буфер. На АЦП, видимо, у вас идет клок, разрешаемый чипселектом, а не постоянно? В таком случае сделайте еще один такой же клок, но который будет работать постоянно. Тогда сигналтап от него заработает.

Это если прописать таким образом?Ниже:

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

 

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

В приведенном куске кода убрана шапка модуля - зачем? Чтоб труднее было помочь?

 

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

 

  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

 

Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL.

 

 

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

 

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

 

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

 

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

Edited by Ensider

Share this post


Link to post
Share on other sites

top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется

 

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

Share this post


Link to post
Share on other sites

top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется

 

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

 

Я учел , то что он является выходом и исправил.Вот этот код окончательный.

Share this post


Link to post
Share on other sites

Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина

...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

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

 

Я учел , то что он является выходом и исправил.Вот этот код окончательный.

Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.

От чего вы хотите тактировать SignalTap и АЦП?

Приведённый код и есть топ-модуль? ...

 

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

Share this post


Link to post
Share on other sites

Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина

...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

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

 

 

Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.

От чего вы хотите тактировать SignalTap и АЦП?

Приведённый код и есть топ-модуль? ...

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

 

Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина

...
module NOKIA (input  ADC_SDO , SPICMOSI , SPICCLK , SPICFLG,
output ADC_CNV , SPICMISO , ADC_CLK );
...

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

 

 

Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете.

От чего вы хотите тактировать SignalTap и АЦП?

Приведённый код и есть топ-модуль? ...

 

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

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

 

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

 

 

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

 

Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.

Share this post


Link to post
Share on other sites

Внимание, объясняю ещё раз:

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

 

Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.

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

Share this post


Link to post
Share on other sites

Внимание, объясняю ещё раз:

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

 

 

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

 

Первое я уяснил.А тактовый сигнал подключить так , как вы посоветовали ? "Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL." ?

Share this post


Link to post
Share on other sites

Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :)

Share this post


Link to post
Share on other sites

У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет

 

Share this post


Link to post
Share on other sites

У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет

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

 

Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :)

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

 

Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :)

Первые признаки жизни есть.Я решил сделать вот так:

 always @ (posedge CLK)
        begin
            COUNT <= COUNT + 1;
        end

Только вот странно , из-за не подключенных переменных у меня получилась такая прямая в SignalTap 2?

post-95746-1498647005_thumb.png

post-95746-1498647198_thumb.png

post-95746-1498648067_thumb.png

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Внимание, объясняю ещё раз:

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

 

 

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

 

Можно обратиться за помощью?А почему , если SDO отвечает за передачу данных,его нельзя поставить на выход,относительно АЦП?Вот , что у меня получилось:

Клоки поступают на ADC_CLK потом все это идет на ADC_CNV, потом же должно идти на ADC_SDO , или я не совсем понял?

post-95746-1498669337_thumb.png

Edited by Ensider

Share this post


Link to post
Share on other sites

Что-то Вы совсем все плохо поняли. SDO - выходной пин АЦП, по тактовому сигналу ADC_CLK (SCLK) АЦП последовательно выдает на него биты текущего оцифрованного значения напряжения, Ваша задача принять и получить соответствующее значение. В теме про SPI-мастер про это говорили, Вам необходимо сформировать сигналы в соответствии с докой на АЦП (CNV, SCLK и т.д), там все разрисовано, что должно получиться.

1) CNV - старт преобразования напряжения в цифру, максимальная частота вроде 1МГц

2) По ADC_CLK, через какой-то интервал времени после CNV АЦП выдает валидные данные на линию SDO, а Вы их должны принять.

3) Далее обработка на ваше усмотрение.

Share this post


Link to post
Share on other sites

Что-то Вы совсем все плохо поняли. 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?

post-95746-1498727095_thumb.png

Share this post


Link to post
Share on other sites

Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...