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

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

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

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

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

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

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей. Подробнее>>

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

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

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

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

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

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

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

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

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

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

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

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

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