⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blocklib.vhd

📁 nand flash NAND01GR3B (st)的仿真模型 (VHDL) 的
💻 VHD
字号:
--   --           _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/--         _/                   _/  ____________________________________________ --         _/                  _/  /                                           / --         _/_/               _/  /                                NAND01GR3B / --          _/_/_/           _/  /                                           /  --             _/_/         _/  /                                     1Gbit / --              _/_/       _/  /        8 bit, 2112 Byte Page, 1.8 V, NAND / --                _/      _/  /                                           / --                _/     _/  /                     VHDL Behavioral Model / --                _/    _/  /                               Version 3.0 / --             _/_/    _/  /                                           /--          _/_/_/    _/  /     Copyright (c) 2006 STMicroelectronics / --        _/_/_/     _/  /___________________________________________/ --  _/_/_/_/_/      _/    --  ----------------------------------------------------------------------------------------------------------------------------------------LIBRARY IEEE;   Use IEEE.std_logic_1164.all;LIBRARY Work;   Use work.UserData.all;   Use work.Data.all;   use work.StringLib.all;   use work.CUIcommandData.all;Package BlockLib is  SubType Lock_type is bit_vector(2 downto 0);          Constant UNLOCK       : Lock_type   := "110";  Constant LOCK         : Lock_type   := "010";  Constant LOCKDOWN     : Lock_type   := "001";  Constant UNLOCKDOWN   : Lock_type   := "101";  Constant first_block : Natural := 0;  Constant last_block : Natural := nBlock - 1;  SubType  BlockDim_range is integer range last_Block downto first_Block;  Type AddrBoundary_type is record        addrStart: AddrMem_type;       addrEnd: AddrMem_type;  End Record;  Type BlockBoundary_Type is array (BlockDim_range) of AddrBoundary_type;    Type BlockLockTaskName_type is (none, getStatusByAddress, getStatusByBlock, putLock, putUnLock, putLockDown);     type BlockLockTask_type is record        task            : BlockLockTaskName_type;        currentStatus   : Lock_type;  -- there are 4 states : Locked, Unlocked, Locked-down, Unlocked in Locked-down area        startBlock      : BlockDim_range;        endBlock        : BlockDim_range;        address         : AddrMem_type;        isUnLocked      : Boolean;        eventTime       : time;     end record;  Type vectorBlockLockTask_type is array (Integer range <>) of BlockLockTask_type;    Procedure initBlock(Signal BlockBoundary: out BlockBoundary_type);  Function  getBlock(BlockBoundary:BlockBoundary_type;  Address: AddrMem_type) Return  BlockDim_range;  Procedure getBoundaryBlock(b: out AddrBoundary_type; Index: out BlockDim_range; BlockBoundary: BlockBoundary_type; Address: AddrMem_type);  Function getAddrBlockStart(BlockBoundary:BlockBoundary_type; Address: AddrMem_type) Return AddrMem_Type;  Function getAddrBlockEnd(BlockBoundary:BlockBoundary_type; Address: AddrMem_type)   Return AddrMem_Type;  Function getAddrBlockStartbyNumber(BlockBoundary:BlockBoundary_type;i:BlockDim_range) Return AddrMem_Type;  Function getAddrBlockEndbyNumber(BlockBoundary:BlockBoundary_type;i:BlockDim_range)   Return AddrMem_Type;  Function getBlockNumber(BlockBoundary: BlockBoundary_type; Address: AddrMem_type) Return BlockDim_range;  End BlockLib;Package body BlockLib is   Procedure  getBoundaryBlock(b: out AddrBoundary_type; Index: out BlockDim_range;                               BlockBoundary:BlockBoundary_type; Address: AddrMem_type) is      Variable i: BlockDim_range;      begin       i := first_block;      while (i <= nBlock - 1 and (Address > (BlockBoundary(i).AddrEnd))) loop             i := i + 1;      end loop;      Index := i;      b.AddrStart := BlockBoundary(i).AddrStart;      b.AddrEnd   := BlockBoundary(i).AddrEnd;  end getBoundaryBlock;  Function  getBlock(BlockBoundary:BlockBoundary_type;  Address: AddrMem_type) Return  BlockDim_range is      Variable i: BlockDim_range;      begin        i := first_block;       while (i < nBlock and (Address > (BlockBoundary(i).AddrEnd))) loop                i := i + 1;       end loop;       if i = nBlock then printString("+++ General Error +++ Check Source: getBlock in BlockLib"); return 0;                        else Return i;       end if;  end getBlock;  Procedure initBlock(Signal BlockBoundary: out BlockBoundary_type) is     variable i_addrBlock : Integer;    Variable addrBlock : BlockBoundary_Type;    begin        i_addrBlock:=0;       if BlockSize > 0 then            for iBlock in first_block to last_block loop                  addrBlock(iBlock).addrStart := i_addrBlock;                  addrBlock(iBlock).addrEnd := i_addrBlock + BlockSize - 1;                  i_addrBlock := i_addrBlock + BlockSize;            end loop;       end if;          BlockBoundary <= addrBlock;  end initBlock;  Function getAddrBlockStart(BlockBoundary: BlockBoundary_type; Address: AddrMem_type) Return AddrMem_Type is   Variable i : BlockDim_range;  Variable b : AddrBoundary_type;  Begin       getBoundaryBlock(b, i, BlockBoundary, Address);    return b.Addrstart;    End getAddrBlockStart;  Function getAddrBlockEnd( BlockBoundary:BlockBoundary_type; Address: AddrMem_type) Return AddrMem_Type is    Variable i : BlockDim_range;  Variable b : AddrBoundary_type;  Begin       getBoundaryBlock(b, i, BlockBoundary, Address);    return b.AddrEnd;    end getAddrBlockEnd;  Function getAddrBlockStartbyNumber( BlockBoundary:BlockBoundary_type; i:BlockDim_range) return AddrMem_type is   Begin    return BlockBoundary(i).AddrStart;  end getAddrBlockStartbyNumber;  Function getAddrBlockEndbyNumber( BlockBoundary:BlockBoundary_type; i:BlockDim_range) return AddrMem_type is   Begin    return BlockBoundary(i).AddrEnd;  end getAddrBlockEndbyNumber;    Function getBlockNumber(BlockBoundary:BlockBoundary_type; Address: AddrMem_type) Return BlockDim_range is    Variable i : BlockDim_range;  Variable b : AddrBoundary_type;  Begin      getBoundaryBlock(b, i, BlockBoundary, Address);    Return i;   End getBlockNumber;end BlockLib;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -