Jump to content
Sign in to follow this  
metallbublick

Тест Для Fifo

Recommended Posts

Добрый день, уважаемые эксперты. Прежде чем использовать FIFO в проекте, решил написать для него простенький тест.

Итак, при помощи IP Core Generator получил FIFO следующего вида:

96a9899c96bcba138e7cb55d58489917.jpg

Код для тестирования:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
-- Uncomment the following library declaration if using
-- arithmetic functions with Signed or Unsigned values
--use IEEE.NUMERIC_STD.ALL;
-- Uncomment the following library declaration if instantiating
-- any Xilinx primitives in this code.
library UNISIM;
use UNISIM.VComponents.all;
entity fifo_testbench is

end fifo_testbench;
architecture Behavioral of fifo_testbench is

component fifo_16x4
 port(
	 rst: IN STD_LOGIC;
	 wr_clk: IN STD_LOGIC;
	 din: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
	 wr_en: IN STD_LOGIC;
	 full: OUT STD_LOGIC;
	 rd_en: IN STD_LOGIC;
	 dout: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);
	 empty: OUT STD_LOGIC;
	 rd_clk: IN STD_LOGIC
 );
end component;

signal rst: STD_LOGIC;
signal wr_clk: STD_LOGIC;
signal din: STD_LOGIC_VECTOR(7 DOWNTO 0);
signal wr_en: STD_LOGIC;
signal full: STD_LOGIC;
signal rd_en: STD_LOGIC;
signal dout: STD_LOGIC_VECTOR(7 DOWNTO 0);
signal empty: STD_LOGIC;
signal rd_clk: STD_LOGIC;
signal clk: STD_LOGIC;

begin
FIFO_INIT: fifo_16x4 port map(
rst => rst,
wr_clk => wr_clk,
din => din,
wr_en => wr_en,
full => full,
rd_en => rd_en,
dout => dout,
empty => empty,
rd_clk => rd_clk);

FIFO_TEST: process
begin
 -- сброс FIFO
 rst <= '0'; wait for 1 ns; rst <= '1'; wait for 1 ns;

 -- заполняем FIFO
 rst <= '0'; rd_clk <= '0'; rd_en <= '0'; wr_en <= '1';

 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "10010001"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "10110010"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "00010011"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "10010100"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "11110101"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 wr_clk <= '1'; din <= "10010110"; wait for 10 ns;
 wr_clk <= '0'; wait for 1 ns;

 -- читаем из FIFO
 rd_en <= '1';	
 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

 rd_clk <= '1'; wait for 10 ns;
 rd_clk <= '0'; wait for 1 ns;

end process;

end Behavioral;

Симуляция на ISim дала следующие результаты:

0b52786c82e843d816c87e41e7fcc24d.jpg

То есть судя по полученным данным после сброса FIFO полное (full = '1'), затем, по переднему фронту третьего импульса записи (wr_clk) full сбрасывается в ноль. При этом флаг empty постоянно установлен в '1', даже когда full также равен единице. Догадываюсь, что должно быть совсем не так :-)

Я новичок в программировании ПЛИС. Подскажите, пожалуйста, в чем может быть ошибка?

Share this post


Link to post
Share on other sites

Два вопроса: 1) почему RST в "нуле"?; 2) анализ с пикосекундными интервалами - это гигагерцевый FIFO?

Share this post


Link to post
Share on other sites

1) Если RST в "1", то происходит сброс (???), поэтому поставил в "ноль".

2) Интервалы наносекундные - там на шкале 0, потом 10 000, 20 000 и т.д. (мало ???).

Share this post


Link to post
Share on other sites

Технология Maxim Integrated nanoPower: когда малый IQ имеет преимущества

При разработке устройств с батарейным питанием важно выбирать компоненты не просто с малым потреблением, но и с предельно малым током покоя. При этом следует обратить внимание на линейку nanoPower производства компании Maxim Integrated. В статье рассмотрено их применение на примере системы датчиков беспроводной оконной сигнализации.

Подробнее

