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

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

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

  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

Изменено пользователем Ensider

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


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

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

 

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

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


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

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

 

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

 

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

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


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

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

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

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

 

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

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

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

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

 

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

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


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

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

...
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 нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.

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


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

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

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

 

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

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

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


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

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

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

 

 

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

 

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

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


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

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

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


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

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

 

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


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

У вас к 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

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


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

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

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


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

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

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

 

 

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

 

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

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

post-95746-1498669337_thumb.png

Изменено пользователем Ensider

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


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

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

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

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

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

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


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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

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