Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Коррелятор на плате марсоход 2, нужна помощь

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6019

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Ребят столкнулся с проблемой, нужно реализовать на плате марсоход 2 коррелятор, есть кто может помочь? Язык не особо важен, сам боюсь не справлюсь, знания. Если кому интересно можете написать на почту, Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра., за помощь отблагодарю)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6026

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Тема все так же актуальна, не кто не откликнулся. Опишу немного подробнее саму программу. Принимается сигнал состоящий из 32 единичек и нулей, после приема единицы и нули сравниваются с помощью логического элемента "искл. или" с уже внесенными данными в программу и в конце делается вывод, пришла 1 или 0. В общем-то все очень просто, сама трудность сейчас с принятием сигнала с ножки, не могу понять как это написать, можно и не на почту, можно тут какие-нибудь идеи писать, заранее спасибо

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6037

  • nckm
  • nckm аватар
  • Не в сети
  • Администрация форума
  • Администрация форума
  • Сообщений: 112
  • Спасибо получено: 34
например, что-то вот такое:

module correlator(
input wire clk,
input wire signal,
output reg [7:0]summ,
output reg result
);

//AA55AA55
parameter ethalon = 32'b10101010010101011010101001010101;
parameter level = 2;

reg [31:0]shift_reg;
always @(posedge clk)
shift_reg <= { shift_reg[30:0], signal };

reg [31:0]xor_reg;
always @(posedge clk)
xor_reg <= shift_reg^ethalon ;

integer i;
always @*
begin
summ=0;
for(i=0; i<32; i=i+1)
summ=summ+xor_reg;
end

always @(posedge clk)
result <= (summ<level);

endmodule

//testbench....
module testbench;
reg clk=1'b0;
always
#10 clk=~clk;

reg [127:0]test_sequence=128'h1234AA55675678AA55AA55BB54546634;

always @(posedge clk)
test_sequence <= { test_sequence[126:0], test_sequence[127] };

wire [7:0]w_summa;
wire w_result;
correlator corr_instance(
.clk(clk),
.signal(test_sequence[127]),
.summ(w_summa),
.result(w_result)
);

initial
begin
$dumpfile("out.vcd");
$dumpvars(0,testbench);
#100000;
$finish;
end

endmodule

И модуль коррелятора и тестбенч.
Здесь важно, что бы входной сигнал поступал с известной тактовой частотой clk.
Тогда сигнал с каждым тактом задвигается в 32-х битный сдвиговый регистр shift_reg.
Так же с каждым тактом вычисляется XOR от shift_reg и эталонной битовой маски - здесь AA55AA55.
Потом считается сумма числа битов после операции XOR.
Если в сдвиговом регистре появится искомый сигнал AA55AA55, то XOR с эталоном даст 0.
Сумма всех бит в результате - ноль. Принимается решение, что сигнал обнаружен.
Не знаю подходит вам такое решение или нет?

установите icarus verilog, чтобы посмотреть симуляцию этого тестбенча.
Сохраните текст выше в файл corr.v
Из командной строки:
iverilog -o qqq corr.v
vvp qqq
gtkwave out.vcd
Спасибо сказали: Iron

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6038

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Спасибо, похоже не правду))
Не могу понять, что за parameter level = 2; , объясните пожалуйста.
И еще, если шить на плату, получается без участка кода тестбенч?И как прописать, что signal поступает с ножки, допустим, 101 и result уходит на ножку 102?

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Iron.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6039

  • nckm
  • nckm аватар
  • Не в сети
  • Администрация форума
  • Администрация форума
  • Сообщений: 112
  • Спасибо получено: 34
параметр level - не знаю зачем я это сделал.. ну скажем так: если считать, что сигнал на входе с примесью шума, то входной сигнал может содержать испорченные биты и тогда происходит обнаружение по эталону с некоторой вероятностью. Поскольку level сравнивается с суммой битов после XOR, то получается, что (level-1) это допустимое количество испорченных бит, при котором считаем, что эталон обнаружен. Может вам это и не нужно, тогда поставьте level=1

