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

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

?? memtest.vhd

?? Access IDE harddisk by Xilinx FPGA Support PIO2
?? 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一区二区三区免费野_久草精品视频
日韩一级片在线观看| 日韩理论在线观看| 日韩一区欧美一区| 青娱乐精品视频在线| 91丨porny丨首页| 精品国产一区二区精华| 性久久久久久久久久久久| 激情久久五月天| 欧美猛男超大videosgay| 国产精品麻豆久久久| 精品综合久久久久久8888| 在线观看av一区| 最新热久久免费视频| 国产精品资源在线观看| 日韩欧美亚洲一区二区| 午夜精品123| 欧美亚洲国产一区二区三区va| 国产精品久线在线观看| 国产呦萝稀缺另类资源| 日韩欧美亚洲国产另类| 日本不卡一二三| 欧美三级韩国三级日本一级| 亚洲精品乱码久久久久久久久| 成人精品免费视频| 国产精品人成在线观看免费 | 大美女一区二区三区| 欧美一区永久视频免费观看| 亚洲永久免费视频| 欧美在线|欧美| 亚洲一线二线三线久久久| 在线观看91精品国产入口| 夜夜嗨av一区二区三区网页| aaa欧美色吧激情视频| 亚洲视频在线一区观看| www.日韩大片| 亚洲欧美日本韩国| 一本在线高清不卡dvd| 亚洲伊人色欲综合网| 欧美日韩在线播放三区四区| 亚洲gay无套男同| 日韩一区二区免费高清| 成人午夜av影视| 亚洲欧美综合网| 欧美日韩一区二区在线观看视频| 亚洲国产综合色| 制服丝袜日韩国产| 久久国产婷婷国产香蕉| 久久久精品tv| 在线免费视频一区二区| 首页国产丝袜综合| 久久久综合精品| 不卡视频在线看| 亚洲高清在线精品| 精品少妇一区二区三区在线视频| 国产一区二区免费视频| 亚洲欧洲美洲综合色网| 欧美日韩国产首页| 国产在线看一区| 亚洲美女免费视频| 日韩午夜在线影院| 粉嫩av一区二区三区| 亚洲一区二区在线免费看| 欧美一区二区观看视频| 国产在线不卡视频| 亚洲与欧洲av电影| 国产日韩三级在线| 欧美网站大全在线观看| 国产一区在线观看视频| 亚洲欧美成aⅴ人在线观看 | 日韩电影在线观看网站| 久久久噜噜噜久噜久久综合| 欧洲精品中文字幕| 国产aⅴ综合色| 亚洲成人777| 国产精品污污网站在线观看| 欧美日韩视频在线一区二区| 粉嫩蜜臀av国产精品网站| 亚洲成人免费在线观看| 国产欧美精品日韩区二区麻豆天美| 欧美日韩国产另类一区| 成人av片在线观看| 久久国产乱子精品免费女| 亚洲精品国产一区二区精华液 | 久久国产精品72免费观看| 亚洲欧美日韩电影| 国产亚洲欧洲997久久综合| 欧美无乱码久久久免费午夜一区| 国产91丝袜在线18| 久久99精品国产麻豆婷婷洗澡| 亚洲大片免费看| ...xxx性欧美| 国产精品天天看| 精品人伦一区二区色婷婷| 欧美自拍丝袜亚洲| 色网站国产精品| 99久久婷婷国产综合精品电影 | 国产成人在线电影| 极品瑜伽女神91| 蜜桃视频在线一区| 秋霞av亚洲一区二区三| 日韩在线一区二区三区| 亚洲精品国产一区二区三区四区在线| 国产精品久久久久久久久晋中 | 久久久综合精品| 久久久影视传媒| 久久亚洲春色中文字幕久久久| 欧美一级欧美三级| 91精品国产入口| 欧美精品久久久久久久多人混战| 欧美三级蜜桃2在线观看| 欧美写真视频网站| 欧美老肥妇做.爰bbww视频| 色婷婷精品大在线视频| 91在线观看下载| 91黄视频在线观看| 精品视频一区三区九区| 欧美日韩国产欧美日美国产精品| 欧美日韩久久久一区| 欧美丰满一区二区免费视频| 欧美成人在线直播| 久久这里只有精品视频网| 久久久久久久久久美女| 国产精品另类一区| 一级特黄大欧美久久久| 亚洲成av人片一区二区梦乃| 视频一区二区三区在线| 奇米影视一区二区三区小说| 九九在线精品视频| 不卡高清视频专区| 欧美三级日本三级少妇99| 555www色欧美视频| 久久先锋影音av| 中文字幕一区二区三区在线播放| 亚洲免费看黄网站| 日韩电影免费在线看| 国产一区二区三区电影在线观看| 成人18精品视频| 精品视频一区三区九区| 久久无码av三级| 亚洲人成小说网站色在线| 天天色图综合网| 国产在线不卡一区| 91福利小视频| 欧美va亚洲va| 一区二区三区日韩在线观看| 琪琪久久久久日韩精品| 福利91精品一区二区三区| 在线观看视频91| 精品国精品自拍自在线| 亚洲免费高清视频在线| 精品一区二区三区香蕉蜜桃| eeuss鲁片一区二区三区在线看| 欧美视频精品在线观看| 国产蜜臀97一区二区三区| 日韩国产欧美三级| 91小视频免费看| 久久午夜电影网| 亚洲6080在线| 99精品视频一区| 久久这里只有精品视频网| 亚洲超碰97人人做人人爱| 国产一区二区三区av电影| 欧美精品一二三| 一区二区三区美女| 国产成人精品免费看| 777久久久精品| 亚洲天堂久久久久久久| 韩国毛片一区二区三区| 欧美精品丝袜中出| 亚洲女同一区二区| 国产成人午夜精品影院观看视频| 欧美一区永久视频免费观看| 亚洲自拍另类综合| 91网站在线观看视频| 久久精子c满五个校花| 日本伊人色综合网| 欧美三级电影精品| 亚洲欧洲成人av每日更新| 国产乱理伦片在线观看夜一区 | 激情综合五月婷婷| 欧美剧在线免费观看网站| 亚洲免费色视频| 99国产一区二区三精品乱码| 国产精品美女久久久久久久久久久| 九九久久精品视频| 欧美一区二区播放| 日本最新不卡在线| 欧美精品日韩综合在线| 视频一区视频二区在线观看| 欧美三级日韩三级| 亚洲va韩国va欧美va精品| 欧美日韩成人综合| 亚洲v中文字幕| 欧美丰满少妇xxxxx高潮对白| 午夜精品一区二区三区三上悠亚| 欧美午夜电影在线播放| 五月婷婷久久综合| 欧美日韩成人综合天天影院| 日韩激情视频网站| 欧美电影免费观看高清完整版在线|