Поисковое проектирование модели ПЛИС для построения системы цифровой обработки сигналов
Современные семейства ПЛИС фирмы 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