Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: программа для генерации фильтров в плис
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Lmx2315
Приветствую уважаемые .


Я новичёк в плисоведении .

Cижу разбираюсь с ПЛИС и т.д. , не подскажете какую-либо прогу чтоб могла фильтры генерить для плис Vertex .

Встроенный в ICE генератор делает только FIR и требует файл коэффициентов , руками набить нельзя . В матлабе можно поучить коэффициенты , но некуда их сунуть . Файл в формате ice (coef) не генерится .

Пробовал сгенерировать на verilog - не транслируется в прошивку ( может потому что там разрядность 64 битная ?? не знаю ) - это речь идёт о fdatool .

Пытаюсь сунуть в плис демодулятор на схеме Костоса , в симулинке вроде работает , а в плис то фильтр сделать толком не могу , то функцию sign (x) ( если кто знает - тоже подскажите , плиз ) .

Простите за косноязычность - так всегда бывает когда немного не в теме и одни эмоции .


Не стесняйтесь пинать , но тока советы давайте посодержательней ...я цифровой техникой раньше не занимался вовсе , тока линейной частью и всё.
AsJohnAs
Цитата
Встроенный в ICE генератор делает только FIR и требует файл коэффициентов , руками набить нельзя . В матлабе можно поучить коэффициенты , но некуда их сунуть . Файл в формате ice (coef) не генерится .

Ну это не правда - в fdatool можно сделать генерацию .coe файла. И при этом сделать фильтр для нужной разрядности. В принципе fdatool может генерировать VHDL код для КИХ и БИХ фильтров, но эти фильтры не будут работать на высоких частотах.
Lmx2315
Цитата(AsJohnAs @ Dec 6 2008, 14:33) *
Ну это не правда - в fdatool можно сделать генерацию .coe файла. И при этом сделать фильтр для нужной разрядности. В принципе fdatool может генерировать VHDL код для КИХ и БИХ фильтров, но эти фильтры не будут работать на высоких частотах.

вы меня не поняли , в fdatool есть возможность сгенерить файл коэффициентов - тока он не генерится , выдаёт непонятные предупреждения и всё , уже всё перебрал .

Потому и прошу у людей - может есть какие сторонние програмки для генерации корок для плис .


На верилоге генерил и vhdl-е - в ice всё суётся но не транслируется и всё , хоть ты тресни . Причём если сделать на верилоге - то вход и выход всегда 64 битный , а если на vhdl - то всегда однобитный !
...какая-то ерунда , конечно скроее всего у меня руки кривые - но честно уже устал . Еаверняка есть что-то попроще.
AsJohnAs
Ну вообще фильтр это свертка т.е. сумма произведений коэффициентов фильтра на линию задержки.
А вообще тогда совет - переустановите матлаб. Или еще проще расчитайте фильтр - округлиде занчения и напишите в тектовом редакторе так как сказано в PDF на ту корку ISE которую вы планируете использовать. COE файл можно очень легко ручками написать
taurus
Можно еще в MatLab, там тулбокс есть, знакомый делал, поищите. На выходе HDL-описание.
Tue
Lmx2315, coe-файл у вас не генерируется по той же причине, по которой vhdl/verilog коды фильтров, полученные в fdatool, не синтезируются. Причина - у вас все в двойной точности. Зайдите во вкладку "квантование". Отквантуйте ваш фильтр в фиксированную точку и будет вам счастье.

Цитата(taurus @ Dec 6 2008, 19:23) *
Можно еще в MatLab, там тулбокс есть, знакомый делал, поищите. На выходе HDL-описание.

taurus, о чем вы ?
hitower1
Lmx2315:
Если Вам нужны готовые реализации фильтров в качестве примера посмотрите на www.opencores.org
И учите матчасть без нее никуда, есть хорошая книга возможно Вам пригодится
Digital Signal Processing with Field Programmable Gate Arrays
автор: Dr. Uwe Meyer-Baese
http://www.dsp-book.narod.ru/books.html
Lmx2315
Цитата(Tue @ Dec 6 2008, 20:53) *
Lmx2315, coe-файл у вас не генерируется по той же причине, по которой vhdl/verilog коды фильтров, полученные в fdatool, не синтезируются. Причина - у вас все в двойной точности. Зайдите во вкладку "квантование". Отквантуйте ваш фильтр в фиксированную точку и будет вам счастье.


