Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Verilog, Altera + ADC нахождение максимума.
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Языки проектирования на ПЛИС (FPGA)
M!TyA
Добрый день всем.

Это мой первый проект на плис, до этого с ним дело не имел.

Требуется отлавливать импульсы с АЦП выше определенной амплитуды и выдавать максимум импульса дальше...
Плис 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
OM-S
Кажется в блоке always нужно заменить блокирующее присваивание на неблокирующее. То есть вместо = использовать <=
Flip-fl0p
Код
negedge adc_clk

А зачем задний фронт ?
iosifk
Цитата(Flip-fl0p @ Mar 10 2018, 21:13) *
Код
negedge adc_clk

А зачем задний фронт ?

И еще добавлю...
А АЦП имеет знаковый формат или беззнаковый?

И вот это: "Кто мог бы объяснить в чем загвозка"... Ну я мог бы...
M!TyA
Спасибо за советы!

А зачем задний фронт ?
При спаде клока значения в устоявшемся состоянии. Ну судя по документации.


И еще добавлю...
А АЦП имеет знаковый формат или беззнаковый?
+-0.5В или +-1 Offset binary output.

Так после замены на неблокирующие присваивание код правильный, то есть искать проблемы надо в железе, а не в коде?

До этого не писал ничего для плис, так сказать первый блин)
iosifk
Цитата(M!TyA @ Mar 10 2018, 21:48) *
А зачем задний фронт ?
При спаде клока значения в устоявшемся состоянии. Ну судя по документации.


И еще добавлю...
А АЦП имеет знаковый формат или беззнаковый?
+-0.5В или +-1 Offset binary output.

До этого не писал ничего для плис, так сказать первый блин)

То, что "блин", можно не объяснять. Это и так видно...
"знаковый формат или беззнаковый" - не по входу, а по представлению двоичных данных на выходе АЦП. При "знаковом" формате, необходима и "знаковая арифметика"... Вы ищите максимум. А какой? С учетом знака или по абсолютной величине сигнала? Какой сигнал "больше": -0,3В или +0,2В ??
И какие "проблемы" Вы ищите? Можете их описать? Или "вот какой код и что в нем не так"?
M!TyA
Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон).
На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.

Из проблем, что на выходе всякая фигня, а не точная амплитуда...
iosifk
Цитата(M!TyA @ Mar 10 2018, 23:00) *
Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон).
На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.

Из проблем, что на выходе всякая фигня, а не точная амплитуда...

Упрямство не приводит к цели.
Вы считаете, что подаете на вход 0В.
Но при этом даете показания: "+-1 Offset binary output"... Это что? Смещение нуля в цифре? Т.е. при подаче на вход 0В, на выходе может получиться 1 LSB. Причем может быть как со знаком "плюс", так и "минус". Какой при этом код АЦП выдаст на выход? А поскольку на вход АЦП можно подавать и отрицательные значения, то кодировка "знаковая" вполне возможна...

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

Уберите со входа "импульсы" и подайте напряжения с постоянного источника. А то, что получили из АЦП скиньте из ПЛИС в хост. И уже там проводите полный "разбор полетов"...


Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111
Flip-fl0p
Цитата(M!TyA @ Mar 10 2018, 23:43) *
Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111

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

Спасибо большое! А это вообще где ? ))
iosifk
Цитата(M!TyA @ Mar 11 2018, 00:55) *
А это вообще где ? ))

Вы бы написали, как проводили симуляцию? Где Вы получаете результирующие данные? Как определяете, что АЦП поставляет достоверные данные?

M!TyA
Цитата(iosifk @ Mar 11 2018, 10:44) *
Вы бы написали, как проводили симуляцию? Где Вы получаете результирующие данные? Как определяете, что АЦП поставляет достоверные данные?


Смотрю вход и выход лог анализатором.

Кажись есть проблемы с самим ацп, буду разбираться...

iosifk
Цитата(M!TyA @ Mar 11 2018, 20:46) *
Смотрю вход и выход лог анализатором.

Кажись есть проблемы с самим ацп, буду разбираться...

Так в ПЛИС проекты не делают. Это тупик.
Сначала надо сделать RTL симуляцию и только потом можно что-то делать в железе. Да и то, я бы сначала вместо вместо АЦП данные вводил от кого-то другого...
А потом уже получал бы данные от АЦП и записывал бы пакетами в память. И потом из памяти - в хост. Откалибровал бы на постоянных сигналах и только потом бы перешел к импульсам...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.