Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 (изменено) · Жалоба Похоже что сигналтапу не хватает клоков, чтобы заполнить весь буфер. На АЦП, видимо, у вас идет клок, разрешаемый чипселектом, а не постоянно? В таком случае сделайте еще один такой же клок, но который будет работать постоянно. Тогда сигналтап от него заработает. Это если прописать таким образом?Ниже: 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 Изменено 28 июня, 2017 пользователем Ensider Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется , а то по коду модуля он выход, по рисунку выше - вход Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба top module выкладывайте, чтоб было понятно, кто такой ADC_CLK и откуда он берется , а то по коду модуля он выход, по рисунку выше - вход Я учел , то что он является выходом и исправил.Вот этот код окончательный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина ... module NOKIA (input ADC_SDO , SPICMOSI , SPICCLK , SPICFLG, output ADC_CNV , SPICMISO , ADC_CLK ); ... , но по коду ему ничего не присваивается, это вообще как? Я учел , то что он является выходом и исправил.Вот этот код окончательный. Круто, т.е. сейчас он тупо выход, и на него Вы ничего не выдаете. От чего вы хотите тактировать SignalTap и АЦП? Приведённый код и есть топ-модуль? ... Есть такая интересная штука RTL Viewer (Tools->Netlist Viewers->RTL Viewer), можете посмотреть, какую схему собрал компилер на основе Вашего кода. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Да и вообще (в случае приведённого куска кода) бред получился, вся схема тактируется от выходного пина ... 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 нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали. Я просто не понимаю. Почему ADC_CLK нельзя использовать в качестве тактирования. Лишь потому , что по документации так. Что касается выходов я не подсоеденил ещё все выхода. Мне бы разобраться с клоком. Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали. Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать. Первое я уяснил.А тактовый сигнал подключить так , как вы посоветовали ? "Можете взять ее с клоковой ножки FPGA, подключить PLL и затактировать свою систему клоком с PLL." ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба У вас к FPGA вообще какой нибудь генератор подключен? Если да, то тот пин FPGA, к которому он подключен, и должен являться самым главным клоком. Если нет - то нужно подключить, без него ничего работать не будет Я как слепой сидел и не замечал этот момент.Вот у меня этот генератор.22 пин отвечает за это.А я возился с этим ADC_CLK. Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :) Нашел эту ножку.Листал документацию , видел , что CLK есть , но пин не указывался. Дошло , что нужно в приложении посмотреть. Да, ну только с той клоковой ножки, которая подключена к источнику сигнала тактирования :) Первые признаки жизни есть.Я решил сделать вот так: always @ (posedge CLK) begin COUNT <= COUNT + 1; end Только вот странно , из-за не подключенных переменных у меня получилась такая прямая в SignalTap 2? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Причина проблемы ясна: клок брался из космоса, а в космос его никто не положил. Попытка делать синхронную схему без самого святого - без клока. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 28 июня, 2017 Опубликовано 28 июня, 2017 (изменено) · Жалоба Внимание, объясняю ещё раз: Если пин FPGA соответствующий сигналу ADC_CLK на схеме Вашей платы подключен к ноге SCK (8-ая нога) микросхемы AD7687, то ничего Вы от неё тактировать не можете, она сама (SCK) хочет чтоб её тактировали. Для тактирования АЦП можно её использовать, но для этого она выходом должна быть, и тактовый сигнал к ней нужно подключить, и его же для тактирования SignalTap II можно использовать. Можно обратиться за помощью?А почему , если SDO отвечает за передачу данных,его нельзя поставить на выход,относительно АЦП?Вот , что у меня получилось: Клоки поступают на ADC_CLK потом все это идет на ADC_CNV, потом же должно идти на ADC_SDO , или я не совсем понял? Изменено 28 июня, 2017 пользователем Ensider Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
doom13 0 28 июня, 2017 Опубликовано 28 июня, 2017 · Жалоба Что-то Вы совсем все плохо поняли. SDO - выходной пин АЦП, по тактовому сигналу ADC_CLK (SCLK) АЦП последовательно выдает на него биты текущего оцифрованного значения напряжения, Ваша задача принять и получить соответствующее значение. В теме про SPI-мастер про это говорили, Вам необходимо сформировать сигналы в соответствии с докой на АЦП (CNV, SCLK и т.д), там все разрисовано, что должно получиться. 1) CNV - старт преобразования напряжения в цифру, максимальная частота вроде 1МГц 2) По ADC_CLK, через какой-то интервал времени после CNV АЦП выдает валидные данные на линию SDO, а Вы их должны принять. 3) Далее обработка на ваше усмотрение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ensider 0 29 июня, 2017 Опубликовано 29 июня, 2017 · Жалоба Что-то Вы совсем все плохо поняли. 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 0 29 июня, 2017 Опубликовано 29 июня, 2017 · Жалоба Диодом моргать научились? Если нет, забейте на АЦП и моргайте светодиодом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться