Перейти к содержанию

    

Verilog, Altera + ADC нахождение максимума.

Добрый день всем.

 

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

 

Требуется отлавливать импульсы с АЦП выше определенной амплитуды и выдавать максимум импульса дальше...

Плис 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кажется в блоке always нужно заменить блокирующее присваивание на неблокирующее. То есть вместо = использовать <=

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

negedge adc_clk

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
negedge adc_clk

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

И еще добавлю...

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо за советы!

 

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

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

 

 

И еще добавлю...

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

+-0.5В или +-1 Offset binary output.

 

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

 

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

Изменено пользователем M!TyA

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А зачем задний фронт ?

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

 

 

И еще добавлю...

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

+-0.5В или +-1 Offset binary output.

 

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

То, что "блин", можно не объяснять. Это и так видно...

"знаковый формат или беззнаковый" - не по входу, а по представлению двоичных данных на выходе АЦП. При "знаковом" формате, необходима и "знаковая арифметика"... Вы ищите максимум. А какой? С учетом знака или по абсолютной величине сигнала? Какой сигнал "больше": -0,3В или +0,2В ??

И какие "проблемы" Вы ищите? Можете их описать? Или "вот какой код и что в нем не так"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон).

На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон).

На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.

 

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

Упрямство не приводит к цели.

Вы считаете, что подаете на вход 0В.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Упрямство не приводит к цели.

Вы считаете, что подаете на вход 0В.

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

 

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

 

Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Если на вход АЦП 0 В выход 1000000000, если 0.5В то будет 1111111111

И ещё немного добавлю:

АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные.

Попробуйте включить режим "Data aligned".

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
И ещё немного добавлю:

АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные.

Попробуйте включить режим "Data aligned".

Спасибо большое! А это вообще где ? ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
А это вообще где ? ))

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

 

 

Поделиться сообщением


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

 

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

 

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

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Смотрю вход и выход лог анализатором.

 

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

Так в ПЛИС проекты не делают. Это тупик.

Сначала надо сделать RTL симуляцию и только потом можно что-то делать в железе. Да и то, я бы сначала вместо вместо АЦП данные вводил от кого-то другого...

А потом уже получал бы данные от АЦП и записывал бы пакетами в память. И потом из памяти - в хост. Откалибровал бы на постоянных сигналах и только потом бы перешел к импульсам...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация