Поисковое проектирование модели ПЛИС для построения системы цифровой обработки сигналов

Современные семейства ПЛИС фирмы Xilinx, их характеристики и значимость в процессе построения систем цифровой обработки сигналов. Создание базы параметров, фактов и запрещенных комбинаций для решения открытой задачи поискового проектирования модели ПЛИС.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 14.12.2012
Размер файла 3,6 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

and ((bram = '15 - 28 Мбит') or (bram = '28 - 68 Мбит'))

and ((dsp = '288 - 864') or (dsp = 'свыше 864'))

and (transiver = 'GTH')

and not ZKflag

then begin

//В зависимости от веса гипотезы и ее оценки БКО обрабатываем счетчики

//противоречий и подтверждений

if (TSolverObject(Items[i].Data).ObjectWeight < 0) then

nUS:=nUS+1

else

nS:=nS+1;

//Меняем наименование

TSolverObject(Items[i].Data).ObjectName:=Format('Авт.Оцен.Гип#%d.Уд', [i]);

//Говорим что эта гипотеза будет фактом

TSolverObject(Items[i].Data).ObjectClass := ocFact;

//Причем удачным

TSolverObject(Items[i].Data).ObjectType := sotSuccess;

//Увеличиваем счетчик положительных гипотез

Inc(FRateFuncInfo.iSuccess);

еnd

//Если гипотеза не проходит по параметрам, то считаем её отрицательной

else begin

//В зависимости от веса гипотезы и ее оценки БКО обрабатываем счетчики

//противоречий и подтверждений

if (TSolverObject(Items[i].Data).ObjectWeight < 0) then

nS:=nS+1

else

nUS:=nUS+1;

//Меняем наименование

TSolverObject(Items[i].Data).ObjectName:= Format('Авт.Оцен.Гип#%d.Неуд', [i]);

//Говорим что эта гипотеза будет фактом

TSolverObject(Items[i].Data).ObjectClass := ocFact;

//Причем неудачным

TSolverObject(Items[i].Data).ObjectType := sotUnSuccess;

//Увеличиваем счетчик отрицательных гипотез

Inc(FRateFuncInfo.iUnSuccess);

end;

end;

finally

Items.EndUpdate;

end;

//Вывод счетчиков подтверждений и противоречий

Label1.Caption := IntToStr (nS);

Label3.Enabled := true;

Label2.Caption := IntToStr (nUS);

Label4.Enabled := true;

//Выводим число оцененных гипотез

GoodCount.Caption := IntToStr(FRateFuncInfo.iSuccess);

GoodCount.Visible := true;

BadCount.Caption := IntToStr(FRateFuncInfo.iUnSuccess);

BadCount.Visible := true;

//Показываем надписи

ApCount.Enabled := true;

Bad.Enabled := true;

Good.Enabled := true;

end;

Result := True;

end;

{*----------------------------------------------------------------------------

Конструктор для создания формы

Параметры конструктора:

AOwner: TComponent; - обьект-владелец для формы

var ASolverBase: TSolverBase; - База РОЗ

----------------------------------------------------------------------------*}

constructor TfmBKOMain.Create(AOwner: TComponent; var ASolverBase: TSolverBase);

var

i, j: integer;

begin

inherited Create(AOwner); //Вызов конструктора в родителе

FSolverBase := ASolverBase;

with FRateFuncInfo do begin //Начальные установки

iSuccess := 0;

iUnsuccess := 0;

end;

//Заполнение листа гипотез

with lvSolverHipothesis, FSolverBase do begin

Items.BeginUpdate;

try

{1. Заполним список параметров}

for i := 0 to ParamList.Count - 1 do

with Columns.Add do Caption := ParamList.Param[i].ParamName;

{2. заполним список гипотез}

for i := 0 to ObjectList.Count - 1 do

if ObjectList.Objects[i].ObjectClass in [ocHipothesis] then //!!Обязательно только гипотезы!!

with Items.Add do begin

Caption := ObjectList.Objects[i].ObjectName;

{3. для каждой гипотезы заполним список параметров}

SubItems.Add(FloatToStr(ObjectList.Objects[i].ObjectWeight));

for j := 0 to ParamList.Count - 1 do

SubItems.Add(' '+ParamList.Param[j].ValueByID[ObjectList.Objects[i].ParamById(ParamList.Param[j].ParamID).fValueID]);

Data := pointer(ObjectList.Objects[i]);

end;

Selected := TopItem;

ItemFocused := Selected;

finally

Items.EndUpdate;

end;

end;

rgAppreciateClick(rgAppreciate);

//rgCrit.ItemIndex:=0;

end;

{*----------------------------------------------------------------------------

Функция подсчета гипотез(сделана только для примера) подсчитывает кол-во помеченных на оценку гипотез в lvSolverHipothesis

----------------------------------------------------------------------------*}

function TfmBKOMain.MarkedHipothesisCount: integer;

var

i: integer;

begin

Result := 0;

with lvSolverHipothesis do

for i := 0 to Items.Count - 1 do if Items[i].Checked then Inc(Result);

end;

{*----------------------------------------------------------------------------

Помечание объектов для оценки в lvSolverHipothesis в соответствии с выделенным пунктом меню

----------------------------------------------------------------------------*}

procedure TfmBKOMain.MarkHipothesisForAppreciate;

var

i: integer;

_maxWeight, _minWeight: Integer;

begin

with lvSolverHipothesis do begin

Items.BeginUpdate;

try

case rgAppreciate.ItemIndex of

0: for i := 0 to Items.Count - 1 do Items[i].Checked := True; //все

1: begin //макс-мин

_maxWeight := TSolverObject(Items[0].Data).ObjectWeight;

_minWeight := TSolverObject(Items[0].Data).ObjectWeight;

for i := 1 to Items.Count - 1 do begin

if TSolverObject(Items[i].Data).ObjectWeight > _maxWeight then _maxWeight := TSolverObject(Items[i].Data).ObjectWeight;

if TSolverObject(Items[i].Data).ObjectWeight < _minWeight then _minWeight := TSolverObject(Items[i].Data).ObjectWeight;

end;

for i := 1 to Items.Count - 1 do

Items[i].Checked := (TSolverObject(Items[i].Data).ObjectWeight = _minWeight) or (TSolverObject(Items[i].Data).ObjectWeight = _maxWeight);

end;

2: for i := 0 to Items.Count - 1 do Items[i].Checked := False; //по выбору

end;

finally

Items.EndUpdate;

end;

end;

end;

{*----------------------------------------------------------------------------

Щелчок мышкой по RadioGroup

----------------------------------------------------------------------------*}

procedure TfmBKOMain.rgAppreciateClick(Sender: TObject);

begin

with (Sender as TRadioGroup) do

lvSolverHipothesis.Checkboxes := (ItemIndex = 2);

MarkHipothesisForAppreciate;

btnAppreciate.Enabled := (MarkedHipothesisCount <> 0);

end;

{*----------------------------------------------------------------------------

Щелчок мышкой по ListView

----------------------------------------------------------------------------*}

procedure TfmBKOMain.lvSolverHipothesisClick(Sender: TObject);

begin

with TListView(Sender) do Selected := ItemFocused;

btnAppreciate.Enabled := (MarkedHipothesisCount <> 0);

end;

{*----------------------------------------------------------------------------

Щелчок мышкой по кнопочке "Оценить"

----------------------------------------------------------------------------*}

procedure TfmBKOMain.btnAppreciateClick(Sender: TObject);

begin

AppreciateHipothesis(FSolverBase);

end;

{*----------------------------------------------------------------------------

Отрисовка строчки в lvSolverHipothesis цветом в соответствии с разметкой удачный/неудачный/никакой

----------------------------------------------------------------------------*}

procedure TfmBKOMain.lvSolverHipothesisCustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);

var

_Brush: TBrush;

begin