Чтобы зашить в плис удалите модуль тестбенча из файла. Вообще-то тестбенч и программа для ПЛИС обычно в разных файлах делаются.
В квартусе через меню Project => Set Top level entity назначьте текущий файл corr.v главным файлом проекта.

Назначить пины нужно в Assignments=>Assignments Editor

Вот здесь довольно подробно про все это: marsohod.org/11-blog/78-newproject
Спасибо сказали: Iron

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от nckm.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6040

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Буду пробовать, большое человеческое спасибо)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6041

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
еще вопросик по поводу частоты, что-бы назначить, просто ставим clk=10000, для 10кгц? А строчку input wire clk убираем?
В Assignment Editor ножка прописана, а в самом коде, как написать, что сигнал c IO[0] брать?

Просто в везде в программе заменить signal на IO[0] или как?)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Iron.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6046

  • nckm
  • nckm аватар
  • Не в сети
  • Администрация форума
  • Администрация форума
  • Сообщений: 112
  • Спасибо получено: 34
Частоту нельзя "назначить".
Частота такая, какая приходит на входной пин микросхемы ПЛИС.
На плате Марсоход2 - это 100МГц, которые попадают на пин 25 микросхемы cyclone3 по схеме marsohod.org/downloads/category/21?download=120 .
Если нужна другая частота, то можно либо разделить счетчиком входную частоту, либо можно установить компонент PLL, который можно настроить, чтобы он генерировал нужную частоту.
В assignment editor нужно делать назначения тем сигналам, какие используются в проекте. Или наоборот, в проекте использовать те сигналы, которые есть в assignment editor.
Например, если у вас модуль верхнего уровня
module correlator(
input wire clk,
input wire signal,
output reg [7:0]summ,
output reg result
);
то в assignment editior должны быть назначения всех сигналов clk, signal,summ, result. Эти сигналы нужно назначить на конкретное местоположение, на конкретный по номеру пин.

Если Вы берете обычные назначения платы Марсоход2, то там есть сигналы IO.
В проекте можно сделать модуль

module correlator(
input wire clk,
input wire [15:0]IO,
output wire[3:0]LED
);

wire signal; assign signal = IO[0];
assign LED[0]=result;
...
Спасибо сказали: Iron

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от nckm.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6047

  • Iron
  • Iron аватар Автор темы
  • Не в сети
  • Новый участник
  • Новый участник
  • Сообщений: 7
  • Спасибо получено: 0
Получается, я назначаю clk на 25 пин и плата принимает сигнал с частотой 100МГц, signal назначаю на 101 пин и принимаю на эту ножку сигнал, result на любой другой пин и снимаю с него конечный результат...
А куда назначается [7:0]summ ?
"Если нужна другая частота, то можно либо разделить счетчиком входную частоту, либо можно установить компонент PLL, который можно настроить, чтобы он генерировал нужную частоту."
Где-то можно про это прочесть?)В каких то ваших проектах это реализуется, 100 МГц многовато)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Коррелятор на плате марсоход 2, нужна помощь 8 года 4 мес. назад #6048

  • nckm
  • nckm аватар
  • Не в сети
  • Администрация форума
  • Администрация форума
  • Сообщений: 112
  • Спасибо получено: 34
если сигналы summ не нужны, можно вообще их не выводить на выводы микросхемы ПЛИС, просто убрать из объявления модуля и перенести их объявление в тело модуля. Внутри они будут, но на выход не пойдут.
Или назначить на какие-то другие IO - их же там много.
Делитель частоты - обычный счетчик. Самый простой делитель на 256:

module correlator(
input wire clk100mhz,
input wire signal,
output reg result
);

reg [7:0]summ;

reg [7:0]cnt;
always @(posedge clk100mhz)
cnt<=cnt+1;

wire clk; assign clk = cnt[7];
....


ну или вот статья про счетчики: marsohod.org/verilog/158-verilogpictcnt
Спасибо сказали: Iron

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • Страница:
  • 1
  • 2
Время создания страницы: 0.131 секунд
Работает на Kunena форум