|
SignalTap 2 Logic Analyzer, Ошибка : Waiting for clock |
|
|
|
Jun 28 2017, 07:07
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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
|
|
|
|
|
Jun 28 2017, 07:37
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 07:34)  Покажите настройки сигнслтап Вот прикладываю.Я вообще не понимаю почему не видит он его.
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 28 2017, 07:52
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 07:46)  ADC_CLK вручную прописали или по нажатию кнопки выбрали, если вручную, то выбирайте из меню по нажатию кнопки. Иначе смотрите наличие ADC_CLK. По нажатию.Таким образом.Он у меня прописан в теле модуля. Да и в Pin Planner.Что ещё может быть не так -то?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 28 2017, 08:06
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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
Сообщение отредактировал Ensider - Jun 28 2017, 08:10
|
|
|
|
|
Jun 28 2017, 08:34
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 08:19)  Посмотрите доку на АЦП, сигнал АЦП соответствующий Вашему ADC_CLK является его входом. Я это понял. Мне просто сказали организовать делитель с такой-то частотой.Я его организовал. Мне нужен клок , который непосредственно на FPGA идет? Что-то все перепуталось. И да если у меня его нет , как уже было сказано , его надо написать?
|
|
|
|
|
Jun 28 2017, 09:06
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL. Цитата(Ensider @ Jun 28 2017, 11:34)  И да если у меня его нет , как уже было сказано , его надо написать? Его нужно откуда-то взять, а это, как вариант, клоковая ножка FPGA, при условии что на нее подается сигнал тактирования. И да, Ваш делитель - "не совсем делитель ", высокий уровень один такт ADC_CLK, все остальное время низкий.
|
|
|
|
|
Jun 28 2017, 09:37
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 08:50)  Делитель какой частоты? Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL. Делитель с частотой 10 МHz. Это все через ALTPLL делается?
|
|
|
|
|
Jun 28 2017, 09:44
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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
Сообщение отредактировал Ensider - Jun 28 2017, 09:42
|
|
|
|
|
Jun 28 2017, 09:59
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 09:52)  top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется
, а то по коду модуля он выход, по рисунку выше - вход Я учел , то что он является выходом и исправил.Вот этот код окончательный.
|
|
|
|
|
Jun 28 2017, 10:08
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина Код ... 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), можете посмотреть, какую схему собрал компилер на основе Вашего кода.
|
|
|
|
|
Jun 28 2017, 10:15
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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 нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком.
|
|
|
|
|
Jun 28 2017, 10:22
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали. Цитата(Ensider @ Jun 28 2017, 13:15)  Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком. Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать.
|
|
|
|
|
Jun 28 2017, 10:34
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 10:22)  Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали.
Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать. Первое я уяснил.А тактовый сигнал подключить так , как вы посоветовали ? "Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL." ?
|
|
|
|
|
Jun 28 2017, 11:10
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(XVR @ Jun 28 2017, 10:40)  У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет Я как слепой сидел и не замечал этот момент.Вот у меня этот генератор.22 пин отвечает за это.А я возился с этим ADC_CLK. Цитата(doom13 @ Jun 28 2017, 10:39)  Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования  Нашел эту ножку.Листал документацию , видел , что CLK есть , но пин не указывался. Дошло , что нужно в приложении посмотреть. Цитата(doom13 @ Jun 28 2017, 10:39)  Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования  Первые признаки жизни есть.Я решил сделать вот так: Код always @ (posedge CLK) begin COUNT <= COUNT + 1; end Только вот странно , из-за не подключенных переменных у меня получилась такая прямая в SignalTap 2?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 28 2017, 17:02
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(doom13 @ Jun 28 2017, 11:22)  Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали.
Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать. Можно обратиться за помощью?А почему , если SDO отвечает за передачу данных,его нельзя поставить на выход,относительно АЦП?Вот , что у меня получилось: Клоки поступают на ADC_CLK потом все это идет на ADC_CNV, потом же должно идти на ADC_SDO , или я не совсем понял?
Сообщение отредактировал Ensider - Jun 28 2017, 17:05
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 28 2017, 18:11
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Что-то Вы совсем все плохо поняли. SDO - выходной пин АЦП, по тактовому сигналу ADC_CLK (SCLK) АЦП последовательно выдает на него биты текущего оцифрованного значения напряжения, Ваша задача принять и получить соответствующее значение. В теме про SPI-мастер про это говорили, Вам необходимо сформировать сигналы в соответствии с докой на АЦП (CNV, SCLK и т.д), там все разрисовано, что должно получиться. 1) CNV - старт преобразования напряжения в цифру, максимальная частота вроде 1МГц 2) По ADC_CLK, через какой-то интервал времени после CNV АЦП выдает валидные данные на линию SDO, а Вы их должны принять. 3) Далее обработка на ваше усмотрение.
|
|
|
|
|
Jun 29 2017, 09:05
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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?
Эскизы прикрепленных изображений
|
|
|
|
|
Jun 29 2017, 10:22
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата Сделал через PLL клоки.У меня правильно получилось? Крайне не рекомендуется делать кучу клоков без особенной на то необходимости. Сигналы, пересекающие клоковые домены, требуют особой синхронизации (в случае зависимых клоков с PLL будет немного проще, но лучше без этого обойтись) Используйте сигналы Enable, которые будут выбирать в схеме когда переключаться, но само переключение делайте на самом быстром клоке.
|
|
|
|
|
Jun 29 2017, 10:29
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(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, которые будут выбирать в схеме когда переключаться, но само переключение делайте на самом быстром клоке. Убрал лишний клок на входе и пару на выходе.
|
|
|
|
|
Jun 29 2017, 10:32
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(doom13 @ Jun 29 2017, 13:11)  Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом. Сурово, но справедливо  А еще я бы автору темы посоветовал воспользоваться симулятором Modelsim Altera Starter Edition, он бесплатный. К SignalTap прибегают только тогда, когда схема уже работает в целом отлично, но нужно выяснить какие-то проблемы. Но очевидно что на таком этапе как в этой теме - начинать надо с симулятора. Научиться писать тестбенчи, и только после этого пытаться работать с более сложными вещами. При этом я понимаю, как сильно хочется пропустить этот этап освоения и кинуться в бой, но не удалось.
--------------------
|
|
|
|
|
Jun 29 2017, 10:45
|
Частый гость
 
Группа: Участник
Сообщений: 83
Регистрация: 8-03-17
Из: Россия,Москва
Пользователь №: 95 746

|
Цитата(AVR @ Jun 29 2017, 10:32)  Сурово, но справедливо  А еще я бы автору темы посоветовал воспользоваться симулятором Modelsim Altera Starter Edition, он бесплатный. К SignalTap прибегают только тогда, когда схема уже работает в целом отлично, но нужно выяснить какие-то проблемы. Но очевидно что на таком этапе как в этой теме - начинать надо с симулятора. Научиться писать тестбенчи, и только после этого пытаться работать с более сложными вещами. При этом я понимаю, как сильно хочется пропустить этот этап освоения и кинуться в бой, но не удалось. Спасибо,за направление. Но неужели ничего из того , что я пишу не верно.
|
|
|
|
|
Jun 29 2017, 11:06
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
SPI-мастер для похожего АЦП, отличие в том, что тут АЦП 8-ми канальное и для него задаётся конфигурация. Если подключить к Вашему, думаю, всё должно заработать, но опрашивать будет только один канал на Вашей плате. Разбирайтесь!
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|