реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Verilog, Altera + ADC нахождение максимума.
M!TyA
сообщение Mar 10 2018, 16:52
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
OM-S
сообщение Mar 10 2018, 17:52
Сообщение #2


Участник
*

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



Кажется в блоке always нужно заменить блокирующее присваивание на неблокирующее. То есть вместо = использовать <=
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 10 2018, 18:13
Сообщение #3


В поисках себя...
****

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



Код
negedge adc_clk

А зачем задний фронт ?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 10 2018, 18:29
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 3 853
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Flip-fl0p @ Mar 10 2018, 21:13) *
Код
negedge adc_clk

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

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

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
M!TyA
сообщение Mar 10 2018, 18:48
Сообщение #5


Участник
*

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



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

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


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

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

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

Сообщение отредактировал M!TyA - Mar 10 2018, 19:05
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 10 2018, 19:42
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 3 853
Регистрация: 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
Go to the top of the page
 
+Quote Post
M!TyA
сообщение Mar 10 2018, 20:00
Сообщение #7


Участник
*

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



Условно беззнаковый, АЦП диф после диф усилителя, смотрю только значения от 512 до 1023 (потом планирую оптимизировать под полный диапазон).
На выход ацп приходят редкие импульсы (0-0.5В), нахожу амплитуду и отправляю дальше.

Из проблем, что на выходе всякая фигня, а не точная амплитуда...
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 10 2018, 20:30
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 3 853
Регистрация: 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
Go to the top of the page
 
+Quote Post
M!TyA
сообщение Mar 10 2018, 20:43
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение Mar 10 2018, 21:13
Сообщение #10


В поисках себя...
****

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



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

И ещё немного добавлю:
АЦП Вам шлет данные. Но данные эти должны быть правильно приняты. Без правильных констрейнов достоверность данных не гарантируется... И можно очень долго менять HDL код, но так и не принять правильно данные.
Попробуйте включить режим "Data aligned".
Go to the top of the page
 
+Quote Post
M!TyA
сообщение Mar 10 2018, 21:55
Сообщение #11


Участник
*

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



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

Спасибо большое! А это вообще где ? ))
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 11 2018, 07:44
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 3 853
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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

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



--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
M!TyA
сообщение Mar 11 2018, 17:46
Сообщение #13


Участник
*

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



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


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

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

Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 11 2018, 18:23
Сообщение #14


Гуру
******

Группа: Модераторы
Сообщений: 3 853
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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

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

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


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th April 2018 - 16:08
Рейтинг@Mail.ru


Страница сгенерированна за 0.00914 секунд с 7
ELECTRONIX ©2004-2016