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

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

?? memorylib.vhd

?? nand flash NAND01GR3B (st)的仿真模型 (VHDL) 的
?? VHD
?? 第 1 頁 / 共 3 頁
字號:
--   --           _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/--         _/                   _/  ____________________________________________ --         _/                  _/  /                                           / --         _/_/               _/  /                                NAND01GR3B / --          _/_/_/           _/  /                                           /  --             _/_/         _/  /                                     1Gbit / --              _/_/       _/  /        8 bit, 2112 Byte Page, 1.8 V, NAND / --                _/      _/  /                                           / --                _/     _/  /                     VHDL Behavioral Model / --                _/    _/  /                               Version 3.0 / --             _/_/    _/  /                                           /--          _/_/_/    _/  /     Copyright (c) 2006 STMicroelectronics / --        _/_/_/     _/  /___________________________________________/ --  _/_/_/_/_/      _/    --  --
----------------------------------------------------------------------------------------
--                                    MEMORY LIST PACKAGE                             --
----------------------------------------------------------------------------------------
--                                                                                    --
--           Implements the memory array by a double list of memory cells.            --
--           Each cell is linked to the next cell and to the previous cell.           --
-- Is possible to acces to the head of the list, to the tail and also to the middle.  --
--                                                                                    -- 
----------------------------------------------------------------------------------------

library IEEE; 
   use IEEE.std_logic_1164.all;
   use IEEE.std_logic_TextIO.all;
   use IEEE.Std_Logic_Arith.all;

library Std;
   use STD.TextIO.all;

library Work;
   use work.data.all;
   use work.StringLib.all;

package MemoryLib is

   type memory_cell;                                  -- the memory cell

   type cell_pointer is access memory_cell;           -- the pointer to the memory cell

   type memory_cell is record

        prev, nexto: cell_pointer;                    -- pointers to the previous cell and to the next cell
        value      : DataMem_type;                   
        endAddr    : AddrMem_Type;                 

   end record;

   type modality is (reading, writing, erasing);      -- reading the memory, writing in the memory or erasing the memory ?
   type balance  is (left, centre, right);            -- middle is balanced ?

   type memory_rec is record

        head, middle, tail: cell_pointer;
        bal_value: balance;

   end record;

   constant FF: DataMem_type:= (Others => '1');


   ------------------------------------------------------------------------
   -------  Public Procedures: they can be used in the model  -------------
   ------------------------------------------------------------------------

   -- Used to init the memory list
   procedure InitMemory(variable memory: inout memory_rec);    

   -- Used to write or to erase the memory
   procedure putMemory(variable memory: inout memory_rec; variable add: in AddrMem_type; variable data: in DataMem_type);

   -- Used to read a memory cell
   procedure getMemory(variable memory: in memory_rec; variable add: in AddrMem_type; variable data: out DataMem_type);

   -- Used to read a vector of memory cells
   procedure getMemoryBuffer(variable memory: in memory_rec; variable firstAdd: in AddrMem_type; variable numData: in natural; variable dataVector: out MemBuffer_type);
   
   -- Used to load a memory file in the memory list
   procedure LoadMemoryFile(FileName: in String; variable memory: inout memory_rec);

   -- Used to save into a file the memory list
   procedure SaveMemoryFile(FileName: in String; variable memory: in memory_rec);

   -- Used to display the memory list
   procedure PrintList(variable memory: in memory_rec);

   -- Used to display the two passed values
   procedure PrintData(variable add:in AddrMem_type; variable data: in DataMem_type);

   --------------------------------------------------------------------------
   ------  Private Procedures: they must be used only in this package  ------
   --------------------------------------------------------------------------
   
   -- Insert a cell to the head of the memory list
   procedure AddCellToHead(variable head: inout cell_pointer; variable add: in AddrMem_type; variable data: in DataMem_type; variable insdel_num: inout integer);

   -- Add a cell to the tail of the memory list
   procedure AddCellToTail(variable tail: inout cell_pointer; variable data: in DataMem_type; variable insdel_num: inout integer);

   -- Erase a cell of the memory list
   procedure EraseCell(variable memory: inout memory_rec; variable pointer: inout cell_pointer; variable insdel_num: inout integer);

   -- Erase the head of the memory list
   procedure EraseHead(variable head_pnt: inout cell_pointer; variable insdel_num: inout integer);

   -- Erase the tail of the memory list
   procedure EraseTail(variable tail: inout cell_pointer; variable insdel_num: inout integer);

   -- Insert a cell in the memory list
   procedure InsertCell(variable pointer: in cell_pointer; variable add: in AddrMem_type; variable data: in DataMem_type; variable insdel_num: inout integer);

   -- Return an error message when you try to write into a not empty cell
   procedure WriteError;

   -- Return an error message if the specified address is out of range
   procedure AddressError; 

   -- Update the position of the middle pointer of the memory list
   procedure UpdateMiddle(variable memory: inout memory_rec; variable add: in AddrMem_type; variable mode: in modality; variable insdel_num: inout integer);

   -- Search for the right position for a read or an update operation
   procedure SearchForRightPosition(variable middle: in cell_pointer; variable pnt: inout cell_pointer; variable next_pnt: out cell_pointer; variable add: in AddrMem_type; variable mode: in modality; variable writeError: out boolean);