with (Sender as TListView).Canvas do begin

_Brush := Brush; //сохраняем текущее состоянии кисти

try

if Item.Data <> nil then begin //в Data обьекта-строчки что-ниить записано?

with TSolverObject(Item.Data) do

if ObjectClass = ocFact then begin //Если то что там записано уже стал фактом то

case ObjectType of //в зависимости от типа пометить цветом

sotSuccess: Brush.Color := _scvSuccessFact;

sotUnsuccess: Brush.Color := _scvUnSuccessFact;

sotIndefinite: Brush.Color := _scvIndefiniteFact;

sotNone: Brush.Color := _scvHipothesis;

end;

FillRect(Item.DisplayRect(drLabel)); //отрисовать этот цвет

end;

end;

finally

Brush := _Brush; //Вернуть на место кисть

end;

end;

end;

{*----------------------------------------------------------------------------

Возвращает значение вовне

----------------------------------------------------------------------------*}

function TfmBKOMain.GetRateFuncInfo: rRateFuncInfo;

begin

Result := FRateFuncInfo; //

end;

end.

ПРИЛОЖЕНИЕ В

Фильтр КИХ. Листинг VHDL модели

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity mem_unit is

GENERIC

(data_size : INTEGER := 18;

coef_size: INTEGER:= 20;

adr_size: INTEGER := 8;

N_count: INTEGER := 64

);

port (clk : in std_logic; --общие сигналы для модуля

en : in std_logic;

rst: in std_logic;

adc: in std_logic_vector(data_size - 1 downto 0); -- вход для

-- децимированного сигнала

adr_rom : in std_logic_vector(adr_size - 1 downto 0); -- адрес

-- считывания из ПЗУ

adrA: in std_logic_vector(adr_size - 1 downto 0); --адрес записи в ОЗУ

adrB: in std_logic_vector(adr_size - 1 downto 0); --адрес считывания

--из ОЗУ

rd_rom : in std_logic; -- сигнал считывания из ПЗУ

wr1: in std_logic; -- сигнал записи в ОЗУ

do_rom : out std_logic_vector(coef_size - 1 downto 0); -- выход ПЗУ

doA: inout std_logic_vector(data_size - 1 downto 0); --порт 1 ОЗУ (зп)

doB: inout std_logic_vector(data_size - 1 downto 0) --порт 2 ОЗУ (сч)

);

end mem_unit;

architecture beh of mem_unit is

