Sign in to follow this  
metallbublick

Тест Для Fifo

4 posts in this topic

Добрый день, уважаемые эксперты. Прежде чем использовать 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
Lexus    992

Два вопроса: 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

Старт складской программы по Wi-Fi/ Bluetooth-чипам от Espressif

На склад КОМПЭЛ поступили чипы, модули и отладочные платы от компании Espressif Systems на базе ESP8266 и ESP32. Стоимость всех изделий данной линейки – в 2-3 раза ниже ближайших аналогов, чипы занимают минимальное место на плате, энергоэффективны и универсальны в применении

Подробнее...

Lexus    992

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

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>.
      Кто знает что с этим делать?