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

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

?? memtest.vhd

?? xilinx fpga 下的IDE控制器原代碼,貢獻一起學習
?? VHD
字號:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use WORK.common.all;
use WORK.rand.all;


package mem is

  component memTest
    generic(
      DATA_WIDTH :     natural := 16;   -- memory data width
      ADDR_WIDTH :     natural := 23;   -- memory address width
      BEG_TEST   :     natural := 0;    -- beginning test range address
      END_TEST   :     natural := 16#FFFF#;  -- ending test range address
      STEP_SIZE  :     natural := 1     -- address increment
      );
    port(
      clk        : in  std_logic;       -- master clock input
      rst        : in  std_logic;       -- active-high reset
      done       : in  std_logic;       -- memory operation complete indicator
      dIn        : in  std_logic_vector(DATA_WIDTH-1 downto 0);  -- data from memory
      rd         : out std_logic;       -- memory read control signal
      wr         : out std_logic;       -- memory write control signal
      abort      : out std_logic;       -- read/write sector abort
      addr       : out std_logic_vector(ADDR_WIDTH-1 downto 0);  -- address to memory
      dOut       : out std_logic_vector(DATA_WIDTH-1 downto 0);  -- data to memory
      progress   : out std_logic_vector(1 downto 0);  -- memory test progress indicator
      errbits    : out std_logic_vector(DATA_WIDTH-1 downto 0);  -- data bits with errors
      err        : out std_logic        -- memory error flag
      );
  end component;

end package mem;


library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;
use WORK.common.all;
use WORK.rand.all;

entity memTest is
  generic(
    DATA_WIDTH :     natural := 16;     -- memory data width
    ADDR_WIDTH :     natural := 23;     -- memory address width
    BEG_TEST   :     natural := 0;      -- beginning test range address
    END_TEST   :     natural := 16#FFFF#;  -- ending test range address
    STEP_SIZE  :     natural := 1       -- address increment
    );
  port(
    clk        : in  std_logic;         -- master clock input
    rst        : in  std_logic;         -- active-high reset
    done       : in  std_logic;         -- memory operation complete indicator
    dIn        : in  std_logic_vector(DATA_WIDTH-1 downto 0);  -- data from memory
    rd         : out std_logic;         -- memory read control signal
    wr         : out std_logic;         -- memory write control signal
    abort      : out std_logic;         -- read/write sector abort
    addr       : out std_logic_vector(ADDR_WIDTH-1 downto 0);  -- address to memory
    dOut       : out std_logic_vector(DATA_WIDTH-1 downto 0);  -- data to memory
    progress   : out std_logic_vector(1 downto 0);  -- memory test progress indicator
    errbits    : out std_logic_vector(DATA_WIDTH-1 downto 0);  -- data bits with errors
    err        : out std_logic          -- memory error flag
    );
end memTest;

