亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? freefifo.vhd

?? 本文為verilog的源代碼
?? VHD
?? 第 1 頁 / 共 4 頁
字號:
      addr := addr + 1;
      wrptr_bin <= addr;
    elsif wr_clk'event and wr_clk='1' then
      if wr_allow='1' then
        wrptr     <= wrptr1;
        wrptr1    <= bin_to_gray (wrptr_bin);
        wrptr_bin <= wrptr_bin + 1;
      end if;
    end if;
  end process;

  
  ---------------------------------------------------------------
  --  Generate the read addresses
  ---------------------------------------------------------------
  process (rd_clk, reset)
    variable addr	:std_logic_vector (wrptr_bin'range);
  begin
    if reset='1' then
      addr := (others=>'0');
      rdptr <= bin_to_gray (addr);     
      addr := addr + 1;
      rdptr_bin <= addr;

      addr := addr + async_size;
      rdptr_max_bin <= addr;
      addr := addr - 1;
      rdptr_max <= bin_to_gray(addr);
      
    elsif rd_clk'event and rd_clk='1' then
      if rd_allow='1' then
        rdptr    <= bin_to_gray (rdptr_bin);
        rdptr_bin <= rdptr_bin + 1;

        rdptr_max <= bin_to_gray (rdptr_max_bin);
        rdptr_max_bin <= rdptr_max_bin + 1;
      end if;
    end if;
  end process;


  ---------------------------------------------------------------
  --  Generate the mid addresses
  ---------------------------------------------------------------
  process (wr_clk, reset)
    variable addr	:std_logic_vector (wrptr_bin'range);
  begin
    if reset='1' then
      addr := (others=>'0');
      midptr <= bin_to_gray (addr);
      addr := addr + 1;
      midptr1 <= bin_to_gray (addr);
      addr := addr + 1;
      midptr_bin <= addr;
    elsif wr_clk'event and wr_clk='1' then
      if mid_allow='1' then
        midptr     <= midptr1;
        midptr1    <= bin_to_gray (midptr_bin);
        midptr_bin <= midptr_bin + 1;
      end if;
    end if;
  end process;

  ---------------------------------------------------------------
  -- Calculate all the combinatorial match signals
  ---------------------------------------------------------------
  wf_full_match	  <= '1' when wrptr1  = rdptr     else '0';
  wf_empty_match  <= '1' when wrptr   = midptr    else '0';  -- synced to wr_clk!
  wf_aempty_match <= '1' when wrptr   = midptr1   else '0';  -- synced to wr_clk!
  rf_full_match   <= '1' when midptr1 = rdptr_max else '0';
  rf_empty_match  <= '1' when rdptr   = midptr    else '0';


  ---------------------------------------------------------------
  -- Generate the full/empty flags
  ---------------------------------------------------------------
  --wf_empty_int <= wf_empty_match; -- The small but slow way

  process (wr_clk, reset)  -- The large but fast way
  begin
    if reset='1' then
      wf_empty_int <= '1';
    elsif wr_clk'event and wr_clk='1' then
      if wf_aempty_match='1' and wr_allow='0' and mid_allow='1' then
        wf_empty_int <= '1';
      elsif wf_empty_match='1' and wr_allow='0' then
        wf_empty_int <= '1';
      else
        wf_empty_int <= '0';
      end if;
    end if;
  end process;


  process (rd_clk, rf_empty_match)
  begin
    if rf_empty_match='1' then
      rf_empty_int <= '1';
    elsif rd_clk'event and rd_clk='1' then
      rf_empty_int <= rf_empty_match;
    end if;
  end process;

  --  This version matches the count output, but can result in a
  --  couple of unused memory locations.
  process (wr_clk, reset)
    variable tmp1 :std_logic_vector (count'range);
    variable tmp2 :std_logic_vector (count'range);
  begin
    if reset='1' then
      wf_full_int <= '0';
    elsif wr_clk'event and wr_clk='1' then
      tmp1 := (others=>'0');
      tmp2 := tmp1 + 1;

      if wf_full_int='1' and mid_allow='1' then
        wf_full_int <= '0';      
      elsif wf_count=tmp2 and wr_allow='1' and mid_allow='0' then
        wf_full_int <= '1';
      elsif wf_count=tmp1 then
        wf_full_int <= '1';
      else
        wf_full_int <= '0';      
      end if;
    end if;
  end process;


  process (wr_clk, rf_full_match)
  begin
    if rf_full_match='1' then
      rf_full_int <= '1';
    elsif wr_clk'event and wr_clk='1' then
      rf_full_int <= rf_full_match;
    end if;
  end process;

  ---------------------------------------------------------------
  -- Keep a count of the number of empty entries in the write FIFO
  ---------------------------------------------------------------
  process (wr_clk, reset)
    variable addr :std_logic_vector (wrptr'range);
  begin
    if reset='1' then
      addr := (others=>'1');
      addr := addr - async_size;
      addr := addr + 1;
      wf_count <= addr;
    elsif wr_clk='1' and wr_clk'event then
      if wr_allow='1' and mid_allow='0' then
        wf_count <= wf_count - 1;
      elsif wr_allow='0' and mid_allow='1' then
        wf_count <= wf_count + 1;
      end if;
    end if;
  end process;

end arch_fifo_wrcount;




----------------------------------------------------------------------------
----------------------------------------------------------------------------
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
library work;
use work.free_fifo.all;
use work.ram_lib.all;


entity fifo_rdcount is
    generic (data_bits	:integer;
             addr_bits  :integer;
             block_type	:integer := 0;
             async_size :integer := 16); 
    port (reset		:in  std_logic;
          wr_clk	:in  std_logic;
          wr_en		:in  std_logic;
          wr_data	:in  std_logic_vector (data_bits-1 downto 0);
          rd_clk	:in  std_logic;
          rd_en		:in  std_logic;
          rd_data	:out std_logic_vector (data_bits-1 downto 0);
          count		:out std_logic_vector (addr_bits-1 downto 0);
          full		:out std_logic;
          empty		:out std_logic
         );
end fifo_rdcount;

architecture arch_fifo_rdcount of fifo_rdcount is
  signal wrptr_bin	:std_logic_vector (addr_bits-1 downto 0);
  signal wrptr		:std_logic_vector (addr_bits-1 downto 0);
  signal wrptr1		:std_logic_vector (addr_bits-1 downto 0);

  signal rdptr_bin	:std_logic_vector (addr_bits-1 downto 0);
  signal rdptr1		:std_logic_vector (addr_bits-1 downto 0);
  signal rdptr		:std_logic_vector (addr_bits-1 downto 0);

  signal midptr_bin	:std_logic_vector (addr_bits-1 downto 0);
  signal midptr 	:std_logic_vector (addr_bits-1 downto 0);
  signal midptr1	:std_logic_vector (addr_bits-1 downto 0);

  signal rf_count	:std_logic_vector (addr_bits-1 downto 0);
  
  signal wf_full_match	:std_logic;
  signal wf_empty_match	:std_logic;
  signal rf_empty_match	:std_logic;
  signal rf_aempty_match:std_logic;

  signal wf_full_int	:std_logic;
  signal wf_empty_int	:std_logic;
  signal rf_empty_int	:std_logic;
  
  signal rd_allow	:std_logic;
  signal wr_allow	:std_logic;
  signal mid_allow	:std_logic;

begin
  empty <= rf_empty_int;
  full <= wf_full_int;
  count <= rf_count;

  ---------------------------------------------------------------
  -- Generate the read/write allow signals
  ---------------------------------------------------------------
  rd_allow <= '1' when rd_en='1' and rf_empty_int='0' else '0';
  wr_allow <= '1' when wr_en='1' and wf_full_int='0' else '0';
  mid_allow <= '1' when wf_empty_int='0' else '0';

  ---------------------------------------------------------------
  -- Instantiate the RAM
  ---------------------------------------------------------------
  fifo_ram: ram_dp
               generic map (addr_bits => addr_bits,
                            data_bits => data_bits,
                            register_out_flag => 1,
                            block_type => block_type)
               port map (reset,
                         wr_clk, wr_allow, wrptr, wr_data,
                         rd_clk, rdptr, rd_data);

  ---------------------------------------------------------------
  --  Generate the write addresses
  ---------------------------------------------------------------
  process (wr_clk, reset)
    variable addr	:std_logic_vector (wrptr_bin'range);
  begin
    if reset='1' then
      addr := (others=>'0');
      wrptr <= bin_to_gray (addr);
      addr := addr + 1;
      wrptr1 <= bin_to_gray (addr);
      addr := addr + 1;
      wrptr_bin <= addr;
    elsif wr_clk'event and wr_clk='1' then
      if wr_allow='1' then
        wrptr     <= wrptr1;
        wrptr1    <= bin_to_gray (wrptr_bin);
        wrptr_bin <= wrptr_bin + 1;
      end if;
    end if;
  end process;

  
  ---------------------------------------------------------------
  --  Generate the read addresses
  ---------------------------------------------------------------
  process (rd_clk, reset)
    variable addr	:std_logic_vector (wrptr_bin'range);
  begin
    if reset='1' then
      addr := (others=>'0');
      rdptr <= bin_to_gray (addr);     
      addr := addr + 1;
      rdptr1 <= bin_to_gray (addr);     
      addr := addr + 1;
      rdptr_bin <= addr;     
    elsif rd_clk'event and rd_clk='1' then
      if rd_allow='1' then
        rdptr     <= rdptr1;
        rdptr1    <= bin_to_gray (rdptr_bin);
        rdptr_bin <= rdptr_bin + 1;
      end if;
    end if;
  end process;


  ---------------------------------------------------------------
  --  Generate the mid addresses
  ---------------------------------------------------------------
  process (rd_clk, reset)
    variable addr	:std_logic_vector (wrptr_bin'range);
  begin
    if reset='1' then
      addr := (others=>'0');
      midptr <= bin_to_gray (addr);
      addr := addr + 1;
      midptr_bin <= addr;
    elsif rd_clk'event and rd_clk='1' then
      if mid_allow='1' then
        midptr     <= bin_to_gray (midptr_bin);
        midptr_bin <= midptr_bin + 1;
      end if;
    end if;
  end process;

  ---------------------------------------------------------------
  -- Calculate all the match signals and full/empty flags
  ---------------------------------------------------------------
  wf_full_match	  <= '1' when wrptr1 = rdptr  else '0';
  wf_empty_match  <= '1' when wrptr  = midptr else '0';
  rf_empty_match  <= '1' when rdptr  = midptr else '0';  -- synced to rd_clk!
  rf_aempty_match <= '1' when rdptr1 = midptr else '0';  -- synced to rd_clk!


  ---------------------------------------------------------------
  -- Generate the full/empty flags
  ---------------------------------------------------------------
  --rf_empty_int <= rf_empty_match;  -- The slow, but small approach

  process (rd_clk, reset) -- The large, but fast approach
  begin
    if reset='1' then
      rf_empty_int <= '1';
    elsif rd_clk'event and rd_clk='1' then
      if rf_aempty_match='1' and rd_allow='1' and mid_allow='0' then
        rf_empty_int <= '1';
      elsif rf_empty_match='1' and mid_allow='0' then
        rf_empty_int <= '1';
      else
        rf_empty_int <= '0';
      end if;
    end if;
  end process;
    

  process (wr_clk, wf_full_match)
  begin
    if wf_full_match='1' then
      wf_full_int <= '1';
    elsif wr_clk'event and wr_clk='1' then
      wf_full_int <= wf_full_match;
    end if;
  end process;

  process (rd_clk, wf_empty_match)
  begin
    if wf_empty_match='1' then
      wf_empty_int <= '1';
    elsif rd_clk'event and rd_clk='1' then
      wf_empty_int <= wf_empty_match;
    end if;
  end process;

  ---------------------------------------------------------------
  -- Keep a count of the number of empty entries in the read FIFO
  ---------------------------------------------------------------
  process (rd_clk, reset)
  begin
    if reset='1' then
      rf_count <= (others=>'0');
    elsif rd_clk='1' and rd_clk'event then
      if rd_allow='1' and mid_allow='0' then
        rf_count <= rf_count - 1;
      elsif rd_allow='0' and mid_allow='1' then
        rf_count <= rf_count + 1;
      end if;
    end if;
  end process;

end arch_fifo_rdcount;



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美影院一区二区| 亚洲欧洲一区二区三区| 欧美一卡二卡三卡| 日韩区在线观看| 欧美激情一区二区在线| 亚洲国产精品二十页| 亚洲另类中文字| 五月天中文字幕一区二区| 麻豆国产精品一区二区三区 | 国产偷国产偷精品高清尤物| 国产精品久久久久久久浪潮网站 | 免费观看在线色综合| 国产91综合一区在线观看| 色综合久久久久综合| 日韩你懂的在线观看| 国产精品麻豆欧美日韩ww| 亚洲一区二区三区免费视频| 国产美女av一区二区三区| 成人av免费在线播放| 欧美一区二区视频观看视频| 国产精品不卡在线| 国产乱国产乱300精品| 91老师片黄在线观看| 在线免费精品视频| 国产精品无人区| 婷婷综合久久一区二区三区| 国产麻豆视频一区| 91麻豆精品久久久久蜜臀| 精品国产91亚洲一区二区三区婷婷 | 粉嫩av一区二区三区| 欧美高清dvd| 亚洲国产精品欧美一二99| 国产精品中文字幕欧美| 日韩欧美成人一区二区| 天堂成人国产精品一区| 94色蜜桃网一区二区三区| 精品国产麻豆免费人成网站| 日本亚洲最大的色成网站www| 91亚洲永久精品| 欧美一级久久久久久久大片| 亚洲欧美乱综合| 不卡一区二区中文字幕| 国产视频在线观看一区二区三区 | 久久精品免视看| 激情综合网av| 国产三级精品视频| 成人一区二区三区在线观看| 欧美mv和日韩mv国产网站| 日韩电影在线一区二区三区| 欧美亚洲国产bt| 亚洲香蕉伊在人在线观| 欧美日韩高清一区二区| 五月婷婷综合在线| 欧美午夜一区二区三区| 亚洲第一综合色| 91麻豆精品国产91久久久久久| 日韩黄色免费电影| 精品国产伦理网| 国产美女视频91| 国产精品理伦片| 国产在线精品一区二区三区不卡| 91久久奴性调教| 亚洲成av人**亚洲成av**| 69精品人人人人| 懂色av一区二区在线播放| 一区二区久久久久久| 日韩一区二区三区三四区视频在线观看| 久久精品久久久精品美女| 国产亚洲欧美激情| 欧美日韩一区二区三区免费看| 蜜臀99久久精品久久久久久软件| 欧美不卡视频一区| 99久久er热在这里只有精品15| 伊人一区二区三区| 久久久精品tv| 3d动漫精品啪啪1区2区免费| 不卡视频在线观看| 午夜精品福利视频网站| 久久精品一区四区| 欧美色老头old∨ideo| 成人免费毛片片v| 精品亚洲成a人在线观看| 亚洲综合色婷婷| 国产精品久久看| 日韩女优av电影| 在线播放/欧美激情| 91视频在线观看| 国产精品综合二区| 国产乱码精品一区二区三区五月婷 | 亚洲欧洲日韩综合一区二区| 久久这里只有精品6| 精品免费99久久| 欧美一区二区三区人| 欧美精选在线播放| 欧美欧美欧美欧美首页| 欧美精品乱码久久久久久| caoporn国产一区二区| 国产一区二区三区黄视频| 粉嫩高潮美女一区二区三区| 99国产精品久久久久| 91精品国产综合久久久久久久久久| 欧美大片国产精品| 欧美激情中文字幕| 一区二区三区在线高清| 国产一区二区在线电影| 日本高清免费不卡视频| 精品99一区二区三区| 中文字幕国产一区| 欧美激情一区三区| 亚洲人吸女人奶水| 亚洲午夜免费电影| 激情五月激情综合网| 国产成人免费视频网站 | **欧美大码日韩| 午夜精品成人在线| 国产麻豆欧美日韩一区| 一本色道久久综合狠狠躁的推荐| 欧美日韩高清不卡| 国产亚洲污的网站| 亚洲成人免费在线| 成人性色生活片免费看爆迷你毛片| 91丝袜呻吟高潮美腿白嫩在线观看| 在线观看av不卡| 中文子幕无线码一区tr| 丝瓜av网站精品一区二区| 国产成人av一区二区三区在线观看| 91婷婷韩国欧美一区二区| 欧美岛国在线观看| 一区二区三区色| 9久草视频在线视频精品| 日韩欧美一级二级三级久久久| 中文字幕一区二区三区蜜月 | 精品一区二区三区的国产在线播放| 国产精品三级av| 欧美成人三级在线| 欧美专区日韩专区| 99久久精品国产一区| 91精品黄色片免费大全| 精品999在线播放| 日韩激情av在线| 欧美色成人综合| 最新不卡av在线| 成人精品鲁一区一区二区| 精品粉嫩超白一线天av| 日本vs亚洲vs韩国一区三区二区| 91久久国产综合久久| **欧美大码日韩| 成人美女视频在线观看18| xnxx国产精品| 国产成人亚洲综合a∨猫咪| 欧美大片在线观看| 经典三级一区二区| 日韩欧美电影在线| 国产麻豆精品95视频| 久久精品欧美日韩| av电影天堂一区二区在线观看| 国产精品无人区| 91视频.com| 亚洲chinese男男1069| 欧美丝袜丝nylons| 欧美aaaaaa午夜精品| 日韩免费高清视频| 国产一区二区h| 亚洲视频在线观看三级| 欧美在线综合视频| 久久99精品久久久久婷婷| 精品成人在线观看| av不卡免费电影| 亚洲1区2区3区4区| 久久久99久久精品欧美| 99视频在线观看一区三区| 亚洲一区二区视频| 日韩精品一区在线| k8久久久一区二区三区| 亚洲一区中文日韩| 久久亚洲精品小早川怜子| 成人精品免费看| 一区二区三区鲁丝不卡| 26uuu国产日韩综合| 91视频国产资源| 国内精品国产成人| 亚洲午夜在线电影| 国产精品午夜在线观看| 欧美日韩综合一区| 91同城在线观看| 国产在线观看免费一区| 有坂深雪av一区二区精品| 精品对白一区国产伦| 欧美精品色综合| 91国偷自产一区二区三区观看 | 免费欧美高清视频| 一区二区三区在线免费视频| 国产亚洲午夜高清国产拍精品| 欧美精品精品一区| 在线视频亚洲一区| 99精品视频一区二区| 国产a区久久久| 国产又黄又大久久| 韩国中文字幕2020精品| 免费观看一级特黄欧美大片|