type rom_type is array (0 to (2**adr_rom'length)-1) of std_logic_vector (do_rom'range);

type ram_type is array (0 to (2**adrA'length)-1) of std_logic_vector(doA'range);

signal RAM: ram_type:=(others => (others => '0'));

signal ROM: rom_type :=(X"FFF03", X"0008A", X"002B7", X"00461");

signal D: std_logic_vector(data_size - 1 downto 0):=(others => '0'); -- промежуточный сигнал для работы ОЗУ

signal read_adrA, read_adrB: std_logic_vector(adr_size - 1 downto 0); -- промежуточные сигналы адресов считывания и записи

begin

process (clk) -- описание работы ПЗУ

begin

if (rising_edge(clk)) then

if (rst = '1') then

do_rom <= (others => '0');

elsif (en = '1') then

if (rd_rom = '1') then

do_rom <= ROM(conv_integer(adr_rom));

end if;

end if;

end if;

end process;

C1: process (en, clk) -- описание работы 2х портового ОЗУ

begin

if (rising_edge(clk)) then

if (en = '1') then

if wr1 = '1' then

RAM(conv_integer(read_adrB)) <= D;

end if;

end if;

end if;

end process C1;

C2: process (en,clk) -- защелкивание адресов внутри памяти

begin

if (rising_edge(clk)) then

if (en = '1') then

read_adrA <= adrA;

read_adrB <= adrB;

end if;

end if;

end process C2;

doA <= RAM(conv_integer(read_adrA)); --назначение обоих портов

doB <= RAM(conv_integer(read_adrB));

D <= adc when conv_integer(read_adrB) = 0 else doA; -- мультиплексор,

-- управляемый адресом

end beh;

--------------------------------------------------------

ENTITY CU IS

GENERIC (

adr_size: INTEGER :=7;

N_count: INTEGER := 64

);

PORT

(

clk : IN STD_LOGIC;

rst : IN STD_LOGIC;

en : IN STD_LOGIC;

rd1: OUT STD_LOGIC; -- входной сигнал для формирования сигнала чтения на ПЗУ

wr1: OUT STD_LOGIC; -- входной сигнал для формирования сигнала чтения на ОЗУ

en_out: OUT STD_LOGIC;

rst_sum: OUT STD_LOGIC;

Q_A: INOUT STD_LOGIC_VECTOR(adr_size - 1 DOWNTO 0);

Q_B: OUT STD_LOGIC_VECTOR(adr_size - 1 DOWNTO 0)

);

END CU;

ARCHITECTURE beh OF CU IS

signal irst: STD_LOGIC;

signal irst_sum: STD_LOGIC;

signal iQ : STD_LOGIC_VECTOR (adr_size - 1 DOWNTO 0);

BEGIN

Q_A <= iQ-'1'; en_out <= en;

rst_sum <= not (irst_sum or clk); -- сигнал сброса (между двумя clk)

PROCESS (rst, clk) -- счетчик выдачи адресов и сигнала EN

BEGIN -- и на блочную память

if (rst = '1') then -- асинхронная перезагрузка счета по внешнему сигналу

--ien <= '0';

irst <= '0';

iQ <= (conv_std_logic_vector(N_count,adr_size));

elsif (rising_edge(CLK)) then

if (en = '1') then

--ien <= '1';

rd1 <= '1'; -- формирование сигнала чтения на ПЗУ wr1 <= '1'; -- формирование сигнала записи на ОЗУ

irst <= '1'; -- внутр сигнал сброса (неактив.)

if iQ = (conv_std_logic_vector(1,adr_size)) then

iQ <= (conv_std_logic_vector(N_count,adr_size));

irst <= '0'; -- сигнал сброса (актив.)

else

iQ <= iQ - '1';

end if;

end if;

end if;

END PROCESS;

process (clk)

begin

if (rising_edge(CLK)) then

irst_sum <= irst; -- задержка на 1 такт

Q_B <= Q_A;

end if;

end process;

END beh;

--------------------------------------------------------

entity SignedMul18x20 is

GENERIC (

data_size: INTEGER := 18; -- разрядность входных данных

coef_size: INTEGER:= 20 -- разрядность коэффициентов

);

port(

clk : in std_logic;

A : in std_logic_vector (data_size - 1 downto 0);

coef : in std_logic_vector (coef_size - 1 downto 0);

X_A : out std_logic_vector (data_size + coef_size - 1 downto 0)

);

end SignedMul18x20;

architecture Behavioral of SignedMul18x20 is

signal XA : signed (37 downto 0):=(others => '0');

begin

XA <= signed(A)*signed(coef);

X_A <= std_logic_vector(XA);

end Behavioral;

--------------------------------------------------------

entity f_sum is

GENERIC (

data_size : INTEGER := 18; -- размерность входных данных

coef_size: INTEGER:= 20; -- размерность коэффициентов

log2fir : INTEGER := 2); -- увеличение разрядной сетки с учетом кол-ва

-- коэффициентов в ПЗУ

Port

(

clk: in std_logic;

rst: in std_logic;

en: in std_logic;

in_sum_A: in std_logic_vector(data_size + coef_size - 1 downto 0);

out_sum: out std_logic_vector(data_size - 1 downto 0)

);

end f_sum;

architecture behavioral of f_sum is

signal sum, sum_1: std_logic_vector((data_size + coef_size + log2fir - 1) downto 0):=(others => '0');

constant zeros: std_logic_vector (log2fir - 1 downto 0):=(others => '0');

begin

process (rst, clk, in_sum_A)

begin

if rst = '1' then

sum <= (others => '0');

sum_1 <= zeros & in_sum_A;

elsif rising_edge(clk) then

if en = '1' then

sum_1 <= (others => '0');

sum <= sum + sum_1 + (zeros & in_sum_A);

end if;

end if;

end process;

out_sum(data_size - 1 downto 0) <= sum(data_size - 1 downto 0);

end behavioral;

--------------------------------------------------------

entity fir_filtr is

GENERIC

(data_size : INTEGER := 18;

coef_size: INTEGER:= 20;

adr_size: INTEGER :=8;

N_count: INTEGER := 4;

log2fir : INTEGER := 2

);

port

(clk : in std_logic;

rst : in std_logic;

en : in std_logic;

adc: in std_logic_vector(data_size - 1 downto 0);

out_sum: out std_logic_vector(data_size - 1 downto 0)

);

end fir_filtr;

architecture Behavioral of fir_filtr is

component mem_unit is

GENERIC

(data_size : INTEGER := 18;

coef_size: INTEGER:= 20;

adr_size: INTEGER :=8;

N_count: INTEGER := 4

);

port (clk : in std_logic; -- общие сигналы для модуля

en : in std_logic;

rst : in std_logic;

adc: in std_logic_vector(data_size - 1 downto 0);

adr_rom : in std_logic_vector(adr_size - 1 downto 0);

adrA: in std_logic_vector(adr_size - 1 downto 0);

adrB: in std_logic_vector(adr_size - 1 downto 0);

rd_rom : in std_logic;

wr1: in std_logic;

do_rom : out std_logic_vector(coef_size - 1 downto 0);

doA: inout std_logic_vector(data_size - 1 downto 0);

doB: inout std_logic_vector(data_size - 1 downto 0)

);

end component;

component CU is

generic (

adr_size: INTEGER :=8;

N_count: INTEGER := 4

);

port

(

clk : IN STD_LOGIC;

rst : IN STD_LOGIC;

en : IN STD_LOGIC;

rd1: OUT STD_LOGIC;

wr1: OUT STD_LOGIC;

en_out: OUT STD_LOGIC;

rst_sum: OUT STD_LOGIC;

Q_A: INOUT STD_LOGIC_VECTOR(adr_size - 1 DOWNTO 0);

Q_B: OUT STD_LOGIC_VECTOR(adr_size - 1 DOWNTO 0)

);

end component;

component SignedMul18x20 is

GENERIC (

data_size: INTEGER := 18; -- разрядность входных данных

coef_size: INTEGER:= 20 -- разрядность коэффициентов

);

port(

clk : in std_logic;

A : in std_logic_vector (data_size - 1 downto 0);

coef : in std_logic_vector (coef_size - 1 downto 0);

X_A : out std_logic_vector (data_size + coef_size - 1 downto 0)

);

end component;

component f_sum is

GENERIC (

data_size: INTEGER := 18;

coef_size: INTEGER:= 20;

log2fir : INTEGER := 2); -- увеличение разрядной сетки

-- с учетом кол-ва

-- коэффициентов в ПЗУ

Port (

clk: in std_logic;

rst: in std_logic;

en: in std_logic;

in_sum_A: in std_logic_vector(data_size + coef_size - 1 downto 0);

out_sum: out std_logic_vector(data_size - 1 downto 0)

);

end component;

signal Iram_A: std_logic_vector (data_size - 1 downto 0);

signal Icoef: std_logic_vector (coef_size - 1 downto 0);

signal Iadr_A, Iadr_B: std_logic_vector (adr_size - 1 downto 0);

signal Ien_cu, Irst_sum, Ird1, Iwr1 : std_logic;

signal Imul_A: std_logic_vector (data_size + coef_size - 1 downto 0);

begin

MemoryI: mem_unit -- получение данных из памяти

generic map (18, 20, 8, 4)

port map (clk => clk, en => Ien_cu, rst => rst, adc => adc, adr_rom => Iadr_A, adrA => Iadr_A, adrB => Iadr_B, rd_rom => Ird1, wr1 => Iwr1, do_rom => Icoef, doA => Iram_A, doB => open);

CU_I: cu -- получение сигналов с блока CU

generic map (8, 4)

port map (clk => clk, rst => rst, en => en, rd1 => Ird1, wr1 => Iwr1,

en_out => Ien_cu, rst_sum => Irst_sum, Q_A => Iadr_A, Q_B => Iadr_B);

MUL_I: SignedMul18x20 -- перемножение сдвигаемого сигнала с

-- коэффициентами из ПЗУ

generic map (18, 20)

port map (clk => clk, A => Iram_A, coef => Icoef, X_A => Imul_A);

SUM_I: f_sum -- накопление суммы

generic map (18, 20, 2)

port map (clk => clk, rst => Irst_sum, en => Ien_cu, in_sum_A => Imul_A, out_sum => out_sum);

end Behavioral;

--------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • История развития логических схем с программируемой и репрограммируемой структурами, рост уровня их интеграции и взаимосвязь между ними. Краткий обзор основных семейств Плис фирмы Xilinx. Детальный обзор архитектур и характеристик серий семейства Spartan.

    контрольная работа [1,2 M], добавлен 13.06.2013

  • Проектирование цифровых устройств на ПЛИС фирмы Xilinx с применением языка VHDL, использование систем Leonardo Spectrum, Foundation Express и Integrated Synthesis Environment (ISE). Синтез и реализация проекта, разработка регистровой схемы и умножителя.

    курсовая работа [2,3 M], добавлен 28.06.2009

  • Понятие информации, автоматизированных информационных систем и банка данных. Общая характеристика описательной модели предметной области, концептуальной модели и реляционной модели данных. Анализ принципов построения и этапы проектирования базы данных.

    курсовая работа [1,7 M], добавлен 18.01.2012

  • Обзор моделей анализа и синтеза модульных систем обработки данных. Модели и методы решения задач дискретного программирования при проектировании. Декомпозиция прикладных задач и документов систем обработки данных на этапе технического проектирования.

    диссертация [423,1 K], добавлен 07.12.2010

  • Состав, параметры технических средств. Выработка общего ключа для шифрования/расшифровки сообщения. Структура подключения ПЛИС с персональным компьютером по Ethernet. Модули формирования электронно-цифровой подписи. Архитектура стандарта Gigabit Ethernet.

    дипломная работа [3,6 M], добавлен 13.09.2017

  • Определение принципов работы с САПР Xilinx WebPACK. Особенности проектирования простейших комбинационных схем на базе ПЛИС. Описание устройства на языке VHDL, набор тестовых воздействий и временные диаграммы его работы. Размещение устройства на кристалле.

    лабораторная работа [318,7 K], добавлен 28.05.2012

  • Преобразование аналоговой формы первичных сигналов для их обработки с помощью ЭВМ в цифровой n-разрядный код, и обратное преобразование цифровой информации в аналоговую. Практическая реализация схем аналого-цифровых и цифро-аналоговых преобразователей.

    реферат [89,2 K], добавлен 02.08.2009

  • Использование цифровых сигналов для кодирования информации, регистрации и обработки; унификация операций преобразования на всех этапах ее обращения. Задачи и физическая трактовка процессов идеальной интерполяции сигналов алгебраическими полиномами.

    реферат [1,3 M], добавлен 12.03.2011

  • Современные системы обработки данных. Автоматизированная информационная система. Понятие информационной и динамической модели. Появление множества разнотипных систем, отличающихся принципами построения и заложенными в них правилами обработки информации.

    презентация [36,0 K], добавлен 14.10.2013

  • Техническая характеристика сигналов в системах цифровой обработки. Описание программ для обработки цифровой и синтезированной звуковой информации, шумоподавление звука. Профессиональная обработка звука и звуковой волны: сжатие, запись, сэмплирование.

    курсовая работа [82,9 K], добавлен 01.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.