M!TyA 0 10 марта, 2018 Опубликовано 10 марта, 2018 (изменено) · Жалоба Добрый день всем. Это мой первый проект на плис, до этого с ним дело не имел. Требуется отлавливать импульсы с АЦП выше определенной амплитуды и выдавать максимум импульса дальше... Плис Altera Cyclone 4, ADC AD9218BSTZ-65, 10 бит, тактирование от генератора 50 МГц. Кто мог бы объяснить в чем загвозка, огромное спасибо!!! module test3(clk, adc_clk, adc1_in, adc1_max); input wire clk; input wire [9:0] adc1_in; //входные данные с ацп inout reg [9:0] adc1_max; // выход максимума импульса output wire adc_clk; //PIN 85 reg [9:0] adc1_max_buff; //промежуточный буффер reg [9:0] dis_adc1_low=10'b1000100111; //нижний порог импульса assign adc_clk = clk; //тактирование ацп initial begin adc1_max_buff = 0; adc1_max=0; end always @(negedge adc_clk) begin if(adc1_in >= dis_adc1_low) begin if(adc1_in > adc1_max_buff) begin adc1_max_buff = adc1_in; end end if(adc1_in < dis_adc1_low) begin if(adc1_max_buff != 0) begin adc1_max = adc1_max_buff; end if(adc1_max==adc1_max_buff) begin adc1_max_buff = 0; end end end endmodule Изменено 10 марта, 2018 пользователем M!TyA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
OM-S 0 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба Кажется в блоке always нужно заменить блокирующее присваивание на неблокирующее. То есть вместо = использовать <= Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба negedge adc_clk А зачем задний фронт ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба negedge adc_clk А зачем задний фронт ? И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? И вот это: "Кто мог бы объяснить в чем загвозка"... Ну я мог бы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M!TyA 0 10 марта, 2018 Опубликовано 10 марта, 2018 (изменено) · Жалоба Спасибо за советы! А зачем задний фронт ? При спаде клока значения в устоявшемся состоянии. Ну судя по документации. И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? +-0.5В или +-1 Offset binary output. Так после замены на неблокирующие присваивание код правильный, то есть искать проблемы надо в железе, а не в коде? До этого не писал ничего для плис, так сказать первый блин) Изменено 10 марта, 2018 пользователем M!TyA Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба А зачем задний фронт ? При спаде клока значения в устоявшемся состоянии. Ну судя по документации. И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? +-0.5В или +-1 Offset binary output. До этого не писал ничего для плис, так сказать первый блин) То, что "блин", можно не объяснять. Это и так видно... "знаковый формат или беззнаковый" - не по входу, а по представлению двоичных данных на выходе АЦП. При "знаковом" формате, необходима и "знаковая арифметика"... Вы ищите максимум. А какой? С учетом знака или по абсолютной величине сигнала? Какой сигнал "больше": -0,3В или +0,2В ?? И какие "проблемы" Вы ищите? Можете их описать? Или "вот какой код и что в нем не так"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M!TyA 0 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон). На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше. Из проблем, что на выходе всякая фигня, а не точная амплитуда... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон). На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше. Из проблем, что на выходе всякая фигня, а не точная амплитуда... Упрямство не приводит к цели. Вы считаете, что подаете на вход 0В. Но при этом даете показания: "+-1 Offset binary output"... Это что? Смещение нуля в цифре? Т.е. при подаче на вход 0В, на выходе может получиться 1 LSB. Причем может быть как со знаком "плюс", так и "минус". Какой при этом код АЦП выдаст на выход? А поскольку на вход АЦП можно подавать и отрицательные значения, то кодировка "знаковая" вполне возможна... Уберите со входа "импульсы" и подайте напряжения с постоянного источника. А то, что получили из АЦП скиньте из ПЛИС в хост. И уже там проводите полный "разбор полетов"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M!TyA 0 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба Упрямство не приводит к цели. Вы считаете, что подаете на вход 0В. Но при этом даете показания: "+-1 Offset binary output"... Это что? Смещение нуля в цифре? Т.е. при подаче на вход 0В, на выходе может получиться 1 LSB. Причем может быть как со знаком "плюс", так и "минус". Какой при этом код АЦП выдаст на выход? А поскольку на вход АЦП можно подавать и отрицательные значения, то кодировка "знаковая" вполне возможна... Уберите со входа "импульсы" и подайте напряжения с постоянного источника. А то, что получили из АЦП скиньте из ПЛИС в хост. И уже там проводите полный "разбор полетов"... Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111 И ещё немного добавлю: АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные. Попробуйте включить режим "Data aligned". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M!TyA 0 10 марта, 2018 Опубликовано 10 марта, 2018 · Жалоба И ещё немного добавлю: АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные. Попробуйте включить режим "Data aligned". Спасибо большое! А это вообще где ? )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 марта, 2018 Опубликовано 11 марта, 2018 · Жалоба А это вообще где ? )) Вы бы написали, как проводили симуляцию? Где Вы получаете результирующие данные? Как определяете, что АЦП поставляет достоверные данные? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
M!TyA 0 11 марта, 2018 Опубликовано 11 марта, 2018 · Жалоба Вы бы написали, как проводили симуляцию? Где Вы получаете результирующие данные? Как определяете, что АЦП поставляет достоверные данные? Смотрю вход и выход лог анализатором. Кажись есть проблемы с самим ацп, буду разбираться... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iosifk 3 11 марта, 2018 Опубликовано 11 марта, 2018 · Жалоба Смотрю вход и выход лог анализатором. Кажись есть проблемы с самим ацп, буду разбираться... Так в ПЛИС проекты не делают. Это тупик. Сначала надо сделать RTL симуляцию и только потом можно что-то делать в железе. Да и то, я бы сначала вместо вместо АЦП данные вводил от кого-то другого... А потом уже получал бы данные от АЦП и записывал бы пакетами в память. И потом из памяти - в хост. Откалибровал бы на постоянных сигналах и только потом бы перешел к импульсам... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться