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

Конденсаторы Panasonic. Часть 4. Полимеры – номенклатура

В заключительной, четвертой статье из цикла «Конденсаторы Panasonic» рассматриваются основные достоинства и особенности использования конденсаторов этого японского производителя на основе полимерной технологии. Главной конструктивной особенностью таких конденсаторов является полимерный материал, используемый в качестве проводящего слоя. Полимер обеспечивает конденсаторам высокую электрическую проводимость и пониженное эквивалентное сопротивление (ESR). Номинальная емкость и ESR отличается в данном случае высокой стабильностью во всем рабочем диапазоне температур. А повышенная емкость при низком ESR идеальна для решения задач шумоподавления и ограничения токовых паразитных импульсов в широком частотном диапазоне.

Читать статью

С интервалами понятно, хотя и странно, ведь запятая - десятичный разделитель. Сброс по умолчанию работает по активному нулю, как и все 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>.
      Кто знает что с этим делать?
  • Сообщения

  • Покупай!

×
×
  • Create New...