Перейти к содержанию

Тест Для Fifo


metallbublick

Рекомендуемые сообщения

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...