вот спасибо smile.gif , попробую на работе - дома матлаба нет ...да и айса тоже нет . Надеюсь поможет , если найду вкладку квантование .

Цитата(hitower1 @ Dec 6 2008, 22:24) *
Lmx2315:
Если Вам нужны готовые реализации фильтров в качестве примера посмотрите на www.opencores.org
И учите матчасть без нее никуда, есть хорошая книга возможно Вам пригодится
Digital Signal Processing with Field Programmable Gate Arrays
автор: Dr. Uwe Meyer-Baese
http://www.dsp-book.narod.ru/books.html



за книжку спасибо , про теорию оно понятно что изучать надо ..тока вот натура человеческая такая - хочется всего и сразу как говорится по мановению в.п. .

а на www.opencores.org я был , там теперь доступ получать нужно , я вроде постучался к ним - но не пишут , видать не поразил талантами , жаль там много чего интересного .

..по моему тут где-то у кого-то совет видел - вот чем пользуюсь в гугле набрать строку - поиск кода и первой строчкой в результатах идёт их сервис http://www.google.ru/codesearch

а в нём набираю lang:verilog fir - например , или что нужно .

Тока так я долго нужное искать буду , потому просьба продолжается к умным людям - на предмет есть у кого проги как фильтры цифровые генерить .


И не забудте подсказать как функцию sign(x) из блоков в айсе соорудить . Я пробовал делать из компаратора и сумматора , типа если число меньше нуля - то сумматор вычитает из 0 еденицу , если число больше нуля то сумматор складывает еденицу и ноль ...но по моему получается бред.

...подскажите люди добрые .
Tue
Lmx2315, вы бы хоть описали что вы подразумеваете под функцией sign(x). Если судить из названия, то смею предпложить, что на входе этой функции должно быть знаковое число, на выходе - знак числа. Если так, то что мешает вам брать самый старший разряд, являющийся знаковым разрядом, и выдавать его наружу ?
Lmx2315
Цитата(Tue @ Dec 7 2008, 16:12) *
Lmx2315, вы бы хоть описали что вы подразумеваете под функцией sign(x). Если судить из названия, то смею предпложить, что на входе этой функции должно быть знаковое число, на выходе - знак числа. Если так, то что мешает вам брать самый старший разряд, являющийся знаковым разрядом, и выдавать его наружу ?



правильно мне нужен знак числа или ноль если число - ноль .

Ну возьму я зтарший знак числа а как мне на него умножить следующее число ?

у меня после этой функции - перемножитель на другое число .
des00
Цитата(Lmx2315 @ Dec 7 2008, 16:00) *
Ну возьму я зтарший знак числа а как мне на него умножить следующее число ?


хмм, самый простой вариант

Код
  assign sign = b[$high(b)];
  assign res  = sign ? -a : a;


правда есть вариант лучше, но думаю сами догадаетесь.

Насчет FIR : Господа а что ручками уже делать FIR не модно ? На написание с нуля уходит минуты 2-3, а на создание конфигурируемого чуть больше.
Tue
Цитата(Lmx2315 @ Dec 8 2008, 00:00) *
правильно мне нужен знак числа или ноль если число - ноль .

Ну возьму я зтарший знак числа а как мне на него умножить следующее число ?

у меня после этой функции - перемножитель на другое число .

Ну допустим знак вы получили - однобитовое число: '0' - число положительное, '1' - число отрицательное. Далее вы можете превратить это однобитовое число в знаковое число, у которого старший бит - знак, остальная часть представляет коэффициент и умножать на второе множимое. В данном случае достаточно всего 2-х битов.
Но можно поступить умнее и ничего не умножать. Анализируя значения знака, переводить ваше второе множимое в знаковое число и выдавать либо его положительное, либо отрицательное значение

