|
|
  |
Verilog, Altera + ADC нахождение максимума. |
|
|
|
Mar 10 2018, 16:52
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Добрый день всем. Это мой первый проект на плис, до этого с ним дело не имел. Требуется отлавливать импульсы с АЦП выше определенной амплитуды и выдавать максимум импульса дальше... Плис 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
Сообщение отредактировал M!TyA - Mar 10 2018, 16:52
|
|
|
|
|
Mar 10 2018, 17:52
|
Участник

Группа: Участник
Сообщений: 19
Регистрация: 12-05-05
Из: г. Москва
Пользователь №: 4 944

|
Кажется в блоке always нужно заменить блокирующее присваивание на неблокирующее. То есть вместо = использовать <=
|
|
|
|
|
Mar 10 2018, 18:29
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(Flip-fl0p @ Mar 10 2018, 21:13)  Код negedge adc_clk А зачем задний фронт ? И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? И вот это: "Кто мог бы объяснить в чем загвозка"... Ну я мог бы...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 10 2018, 18:48
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Спасибо за советы!
А зачем задний фронт ? При спаде клока значения в устоявшемся состоянии. Ну судя по документации.
И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? +-0.5В или +-1 Offset binary output.
Так после замены на неблокирующие присваивание код правильный, то есть искать проблемы надо в железе, а не в коде?
До этого не писал ничего для плис, так сказать первый блин)
Сообщение отредактировал M!TyA - Mar 10 2018, 19:05
|
|
|
|
|
Mar 10 2018, 19:42
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(M!TyA @ Mar 10 2018, 21:48)  А зачем задний фронт ? При спаде клока значения в устоявшемся состоянии. Ну судя по документации.
И еще добавлю... А АЦП имеет знаковый формат или беззнаковый? +-0.5В или +-1 Offset binary output.
До этого не писал ничего для плис, так сказать первый блин) То, что "блин", можно не объяснять. Это и так видно... "знаковый формат или беззнаковый" - не по входу, а по представлению двоичных данных на выходе АЦП. При "знаковом" формате, необходима и "знаковая арифметика"... Вы ищите максимум. А какой? С учетом знака или по абсолютной величине сигнала? Какой сигнал "больше": -0,3В или +0,2В ?? И какие "проблемы" Вы ищите? Можете их описать? Или "вот какой код и что в нем не так"?
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 10 2018, 20:00
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон). На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.
Из проблем, что на выходе всякая фигня, а не точная амплитуда...
|
|
|
|
|
Mar 10 2018, 20:30
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(M!TyA @ Mar 10 2018, 23:00)  Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон). На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.
Из проблем, что на выходе всякая фигня, а не точная амплитуда... Упрямство не приводит к цели. Вы считаете, что подаете на вход 0В. Но при этом даете показания: "+-1 Offset binary output"... Это что? Смещение нуля в цифре? Т.е. при подаче на вход 0В, на выходе может получиться 1 LSB. Причем может быть как со знаком "плюс", так и "минус". Какой при этом код АЦП выдаст на выход? А поскольку на вход АЦП можно подавать и отрицательные значения, то кодировка "знаковая" вполне возможна... Уберите со входа "импульсы" и подайте напряжения с постоянного источника. А то, что получили из АЦП скиньте из ПЛИС в хост. И уже там проводите полный "разбор полетов"...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
Mar 10 2018, 20:43
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Цитата(iosifk @ Mar 10 2018, 23:30)  Упрямство не приводит к цели. Вы считаете, что подаете на вход 0В. Но при этом даете показания: "+-1 Offset binary output"... Это что? Смещение нуля в цифре? Т.е. при подаче на вход 0В, на выходе может получиться 1 LSB. Причем может быть как со знаком "плюс", так и "минус". Какой при этом код АЦП выдаст на выход? А поскольку на вход АЦП можно подавать и отрицательные значения, то кодировка "знаковая" вполне возможна...
Уберите со входа "импульсы" и подайте напряжения с постоянного источника. А то, что получили из АЦП скиньте из ПЛИС в хост. И уже там проводите полный "разбор полетов"... Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111
|
|
|
|
|
Mar 10 2018, 21:13
|

В поисках себя...
   
Группа: Свой
Сообщений: 729
Регистрация: 11-06-13
Из: Санкт-Петербург
Пользователь №: 77 140

|
Цитата(M!TyA @ Mar 10 2018, 23:43)  Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111 И ещё немного добавлю: АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные. Попробуйте включить режим "Data aligned".
|
|
|
|
|
Mar 10 2018, 21:55
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Цитата(Flip-fl0p @ Mar 11 2018, 00:13)  И ещё немного добавлю: АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные. Попробуйте включить режим "Data aligned". Спасибо большое! А это вообще где ? ))
|
|
|
|
|
Mar 11 2018, 17:46
|
Участник

Группа: Участник
Сообщений: 17
Регистрация: 3-10-05
Пользователь №: 9 192

|
Цитата(iosifk @ Mar 11 2018, 10:44)  Вы бы написали, как проводили симуляцию? Где Вы получаете результирующие данные? Как определяете, что АЦП поставляет достоверные данные? Смотрю вход и выход лог анализатором. Кажись есть проблемы с самим ацп, буду разбираться...
|
|
|
|
|
Mar 11 2018, 18:23
|
Гуру
     
Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369

|
Цитата(M!TyA @ Mar 11 2018, 20:46)  Смотрю вход и выход лог анализатором.
Кажись есть проблемы с самим ацп, буду разбираться... Так в ПЛИС проекты не делают. Это тупик. Сначала надо сделать RTL симуляцию и только потом можно что-то делать в железе. Да и то, я бы сначала вместо вместо АЦП данные вводил от кого-то другого... А потом уже получал бы данные от АЦП и записывал бы пакетами в память. И потом из памяти - в хост. Откалибровал бы на постоянных сигналах и только потом бы перешел к импульсам...
--------------------
www.iosifk.narod.ru
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|