end MemoryLib;


----------------------------------------------------------------
--------  Package Body - procedures implementation  ------------
----------------------------------------------------------------

package body MemoryLib is


   ------------------------------------------------
   -------  Initialization of the memory ----------
   ------------------------------------------------
   
   procedure InitMemory(variable memory: inout memory_rec) is
   variable pointer: cell_pointer;
   begin

     pointer:= new memory_cell;
     memory.head:= pointer;
     memory.middle:= pointer;                     -- pointer to the middle of the list
     memory.tail:= pointer;
     memory.bal_value:= centre;                   -- the memory is balanced

     pointer.value:= (others => '1');
     pointer.endAddr:= Last_Addr;

     pointer.prev:= null;
     pointer.nexto:= null;

   end;

   ----------------------------------------------------
   ---------  Print only a value of the list  ---------
   ----------------------------------------------------

   procedure PrintData(variable add: in AddrMem_type; variable data: in DataMem_type) is
   variable msg: line;
   begin

     write(msg, String'(" address =  "));
     write(msg, add);
     
     write(msg, String'("      "));

     write(msg, String'(" data =  "));
     write(msg, data);
     writeline(output, msg);

   end;


   ----------------------------------------------------
   ---------  Print the values of the list  -----------
   ----------------------------------------------------

   procedure PrintList(variable memory: in memory_rec) is
   variable pnt: cell_pointer;
   variable msg: line;
   begin

     pnt:= memory.head;
     while pnt /= null loop

        write(msg, pnt.value);
        write(msg, String'("  "));
        write(msg, pnt.endAddr);
        writeline(output,msg);
        
        pnt:= pnt.nexto;

     end loop;

     pnt:= memory.middle;

     write(msg, String'(" middle.value =  "));
     write(msg, pnt.value);
     write(msg, String'(" middle.endAddr =  "));
     write(msg, pnt.endAddr);
     write(msg, String'("    balance = "));
     
     if memory.bal_value = left then 
        write(msg, String'("left"));
     elsif memory.bal_value = centre then 
        write(msg, String'("centre"));
     else 
        write(msg, String'("right"));
     end if;
     
     writeline(output, msg);

   end;


   -----------------------------------------------------
   ----------  Searching in the memory list  -----------
   -----------------------------------------------------

   procedure SearchForRightPosition(variable middle: in cell_pointer; variable pnt: inout cell_pointer; variable next_pnt: out cell_pointer; variable add: in AddrMem_type; variable mode: in modality; variable writeError: out boolean) is
   variable search_pnt: cell_pointer;
   begin

     search_pnt:= middle;               -- searching starts from middle of the list
     pnt:= search_pnt;
     writeError:= false;

        if add < middle.endAddr then       -- search direction is left
     
           while add < search_pnt.endAddr
           
                 loop 
                        search_pnt:= search_pnt.prev;
                 end loop;
        
              if add > search_pnt.endAddr then 
       
                  if mode = writing then 
                        
                        pnt:= search_pnt.nexto;
                        next_pnt := pnt.nexto;

                  else 
                        pnt:= null;   -- mode = erasing or mode = reading; the cell is already to FF
                        next_pnt := search_pnt.nexto;
                     
                  end if;

                  writeError:= false;

               else        -- add = search_pnt.endAddr        
                  if mode = writing then 
               
                     if search_pnt.value = FF then 
                        search_pnt.endAddr:= search_pnt.endAddr - 1;
                        pnt:= search_pnt.nexto;
                        writeError:= false;

                     --elsif mode = reading then pnt:= search_pnt;         -- the value not is FF   
                        
                     else 
                          pnt:= search_pnt;
                          writeError:= true;             -- address is already written in the memory

                     end if;
                     
                   else                        -- mode = erasing or reading
                      pnt:= search_pnt;
                      writeError:= false;
                   end if;
               
                 next_pnt := pnt.nexto;

              end if;

        else                                 -- search direction is right 
     
          while add > search_pnt.endAddr 

              loop 
                  search_pnt:= search_pnt.nexto;
              end loop;

              if add < search_pnt.endAddr then              -- pnt:= search_pnt;

                 if mode = writing then 

                        pnt:= search_pnt;
                 else 
                        pnt:= null;   -- mode = erasing or mode = reading; the cell is already to FF
                     
                 end if;
                
                 next_pnt:= search_pnt;
                 writeError:= false;
            
              else   -- add = search_pnt.endAddr
             
                 if mode = writing then

                    if search_pnt.value = FF then 
                       search_pnt.endAddr:= search_pnt.endAddr - 1;
                       pnt:= search_pnt.nexto;

                    --elsif mode = reading then pnt:= search_pnt;   

                    else 
                        pnt:= search_pnt;
                        writeError:= true;      -- address is already written in the memory
                   
                    end if;
                   
                 else 
                     pnt:= search_pnt;   -- mode = erasing or reading
                     writeError:= false;

                 end if;
               
               next_pnt := search_pnt.nexto;
             end if;
       
        end if;

     -- In each case the right position is between pnt and pnt.prev

   end;


   ---------------------------------------------------------
   --------  Insert a cell in the memory list  -------------
   ---------------------------------------------------------

   procedure InsertCell(variable pointer: in cell_pointer; variable add: in AddrMem_type; variable data: in DataMem_type; variable insdel_num: inout integer) is
   variable ins_pnt, prev_pnt: cell_pointer;
   variable i: integer;
   variable myadd: AddrMem_type;
   variable mydata: DataMem_type;
   variable mypointer: cell_pointer;
   begin

      -- Insert the new two cells between pnt and pnt.prev

      myadd:= add;
      mydata:= data;
      mypointer:= pointer;
     
      for i in 1 to 2 loop
    
        ins_pnt:= new memory_cell;
        prev_pnt:= mypointer.prev;

        ins_pnt.value:= mydata;
        ins_pnt.endAddr:= myadd;

        ins_pnt.nexto:= mypointer;
        ins_pnt.prev:= prev_pnt;
        prev_pnt.nexto:= ins_pnt;
        mypointer.prev:= ins_pnt;

        if (i = 1) then 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区三区四区在线观看 | 欧美欧美欧美欧美首页| 欧美午夜精品一区二区蜜桃| 2023国产精品| 亚洲va国产va欧美va观看| 国产美女视频一区| 在线91免费看| 亚洲愉拍自拍另类高清精品| 欧美大白屁股肥臀xxxxxx| 蜜桃精品视频在线| 在线中文字幕一区二区| 久久精品欧美日韩| 石原莉奈一区二区三区在线观看| 成人小视频在线观看| 日韩一区二区中文字幕| 亚洲小说欧美激情另类| 91蜜桃视频在线| 国产精品欧美一区二区三区| thepron国产精品| 久久久99久久| 国产精品一区二区在线看| 欧美一区二区三区白人| 亚洲一卡二卡三卡四卡无卡久久 | 久久久久97国产精华液好用吗| 丝袜美腿高跟呻吟高潮一区| 91国在线观看| 亚洲午夜久久久久久久久久久| 欧美日韩国产首页在线观看| 亚洲国产精品传媒在线观看| 精品写真视频在线观看| 欧美高清视频在线高清观看mv色露露十八| 亚洲视频1区2区| 91视频观看视频| 亚洲欧美欧美一区二区三区| 色呦呦国产精品| 亚洲综合在线视频| 欧美午夜片在线看| 日产精品久久久久久久性色| 欧美一区二区三级| 国产自产v一区二区三区c| 久久综合久久综合久久| 国产精品影视在线| 国产精品福利一区二区| 色综合久久中文字幕| 亚洲一区自拍偷拍| 欧美福利一区二区| 久草在线在线精品观看| 欧美日韩日本视频| 一区二区三区 在线观看视频| 91在线观看地址| 亚洲精品日韩专区silk| 欧美日本一区二区三区| 日韩1区2区日韩1区2区| 久久久久国产精品人| 一本大道av伊人久久综合| 亚洲亚洲人成综合网络| 精品久久一区二区| 99精品在线观看视频| 日韩制服丝袜av| 国产午夜精品在线观看| 91美女视频网站| 午夜不卡av在线| 国产亚洲午夜高清国产拍精品| 91一区在线观看| 日本sm残虐另类| 中文字幕在线观看一区| 在线播放/欧美激情| 成人h版在线观看| 调教+趴+乳夹+国产+精品| 久久久国产精品麻豆| 欧美日韩在线不卡| 日韩综合小视频| 国产日韩欧美激情| 欧美另类videos死尸| 国产a视频精品免费观看| 亚洲综合久久久久| 国产蜜臀av在线一区二区三区| 91精品1区2区| 国产成人一区二区精品非洲| 亚洲成人动漫精品| 国产精品毛片无遮挡高清| 欧美精品亚洲二区| 99re这里都是精品| 国产麻豆精品theporn| 婷婷成人综合网| 一区二区三区.www| 中文字幕av一区 二区| 日韩午夜中文字幕| 欧美精品一二三| 91福利在线看| 成人国产亚洲欧美成人综合网 | 国产做a爰片久久毛片| 亚洲精品视频在线看| 欧美一区二区三区在线视频| 91在线云播放| 国产精品996| 麻豆极品一区二区三区| 亚洲成av人片一区二区| 国产精品久久久久久一区二区三区| 欧美草草影院在线视频| 欧美最猛性xxxxx直播| 99视频一区二区| 国产91精品在线观看| 国产成人亚洲综合a∨婷婷| 美女视频黄 久久| 日本成人超碰在线观看| 亚洲成精国产精品女| 亚洲成人av在线电影| 亚洲成a人片在线观看中文| 亚洲一区二区三区四区在线| 亚洲精品老司机| 亚洲精品你懂的| 亚洲国产精品久久久久秋霞影院| 亚洲精品大片www| 欧美日韩一区二区在线观看视频| 日韩欧美一级二级三级久久久| 91黄色小视频| 91蜜桃视频在线| 91久久香蕉国产日韩欧美9色| 一本久久精品一区二区| 色系网站成人免费| 色八戒一区二区三区| 欧美日韩中文一区| 欧美一区二区三区思思人| 欧美一区二区三区四区五区| 精品国产乱码久久久久久蜜臀| 精品乱码亚洲一区二区不卡| 久久一二三国产| 国产欧美1区2区3区| 亚洲欧美在线另类| 亚洲国产日韩a在线播放| 五月天久久比比资源色| 久久国产精品一区二区| 高清在线观看日韩| 色综合久久久网| 欧美一区二区三区四区高清| 久久久久一区二区三区四区| 亚洲欧美日韩精品久久久久| 亚洲电影在线免费观看| 中文字幕在线一区| 亚洲综合精品自拍| 日韩高清不卡一区| 精品一二三四区| 99视频精品全部免费在线| 欧美三区免费完整视频在线观看| 91精品国产乱码久久蜜臀| 国产日韩欧美激情| 亚洲成人午夜电影| 国产乱人伦偷精品视频不卡| 欧美影片第一页| 国产日本欧洲亚洲| 亚洲最大的成人av| 国产999精品久久久久久绿帽| 色欧美片视频在线观看在线视频| 91麻豆精品国产| 国产精品久久久久久久久晋中 | 久久综合久久鬼色中文字| 亚洲欧美国产三级| 911国产精品| 国产精品久久久久四虎| 亚洲国产精品久久人人爱| 精品亚洲免费视频| 色婷婷av一区二区三区gif | 欧美日韩国产不卡| 久久精子c满五个校花| 天天影视涩香欲综合网| 成人黄色软件下载| 精品剧情在线观看| 天天影视网天天综合色在线播放| 成人动漫av在线| 久久先锋影音av鲁色资源| 亚洲国产wwwccc36天堂| 不卡的av网站| 久久精品一区二区| 久久99精品国产麻豆不卡| 欧美精品视频www在线观看| 亚洲图片激情小说| 成人高清免费在线播放| 欧美成人免费网站| 石原莉奈一区二区三区在线观看| 91欧美一区二区| 国产精品进线69影院| 国产精品一区久久久久| 久久综合一区二区| 欧美日韩国产综合一区二区| 久久久精品免费网站| 性做久久久久久免费观看| 91麻豆文化传媒在线观看| 国产三区在线成人av| 久久国产精品99久久久久久老狼 | 免费观看久久久4p| 精品视频999| 亚洲一二三区视频在线观看| 91高清视频在线| 一区二区三区丝袜| 欧美日韩高清一区二区不卡| 亚洲国产一区二区在线播放| 欧美日韩视频在线第一区 | 国产一区二区免费在线| 欧美精品一区二|