Ниже приведен примерный код на VHDL вашего "перемножителя". Предполагается, что "siggn" - знак числа, "m" - беззнаковое 13-битное входное число, "outp" - знаковое выходное 14-битное число.
Код
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.numeric_std.all;

ENTITY make_signed_out IS
    PORT (
        siggn : IN std_logic;
        m : IN std_logic_vector(12 DOWNTO 0);
        outp : OUT std_logic_vector(13 DOWNTO 0));
END make_signed_out;


ARCHITECTURE fsm_SFHDL OF make_signed_out IS


BEGIN
    make_signed_out : PROCESS (siggn, m)
        VARIABLE a_s : signed(13 DOWNTO 0);
        VARIABLE a_s_0 : signed(14 DOWNTO 0);
    BEGIN
        a_s := signed(resize(unsigned(m), 14));

        IF siggn /= '0' THEN
            a_s_0 :=  - (resize(a_s, 15));
            outp <= std_logic_vector(a_s_0(13 DOWNTO 0));
        ELSE
            outp <= std_logic_vector(a_s);
        END IF;

    END PROCESS make_signed_out;

END fsm_SFHDL;
Lmx2315
Спасибо за помощь smile.gif .


К сати в матлабе в тулсе фильтровом - нашёл как сделать чтоб всё в айс транслировалось хоть на верилоге хоть как таблица коэффициентов , жаль только что всё равно не работают . Я эти получившиеся фильтры на 160 Мгц - тактовой запустил , хотел фильтровать выход петли Костоса .

А от фильтров никакой реакции , как полосу не меняю - хоть в десятки раз . Если фильтр выкинуть - реакция кольца есть (хаотичная - но всё же) , с фильтром - никакой NCO висит в начальном положении .


...если у кого мысли есть и просто что хотят уточнить - я всегда рад , даже пинкам smile.gif .


попробую по книжке фильтр сбацать ручками .
des00
Цитата(Lmx2315 @ Dec 8 2008, 13:57) *
попробую по книжке фильтр сбацать ручками .


4 схемы построения FIR фильтров в атаче

Удачи!!!
Tue
Lmx2315, что конкретно у вас не работает ? Вы проверяли отдельно сгенеренный матлабом фильтр на работоспособность ? Про то, что на вход "clk_enable" надо подать "1" и в начале сбросить фильтр, подав на "reset" единицу хотя бы в течение одного периода сlk не забыли ?
Lmx2315
Цитата(Tue @ Dec 9 2008, 10:06) *
Lmx2315, что конкретно у вас не работает ? Вы проверяли отдельно сгенеренный матлабом фильтр на работоспособность ? Про то, что на вход "clk_enable" надо подать "1" и в начале сбросить фильтр, подав на "reset" единицу хотя бы в течение одного периода сlk не забыли ?



еденицу на энейбл клоков - подал , а вот ресетить не ресетил .....а точно надо ? разве по умолчанию не всё ок и так ? ...попробую , спасибо.


А не работает - нет откликов фильтра ни на что , на выходе ноль и всё.

Цитата(des00 @ Dec 9 2008, 06:46) *
4 схемы построения FIR фильтров в атаче

Удачи!!!


спасибо smile.gif
sazh
Цитата(des00 @ Dec 9 2008, 06:46) *
4 схемы построения FIR фильтров в атаче

Подскажите пожалуйста.
Вконец умучился без system verilog обойтись. И в стандарте вроде запрета не нашел.
Уж очень хочется в верилоге при синтезе из файла достать.

Код
wire signed [W-1:0] coe [0:P-1] = '{`include "coe.vh"};
des00
Цитата(sazh @ Dec 9 2008, 10:11) *
Подскажите пожалуйста.
Вконец умучился без system verilog обойтись. И в стандарте вроде запрета не нашел.
Уж очень хочется в верилоге при синтезе из файла достать.


никак вы это не сделаете в Verilog Literal Values -> Array literals не определены и не поддерживаются %)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.