С интервалами понятно, хотя и странно, ведь запятая - десятичный разделитель. Сброс по умолчанию работает по активному нулю, как и все D-триггеры, которые являются основой любого буфера. Вы не смотрели что RTL синтезировал? Как я понял, буфер построен с помощью визарда.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

  • Similar Content

    • By Блондин
      Доброе времени суток!
      Простейший проект - DDS ip-core в Xilinx ISE 14.7 (Webpack!), выход DDS далее на ЦАП, приаттаченный к плате Nexus 3 (Spartan 6).
      Top level - schematic.
      DDS генерит, в железе все нормально, на осциллографе на выходе ЦАП - синус, все как надо.
      Но как промоделировать проект в ISim? Testbench создаю, клок для DDS генерится, но на выходной шине DDS 0.
      Отдельно генерил тестбенч для ДДС (не для всего проекта), результат такой же.
      Возможно, проблема в прослойке между монитором и стулом, но тогда подскажите, что почитать/куда копать?
      Заранее спасибо!




    • By KA1
      Программист ПЛИС
      Требования: высшее техническое образование. Опыт работы в САПР (ISE Design Suite, ModelSIm, Quartus II); знание основ цифровой обработки сигналов и средств моделирования (Matlab и т.п.). Опыт работы с отечественной радиационно-стойкой элементной базой. Знание архитектуры и принципов построения современных цифровых, цифроаналоговых систем и средств для их разработки. Опыт работы с Xilinx серией Virtex5QV, ИМ 5576ХС4Т. Наличие завершенных проектов (предоставить примеры работ) Работа с констрэйнами при проектировании сложных устройств. Знания технического английского и умение работать с документацией.
      Обязанности
      · Разработка конфигураций ПЛИС (VHDL/Verilog под Altera/Xilinx/Actel);
      · Отладка, настройка и испытания разработанных устройств.
      · Работа с осциллографом, спектроанализатором, генератором сигнала.
      · Написание, верификация, синтез, размещение в ПЛИС фирмы Xilinx (Virtex5QV) программных алгоритмов ЦОС, программных ядер высокоскоростных интерфейсов.
      Условия: полное соблюдение ТК, офис в центре, з/п по результатам собеседования.
      С уважением,
      Карпухина Татьяна
      8-926-827-89-71
      expert@rabotaka.com
      skype - maksimus-d.m.
    • By НеСказочник
      Всем здрасьте. Только учусь работать с VHDL. Осваиваю Xilinx Ise WebPack (кажись он так называется). И при попытке сгенерировать эту отладочную доску на vhdl он мне генерирует её с ошибками:
      Ругается на <clock>.
      Кто знает что с этим делать?
  • Сообщения

    • Ваша фраза о компьютерной туфте, это реакция на публикацию мной снятых осциллограмм и графика, построенного по результатам измерений. Именно это было названо компьютерной туфтой. Фото установки выложил, просто как ещё одно подтверждение подлинности  моей информации. Первой была фраза Преподаватели в институте научили меня, что всё сказанное может быть подвергнуто сомнению. Или, как минимум, вызвать вопросы. Поэтому, стоит заранее продумать, что сказать и как реагировать на возможные вопросы. Кроме того, очень желательно сказанное аргументировать. Здесь и сейчас. Вас не устроило упоминание осциллографа, как измерительного инструмента? Мне не привыкать. Василичь, тот вообще договорился, что и паяльника у меня нет. Выложил фото установки. Но, дело не в этом. Дело в Ваших амбициях и самооценке, мешающей Вам услышать других. Почитайте, хотя бы, пару своих постов. Ни понимания физики явлений, ни уважения к собеседнику. Плюс, самолюбование. "Эверест" фотографий - отличное тому подтверждение. Напоминает статусы в соцсетях. А обида.... Не льстите себе. Поверьте, я слишком давно вылез из песочницы. Замечательно. Сделайте свой вариант разводки и выложите. Раз, уж, сказали, что можно лучше.  И одна беда, в отсутствии исходника. Он есть у Вас. Суть, как я понимаю, не в соревнованиях на скорость сборки электросхемы. Были такие. Тем более, SamVal брался реализовать Вашу разводку в "металле". Я, как бы, показал класс в измерении магнитных свойств сердечника. С фотками. За что и "отгрёб". Теперь Ваша очередь, Alex-007!
    • Смотрю , Модуль вцелом , всё же пригодился !
    • Предложение актуально. Цены: Минимальный заказ - 1 катушка. Цена - 950грн. Цена от 2х катушек - 900грн/катушка. Возможна отмотка от 100гр. Цена 100гр. - 130грн.
    • Я думаю, что ДМА счетчик не сдвинул как раз. Пропустил запрос от ADC.  Следующий запрос от ADC к DMA:  DMA принял, но данные поместил уже не во второй элемент массива, а в первый. Затем ADC шлет еще и еще запросы и некоторые из них DMA вновь пропускает. И количество пропусков *считай смещений) может составлять от 1 до 6.  Вот это и объясняет, что сдвиг данных всегда на разную величину происходит.
    • Придется делать свои платы. В КИТ Михаила "Аксикомы" не станут, да и резисторы будут выводные.   Это правильная мысль. Я изначально компоновался с БуЛочками и они встали на радиаторах вплотную ко входу УМЗЧ   Это нечто!! Видеть еще пол беды, а вот взять в руки... Сразу приходит осознание - вещь!  
    • Просто триггерный режим не даст хорошей повторяемости заряда большой ёмкости в нагрузке. Иначе: триггерный режим не позволит в двухполярном БП синхронно заряжать большие ёмкости в нагрузке. Это часто приводит к неожиданным последствиям (проверено ). Нужна либо "ниспадающая" перегрузочная характеристика (см., например, 142ЕН1, ЕН2, но лучше, если до некоторого снижения напряжения, например, -20% от выходного, ток стабилизируется, а при дальнейшем снижении напряжения снижается и ток; при КЗ ток ограничивается величиной в, скажем, 20% от тока стабилизации), либо триггерная, но с удержанием тока после срабатывания "токовой" защиты на уровне, скажем, 20% от тока срабатывания. Ну, и, кроме того, нужна синхронная работа обоих плечей двуполярного БП не только при повышении напряжения, но и при его снижении, а также при выключении. С уважением В. ПС. Кстати: многие БП страдают неконтролируемым повышением напряжения при аварийном выключении сети  
    • А скажите,пожалуйста,если нет провода диаметром 0,27,а есть  0,25 и 0,30, то какой лучше?Думаю 0,30 лучше ,но влезет ли в окно.
×
×
  • Create New...