architecture arch of memTest is

  -- states of the memory tester state machine
  type testState is (
    INIT,                               -- init
    LOAD,                               -- load memory with pseudo-random data
    COMPARE,                            -- compare memory contents with pseudo-random data
    STOP                                -- stop and indicate memory status
    );
  signal state_r, state_next : testState;  -- state register and next state

  -- registers
  signal addr_r, addr_next       : unsigned(addr'range);  -- address register
  signal err_r, err_next         : std_logic;  -- error flag
  signal errcnt_r, errcnt_next   : unsigned(addr'high+1 downto 0);  -- error counter
  signal errbits_r, errbits_next : std_logic_vector(errbits'range);  -- records data bits with errors
  signal cnt_r, cnt_next         : unsigned(dOut'range);  -- error counter

  -- internal signals
  signal   ld           : std_logic;    -- load random number gen with seed value
  signal   cke          : std_logic;    -- clock-enable for random number gen
  signal   rand         : std_logic_vector(dOut'range);  -- random number from generator
  signal   seed         : std_logic_vector(dIn'range);  -- random number starting seed
  constant mask         : std_logic_vector(dOut'range) := "1111111111111111";  -- comparison mask
  constant errthreshold : integer                      := 0;  -- error threshold
  constant addr_mask    : unsigned(addr'range)         := TO_UNSIGNED(16#FF#, addr'length);

begin

  seed <= (others => '1');              -- random number seed is 111...111
--      seed <= TO_UNSIGNED(65535,16);

  -- random number generator module
  u0 : randGen
    generic map(
      DATA_WIDTH => DATA_WIDTH
      )
    port map(
      clk        => clk,                -- input clock
      cke        => cke,                -- clock-enable to control when new random num is computed
      ld         => ld,                 -- load seed control signal
      seed       => seed,               -- random number seed
      rand       => rand                -- random number output from generator
      );

  -- connect internal registers to external busses      
  addr    <= std_logic_vector(addr_r);  -- memory address bus driven by memory address register
--      dOut <= cnt_r;                  -- always output the current random number to the memory
  dOut    <= rand;                      -- always output the current random number to the memory
  err     <= err_r;                     -- output the current memory error status
  errbits <= errbits_r;

  -- memory test controller state machine operations
  combinatorial : process(state_r, err_r, addr_r, dIn, rand, done, errcnt_r, errbits_r, cnt_r)
  begin

    -- default operations (do nothing unless explicitly stated in the following case statement)
    rd           <= NO;                 -- no memory write
    wr           <= NO;                 -- no memory read
    abort        <= NO;
    ld           <= NO;                 -- don't load the random number generator
    cke          <= NO;                 -- don't generate a new random number
    addr_next    <= addr_r;             -- next address is the same as current address
    errcnt_next  <= errcnt_r;
    errbits_next <= errbits_r;
    cnt_next     <= cnt_r;
    err_next     <= err_r;              -- error flag is unchanged
    state_next   <= state_r;            -- no change in memory tester state

    -- **** compute the next state and operations ****
    case state_r is

      when INIT                 =>      -- initialize the memory test controller
        progress     <= "00";           -- indicate the current controller state
        ld           <= YES;            -- load random number seed
        cke          <= YES;            -- enable clocking of rand num gen so seed gets loaded
        cnt_next     <= TO_UNSIGNED(0, cnt_next'length);
        addr_next    <= TO_UNSIGNED(BEG_TEST, addr_next'length);  -- load starting mem address
        err_next     <= NO;             -- clear memory error flag
        errcnt_next  <= TO_UNSIGNED(0, errcnt_next'length);
        errbits_next <= (others => '0');
        state_next   <= LOAD;           -- go to LOAD state and write pattern to memory

      when LOAD =>                      -- load the memory with data from the random number generator
        progress       <= "01";         -- indicate the current controller state
        if done = NO then               -- current write operation is not complete
          wr           <= YES;          -- keep write signal active since memory write is not done
        else                            -- current write operation is complete
          wr           <= NO;           -- release write signal when write op is complete
          if addr_r /= TO_UNSIGNED(END_TEST, addr_r'length) then
                                        -- not at the end of the memory test range yet
            cnt_next   <= cnt_r + 1;
            addr_next  <= addr_r + STEP_SIZE;  -- so increment address
            cke        <= YES;          -- and enable generator clock to get new random num
          else
                                        -- else end of the memory test range has been reached
            abort      <= YES;
            cke        <= YES;          -- enable generator clock and
            ld         <= YES;          -- reload the generator with the seed value
            cnt_next   <= TO_UNSIGNED(0, cnt_next'length);
            addr_next  <= TO_UNSIGNED(BEG_TEST, addr'length);  -- reset to start of test range
            state_next <= COMPARE;      -- go to the COMPARE state and check memory contents
          end if;
        end if;

      when COMPARE =>                   -- re-run the generator and compare it to memory contents
        progress        <= "10";        -- indicate the current controller state
        if done = NO then               -- current read operation is not complete
          rd            <= YES;         -- keep read signal active since memory read is not done
        else                            -- current read operation is complete
          rd            <= NO;          -- release the read signal when read op is complete
          errbits_next  <= errbits_r or ((dIn xor rand) and mask);
-- if (dIn and mask) /= (cnt_r and mask) then  -- compare value from memory to random number
          if (dIn and mask) /= (rand and mask) then  -- compare value from memory to random number
            errcnt_next <= errcnt_r + 1;  -- increment error counter if they don't match
          end if;
          if addr_r = (TO_UNSIGNED(END_TEST-16#FF#, addr_r'length) or addr_mask) then
            abort       <= YES;
            state_next  <= STOP;        -- go to STOP state once entire range has been checked
          end if;
          cnt_next      <= cnt_r + 1;
          addr_next     <= addr_r + STEP_SIZE;  -- increment address to check next memory location
          cke           <= YES;         -- and enable generator clock to get next random num
        end if;

      when others =>                    -- memory test is complete
        if errcnt_r > errthreshold then
          err_next <= YES;
        end if;
        progress   <= "11";             -- indicate the current controller state

    end case;

  end process;


  -- update the registers of the memory tester controller       
  update : process(clk, rst)
  begin
    if rst = YES then
      -- go to starting state and clear error flag when reset occurs
      state_r   <= INIT;
      cnt_r     <= TO_UNSIGNED(0, cnt_r'length);
      errcnt_r  <= TO_UNSIGNED(0, errcnt_r'length);
      errbits_r <= (others => '0');
      err_r     <= NO;
    elsif rising_edge(clk) then
      -- update error flag, address register, and state
      state_r   <= state_next;
      cnt_r     <= cnt_next;
      errcnt_r  <= errcnt_next;
      errbits_r <= errbits_next;
      err_r     <= err_next;
      addr_r    <= addr_next;
    end if;
  end process;

end arch;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色综合久久88色综合天天6| 宅男在线国产精品| 欧美疯狂做受xxxx富婆| 精品国产91九色蝌蚪| 亚洲黄色在线视频| 国产99久久久国产精品免费看| 欧美日韩aaa| 亚洲欧美乱综合| 成人av网站在线观看| 337p粉嫩大胆噜噜噜噜噜91av | 韩国女主播成人在线| 欧美色综合影院| 国产精品每日更新在线播放网址| 精品在线亚洲视频| 欧美一级淫片007| 亚洲午夜电影在线观看| 色天使久久综合网天天| 亚洲女同女同女同女同女同69| 国产99久久久久| 欧美国产1区2区| 国产乱码精品一品二品| 精品福利在线导航| 美女视频一区二区三区| 日韩一区二区影院| 日韩有码一区二区三区| 91精品国产欧美一区二区成人 | 91精品久久久久久久91蜜桃 | 久久电影网电视剧免费观看| 3751色影院一区二区三区| 亚洲国产欧美在线| 欧美色图免费看| 天天综合网 天天综合色| 欧美日韩成人综合在线一区二区| 性欧美疯狂xxxxbbbb| 欧美亚洲国产一区在线观看网站| 亚洲精品一二三四区| 欧美视频一区在线观看| 亚洲第一成人在线| 欧美一区二区三区小说| 精品一区二区三区久久| 国产亚洲成aⅴ人片在线观看| 国产真实精品久久二三区| 久久久精品tv| 色婷婷精品久久二区二区蜜臂av| 一区二区成人在线| 3d动漫精品啪啪一区二区竹菊| 久久国产夜色精品鲁鲁99| 久久蜜臀精品av| 91视频在线观看免费| 亚洲v精品v日韩v欧美v专区| 日韩欧美国产三级| 成人免费高清视频在线观看| 亚洲欧美电影一区二区| 制服丝袜国产精品| 国产成人自拍高清视频在线免费播放| 国产精品国产自产拍高清av王其| 欧美最猛性xxxxx直播| 日韩av中文在线观看| 国产欧美日韩三级| 欧美亚洲一区二区三区四区| 六月婷婷色综合| 亚洲精品午夜久久久| 欧美成人乱码一区二区三区| 国产91丝袜在线播放九色| 亚洲精品国产无天堂网2021| 精品日产卡一卡二卡麻豆| 99在线精品免费| 久久精品免费看| 亚洲欧美日韩综合aⅴ视频| 日韩欧美视频在线| 91蜜桃传媒精品久久久一区二区| 青青草原综合久久大伊人精品 | 亚洲国产精品成人综合| 欧美日韩高清在线| av一区二区不卡| 日本麻豆一区二区三区视频| 国产精品福利一区二区| 日韩欧美中文一区二区| 色婷婷激情综合| 国产91在线观看丝袜| 麻豆精品视频在线观看视频| 亚洲一区二三区| 中国av一区二区三区| 精品国产精品网麻豆系列| 欧美日韩国产美| 在线中文字幕一区二区| 成人av资源下载| 国产精品资源网站| 久久69国产一区二区蜜臀| 亚洲国产精品久久久久秋霞影院 | 91麻豆国产香蕉久久精品| 激情图片小说一区| 日韩黄色片在线观看| 一区二区三国产精华液| 亚洲色图清纯唯美| 国产精品视频一二三| 久久久久99精品一区| 精品日韩一区二区三区免费视频| 欧美精品tushy高清| 在线观看91视频| 色一情一乱一乱一91av| av中文字幕一区| 成人免费视频网站在线观看| 国产一区二区剧情av在线| 久久国产乱子精品免费女| 日韩国产高清影视| 日本视频免费一区| 免费观看一级欧美片| 奇米精品一区二区三区四区 | 欧美电影一区二区| 欧美日韩精品专区| 欧美日韩第一区日日骚| 在线播放/欧美激情| 欧美喷水一区二区| 91精品国产欧美一区二区18 | 国产在线不卡视频| 激情欧美一区二区| 国产一区亚洲一区| 成人久久久精品乱码一区二区三区| 国产91精品在线观看| 高清在线成人网| 色综合亚洲欧洲| 在线观看欧美精品| 欧美精品vⅰdeose4hd| 日韩视频免费观看高清完整版在线观看 | 国产精品主播直播| 不卡在线视频中文字幕| 91成人在线免费观看| 337p亚洲精品色噜噜噜| 欧美精品一区视频| 中文字幕一区二区三区四区| 亚洲欧美福利一区二区| 日韩国产成人精品| 国产精品自拍三区| 99国内精品久久| 欧美色视频一区| 国产无一区二区| 亚洲一区在线免费观看| 蜜臀a∨国产成人精品| 国产不卡一区视频| 欧美视频日韩视频| 2017欧美狠狠色| 亚洲天堂中文字幕| 日日夜夜精品视频免费| 国产精品亚洲а∨天堂免在线| 97久久超碰精品国产| 337p亚洲精品色噜噜| 欧美极品美女视频| 视频一区视频二区中文字幕| 国产成人午夜电影网| 欧美麻豆精品久久久久久| 久久久精品影视| 视频在线观看一区二区三区| 成人一级片网址| 日韩一区二区视频| 亚洲欧美偷拍卡通变态| 国产一区二区在线观看免费 | 成人av一区二区三区| 欧美一级免费大片| 中文字幕在线免费不卡| 久久不见久久见免费视频1| 91在线视频在线| 久久久高清一区二区三区| 亚洲成人tv网| 91免费版在线看| 久久精品一区二区| 视频一区中文字幕| 在线视频国产一区| 国产精品人成在线观看免费| 美女脱光内衣内裤视频久久网站| 色婷婷综合久久久中文字幕| 国产偷国产偷精品高清尤物 | 青娱乐精品在线视频| 91小视频在线免费看| 国产欧美一区二区精品仙草咪| 免费观看在线色综合| 在线观看91av| 亚洲国产精品影院| 97se亚洲国产综合在线| 国产精品色眯眯| 国产精品白丝av| 久久综合狠狠综合久久激情| 男女男精品视频| 欧美日韩国产成人在线免费| 亚洲黄网站在线观看| 91久久精品日日躁夜夜躁欧美| 中文字幕亚洲精品在线观看| 国产精品1区2区| 国产亚洲一区二区在线观看| 久久精品国产免费| 精品欧美乱码久久久久久| 日韩激情视频在线观看| 欧美乱妇15p| 日韩专区中文字幕一区二区| 欧美日韩久久久久久| 日本麻豆一区二区三区视频| 欧美一二三四区在线| 麻豆91免费看| 久久综合给合久久狠狠狠97色69| 国产最新精品精品你懂的|