(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2025164669
(43)【公開日】2025-10-30
(54)【発明の名称】半導体装置および書き込み方法
(51)【国際特許分類】
   G11C  11/16        20060101AFI20251023BHJP        
【FI】
G11C11/16 240 
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2024199720
(22)【出願日】2024-11-15
(31)【優先権主張番号】63/635,980
(32)【優先日】2024-04-18
(33)【優先権主張国・地域又は機関】US
(71)【出願人】
【識別番号】302062931
【氏名又は名称】ルネサスエレクトロニクス株式会社
(74)【代理人】
【識別番号】110002066
【氏名又は名称】弁理士法人筒井国際特許事務所
(72)【発明者】
【氏名】佐藤  洋平
(72)【発明者】
【氏名】岡山  昌太
(72)【発明者】
【氏名】山口  雄一郎
(72)【発明者】
【氏名】武田  晃一
(72)【発明者】
【氏名】蛇島  浩史
(72)【発明者】
【氏名】河野  史
(57)【要約】      (修正有)
【課題】書き込み時間が長くなるのを抑制する半導体装置及びメモリセルの書き込み方法を提供する。
【解決手段】半導体装置1は、書き込み時に高電圧が供給され、FF回路FFに保持されているデータに従って、メモリセルに書き込み行う入力回路INCKTを備え、FF回路FFの個数に相当する数のデータを有するデータ列IOを、入力回路に供給し、FF回路FFに保持させるメモリコントローラMCTRを備えている。メモリコントローラは、データ列に含まれる反転データの個数を計数するポップカウンタ回路PP_CNTを備え、ポップカウンタ回路による計数に基づいて、反転データを格納しているFF回路FFの個数が所定個数以下となるように、FF回路FFを複数の領域に分け、複数の領域を互いに異なるタイミングで選択し、選択した領域に配置されているFF回路FFに保持されているデータを同時に書き込むように、入力回路を制御する。
【選択図】
図1 
【特許請求の範囲】
【請求項1】
  複数のデータ線と、前記複数のデータ線に接続された複数のメモリセルと、複数の記憶回路を備え、書き込み時に高電圧が供給され、前記記憶回路に保持されているデータに従って、メモリセルに書き込み行う入力回路と、を備えたメモリアレイ回路と、
  前記記憶回路の個数に相当する数のデータを有するデータ列を、前記入力回路に供給し、前記複数の記憶回路に保持させるメモリコントローラと、
  を備え、
  前記データ列には、前記メモリセルに書き込みを行うことにより、前記メモリセルの状態を変化させる反転データと、前記メモリセルの状態を変化させない非反転データと、が混在し、
  前記メモリコントローラは、
    前記データ列に含まれる前記反転データの個数を計数するカウンタ回路を備え、
    前記カウンタ回路による計数に基づいて、前記反転データを格納している記憶回路の個数が所定個数以下となるように、前記データ列を格納している前記複数の記憶回路を複数の領域に分け、前記複数の領域を互いに異なるタイミングで選択し、選択した領域に配置されている記憶回路に保持されているデータを同時に書き込むように、前記入力回路を制御する、
  半導体装置。
【請求項2】
  請求項1に記載の半導体装置において、
  前記メモリアレイ回路は、書き込み時に、前記高電圧を生成する昇圧回路を備え、
  前記メモリセルは、書き込まれたデータに従って、前記状態である抵抗値が定まる抵抗変化型メモリセルである、
  半導体装置。
【請求項3】
  請求項2に記載の半導体装置において、
  前記メモリアレイ回路は、n本のデータ線と前記n本のデータ線に接続された複数のメモリセルとを備える複数のメモリブロックと、前記複数のメモリブロックに対応した複数のブロック入力回路と、前記複数のメモリブロックに対応した複数のブロック選択線と、を備え、
  前記ブロック入力回路は、n個の記憶回路と、前記記憶回路と前記ブロック選択線と前記データ線とに接続された論理回路と、を備え、
  前記メモリコントローラは、
    前記カウンタ回路の計数に基づいて、前記反転データを格納している記憶回路の個数が、前記所定個数以下となる複数の領域を判定する判定回路と、
    前記判定回路によって判定された複数の領域から選択された領域を指定するブロック選択情報と、前記ブロック選択情報の順番を示す順番情報とが格納されるテーブルと、
  を備え、
  前記テーブルに格納された順番情報によって示された順番で、前記テーブルから前記ブロック選択情報が、前記ブロック選択線に出力され、前記ブロック選択情報で指定された前記メモリブロックにおいて前記メモリセルへのデータの書き込みが行われる、
  半導体装置。
【請求項4】
  請求項3に記載の半導体装置において、
  前記昇圧回路による昇圧動作が行われている期間において、前記判定回路による判定が行われる、
  半導体装置。
【請求項5】
  請求項4に記載の半導体装置において、
  前記複数の記憶回路に格納される前記データ列は、前記メモリアレイ回路から読み出されたデータ列と、書き込まれるべきデータ列との間の演算によって求められたデータ列である、
  半導体装置。
【請求項6】
  請求項5に記載の半導体装置において、
  前記カウンタ回路は、前記データ列において、前記ブロック入力回路における前記n個の記憶回路に格納されるべき複数のデータが供給されるポップカウンタ回路を備え、前記ポップカウンタ回路によって、前記反転データの個数が計数される、
  半導体装置。
【請求項7】
  請求項2に記載の半導体装置において、
  前記メモリアレイ回路は、n本のデータ線と前記n本のデータ線に接続された複数のメモリセルとを備える複数のメモリブロックと、前記複数のメモリブロックに対応した複数のブロック入力回路と、を備え、
  前記ブロック入力回路は、n個の記憶回路と、前記n本のデータ線と前記n個の記憶回路とに接続されたn個の論理回路と、を備え、
  前記カウンタ回路は、
    前記ブロック入力回路における前記n個の記憶回路に格納されるべきn個のデータが供給され、前記n個のデータにおける前記反転データの個数を計数するポップカウンタ回路と、
    前記反転データの個数が前記所定個数を超えたことが、前記ポップカウンタ回路によって判定されたとき、前記n個のデータにおける前記反転データの個数を計数し、前記所定個数を超える点を求めるクロックカウンタ回路と、
    前記ポップカウンタ回路の計数値と前記クロックカウンタ回路の計数値とを加算して、前記データ列を格納している前記複数の記憶回路において、複数の前記領域の境界を示す分離点を算出する演算回路と、
  を備え、
  前記メモリコントローラは、前記カウンタ回路で算出された前記分離点を示す分離点情報を順次出力し、
  前記論理回路は、接続された記憶回路が配置されている領域を特定する特定情報と、前記分離点情報とを比較する比較器を備え、前記論理回路は、前記比較器が、前記分離点情報で特定される領域に、前記特定情報で示される領域が存在することを示しているとき、接続されている前記記憶回路に格納されているデータを、前記データ線に供給する、
  半導体装置。
【請求項8】
  請求項2に記載の半導体装置において、
  前記メモリコントローラは、第1タイミングで、第1領域を選択し、前記第1タイミングに続く第2タイミングで、前記第1領域を含む第2領域を選択し、
  前記メモリコントローラは、前記第1タイミングにおいて、前記第1領域に含まれている複数の記憶回路に格納されている反転データを、複数のメモリセルに書き込むように指示した後、前記第1領域において、前記反転データを格納している記憶回路に、非反転データを書き込むように指示する、
  半導体装置。
【請求項9】
  請求項8に記載の半導体装置において、
  前記メモリアレイ回路は、n本のデータ線と前記n本のデータ線に接続された複数のメモリセルとを備える複数のメモリブロックと、前記複数のメモリブロックに対応した複数のブロック入力回路と、を備え、
  前記ブロック入力回路は、前記n本のデータ線に対応するn個の記憶回路と、前記n本のデータ線と前記n個の記憶回路とに接続されたn個の論理回路と、を備え、
  前記カウンタ回路は、
    前記第1タイミングにおいて、前記反転データの個数が前記所定個数未満となる領域を示す第1ブロック選択信号を生成する第1カウンタ回路と、
    前記第1タイミングにおいて、前記第1ブロック選択信号によって示される前記領域を超え、前記反転データの個数が前記所定個数に到達するまでの領域を示す第1データ信号を生成する第2カウンタ回路と、
  を備える、
  半導体装置。
【請求項10】
  請求項9に記載の半導体装置において、
  前記第1カウンタ回路は、前記ブロック入力回路における前記n個の記憶回路に格納されるべきn個のデータが供給され、前記n個のデータにおける前記反転データの個数を計数するポップカウンタ回路を含み、
  前記第2カウンタ回路は、前記第1領域を超える領域における前記反転データの個数をカウントするクロックカウンタ回路を含む、
  半導体装置。
【請求項11】
  複数のデータ線と、前記複数のデータ線に接続された複数のメモリセルと、複数の記憶回路を備え、書き込み時に高電圧が供給され、前記記憶回路に保持されているデータに従って、メモリセルに書き込み行う入力回路と、を備えたメモリアレイ回路と、
  前記記憶回路の個数に相当する数のデータを有するデータ列を、前記入力回路に供給し、前記複数の記憶回路に保持させるメモリコントローラと、
  を備え、
  前記データ列には、前記メモリセルに書き込みを行うことにより、前記メモリセルの状態を変化させる反転データと、前記メモリセルの状態を変化させない非反転データとが混在し、
  前記メモリコントローラは、
  前記高電圧を生成している期間において、前記データ列に含まれる前記反転データの個数を計数し、
  前記計数により、前記反転データを格納している記憶回路の個数が所定個数以下となるように、前記複数の記憶回路を複数の領域に分け、前記複数の領域を互いに異なるタイミングで選択し、選択した領域に配置されている前記記憶回路に保持されているデータを前記メモリセルに書き込む、
  書き込み方法。
【発明の詳細な説明】
【技術分野】
【0001】
  本発明は、半導体装置および書き込み方法に関し、例えば複数の抵抗変化型メモリセルを備える半導体装置および抵抗変化型メモリセルへのデータの書き込み方法に関する。
【背景技術】
【0002】
  抵抗変化型メモリセル(以下、単にメモリセルとも称する)は、格納(記憶)している情報(データ)に応じて抵抗値が変化する記憶素子を備えたメモリセルを示している。このようなメモリセルによって構成された電気的に書き換え可能な不揮発性記憶装置(以下、単に不揮発性記憶装置とも称する)として、例えば磁気抵抗メモリ(Magnetoresistive  Random  Access  Memory、以下MRAMとも称する)がある。
【0003】
  MRAMは、メモリアレイ回路と、例えばプロセッサからの指示に従って、メモリアレイ回路に対してデータの読み出しおよび書き込み等を行うメモリコントローラとを備えている。ここで、メモリアレイ回路は、例えば、それぞれ複数のメモリセルが行列状に配置された複数のメモリブロックと、複数のメモリブロックに対応した入出力回路と、高電圧を生成する昇圧回路とを備えている。例えば、データの書き込みの場合、メモリコントローラから入出力回路にデータが供給される。入出力回路は、昇圧回路により生成された高電圧を、供給されたデータに従って、複数のメモリセルに供給し、複数のメモリセルに対してデータの書き込みを行う。
【0004】
  MRAMは、例えば非特許文献1および2に記載されている。非特許文献1および2には、MRAMにおいて、データを書き込む前に、読み出しを行い、書き換える必要があるか否かを判定することが示されている。また、非特許文献1では、書き換える必要がないと判定された場合に、書き込み信号をマスクすることが示されており、非特許文献2では、書き換えを行う場合、メモリセルに印加する電圧を徐々に上昇させることが示されている。
【先行技術文献】
【非特許文献】
【0005】
               【非特許文献1】“7.2  4Mb  STT-MRAM-Based  Cache  with  Memory-Access-Aware  Power  Optimization  and  Write-Verify-Write/Read-Modify-Wite  Scheme”,  ISSCC  2016/SESSION  7/NONVOLATILE  MEMORY  SOLUTIONS/7.2,  2016  IEEE  International  Solid-State  Circuit  Conference.
               【非特許文献2】“13.3  A  7Mb  STT-MRAM  in  22FFL  FinFET  Technology  with  4ns  Read  sensing  Time  at  0.9V  Using  Write-Verify-Write  Scheme  and  Offset-Cancellation  Sensing  Technique”,  ISSCC  2019/SESSION  13/NON-VOLATILE  MEMORIES/13.3,  2019  IEEE  International  Solid-State  Circuit  Conference.
             
【発明の概要】
【発明が解決しようとする課題】
【0006】
  書き込みにより、メモリセルの状態(抵抗値)を変化させる場合、すなわち、書き換えの場合、昇圧回路によって生成された高電圧をメモリセルに供給することが必要とされる。占有面積の増加を抑制するために昇圧回路は、電流供給能力に制限がある。電流供給能力の制限により、同時に書き換えることが可能なメモリセルの個数には制限が生じることになる。そのため、多量のメモリセルを書き換える場合には、書き込み動作を、複数サイクルに渡って実行することが必要となり、書き込み時間が長くなるという課題がある。
【0007】
  非特許文献1および2には、書き換えを行う必要があるか否かを判定することが示されているが、昇圧回路の電流供給能力については示されていない。
【課題を解決するための手段】
【0008】
  本願において開示される実施の形態のうち代表的なものの概要を簡単に説明すれば下記の通りである。
【0009】
  すなわち、一実施の形態に係る半導体装置は、複数のデータ線と、複数のデータ線に接続された複数のメモリセルと、複数の記憶回路を備え、書き込み時に高電圧が供給され、記憶回路に保持されているデータに従って、メモリセルに書き込み行う入力回路とを備えたメモリアレイ回路と、記憶回路の個数に相当する数のデータを有するデータ列を、入力回路に供給し、複数の記憶回路に保持させるメモリコントローラとを備えている。ここで、データ列には、メモリセルに書き込みを行うことにより、メモリセルの状態を変化させる反転データと、メモリセルの状態を変化させない非反転データとが混在している。また、メモリコントローラは、データ列に含まれる反転データの個数を計数するカウンタ回路を備え、カウンタ回路による計数に基づいて、反転データを格納している記憶回路の個数が所定個数以下となるように、データ列を格納している複数の記憶回路を複数の領域に分け、複数の領域を互いに異なるタイミングで選択し、選択した領域に配置されている記憶回路に保持されているデータを同時に書き込むように、前記入力回路を制御する。
【0010】
  その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【発明の効果】
【0011】
  一実施の形態によれば、書き込み時間が長くなるのを抑制することが可能な半導体装置を提供することができる。
【図面の簡単な説明】
【0012】
            【
図1】
図1は、実施の形態1に係る半導体装置の構成を示すブロック図である。
 
            【
図2】
図2(A)および(B)は、実施の形態1に係るメモリコントローラによるPライト用データ列およびAPライト用データ列の生成を説明するための図である。
 
            【
図3】
図3は、実施の形態1に係るポップカウンタ回路を説明するための図である。
 
            【
図4】
図4は、実施の形態1に係る判定回路を説明するための図である。
 
            【
図5】
図5は、実施の形態1に係る判定回路を説明するための図である。
 
            【
図6】
図6は、実施の形態1に係る判定回路を説明するための図である。
 
            【
図7】
図7は、実施の形態1に係るビット演算回路からルックアップテーブルへ出力されるデータを説明するための図である。
 
            【
図8】
図8は、実施の形態1に係るビット演算回路からルックアップテーブルへ出力されるデータを説明するための図である。
 
            【
図9】
図9(A)および(B)は、実施の形態1に係る書き込み動作を説明するための図である。
 
            【
図10】
図10は、実施の形態1に係る半導体装置の動作を示すフロー図である。
 
            【
図11】
図11は、実施の形態1に係るメモリアレイ回路の構成例を示す回路図である。
 
            【
図12】
図12は、実施の形態1に係るメモリアレイ回路の動作を説明するためのタイミング図である。
 
            【
図13】
図13は、実施の形態1の変形例に係る半導体装置を説明するための図である。
 
            【
図14】
図14は、実施の形態1の変形例に係る半導体装置を説明するための図である。
 
            【
図15】
図15(A)および(B)は、実施の形態2に係る半導体装置を説明するための図である。
 
            【
図16】
図16は、実施の形態2の変形例に係る半導体装置を説明するための図である。
 
            【
図17】
図17は、実施の形態2の変形例に係る半導体装置の構成を示すブロック図である。
 
            【
図18】
図18は、実施の形態2の変形例に係るルックアップテーブルを説明するための図である。
 
            【
図19】
図19は、実施の形態3に係る半導体装置の構成を示すブロック図である。
 
            【
図20】
図20は、実施の形態3に係る半導体装置を説明するための図である。
 
            【
図21】
図21(A)および(B)は、実施の形態3に係る書き込み動作を説明するための図である。
 
            【
図22】
図22は、実施の形態3に係る書き込み動作を説明するためのタイミング図である。
 
            【
図23】
図23(A)および(B)は、MRAMの構成例を示す図である。
 
            【
図24】
図24(A)~(C)は、本発明者らが検討したMRAMの構成を示す図である。
 
          
【発明を実施するための形態】
【0013】
  以下、本発明の各実施の形態について、図面を参照しつつ説明する。なお、開示はあくまでも一例にすぎず、当業者において、発明の主旨を保っての適宜変更について容易に想到し得るものについては、当然に本発明の範囲に含有されるものである。
【0014】
  また、本明細書と各図において、既出の図に関して前述したものと同様の要素には、同一の符号を付して、詳細な説明を適宜省略することがある。
【0015】
  <比較例>
  書き込み時間が長くなるのを抑制するために、本発明者らは、非特許文献1および2等を基にして、MRAMの構成を検討した。実施の形態に係る半導体装置の理解を容易にするために、先ず、MRAMの構成例と、検討したMRAMの構成とを説明する。
図23は、MRAMの構成例を示す図である。ここで、
図23(A)は、MRAMの構成例を示すブロック図であり、
図23(B)は、
図23(A)に示したMRAMの書き込み時のタイミングを示すタイミング図である。また、
図24は、本発明者らが検討したMRAM(以下、比較例とも称する)の構成を示す図である。ここで、
図24(A)は、比較例の構成を示すブロック図であり、
図24(B)は、比較例の書き込みタイミングを示すタイミング図である。また、
図24(C)は、実施の形態の概要を説明するためのタイミング図である。
 
【0016】
  <<MRAMの一構成例>>
  図23(A)において、1は半導体装置を示している。半導体装置1は、プロセッサCPUと、メモリコントローラMCTRと、メモリアレイ回路MARYとを備えている。
図23に示したメモリアレイ回路MARYは、8個のメモリブロックMB0~MB7と、メモリブロックMB0~MB7に対応した入出力回路IOCKTとを備えている。
 
【0017】
  メモリブロックMB0~MB7は、互いに同様な構成であるので、ここではメモリブロックMB0を例に説明する。メモリブロックMB0は、所定のビット幅(
図23(A)では、32ビット)で、同時に書き込みおよび読み出しが可能となっている。書き込み動作の場合、32ビットのデータが、入力データバスDI_BS[31:0]を介して、メモリコントローラMCTRから、入出力回路IOCKTに供給される。また、入出力回路IOCKTには、メモリコントローラMCTRからブロック選択信号BL_SL[7:0]が供給されている。ブロック選択信号BL_SL[7:0]は、メモリブロックMB0~MB7に一対一に対応している。例えば、ブロック選択信号BL_SL[0]は、メモリブロックMB0に対応し、ブロック選択信号BL_SL[7]は、メモリブロックMB7に対応している。
 
【0018】
  書き込み動作の時に、メモリコントロータMCTRが、例えばブロック選択信号BL_SL[0]を選択レベル(ハイレベル)にすると、このブロック選択信号BL_SL[0]に対応するメモリブロックMB0が選択され、入出力回路IOCKTにおいて、メモリブロックMB0に対応する入出力回路部(以下、ブロック入出力回路とも称する)を介して、入力データバスDI_BS[31:0]における32ビットのデータが、メモリブロックMB0に供給され、メモリブロックMB0内の32個のメモリセルに、実質的に同時に書き込まれる。
【0019】
  メモリブロックMB1~MB7も、メモリブロックMB0と同様であるため、メモリコントローラMCTRは、メモリアレイ回路MARYに、32ビット×8=256ビットのデータ(データ列)IO[255:0]を供給し、書き込むことが可能である。この書き込むべきデータ列IO[255:0]は、プログラムに従って動作するプロセッサCPUから、メモリコントローラMCTRに対して書き込みデータとして供給される。また、プロセッサCPUは、データ列IO[255:0]を書き込むべきアドレスと、書き込み命令をメモリコントローラMCTRに供給する。メモリコントローラMCTRは、書き込み命令に応答して、ライト命令をメモリアレイ回路MARYに供給するとともに、図示しない書き込みアドレスをメモリアレイ回路MARYに供給する。これにより、メモリアレイ回路MARYにおいては、書き込みアドレスで指定されたメモリセル(32個×8)にデータ列IO[255:0]が書き込まれることになる。
【0020】
  なお、本明細書では、複数のビットm+1を備えるデータ(データ列)を、[m:0]で表している。例えば、データ列IO[255:0]は、例えば最下位ビットのデータIO[0]から最上位ビットのデータIO[255]までの256ビットで構成されていることを表している。また、データ列IOにおける所定の位置iのデータは、IO[i]で表し、所定の範囲(例えばビット0~i)のデータ列は、IO[i:0]で表す。
【0021】
  メモリコントローラMCTRは、
図23(B)に示すように、ブロック選択信号BL_SL[0]~BL_SL[7]の順に、選択レベルに変化させることで、メモリブロックMB0~MB7にデータ列IO[255:0]を書き込むことが可能である。
 
【0022】
  図23(A)には、示されていないが、メモリアレイ回路MARYは、昇圧回路を備えており、昇圧回路は、ブロック選択信号BL_SL[0]~BL_SL[7]の選択レベルへの変化に応答して、高電圧を生成するように昇圧動作を行う。
 
【0023】
  [発明が解決しようとする課題]の欄で示したように、メモリセルの抵抗値を変化させる場合、すなわちメモリセルを書き換える場合、メモリセルに高電圧を供給することが必要とされる。占有面積の増加を抑制するために昇圧回路は、電流供給能力に制限があり、同時に書き換えることが可能なメモリセルの個数は、所定個数に制限されることになる。
図23に示した例では、所定個数は32個となっている。そのため、256ビットのデータ列IO[255:0]をメモリアレイ回路MARYに書き込むために、
図23(B)に示されているように8サイクルに渡って、書き込み動作を実行しており、書き込み時間が長くなっている。
 
【0024】
  <<比較例の構成>>
  本発明者らは、非特許文献1および2等に基づいて、
図23のメモリアレイ回路MARYおよびメモリコントローラMCTRを変更し、書き込み時間が長くなるのを抑制することが可能なMRAMを、比較例として考えた。
 
【0025】
  図24(A)は、本発明者らが、本発明に先立って検討した比較例の構成を示している。
図24(A)には、
図23(A)に示したメモリアレイ回路MARYと入出力回路IOCKTのみが示されている。
図24(A)において、D1_1、D1_2およびD2_1、D2_2、D2_3は、データを書き換える領域を示している。すなわち、書き込むべきデータ列IO[255:0]において、データを書き換える領域が、領域D1_1、D1_2およびD2_1、D2_2、D2_3であり、残りの領域は、書き換えを行わない領域である。
 
【0026】
  非特許文献1および2には、データを書き込む前に、読み出しを行い、書き換えを行う必要があるか否かを判定することが示されている。この技術に基づいて、
図24の比較例では、データ列IO[255:0]を書き込む前に、メモリブロックMB0~MB7からデータを読み出し、書き換えを行う必要があるメモリブロックを判定する。
図24(A)に示した例では、メモリブロックMB1、MB3、MB4およびMB6が、書き換える領域D1_1、D1_2およびD2_1、D2_2、D2_3を含んでいるため、書き換えを行う必要があるメモリブロックとして判定される。比較例においては、書き換えを行う必要があると判定されたメモリブロックMB1、MB3、MB4およびMB6を選択するブロック選択信号BL_SL[1]、BL_SL[3]、BL_SL[4]およびBL_SL[6]のみが、
図24(B)に示されたように、順次選択レベルにされる。これにより、書き込み動作は、8サイクルではなく、4サイクルのみ実行すれば、データ列IO[255:0]を書き込むことが可能となるため、書き込み時間を抑制することが可能である。
 
【0027】
  しかしながら、比較例では、メモリブロックが書き込み領域の単位となっており、例えば、2個のメモリブロックMB1、MB3内の領域D1_1、D1_2に含まれる書き換えるべきメモリセルの合計数が、所定個数(32個)以下であっても、2個のメモリブロックMB1、MB3に対応する2サイクルの書き込み動作が必要となり、まだ書き込み時間が長いという課題が存在する。
【0028】
  <<実施の形態の概要>>
  後で説明する実施の形態においては、メモリブロックは書き込み領域の単位とはなっておらず、書き込み領域は、実質的に同時に書き換えるメモリセルの個数が所定個数(32個)以下となる領域として特定される。例えば、領域D1_1、D1_2に含まれる書き換えるべきメモリセルの合計数が、所定個数以下であり、領域D2_1、D2_2、D2_3に含まれる書き換えるべきメモリセルの合計数も、所定個数以下である場合、
図24(C)に示されているように、ブロック選択信号BL_SL[1]、BL_SL[3]が、同時に選択レベルとなり、ブロック選択信号BL_SL[4]、BL_SL[6]が、同時に選択レベルとなる。これにより、
図24(C)に示されているように、書き込み動作を2サイクルのみ実行することで、データ列IO[255:0]を書き込むことが可能となるため、書き込み時間をさらに抑制することが可能である。
 
【0029】
  図24(A)において、書き換える領域を示す符号D1_1、D1_2、D2_1、D2_2およびD2_3における符号Dの直後に付された数字1、2は、
図24(C)において書き込みが行われるサイクルを表している。すなわち、書き換える領域D1_1およびD1_2は、1サイクル目に書き込みが行われる領域であり、書き換える領域D2_1~D2_3は、2サイクル目に書き込みが行われる領域である。
 
【0030】
  (実施の形態1)
  <半導体装置の構成>
  
図1は、実施の形態1に係る半導体装置の構成を示すブロック図である。
図1において、1は半導体装置を示している。半導体装置1は、同一の半導体基板上に形成された複数の回路ブロックを備えているが、図面が複雑になるのを避けるために、
図1では、説明に必要な回路ブロックのみが描かれている。
 
【0031】
  図1において、MARYはメモリアレイ回路を示し、MCTRはメモリコントローラを示し、CPUはプロセッサを示している。
 
【0032】
  プロセッサCPUは、図示しない記憶装置からプログラムを読み出し、読み出したプログラムに従って所定の処理を実行する。この所定の処理において、プロセッサCPUは、メモリコントローラMCTRに対して、書き込み命令および読み出し命令を発行する。また、書き込み命令を発行する際には、プロセッサCPUは、MRAMに書き込むべきデータ列(書き込みデータ列)と、MRAMにおいて書き込むアドレスを示すアドレス(書き込みアドレス)とを、メモリコントローラMCTRに対して発行する。
【0033】
  図1では、メモリアレイ回路MARYとメモリコントローラMCTRによってMRAMが構成されている例が示されている。しかしながら、MRAMは、例えばメモリアレイ回路MARYのみによって構成され、メモリコントローラMCTRは、プロセッサCPUの管理下で、MRAMを制御する回路ブロックであってもよい。
 
【0034】
  <<メモリアレイ回路>>
  <<<メモリブロック>>>
  メモリアレイ回路MARYは、実施の形態1では、8個のメモリブロックMB0~MB7と、入出力回路IOCKTとを備えている。メモリブロックMB0~MB7は、互いに同様な構成を有しているため、ここではメモリブロックMB0を代表として説明する。
【0035】
  メモリブロックMB0は、図示していないが、行列状(アレイ状)に配置された複数のメモリセルと、各行に配置されたワード線と、各列に配置された1対のビット線およびソース線とを備えている。後で
図11等で一例を示すが、同じ行に配置された複数のメモリセルは、その行に配置されたワード線に接続され、さらに同じ列に配置された複数のメモリセルは、その列に配置された1対のビット線およびソース線に接続されている。書き込み動作において、ワード線に選択レベルが供給されると、そのワード線に接続された複数のメモリセルが選択され、選択されたメモリセルには、1対のビット線およびソース線における電圧に従って、データが書き込まれる。読み出し動作では、ワード線に選択レベルが供給されると、そのワード線に接続された複数のメモリセルが選択され、選択されたメモリセルに格納されているデータに従って、ビット線の電圧が変化する。本明細書では、ビット線とソース線とを合わせて、データ線とも称する。
 
【0036】
  メモリブロックMB0において、1行に配置されているメモリセルの個数は、32個であり、ワード線に選択レベルを供給することで、32個のメモリセルを同時に選択することができる。これにより、読み出し動作時および書き込み動作時、メモリブロックMB0は、32ビット(32ビット幅)のデータ列UIO[31:0]を同時に読み出しおよび書き込むことが可能となっている。
【0037】
  メモリブロックMB1~MB7の構成も、メモリブロックMB0と同様である。但し、メモリブロックMB0~MB7間で、ワード線は共通である。なお、
図1において、UIO[255:224]は、メモリブロックMB7で同時に読み出しおよび書き込みが可能な32ビットのデータ列を例示している。他のメモリブロックMB1~MB6についても、それぞれが32ビットのテータ列UIO[m:n]で、同時に読み出しおよび書き込みが可能である。但し、読み出しおよび書き込みが可能な32ビットのデータ列UIOの開始ビットの位置mと、終了ビットの位置nは、メモリブロック毎に異なっており、メモリブロックMB0~MB7の全体では、256ビットのデータ列IO[255:0]となる。
 
【0038】
  <<<入出力回路>>>
  入出力回路IOCKTは、入力回路INCKTと出力回路OPCKTとを備えている。入力回路INCKTは、書き込み動作において用いられる回路であり、出力回路OPCKTは、読み出し動作と書き込み動作において用いられる回路である。
【0039】
  入力回路INCKTは、メモリブロックMB0~MB7に一対一に対応した8個のブロック入力回路BINCKTを備え、出力回路OPCKTも、メモリブロックMB0~MB7に一対一に対応した8個のブロック出力回路BOPCKTを備えている。本明細書では、メモリブロックに一対一に対応したブロック入力回路BINCKTとブロック出力回路BOPCKTとを合わせて、メモリブロックに対応したブロック入出力回路と称する。
【0040】
  メモリブロックMB0に対応したブロック出力回路BOPCKTは、メモリブロックMB0のビット幅(32ビット)に相当する個数(32個)の単位出力回路を備えている。読み出し動作のとき、32個の単位出力回路は、対応するメモリブロックMB0内の32本のビット線における電圧を、32ビットの読み出しデータとして、メモリコントローラMCTRに出力する。他のメモリブロックMB1~MB7に対応したブロック出力回路BOPCKTも同様であり、読み出し動作時には、対応するメモリブロックにおけるビット線の電圧を、読み出しデータとして、メモリコントローラMCTRへ出力する。読み出し動作時に、メモリブロックMB0~MB7に対応した8個のブロック出力回路BOPCKTからメモリコントローラMCTRへ出力される256ビット(32ビット×8=256ビット)のデータ列が、
図1では、DO_Data[255:0]として示されている。
 
【0041】
  メモリブロックMB0~MB7に対応した8個のブロック入力回路BINCKTは、入力データバスDI_BS[31:0]と、入力データ選択線DI_SL[7:0]と、ブロック選択信号(ブロック選択線)BL_SL[7:0]によって、メモリコントローラMCTRに接続されている。メモリコントローラMCTRは、メモリブロックMB0~MB7に書き込むべき256ビットのデータ列IO[255:0]を、32ビットのデータ列に分割して、時分割で、32本の入力データバスDI_BS[31:0]に供給する。また、メモリコントローラMCTRは、メモリブロックMB0~MB7のうちの、いずれのメモリブロックに、分割した32ビットのデータを供給するのかを指定する入力データ選択信号を入力データ選択線DI_SL[7:0]に供給する。
【0042】
  例えば、メモリブロックMB0に対応したブロック入力回路BINCKTに32ビットのデータ列を供給する場合、メモリコントローラMCTRは、メモリブロックMB0を指定する入力データ選択線DI_SL[0]に、例えばハイレベル(選択レベル)の入力データ選択信号を供給し、残りのメモリブロックMB1~MB7を指定する入力データ選択線DI_SL[1]~DI_SL[7]に対して、ロウレベル(非選択レベル)の入力データ選択信号を供給する。入力データバスDI_BS[31:0]は、メモリブロックMB0~MB7に対応した8個のブロック入力回路BINCKTに共通となっているが、メモリブロックMB0に対応するブロック入力回路BINCKTにのみ、ハイレベルの入力データ選択信号が供給されることにより、入力データバスDI_BS[31:0]における32ビットのデータ列は、メモリブロックMB0にのみ取込まれることになる。
【0043】
  他のメモリブロックMB1~MB7に対応するブロック入力回路も、メモリブロックMB0に対応するブロック入力回路と同様である。メモリコントローラMCTRは、メモリブロックMB0に対応する32ビットのデータ列を、入力データバスDI_BS[31:0]に供給し、入力データ選択線DI_SL[0]にハイレベルの入力データ線選択信号を供給した後、メモリブロックMB1に対応する32ビットのデータ列を、入力データバスDI_BS[31:0]に供給し、入力データ選択線DI_SL[1]にハイレベルの入力データ線選択信号を供給する。このとき、入力データ選択線DI_SL[1]以外の入力データ選択線DI_SL[0]およびDI_SL[7:2]には、ロウレベルの入力データ線選択信号を供給する。これにより、メモリブロックMB1に対応する32ビットのデータ列が、メモリブロックMB1に対応するブロック入力回路にのみ取り込まれることになる。
【0044】
  以降、メモリコントローラMCTRは、メモリブロックMB2~MB7に対応する32ビットのデータ列を、順次、入力データバスDI_BS[31:0]に供給し、入力データ選択線DI_SL[2]~DI_SL[7]の順に、ハイレベルの入力データ線選択信号を供給する。これにより、256ビットのデータ列IO[255:0]が、メモリブロックMB0~MB7に対応する8個のブロック入力回路BINCKTに取り込まれることになる。
【0045】
  <<<<単位入力回路>>>>
  ブロック入力回路BINCKTは、対応するメモリブロック内の1対のビット線およびソース線に対応する単位入力回路UINを備えている。実施の形態1に係るメモリブロックは、32ビット幅であるため、ブロック入力回路BINCKTは、32個の単位入力回路を備えていることになる。
図1には、メモリブロックMB0に対応するブロック入力回路BINCKTが備える32個の単位入力回路のうち、3個の単位入力回路UIN[0]~UIN[2]が例示されている。32個の単位入力回路は、互いに同様の構成であるため、単位入力回路UIN[0]を例にして説明する。
 
【0046】
  単位入力回路UIN[0]は、フリップフロップ回路(以下、FF回路とも称する)FFと、アンド回路(論理回路)ALGを備えている。FF回路FFは、トリガ端子TG_Tと入力端子IN_Tと出力端子OU_Tとを備えている。トリガ端子TG_Tは、入力データ選択線DI_SL[7:0]のうち、メモリブロックMBに対応する入力データ選択線DI_SL[0]に接続され、入力端子IN_Tは、入力データバスDI_BS[31:0]のうちの1つの入力データバスDI_BS[0]に接続されている。アンド回路ALGは、2入力のアンド回路であり、一方の入力端子は、FF回路FFの出力端子OU_Tに接続され、他方の入力端子は、ブロック選択信号BL_SL[7:0]のうち、メモリブロックMB0に対応するブロック選択信号BL_SL[0]に接続されている。
【0047】
  単位入力回路UIN[0]におけるFF回路FFは、トリガ端子TG_Tに接続されている入力データ選択線DI_SL[0]に、選択レベル(ハイレベル)の入力データ選択信号が供給されると、入力端子IN_Tに接続されている入力データバスDI_BS[0]におけるデータ(論理値1または0)を取込んで、保持する。アンド回路ALGは、ブロック選択信号BL_SL[0]に、メモリブロックMB0の選択を指定する選択レベル(ハイレベル)が供給されると、FF回路FFに保持されているデータ(1または0)を書き込むべき入力データ(データ列IO[255:0]のうちの1ビット:以下、書き込み有効信号とも称する)IO[0]として、対応するメモリブロックMB0へ供給する。書き込み動作の場合、メモリブロックMB0では、単位入力回路UIN[0]に対応するビット線およびソース線の電圧が、FF回路FFに保持されているデータに応じた値となり、書き換え等が行われることになる。
【0048】
  メモリブロックMB0に対応するブロック入力回路BINCKTに配置されている他の単位入力回路UIN[1]~UIN[31]も、単位入力回路UIN[0]と同様であるが、単位入力回路の入力端子IN_Tが接続されている入力データバスDI_BS[31:0]が異なっている。例えば、単位入力回路UIN[1]においては、FF回路FFの入力端子IN_Tは、入力データバスDI_BS[1]に接続され、単位入力回路UIN[2]においては、FF回路FFの入力端子IN_Tは、入力データバスDI_BS[2]に接続され、図示していない単位入力回路UIN[31]においては、FF回路FFの入力端子IN_Tは、入力データバスDI_BS[31]に接続されている。
【0049】
  これにより、入力データ選択線DI_SL[0]に、選択レベルの入力データ選択信号が供給されると、メモリブロックMB0に対応するブロック入力回路BINCKT内の32個の単位入力回路UIN[0]~UIN[31]には、メモリコントローラMCTRからの供給される256ビットのデータ列IO[255:0]のうちの32ビットのデータ列IO[31:0]が保持されることになる。
【0050】
  メモリブロックMB1~MB7に対応するブロック入力回路BINCKTにおいても、メモリブロックMB0に対応するブロック入力回路BINCKTと同様に、32個の単位入力回路UIN[0]~UIN[31]を備えている。メモリブロックMB0に対する単位入力回路と、他のメモリブロックMB1~MB7に対する単位入力回路との相違点は、FF回路FFのトリガ端子TG_Tに接続される入力データ選択線と、アンド回路ALGの他方の入力端子に接続されているメモリブロック選択線が異なることである。すなわち、メモリブロックMB1~MB7に対するFF回路FFのトリガ端子TG_Tには、入力データ選択線DI_SL[1]~DI_SL[7]が接続され、アンド回路ALGの他方の入力端子には、ブロック選択信号BL_SL[1]~BL_SL[7]が接続されている。
【0051】
  これにより、メモリコントローラMCTRが、例えば入力データ選択線をDI_SL[0]からDI_SL[7]の順に、選択レベルにすることで、時分割で入力データバスDI_BS[31:0]に供給されている256ビットのデータ列IO[255:0]が、メモリブロックMB0~MB7に対応するブロック入力回路BINCKT内の256個(32個×8)の単位入力回路に保持されることになる。また、書き込み動作においては、メモリコントローラMCTRが、ブロック選択信号BL_SL[7:0]を選択レベルに変化させることで、予め単位入力回路に保持されているデータ列を、対応するメモリブロックに供給して、書き換え等を行うことが可能となる。
【0052】
  <<メモリコントローラ>>
  次に、メモリコントローラMCTRを説明する。メモリコントローラMCTRは、プロセッサCPUからの読み出し命令および書き込み命令に従って、メモリアレイMARYに対して読み出し動作および書き込み動作を実施する。本明細書では、メモリコントローラMCTRによる書き込み動作を説明する。そのため、
図1に示したメモリコントローラMCTRには、主に書き込み動作に係る回路ブロックのみが示されており、主に読み出しに係る回路ブロックは省略されている。
 
【0053】
  メモリコントローラMCTRは、ライトデータレジスタW_DR、リードデータレジスタR_DR、P/APライトレジスタP/AP_DR、データインシーケンサーD_ISQ、ライトセレクタW_SEL、ビット計算回路B_CAL,ルックアップテーブルLUTおよびライトシーケンサーW_SQRを備えている。書き込み動作の場合、プロセッサCPUは、メモリコントローラMCTRに対して、書き込み命令と、書き込みアドレスと、書き込みデータ列とを供給する。ここでは、書き込みデータ列は、256ビットのデータ列W_Data[255:0]である。
【0054】
  実施の形態1に係るメモリコントローラMCTRは、書き込み命令が供給された場合、プロセッサCPUからの書き込みデータ列W_Data[256]を、ライトデータレジスタW_DRに書き込む。また、メモリコントローラMCTRは、プロセッサCPUからの書き込みアドレスを読み出しアドレスとして、メモリアレイ回路MARYに供給し、読み出しアドレスで指定されたアドレスに保持されている256ビットのデータ列を読み出す読み出し動作を、メモリアレイ回路MARYに対して指示する。この指示により、メモリアレイ回路MARYは、読み出しアドレスで指定された256個のメモリセルに格納されているデータを読み出し、読み出しデータ列DO_Data[255:0]として、出力回路OPCKTからメモリコントローラMCTRへ供給する。メモリコントローラMCTRでは、この読み出しデータ列DO_Data[255:0]がリードデータレジスタR_DRに保持される。
【0055】
  メモリコントローラMCTRは、リードデータレジスタR_DRとライトデータレジスタW_DRに格納されているデータ列を比較することで、データ列において書き換えるデータ部を特定することが可能である。
【0056】
  実施の形態1に係るMRAMは、書き込み動作として、Pライト(P-Write)モードとAPライト(AP-Write)モードとを備えている。ここで、Pライトモードとは、書き込みアドレスによって指定されたメモリセルを論理値“0”に書き換えるモードを示し、APライトモードとは、書き込みアドレスによって指定されたメモリセルを論理値“1”に書き換えるモードを示している。例えば、Pライトモードでは、指定されたメモリセルの抵抗値を低い値に変化させ、APライトモードでは、指定されたメモリセルの抵抗値を高い値(Pライトモードで達成される抵抗値よりも高い値)に変化させるものである。
【0057】
  メモリコントローラMCTRは、リードデータレジスタR_DRに格納されている読み出しデータ列DO_Data[255:0]とライトデータレジスタW_DRに格納されている書き込みデータ列W_Data[255:0]とを演算することで、Pライト用データ列PW-DataとAPライト用データ列APW-Dataとを生成する。メモリコントローラMCTRは、生成したPライト用データ列PW-Data/APライト用データ列APW-Dataを、256ビットのP/APライトレジスタP/AP_DRに格納する。
【0058】
  <<<Pライト用データ列とAPライト用データ列の生成>>
  次に、Pライト用データ列PW-DataとAPライト用データ列APW-Dataの生成方法を、図面を用いて説明しておく。
図2は、実施の形態1に係るメモリコントローラによるPライト用データ列およびAPライト用データ列の生成を説明するための図である。ここで、
図2(A)は、Pライト用データ列PW-DataとAPライト用データ列APW-Dataの生成において用いられる式を示しており、
図2(B)は、生成したPライト用データ列PW-DataとAPライト用データ列APW-Dataの一例を示している。
 
【0059】
  Pライト用データ列PW-Dataは、
図2(A)に示した式(1)によって生成され、APライト用データ列APW-Dataは、
図2(A)に示した式(2)によって生成される。式(1)および式(2)に示した符号“
~”は、ビット毎の論理反転を示しており、符号“&”は、ビット毎の論理積を示している。
 
【0060】
  式(1)を例にして述べると、“(~W_Data[255:0])”は、256ビットの書き込みデータ列W_Data[255:0]のそれぞれのビットを反転することを示し、ビット毎に反転した書き込みデータ列W_Data[255:0]の各ビットと、読み出しデータ列DO_Data[255:0]の各ビットとの間で論理積演算を実施することで、256ビットのPライト用データ列PW-Dataが生成されることを、式(1)は示している。式(2)は、書き込みデータ列W_Data[255:0]のそれぞれのビットと、ビット毎に反転した読み出しデータ列DO_Data[255:0]の各ビットとの間で論理積演算を実施することで、256ビットのAPライト用データ列APW-Dataが生成されることを示している。
【0061】
  図2(A)に示した式(3)および(4)は、前提で示したように、書き込みデータ列W_Data[255:0]が、“01100101000・・・”で、読み出しデータ列DO_Data[255:0]が、“00010101100・・・”とした場合のPライト用データ列PW-DataとAPライト用データ列APW-Dataを示している。
 
【0062】
  図2(B)の表には、書き込みデータ列W_Dataおよび読み出しデータ列DO_Dataのうちの特に下位4ビットを明示して、より具体的な一例が示されている。すなわち、書き込みデータ列W_Data[255:0]の下位4ビットが、“0101”で、読み出しデータ列DO_Data[255:0]の下位4ビットが、“0011”の場合が示されている。この場合、Pライト用データ列PW-Dataの下位4ビットは、式(1)に従って、“0010”と算出され、APライト用データ列APW-Dataの下位4ビットは、式(2)に従って、“0100”と算出される。
 
【0063】
  算出されたPライト用データ列PW-DataとAPライト用データ列APW-Dataは、P/APライトレジスタP/AP_DRに格納される。特に制限されないが、実施の形態1に係るメモリコントローラMCTRは、先にPライト用データ列PW-Dataを生成し、P/APライトレジスタP/AP_DRに格納する。その後、メモリコントローラMCTRは、APライト用データ列APW-Dataを生成し、P/APライトレジスタP/AP_DRに格納する。
【0064】
  図2(B)から理解されるように、読み出しデータ列DO_Data[255:0]と書き込みデータ列W_Data[255:0]とにおいて、同じビット位置で、論理値が異なる場合、すなわち書き込みデータ列W_Data[255:0]の書き込み動作において、書き換え動作が行われるビット位置では、Pライト用データ列PW-DataまたはAPライト用データ列APW-Dataにおいて、そのビット位置における論理値は“1”となり、書き換え動作が行われないビット位置では、論理値は“0”となる。Pライト用データ列PW-DataおよびAPライト用データ列APW-Dataは、書き換え対象であることを示す論理値“1”と、書き換え対象でないことを示す論理値“0”とが混在したデータ列となる。同様に、プロセッサCPUから供給される書き込みデータ列W_Data[255:0]も、書き換え対象のビット(反転データ)と、書き換え対象でないビット(非反転データ)とが混在したデータ列と見なすことができる。
 
【0065】
【0066】
  <<<<Pライト用データの書き込み>>>>
  P/APライトレジスタP/AP_DRに格納されたPライト用データ列PW-Dataは、ライトセレクタW_SELとビット計算回路B_CALとに供給される。
【0067】
  ライトセレクタW_SELは、データインシーケンサーD_ISQによって制御される。すなわち、データインシーケンサーD_ISQは、ライトセレクタW_SELに対して、供給された256ビットのデータ列を、最下位ビットから最上位ビットに向けて32ビット単位で分割し、分割により得られた8個の32ビットのデータ列を、時分割で、入力データバスDI_BS[31:0]へ出力するように制御する。また、データインシーケンサーD_ISQは、時分割で32ビットのデータ列を出力する際に、ライトセレクタW_SELが、入力データ選択線DI_SL[0]からDI_SL[7]に順次選択レベルを出力するように制御する。
【0068】
  これにより、P/APライトレジスタP/AP_DRからライトセレクタW_SELに供給された256ビットのPライト用データ列PW-Dataは、32ビット毎に分割され、メモリブロックMB0に対応するブロック入力回路BINCKT内の32個のFF回路FFからメモリブロックMB7に対応するブロック入力回路BINCKT内の32個のFF回路FFに向けて、順次供給され、順次格納される。すなわち、256ビットのPライト用データ列PW-Dataが、データ列IO[255:0]として、メモリブロックMB0~MB7に対応する8個のブロック入力回路BINCKTに取り込まれることになる。
【0069】
  ビット計算回路B_CALは、後で詳しく説明するが、供給されたPライト用データ列PW-Dataに含まれる書き換え対象であることを示す論理値“1”の個数を計数する。ビット計算回路B_CALは、計数結果に基づいて、同時に書き込むメモリブロックを指定するブロック選択信号と、書き込む順番を生成する。ビット計算回路B_CALで生成されたブロック選択信号と書き込む順番は、ルックアップテーブルLUTに供給され、格納される。
【0070】
  ライトシーケンサーW_SQRは、ビット計算回路B_CALからの指示に従って、書き込む順番を示すサイクル信号を、ルックアップテーブルLUTに出力する。また、ライトシーケンサーW_SQRは、PライトモードであるかAPライトモードであるかを示すモード信号PW/APW-Modeと、プロセッサCPUからの書き込みアドレスに基づいたアドレスと、書き込みを指示する書き込み命令P/AP-WriteとをメモリアレイMARYに供給する。
【0071】
  ルックアップテーブルLUTは、予め格納されているブロック選択信号と書き込む順番から、ライトシーケンサーW_SQRから供給されたサイクル信号によって特定される書き込む順番に対応するブロック選択信号を選択し、選択されたブロック選択信号を選択レベルにする。これにより、
図24(C)に示したように、例えば同時に2個以上のブロック選択信号が選択レベルとなり、メモリブロック間の境界を越えて、2個以上のメモリブロックに対して同時に書き込みを行うことが可能となる。
 
【0072】
  <<<<APライト用データの書き込み>>>>
  メモリコントローラMCTRは、Pライト用データ列PW-Dataを、メモリアレイMARYに書き込んだ後、リードデータレジスタR_DRに格納されている読み出しデータ列DO_Data[255:0]とライトデータレジスタW_DRに格納されている書き込みデータ列W_Data[255:0]とを演算することで、APライト用データ列APW-Dataを生成し、P/APライトレジスタP/AP_DRに格納する。P/APライトレジスタP/AP_DRに格納された256ビットのAPライト用データ列APW-Dataは、Pライト用データ列P-Dataと同様に、データインシーケンサーD_ISQおよびライトセレクタW_SELによって、32ビット単位に、メモリブロックMB0~MB7に対応するブロック入力回路BINCKTに供給され、格納される。また、256ビットのAPライト用データ列APW-Dataは、Pライト用データ列PW-Dataと同様に、ビット計算回路B_CALにおいて、書き換え対象である論理値“1”の個数が計数される。ビット計算回路B_CALは、この計数結果に基づいて、同時に書き込むメモリブロックを指定するブロック選択信号と、書き込む順番を生成し、ルックアップテーブルLUTに供給して、格納する。
【0073】
  その後、ビット計算回路B_CALは、ビット計算回路B_CALからの指示に従って、書き込む順番を示すサイクル信号を、ルックアップテーブルLUTに出力する。また、ライトシーケンサーW_SQRは、APライトモードであることを示すモード信号PW/APW-Modeと、プロセッサCPUからの書き込みアドレスに基づいたP/AP用のライトアドレスと、書き込み命令P/AP-WriteとをメモリアレイMARYに供給する。
【0074】
  ルックアップテーブルLUTは、予め格納されているブロック選択信号と書き込む順番から、ライトシーケンサーW_SQRから供給されたサイクル信号によって特定される書き込む順番に対応するブロック選択信号を選択し、選択されたブロック選択信号を選択レベルにする。これにより、
図24(C)に示したように、例えば同時に2個以上のブロック選択信号が選択レベルとなり、APライト用データ列APW-Dataについても、メモリブロック間の境界を越えて、2個以上のメモリブロックに対して同時に書き込みを実施することが可能となる。
 
【0075】
  <<<ビット計算回路>>>
  次に、実施の形態1に係るビット計算回路を説明する。ビット計算回路B_CALは、ポップカウンタ回路PP_CNTと、ポップカウンタ回路PP_CNTによる計数結果を基に判定を行う判定回路DJ_CKTとを備えている。
【0076】
  同時に書き換えを行うメモリセルの個数は、昇圧回路の電流供給能力等によって、所定個数(実施の形態1では、32個)に制限される。
【0077】
  ビット計算回路B_CALは、Pライトモードでは、Pライト用データ列PW-Dataに含まれる論理値“1”(書き換え対象であることを示す論理値)を計数し、所定個数以下となるように、同時に選択レベルにするブロック選択信号を定める。これを行うためには、ビット計算回路B_CALにおいて、Pライト用データ列PW-Dataを構成する256ビットの論理値を、例えばクロックカウンタ回路で逐次調べることが必要となる。これは、256ビットに相当するクロック数(サイクル数)だけ、クロックカウンタ回路を動作させることが必要となることを意味し、計数時間が長くなる。さらに、ビット計算回路B_CALは、APライト用データ列APW-Dataについても同様に、論理値“1”を計数するため、さらに計数時間が長くなることになる。
【0078】
  そこで、実施の形態1に係るビット計算回路B_CALでは、ポップカウンタ回路PP_CNTによって、Pライト用データ列PW-DataおよびAPライト用データ列APW-Dataに含まれる論理値“1”が計数される。ポップカウンタ回路PP_CNTの一例を、図面を用いて説明する。
図3は、実施の形態1に係るポップカウンタ回路を説明するための図である。
 
【0079】
  <<<<ポップカウンタ回路>>>>
  実施の形態1に係るポップカウンタ回路PP_CNTは、32ビットのデータ列が入力されるデコード回路によって構成されている。このデコード回路は、入力をビットシフトさせながら、互いに隣り合うビット間を足すように動作する。
図3には、デコード回路を実現するための論理式(式(5)~式(9))が示されている。
図3では、デコード回路に入力される32ビットのデータ列として、256ビットのデータ列(例えばPライト用データ列PW-Data)のうち、最下位側の32ビットのデータ列Data[31:0]が例示されている。式(5)は、入力されたデータ列Dataにおいて、1個隣の“1”を足すことを示している。同様に、式(6)は、2個隣の“1”を足すことを示し、式(7)、式(8)および(9)は、4個隣の“1”、8個隣の“1”、16個隣の“1”を足すことを示している。これにより、入力された32ビットのデータ列Data[31:0]に含まれる論理値“1”の個数が、デコード回路から出力される。式(5)~式(9)は、同時実行することが可能であるため、1クロック(1サイクル)で、32ビットのデータ列Data[31:0]に含まれる論理値“1”の個数を計数することが可能である。
 
【0080】
  メモリコントローラMCTRは、256ビットのPライト用データ列PW-Dataを32ビット毎に、8個に分割し、順次、ポップカウンタ回路PP_CNTに供給することで、8サイクルで、Pライト用データ列PW-Dataに含まれる論理値“1”の個数を計数することが可能である。同様に、256ビットのAPライト用データ列APW-Dataについても、8サイクルで、APライト用データ列APW-Dataに含まれる論理値“1”の個数を計数することが可能である。
【0081】
  <<<<判定回路>>>>
  判定回路DJ_CKTは、ポップカウンタ回路PP_CNTの計数結果に基づいて、256ビットのデータ列(Pライト用データ列PW-DataとAPライト用データ列APW-Data)を書き込むのに際して、同時に書き込み動作を行うことが可能なメモリブロックを特定する。また、判定回路DJ_CKTは、計数結果に基づいて、256ビットのデータ列を書き込むのに際して、複数サイクルで行う場合の書き込む順番を特定する。
【0082】
  実施の形態1に係る判定回路DJ_CKTを、図面を用いて説明する。
図4~
図6は、実施の形態1に係る判定回路を説明するための図である。
 
【0083】
  図4には、ポップカウンタ回路PP_CNTの計数結果の表が示されている。前記したように、メモリコントローラMCTRは、256ビットのデータ列Data[255:0]を、32ビット毎に分割して、順次、ポップカウンタ回路PP_CNTに供給する。ここでは、データ列として、Pライト用データ列PW-Data[255:0]を例にして説明する。32ビット毎に分割して、ポップカウンタ回路PP_CNTに供給されるため、ポップカウンタ回路PP_CNTは、32ビットのPライト用データ列PW-Data[31:0]~PW-Data[255:224](
図4では、Data[31:0]~Data[255:224]と表示)に含まれる論理値“1”の個数を、P0~P7として出力する。例えば、符号P0は、最下位ビット側の32ビットのPライト用データ列PW-Data[31:0]に含まれる論理値“1”の個数を示し、符号P7は、最上位側の32ビットのPライト用データ列PW-Data[255:224]に含まれる論理値“1”の個数を示している。
 
【0084】
  図4に示した計数結果である個数P0~P7を基にして、判定回路DJ_CKTは、
図5に示した条件式に基づいて判定を行う。すなわち、判定回路は、個数P0~P7を用いて、条件Cond1~23のそれぞれの条件式の演算を実行し、それぞれの条件式が成立(True=論理値“1”)したか不成立(Fail=論理値“0”)かを判定する。条件Cond1~23において、条件式に示されている符号“+”は、個数の加算を意味し、符号“<=”は、符号の右辺の値が、左辺の値以上の場合、成立であることを示し、それ以外の場合は不成立であることを示している。また、条件Cond1~23において、符号“&&”は、左辺の()内の論理値と右辺の()内の論理値との積を示している。すなわち、符号“&&”は、左辺の()内と右辺の()内の条件がそれぞれ成立する場合、成立(論理値“1”)となり、それ以外の場合は不成立となる。
 
【0085】
  図5に示した条件Cond1~23のうちの一例を説明すると、次の通りである。例えば条件Cond1では、個数P0~P7の和の合計が、32以下であれば、条件1は成立となり、32を超える場合、条件1は不成立と判定される。また、条件Cond3では、個数P0とP1との和が、32以下で、かつ個数P2とP3との和が32以下の場合、成立となり。それ以外の場合には不成立と判定される。さらに、条件Cond12では、条件1~(
図5では、符号
~)11の全てが不成立の場合に、成立となり、それ以外の場合には不成立と判定される。さらに、条件Cond23では、条件1および条件13~(
図5では、符号
~)22が不成立の場合に、成立となり、それ以外の場合には不成立と判定される。
 
【0086】
  判定回路DJ_CKTは、条件Cond1~Cond23の条件式の演算を実行し、条件Cond1~23のそれぞれについて、成立および不成立の判定を行う。
【0087】
  判定回路DJ_CKTは、条件Cond1~23のそれぞれの成立および不成立の判定結果と、
図6に示す表とに基づいて、次に述べるように、書き込むメモリブロックの順番を決定する。
 
【0088】
  <<<<書き込み順番>>>>
  判定回路DJ_CKTは、まず、条件Cond1が成立しているか不成立かを否かを判定する。条件Cond1が成立している場合、条件Cond1で書き込み動作を行う。これに対して、条件Cond1が不成立の場合、実施の形態1に係る判定回路DJ_CKTは、8個のメモリブロックMB0~MB7に対応するデータ列Data[31:0]~Data[255:224]を2つ領域(データ列Data[31:0]~Data[127:96]とData[159:128]~Data[255:224])に分けて、領域毎に、書き込むメモリブロックの順番を決定する。
【0089】
  条件Cond2~12は、
図4および
図5から理解されるように、データ列Data[31:0]~Data[255:224]のうちデータ列Data[31:0]~Data[127:96]に関する条件であり、条件Cond13~23は、データ列Data[159:128]~Data[255:224]に関する条件である。そのため、データ列Data[31:0]~Data[127:96]に対する書き込みの順番は、条件Cond2~12によって特定され、データ列Data[159:128]~Data[255:224]に対する書き込みの順番は、条件Cond3~23によって特定される。
 
【0090】
  実施の形態1においては、条件Cond2~12において、複数の条件が成立している場合、成立している条件のうち最も番号の小さい条件で、データ列Data[31:0]~Data[127:96]の書き込み順番が特定される。同様に、条件Cond13~23において、複数の条件が成立している場合、成立している条件のうち最も番号の小さい条件で、データ列Data[159:128]~Data[255:224]の書き込み順番が特定される。
【0091】
  図6は、条件Cond1~23と、データ列Data[31:0]~Data[255:224]と、書き込み順番A~Hとの関係を示す表である。表の横軸は、条件Cond1~23であり、縦軸は、データ列Data[31:0]~Data[255:224]である。横軸の条件と、縦軸のデータ列との交差部に、書き込み順番が設定されている。
 
【0092】
  前記したように、条件Cond2~12が、データ列Data[31:0]~Data[127:96]の書き込み順番を特定するものであるため、
図6の表に示されているように、条件Cond2~12に係る書き込みの順番A~Dは、データ列Data[31:0]~Data[127:96]との交差部に設定されている。同様に、条件Cond13~23が、データ列Data[159:128]~Data[255:224]の書き込み順番を特定するものであるため、
図6の表に示されているように、条件Cond13~23に係る書き込みの順番E~Hは、データ列Data[159:128]~Data[255:224]との交差部に設定されている。
 
【0093】
  一方、条件Cond1は、8個のデータ列Data[31:0]~Data[255:224]に関係しているため、条件Cond1とデータ列Data[31:0]~Data[255:224]のそれぞれとの交差部には、書き込み順番Aが設定されている。
【0094】
  書き込み動作は、書き込み順番AからB、C、D、E、F、G、Hの順に実行される。書き込み順番A~Hの全てが実行される場合には、書き込み順番Aが最も早く実行され、書き込み順番Hが最も遅く実行されることになる。判定回路DJ_CKTは、この
図6の表を参照して、書き込む順番を特定する。同じ書き込み順番(例えば、書き込み順番A)が設定されている複数のデータ列は、同時に書き込み動作が実行される。
 
【0095】
  <<<<判定回路の判定例>>>>
  判定回路DJ_CKTは、横軸に示した条件Cond1~23において、条件Cond1が成立した場合、この条件Cond1の列を選択する。条件Cond1の列は、データ列Data[31:0]~Data[255:224]と交差しているため、判定回路DJ_CKTは、データ列Data[31:0]~Data[255:224]に対応するメモリブロックMB0~MB7を指定するブロック選択信号と、書き込む順番を生成し、ルックアップテーブルLUTに格納する。
【0096】
  これに対して、条件Cond1が不成立で、条件Cond2~12のうちの複数の条件(例えば、条件Cond2~5)と、条件Cond13~23のうちの複数の条件(例えば、条件Cond13~18)が成立した場合、判定回路DJ_CKTは、成立した条件Cond2~5のうちで最も番号の小さい条件Cond2と、成立した条件Cond13~18のうちで最も番号の小さい条件Cond13とを選択する。
【0097】
  条件Cond2とCond13を選択すると、判定回路DJ_CKTは、
図6の表において、条件Cond2の列を選択し、この条件Cond2と交差するデータ列Data[31:0]~Data[127:96]に対応するメモリブロックMB0~MB3を指定するブロック選択信号と、書き込む順番Aを生成し、ルックアップテーブルLUTに格納する。また、判定回路DJ_CKTは、
図6の表において、条件Cond13の列を選択し、この条件Cond13と交差するデータ列Data[159:128]~Data[255:224]に対応するメモリブロックMB4~MB7を指定するブロック選択信号と、書き込む順番Eを生成し、ルックアップテーブルLUTに格納する。
 
【0098】
  さらに、条件Cond1が不成立で、条件Cond2~12のうちの複数の条件(例えば、条件Cond3~5)と、条件Cond13~23のうちの複数の条件(例えば、条件Cond14~18)が成立した場合、判定回路DJ_CKTは、成立した条件Cond3~5のうちで最も番号の小さい条件Cond3と、成立した条件Cond14~18のうちで最も番号の小さい条件Cond14とを選択する。
【0099】
  条件Cond3とCond14を選択すると、判定回路DJ_CKTは、
図6の表において、条件Cond3の列を選択し、この条件Cond3と交差するデータ列Data[31:0]とData[63:32]に対応するメモリブロックMB0とMB1を指定するブロック選択信号と、書き込む順番Aを生成し、さらに条件Cond3と交差するデータ列Data[95:64]とData[127:96]に対応するメモリブロックMB2とMB3を指定するブロック選択信号と、書き込む順番Bを生成し、ルックアップテーブルLUTに格納する。また、判定回路DJ_CKTは、
図6の表において、条件Cond13の列を選択し、この条件Cond13と交差するデータ列Data[159:128]とData[191:160]に対応するメモリブロックMB4とMB5を指定するブロック選択信号と、書き込む順番Eを生成し、さらに条件Cond14と交差するデータ列Data[223:192]とData[255:224]に対応するメモリブロックMB6とMB7を指定するブロック選択信号と、書き込む順番Fを生成し、ルックアップテーブルLUTに格納する。
 
【0100】
  実施の形態1に係るビット計算回路B_CALは、ポップカウンタ回路PP_CNTによる8サイクルの演算(
図4のP0~P7)と、判定回路DJ_CKTによる21サイクルの演算(
図5の条件Cond1~11、Cond13~22)との合計29サイクルの演算で、書き込むメモリブロックを指定するブロック選択信号と書き込む順番を生成することが可能である。なお、
図5に示した条件Cond12と23は、演算を行う必要が無いため、演算のサイクル数から除外している。
 
【0101】
  <<<<判定回路からルックアップテーブルへ格納するデータ>>>>
  図7および
図8は、実施の形態1に係るビット演算回路からルックアップテーブルへ出力されるデータを説明するための図である。
図7には、条件Cond1~12と、それに対応するデータとが示されており、
図8には、条件Cond13~23と、それに対応するデータとが示されている。
 
【0102】
  条件に対応するデータは、1個から4個の8ビット(8‘b)のデータで構成されている。条件Cond1~12に対応するデータにおいて、符号“=”の左辺に記載している符号“L(0)”~“L(3)”は、サイクルを示している。すなわち、符号“L(0)”から符号“L(3)”は、符号“=”の右辺に記載したものを実行するサイクルを示しており、サイクルL(0)からL(3)の順に実行される。また、条件Cond2~12に対応するデータに記載されている符号“cyc=”は、サイクル数を示している。符号L(0)~L(3)の個数がサイクル数である。例えば、対応する式が、L(0)のみであれば、サイクル数cyc=1であり、対応する式が、L(0)~(2)であれば、サイクル数cyc=3である。なお、条件Cond1には、後で述べる条件13~23との組み合わせが生じないため、サイクル数cycの記載はなく、サイクル数cyc=1である。
【0103】
  また、符号“=”の右辺に記載している符号“8‘b”以降の符号“xxxxxxxx”は、メモリブロックMB~MB7を指定するブロック番号(ブロック選択信号BL_SL[7:0])である。すなわち、8ビットの符号“xxxxxxxx”のそれぞれが、メモリブロックMB0~MB7のそれぞれに対応している。例えば、メモリブロックMB0は、最下位ビットが論理値“1”で示され、“10000000”となり、メモリブロックMB7は、最上位ビットの論理値“1”で示され、“00000001”となる。同時に複数のメモリブロックを示す場合には、そのメモリブロックに対応している論理値が“1”となる。
【0104】
  条件Cond13~23に対応する式も、条件Cond1~12に対応する式と同様である。相違点は、符号“=”の左辺に記載しているサイクルを示す符号が、“L(0+cyc)”~“L(3+cyc)”となっていることである。ここで、cycには、
図7に示した符号“cyc”のサイクル数が代入される。例えば、条件Cond13に対応するデータにおいて、符号“=”の左辺に記載しているサイクルは、
図7に示したサイクル数cyc=に1サイクルを示すサイクルL(0)を加算した値となる。
 
【0105】
  次に、前記の<<<<判定回路の判定例>>>>で述べた3つの例を基にして、ビット演算回路からルックアップテーブルへ出力されるデータの例を説明する。
【0106】
  先ず、条件Cond1が成立した場合、ビット計算回路B_CALは、
図7に示した条件Cond1に対応するデータである8‘b11111111を、ルックアップテーブルLUTに供給し、ルックアップテーブルLUTは、このデータを格納する。このデータは、ブロック番号(ブロック選択信号)を指定する8ビットの全てが、論理値“1”であるため、同一のサイクルで、全てのメモリブロックMB0~MB7が指定されていることになる。
 
【0107】
  次に、条件Cond1が不成立で、条件Cond2と条件Cond13が選択された場合、ビット計算回路B_CALは、
図7に示した条件に対応するデータと
図8に示した条件に対応するデータとを組み合わせて、ルックアップテーブルLUTに格納する。すなわち、ビット計算回路B_CALは、
図7に示した条件Cond2に対応するデータである8‘b11110000を1サイクルL(0)目のデータとして、ルックアップテーブルLUTに供給し、ルックアップテーブルLUTは、このデータを格納する。その後、ビット計算回路B_CALは、
図8に示した条件Cond13に対応するデータである8‘b00001111を2サイクルL(0+cyc(cyc=1:条件Cond2のサイクル数))目のデータとして、ルックアップテーブルLUTに供給し、ルックアップテーブルLUTは、このデータを格納する。これにより、ルックアップテーブルLUTには、条件Cond2に対応するデータ、条件Cond13に対応するデータの順に格納されることになる。
 
【0108】
  さらに、条件Cond1が不成立で、条件Cond3とCond14が選択された場合、ビット計算回路B_CALは、
図7に示した条件Cond3に対応するデータである8‘b11000000を1サイクルL(0)目のデータとして、ルックアップテーブルLUTに供給し、さらにデータ8‘b00110000を2サイクルL(1)目のデータとして、ルックアップテーブルLUTに供給する。その後、ビット計算回路B_CALは、
図8に示した条件Cond14に対応するデータである8‘b00001100を3サイクルL(0+(cyc=2:条件Cond3のサイクル数))目のデータとして、ルックアップテーブルLUTに供給し、さらにデータ8‘b00000011を4サイクルL(1+(cyc=2))目のデータとして、ルックアップテーブルLUTに供給する。これにより、ルックアップテーブルLUTには、条件Cond3に対応するデータ8’b11000000、8‘b00110000、条件Cond14に対応するデータ8’b00001100、8‘b00000011の順に格納されることになる。
 
【0109】
  このように、ビット計算回路B_CALは、
図8に示したサイクルL(0+cyc)~L(3+cyc)に、
図7に示したデータにおけるサイクル数cycを加算することで、書き込み動作のサイクル数を生成する。生成したサイクル数は、256ビットのデータ列を書き込む際の書き込み動作の回数として、ライトシーケンサーW_SQRに通知される。ライトシーケンサーW_SQRは、通知されたサイクル数を基にしてルックアップテーブルLUTを格納されているデータを指定するサイクル信号を生成し、ルックアップテーブルLUTに供給する。
 
【0110】
  <<<256ビットデータ列の書き込み動作>>>
  次に、
図1に示したP/APライトレジスタP/AP_DRから出力される256ビットのデータ列をメモリアレイ回路MARYに書き込む場合の動作を説明する。256ビットのデータ列は、例えばPライト用データ列PW-Data[255:0]であるが、勿論APライト用データ列APW-Data[255:0]であってもよい。また、ビット計算回路B_CALでは、条件Cond1が不成立で、条件Cond2とCond13とが選択されているものとする。
 
【0111】
  図9は、実施の形態1に係る書き込み動作を説明するための図である。ここで、
図9(A)は、ルックアップテーブルに格納されているデータを示し、
図9(B)は、書き込み動作のタイミングを示している。
 
【0112】
  条件Cond1が不成立で、条件Cond2とCond13とが選択されているため、ビット計算回路B_CALからは、
図7および
図8で説明したように、データ8‘b11110000が1サイクルL(0)目のデータとして、ルックアップテーブルLUTに供給され、次にデータ8‘b00001111が2サイクルL(1)目のデータとして、ルックアップテーブルLUTに供給される。この1サイクル目の8ビットのデータと2サイクル目の8ビットのデータは、ルックアップテーブルLUTに格納される。この8ビットのデータは、256ビットのデータ列を構成する8個のメモリブロックを指定するブロック選択信号BL_SL[7:0]である。
 
【0113】
  そのため、
図9(A)に示すように、ルックアップテーブルLUTに格納された1サイクル目であるサイクル数0のデータであるブロック選択信号BL_SL[7:0]は、メモリブロックMB0~MB3を選択し、メモリブロックMB4~MB7を非選択とするものとなる。これに対して、2サイクル目であるサイクル数1のデータであるブロック選択信号BL_SL[7:0]は、メモリブロックMB0~MB3を非選択とし、メモリブロックMB4~MB7を選択とするものとなる。
 
【0114】
  ライトシーケンサーW_SQRには、ビット計算回路B_CALからサイクル数が通知されるため、ライトシーケンサーW_SQRは、1サイクル目であるサイクル数0では、サイクル数0を指定するサイクル信号をルックアップテーブルLUTに供給する。これにより、ルックアップテーブルLUTから、サイクル数0のブロック選択信号BL_SL[7:0]が出力されることになる。また、ライトシーケンサーW_SQRは、2サイクル目であるサイクル数1では、サイクル数1を指定するサイクル信号をルックアップテーブルLUTに供給する。これにより、ルックアップテーブルLUTから、サイクル数1のブロック選択信号BL_SL[7:0]が出力されることになる。
【0115】
  サイクル数0(サイクル信号が0)では、
図9(A)および(B)に示すように、ブロック選択信号BL_SL[0]~BL_SL[3]が論理値1で、ブロック選択信号BL_SL[4]~BL_SL[7]が論理値0となる。そのため、メモリブロックMB0~MB3に対応するブロック入力回路BINCKT内の単位入力回路UIN[0]~UIN[31]のアンド回路ALGに論理値1が供給されることになる。そのため、これらの単位入力回路におけるFF回路FFに書き換えを示す論理値1が格納されている場合、メモリブロックMB0~MB3において、複数のメモリセルの書き換えが同時に実行される。
 
【0116】
  また、サイクル数1(サイクル信号が1)では、
図9(A)および(B)に示すように、ブロック選択信号BL_SL[0]~BL_SL[3]が論理値0で、ブロック選択信号BL_SL[4]~BL_SL[7]が論理値1となる。そのため、メモリブロックMB4~MB7に対応するブロック入力回路BINCKT内の単位入力回路UIN[0]~UIN[31]のアンド回路ALGに論理値1が供給されることになる。そのため、これらの単位入力回路におけるFF回路FFに書き換えを示す論理値1が格納されている場合、メモリブロックMB0~MB3において、複数のメモリセルの書き換えが同時に実行される。
 
【0117】
  すなわち、
図9によれば、メモリブロックの境界を越えて、4個のメモリブロックに同時に書き換え動作を行うことが可能となり、書き込み時間が長くなるのを抑制することが可能である。
 
【0118】
  このように書き込み時間が長くなるのを抑制することが可能であるが、メモリコントローラMCTRにおいて複雑な演算処理を行う必要があり、演算処理に掛かる演算時間によって、メモリアレイ回路MARYに対する書き込み動作の開始が遅くなることが危惧される。
【0119】
  メモリコントローラMCTRにおいて行われる複雑な演算としては、次のようなものである。先ず、Pライト用データ列PW-DataおよびAPライト用データ列APW-Dataを生成するために、読み出しデータ列DO_Data[255:0]と書き込みデータ列W_Data[255:0]との間で演算を行うことが必要である。さらに、ビット計算回路B_CALでは、ポップカウンタ回路PP_CNTによる演算および判定回路DJ_CKTによる条件に係る演算が必要とされる。
【0120】
  演算時間による書き込み動作の開始の遅延を低減するために、次に図面を用いて説明するが、実施の形態1に係る半導体装置では、PライトモードおよびAPライトモードへモード遷移する遷移期間において、前記したような演算が行われる。遷移期間は、例えば昇圧回路によって安定した高電圧を生成するための昇圧動作が行われる期間であり、前記した複雑な演算とは無関係で、書き込み動作のためには必要とされる時間である。時間的に、演算時間を遷移期間と重ねることで、書き込み動作の開始が遅くなるのを低減することが可能である。
【0121】
  <<<動作フロー>>>
  図10は、実施の形態1に係る半導体装置の動作を示すフロー図である。
図10には、書き込み動作のフローが示されている。以下、
図1と
図10とを参照して、実施の形態1に係る書き込み動作においては、演算処理とモード遷移の処理とが並列的に実行されることを説明する。
 
【0122】
  ステップS0で、メモリコントローラMCTRは、書き込み動作を開始(Start)する。ステップS1において、メモリコントローラMCTRは、プロセッサCPUからの256ビットの書き込みデータW-DataをライトデータレジスタW_DRに格納する。次のステップS2において、メモリコントローラMCTRは、書き込みアドレスによって指定されるメモリアレイ回路MARYのアドレスに格納されている256ビットのデータを読み出す(Pre-Read)。
【0123】
  メモリコントローラMCTRは、次にステップS3、S4_P~S7_Pの順に実行するとともに、ステップS3を実行するとき、ステップS8_Pも開始する。これにより、ステップS3~S7_Pの処理とステップS8_Pの処理とが並列的に実行されることになる。ステップS3~S7_Pを具体的に述べると、次の通りである。
【0124】
  先ず、ステップS3では、メモリコントローラMCTRは、ステップS2で読み出した読み出しデータR-DataをリードデータレジスタR_DRに格納する。ステップS4_Pで、メモリコントローラMCTRは、ライトデータレジスタW_DRに格納されている書き込みデータW-DataとリードデータレジスタR_DRに格納されている読み出しデータR-Dataとを用いて、256ビットのPライト用データ列PW-Dataを求める演算を実行し、P/APライトレジスタP/AP_DRに格納する。
【0125】
  次に、ステップS5_Pで、メモリコントローラMCTRは、P/APライトレジスタP/AP_DRに格納されている256ビットのPライト用データ列PW-Dataを、データインシーケンサーD_ISQとライトセレクタW_SELとによって、32ビット毎の8個(x8)のデータ列PW-Data(32bit)に分割して、メモリブロックMB0~MB7に対応する8個のブロック入力回路BINCKT内のFF回路FF(32x8=256個)に供給する。これにより、256ビットのPライト用データ列PW-Dataの全てが、メモリブロックMB0~MB7に対応する256個のFF回路FFに格納される。
【0126】
  ステップS6_Pで、メモリコントローラMCTRは、ポップカウンタ回路PP_CNTおよび判定回路DJ_CKTによって、
図4および
図5等で説明した演算の処理を実行する。また、ステップS7_Pで、メモリコントローラMCTRは、ステップS6_Pで求めた1個から8個(x1~x8)の8ビットデータ(ブロック選択信号BL_SL[7:0])を、ルックアップテーブルLUTに格納する。また、特に制限されないが、ステップS7_Pで、メモリコントローラMCTRは、ステップS6_Pで求めたサイクル数を、ライトシーケンサーW_SQRに供給する。
 
【0127】
  一方、ステップS8_Pでは、Pライトモードへの遷移が行われる。このステップS8_Pにおいて、メモリコントローラMCTRは、図示しない昇圧回路に対して、高電圧を生成するための昇圧動作を指示する。昇圧回路によって、安定した高電圧を生成するためには、比較的長い時間が必要となる。
【0128】
  次にステップS9_Pでは、ルックアップテーブルLUTに格納されている1個から8個(x1~(
図10では、符号
~)x8)の8ビットデータ(ブロック選択信号BL_SL[7:0])から、ライトシーケンサーW_SQRからのサイクル信号によって特定されたものが選択され、選択されたブロック選択信号BL_SL[7:0]が、メモリブロックMB0~MB7に対応する8個のブロック入力回路BINCKTに供給され、メモリブロックの境界を越えて、ステップS8_Pで生成した高電圧を利用して、複数のメモリセルに対して、同時にPライト用データの書き込みが行われる。
 
【0129】
  ステップS4_A~S7_AおよびS9_Aは、ステップS4_P~S7_PおよびS9_Pと類似している。相違点は、ステップS4_A~S7_AおよびS9_Aでは、対象のデータが、APライト用データ列APW-Dataである。ステップS4_A~S7_AおよびS9_Aで行われる動作は、ステップS4_P~S7_PおよびS9_Pと同じであるため、説明は省略する。
【0130】
  ステップS4_A~S7_Aと並列的に実行されるステップS8_Aでは、APライトモードへの遷移が行われる。このステップS8_Aにおいて、メモリコントローラMCTRは、図示しない昇圧回路に対して、高電圧を生成するための昇圧動作を指示する。これにより、昇圧回路によって安定した高電圧が生成されることになる。
【0131】
  ステップS0~S9_Aによって、256ビットのデータ列W-Dataが、メモリアレイ回路MARYに書き込まれると、ステップS10が実行される。ステップS10で、メモリコントローラMCTRは、書き込み動作からスタンバイモードへ遷移を行う。
【0132】
  <<<メモリアレイ回路の構成例>>>
  次に、実施の形態1に係るメモリアレイ回路MARYの具体的な構成例を、図面を用いて説明する。ここでは、メモリアレイ回路MARYが、書き込み動作に用いる高電圧を生成する昇圧回路を備えている場合を説明するが、これに限定されるものでない。例えば昇圧回路は、メモリコントローラMCTRに設けられていてもよい。
【0133】
  図11は、実施の形態1に係るメモリアレイ回路の構成例を示す回路図である。また、
図12は、実施の形態1に係るメモリアレイ回路の動作を説明するためのタイミング図である。なお、
図11には、メモリコントローラMCTRも示されているが、
図11では、ライトシーケンサーW_SQRのみが示されており、他の回路ブロックは省略されている。
 
【0134】
  メモリアレイ回路MARYは、複数の回路ブロックを備えているが、
図11には、説明に必要なもののみが描かれている。メモリアレイ回路MARYは、昇圧回路PWC、分配回路(ディストリビュータ)DIST、デコーダDEC、ワードドライバーWLD、メモリブロックMB0~MB7および単位入力回路UIN[0]~UIN[31]を備えている。
 
【0135】
  メモリブロックMB0~MB7は、互いに同様な構成であるため、メモリブロックMB0を例に説明する。メモリブロックMB0は、行列状に配置された複数のメモリセルMCLと、各行に配置されたワード線WL(
図11では、代表としてWL1のみを図示)と、各列に配置された1対のビット線BLおよびソース線SLとを備えている。
図11に示したメモリブロックMB0は、特に制限されないが、32個の列を備えている。
 
【0136】
  各列のビット線BLとソース線SLは、カラムスイッチを構成するNチャンネル型電界効果トランジスタ(以下、トランジスタとも称する)N1、N2のソース・ドレイン経路を介して、電源配線VLB、VLSに接続されている。トランジスタN1、N2のゲートは、列に配置されたビット線BLおよびソース線SLに対応する単位入力回路(例えばUIN[0])に接続されている。単位入力回路UIN[0]~UIN[31]は、
図1に示した構成を備えており、単位入力回路から出力される書き込み有効信号(入力データ)IO[0]~IO[31]が、カラムスイッチを構成するトランジスタN1、N2のゲートに供給されている。
 
【0137】
  メモリセルMCLは、選択トランジスタNCと記憶素子MTJとを備えている。選択トランジスタNCのゲートは、行に配置されたワード線WL1に接続され、ドレインは、記憶素子MTJを介してビット線BLに接続され、ソースは、ソース線SLに接続されている。記憶素子MTJは、特に制限されないが、磁気トンネル接合(Magnetic  Tunneling  Junction)の3層構造の素子である。この3層構造の素子は、固定層(Pinned  Layer)、トンネル層(Tunneling  Layser)および自由層(Free  Layer)を積層した構造の素子であり、書き込んだデータに従って抵抗値が変化する。
【0138】
  各行に配置されたワード線WL1は、対応するワードドライバーWLDを介してデコーダDECに接続されている。ワードドライバーWLDの電源端子は、電源配線WVDに接続されており、ワードドライバーWLDは、デコーダDECからの選択信号に従って、電源配線WVDにおける動作電圧または接地電圧をワード線WL1に供給する。
【0139】
  昇圧回路PWCは、メモリブロックMB0~MB7に対して共通であり、
図11では、1個である。この昇圧回路PWCは、ライトシーケンサーW_SQRからのモード信号PW/APW-Modeによって制御されるチャージポンプ回路CPCと、チャージポンプ回路CPCによる昇圧動作で生成された高電圧を安定化させるレギュレータLDOとを備えている。モード信号PW/APW-ModeによってPライトモードまたはAPライトモードが指示されると、チャージポンプ回路CPCが昇圧動作を開始し、昇圧動作により生成された高電圧がレギュレータLDOによって安定化され、書き込み用の高電圧VCPとして、昇圧回路PWCから分配回路DISTに供給される。
 
【0140】
  分配回路DISTは、モード信号PW/APW-Modeに従って、昇圧回路PWCから供給されている高電圧VCPに基づいた書き込み用の高電圧または接地電圧VS(例えば0V)を、電源配線VLS、VLBおよびWVDに供給する。
【0141】
  デコーダDECは、書き込み命令P/AP-Writeが供給されると、ライトシーケンサーW_SQRからの書き込みアドレスをデコードし、書き込みアドレスによって特定されるワード線を選択する選択信号を生成し、ワードドライバーWLDに供給する。
【0142】
  <<<<書き込み高電圧および書き込み動作>>>>
  分配回路DISTは、モード信号PW/APW-Modeによって指定されるモード、すなわちPライトモードかAPライトモードかに従って、電源配線VLS、VLBおよびWVDに供給する電圧を定める。
【0143】
  すなわち、Pライトモードの場合、分配回路DISTは、昇圧回路PWCからの高電圧VCPに基づいた第1高電圧VBL0を、電源配線VLBに供給し、高電圧VCPに基づいた第1ワード線電圧VWL0を、電源配線WVDに供給し、接地電圧VSを、電源配線VLSに供給する。このとき、書き込み有効信号(例えばIO[0])が論理値1に相当するハイレベルであれば、トランジスタN1、N2が導通状態となり、ビット線BLに第1高電圧VBL0が供給され、ソース線SLに接地電圧VSが供給されることになる。さらに、このとき、デコーダDECが、ワード線WL1を指定するハイレベルの選択信号を、ワードドライバーWLDに供給していれば、ワードドライバーWLDは、ワード線WLに第1ワード線電圧VWL0を供給することになる。これによりメモリセルMCLを構成する選択トランジスタNCが導通状態となり、記憶素子MTJおよび選択トランジスタNCを介して、電源配線VLBから電源配線VLSに向かう電流が流れ、記憶素子MTJの抵抗値が変化する。すなわち、メモリセルMCLの書き換えが行われることになる。
【0144】
  これに対して、APライトモードの場合、分配回路DISTは、高電圧VCPに基づいた第2高電圧VSL1を、電源配線VLSに供給し、高電圧VCPに基づいた第2ワード線電圧VWL1を、電源配線WVDに供給し、接地電圧VSを、電源配線VLBに供給する。このとき、書き込み有効信号(例えばIO[0])が論理値1に相当するハイレベルであれば、トランジスタN1、N2が導通状態となり、ソース線SLに第2高電圧VSL1が供給され、ビット線BLに接地電圧VSが供給されることになる。さらに、このとき、デコーダDECが、ワード線WL1を指定するハイレベルの選択信号を、ワードドライバーWLDに供給していれば、ワードドライバーWLDは、ワード線WLに第2ワード線電圧VWL1を供給することになる。これによりメモリセルMCLを構成する選択トランジスタNCが導通状態となり、選択トランジスタNCおよび記憶素子MTJを介して、電源配線VLSから電源配線VLBに向かう電流が流れ、記憶素子MTJの抵抗値が変化する。すなわち、メモリセルMCLの書き換えが行われることになる。
【0145】
  もし、書き込み有効信号(例えばIO[0])が論理値0に相当するロウレベルであれば、トランジスタN1、N2は非導通状態となり、第1高電圧VBL0、第2高電圧VSL1および接地電圧VSは、ビット線BLおよびソース線SLには供給されず、メモリセルMCLの書き込み(書き換え)は行われない。同様に、デコーダDECからワードドライバーWLDに供給される選択信号がロウレベルの場合には、メモリセルMCLを構成する選択トランジスタNCが非導通となるため、メモリセルMCLの書き込み(書き換え)は行われない。
【0146】
  図12に示されているように、時刻t1において、モード信号PW/APW-Modeによって、PライトモードまたはAPライトモードがメモリアレイ回路MARYに指定されると、PライトモードまたはAPライトモードへのモード遷移が開始する。このモード遷移の期間(時刻t1~t2の期間)において、チャージポンプ回路CPCが昇圧動作を開始し、安定した書き込み用の高電圧VCPが生成されることになる。また、モード遷移後に、分配回路DISTが、モードに従った高電圧(VBL0、VSL1、VWL0、VWL1)および接地電圧VSを電源配線に供給する。
 
【0147】
  特に制限されないが、書き込みアドレスADDRも、時刻t1においてメモリアレイ回路MARYに供給され、時刻t2において、書き込み命令P/AP-Writeが供給されると、デコーダDECが、アドレスADDRによって指定されているワード線WL1を選択する選択信号を出力する。これにより、ワード線WL1の電圧が、メモリセルMCLの選択トランジスタNCを導通状態にするような電圧値となる。
【0148】
  図1に示したルックアップテーブルLUTから、
図9(A)に示したようなブロック選択信号BL_SL[7:0]が出力される場合、
図12に示した時刻t2~t3の期間において、メモリブロックMB0~MB3が同時に選択され、時刻t3~t4の期間において、メモリブロックMB4~MB7が同時に選択されることになる。
 
【0149】
  その結果、メモリブロックMB0~MB3に配置されたメモリセルであって、ハイレベルの書き込み有効信号(例えばIO[0])を出力している単位入力回路に対応する複数のメモリセルが、時刻t3~t4の期間において、同時に書き換えられることになる。同様に、メモリブロックMB4~MB7に配置されたメモセルであって、ハイレベルの書き込み有効信号(例えばIO[255])を出力している単位入力回路に対応する複数のメモリセルが、時刻t3~t4の期間において、同時に書き換えられることになる。
【0150】
  実施の形態1によれば、時刻t2~t3の期間において、同時にハイレベルとなる書き込み有効信号の個数は、所定個数(32個)以下となる。同様に、時刻t2~t3の期間において、同時にハイレベルとなる書き込み有効信号の個数は、所定個数(32個)以下となる。その結果、分配回路DISTから、メモリセルに供給する合成電流の値を制限しながら、複数のメモリセルを同時に書き換えることが可能であり、書き込み時間が長くなるのを抑制することが可能である。
【0151】
  <変形例>
  図13および
図14は、実施の形態1の変形例に係る半導体装置を説明するための図である。
図13は、実施の形態1の変形例に係る半導体装置の構成を示すブロック図である。
図14は、
図13に示した半導体装置の書き込み動作を説明するための図である。
図14は、
図6に類似しており、書き込むメモリブロックの順番を示している。
 
【0152】
  変形例においては、半導体装置1が、2個のメモリアレイ回路MARY1、MARY2と、2個のメモリアレイ回路MARY1、MARY2の書き込みを制御する共通のメモリコントローラMCTRとを備えている。
【0153】
  メモリアレイ回路MARY1、MARY2のそれぞれは、8個のメモリブロックMB0~MB7を備えており、それぞれのメモリブロックは、32ビット単位で書き込みが行われる。
【0154】
  メモリコントローラMCTRは、例えば512ビットのデータ列Dataを、2個のメモリアレイMARY1、MARY2に分散して書き込む。
図13において、D1_1~D2_2は、分散して書き込む領域を示している。
 
【0155】
  メモリコントローラMCTRは、512ビットのデータ列を、メモリアレイ回路MARY1用の256ビットのデータ列と、メモリアレイ回路MARY2用の256ビットのデータ列に分割し、それぞれを32ビットのデータ列Data[31:0]~Data[255:224]として書き込む。この書き込みの際に、メモリコントローラMCTRは、同時に書き換えるメモリセルの個数が、所定個数以下となるように、
図4で説明した計数を行い、さらに
図5で説明したような条件の演算を実行する。メモリコントローラMCTRは、この演算で求めた条件を基に、
図14に示す表を参照して、書き込むメモリブロックと、書き込む順番を決定し、2個のメモリアレイ回路MARY1、MARY2に対して書き込みを行う。
図14でも、
図6と同様に、書き込みの順番は、アルファベットの順番である。
 
【0156】
  図13および
図14では、2個のメモリアレイ回路を例にして説明したが、メモリアレイ回路の個数は、複数であればよく、2個に限定されるものではない。
 
【0157】
  実施の形態1においては、単位入力回路(例えばUIN[1])は、
図1に示したように、アンド回路ALGとFF回路FFとによって構成されるため、メモリアレイ回路MARYの占有面積の増加を抑制することが可能である。また、32ビットのようなメモリブロックの単位で、書き換えるメモリセルの個数を計数し、同時に書き込むメモリブロックと、書き込みの順番を特定するため、PライトモードおよびAPライトモードへの遷移する期間が短くても、遷移期間に、書き換えるメモリセルの個数の計数等を並列的に実行することが可能である。
 
【0158】
  実施の形態1においては、ルックアップテーブルLUTから出力されるブロック選択信号BL_SL[7:0]によって、メモリブロックMB0~MB7に対応する256個のFF回路FFが、複数の領域(例えば
図6の符号A~H)に分割され、分割された複数の領域のそれぞれが異なるタイミング(例えば
図7、
図8の符号L(0)~L(3+cyc))で選択され、選択された領域に含まれるFF回路FFの保持データに従って、実質的に同時に書き込みが行われる。ここで、実施の形態1に係るメモリコントローラMCTRは、256個のFF回路FF(記憶回路)において、反転データである論理値“1”を格納しているFF回路FFの個数が、所定個数(32個)以下となるように、256個のFF回路FFを複数の領域に分割するブロック選択信号BL_SL[7:0]を生成し、ルックアップテーブルLUTに格納する。これにより、実質的に同時に書き換えを行うメモリセルの個数を所定個数以下に制限することが可能となり、電流供給能力の低い昇圧回路であっても、書き込みを行うメモリセルを増やすことが可能となり、書き込みサイクル数を減らして、書き込み時間が長くなるのを抑制することが可能である。
 
【0159】
  (実施の形態2)
  実施の形態1では、メモリブロックを単位として、同時に書き込み動作を行うメモリブロックと、書き込み順番とを特定していた。実施の形態2においては、メモリブロックを跨いで、同時に書き込み動作行う領域と、書き込み順番とが特定される。例えば、実施の形態2では、1個のメモリブロックが、複数(例えば2個)の領域に分けられて、異なるタイミングで書き込みが行われる。
【0160】
  図15は、実施の形態2に係る半導体装置を説明するための図である。実施の形態2に係るメモリコントローラMCTRは、実施の形態1と同様に、256ビットのPライト用データ列PW-DataおよびAPライト用データ列APW-Dataを生成し、P/APライトレジスタP/AP_DRに格納する。
図15(A)には、P/APライトレジスタP/AP_DRに格納された256ビットのデータ列の一例が示されている。ここでは、Pライト用データ列PW-Dataを例にして述べるが、APライト用データ列APW-Dataでも同様である。
 
【0161】
  実施の形態2に係るメモリコントローラMCTRは、P/APライトレジスタP/AP_DRに格納された256ビットのPライト用データ列PW-Dataを、最下位ビットPW-Data[0]から最上位ビットPW-Data[255]に向けて、1クロックずつ論理値“1”の個数を計数し、論理値“1”の個数が所定個数(32個)に到達する毎に、Pライト用データ列PW-Dataを分割する。これにより、Pライト用データ列PW-Dataは、論理値“1”の個数に依存するが、1個から最大8個の領域に分割されることになる。
【0162】
  図15(B)は、Pライト用データ列PW-Dataが、4個の領域(領域1~4)に分割された例が示されている。なお、Pライト用データ列PW-Dataにおいて、論理値“1”の個数が所定個数に到達したビット位置が、分離点1~3として示され、領域1は、最下位ビットから分離点1までの領域であり、領域2(3)は、分離点1(分離点2)から分離点2(分離点3)までの領域であり、領域4は、分離点3から最上位ビットまでの領域である。
 
【0163】
  このように領域1~領域4を求めることで、メモリコントローラMCTRは、同時に書き換えるメモリセルの個数を、所定個数以下に制限しながら、メモリブロックに制限されずに、領域1に含まれる複数のメモリセルに対して同時に書き込み動作を行うことができる。領域2、領域3および領域4についても、同様に、それぞれの領域内のメモリセルについては、同時に書き込み動作を行うことが可能である。また、書き込み順番は、例えば領域1から領域4の順にする。これにより、4サイクルで256ビットのPライト用データ列PW-Dataを書き込むことが可能となり、書き込み時間が長くなるのを抑制することが可能である。
【0164】
  また、論理値“1”を計数するための回路としては、占有面積の小さいクロックカウンタ回路で実現することが可能であるため、メモリコントローラMCTRの小型化を図ることが可能である。
【0165】
  <変形例>
  図15では、256ビットのPライト用データ列PW-Dataに対して、1クロックで1ビットずつ計数して、論理値“1”の個数を計数している。そのため、論理値“1”を計数するのに、Pライト用データ列PW-Dataを構成するビット数分のクロックサイクルが必要となる。そのため、
図15に示した方法では、計数時間が長くなることが危惧される。
 
【0166】
  変形例においては、ポップカウンタ回路PP_CNTによって、32ビット単位で論理値“1”の個数を計数する。ポップカウンタ回路PP_CNTによる32ビット単位での計数で、論理値“1”の個数が32個を超えた場合、どのビット位置で論理値“1”の個数が、32個を超えたかをクロックカウンタ回路で特定することで、分離点を特定する。
【0167】
  図16は、実施の形態2の変形例に係る半導体装置を説明するための図である。先ず、ポップカウンタ回路PP_CNTによって、Pライト用データ列PW-Dataの最下位ビット側の32ビットのデータ列PW-Data[31:0]について、論理値“1”の個数PP1を計数する。次に、ポップカウンタ回路PP_CNTによって、次の32ビットデータ列PW-Data[63:32]について、論理値“1”の個数PP2を計数する。計数した個数PP1とPP2との和が、所定個数(32)を超えていた場合、1つ前のデータ列PW-Data[31:0]のビット位置PW-Data[31]+1から、クロックカウンタ回路CLK_CNTによって、論理値“1”の個数を計数し、ポップカウンタ回路PP_CNTによって計数した個数PP1とクロックカウンタ回路CLK_CNTによって計数した数との和が、所定個数に到達した点を分離点1として特定する。
 
【0168】
  次に、分離点1から始まる32ビットのデータ列を単位として、ポップカウンタ回路PP_CNTで計数し、ポップカウンタ回路PP_CNTでの計数した個数が、所定個数を超えた場合、クロックカウンタ回路CLK_CNTで計数して、分離点2を特定する。以降同様にして、分離点3を特定する。
【0169】
  図17は、実施の形態2の変形例に係る半導体装置の構成を示すブロック図である。
図17は、
図1と類似している。
図17と
図1との間の主な相違点は、
図17では、ビット計算回路B_CAL、各メモリブロックMB0~MB7に対応したブロック入力回路BINCKTおよびルックアップテーブルLUTが、
図1から変更されていることである。
 
【0170】
  図17に示されているように、ビット計算回路B_CALは、ポップカウンタ回路PP_CNTと、クロックカウンタ回路CLK_CNTと、加算回路ADD_CKTとを備えている。メモリコントローラMCTRは、
図15で説明したように、ポップカウンタ回路PP_CNTで、32ビットのデータ列を単位として論理値“1”の個数を計数する。
 
【0171】
  ポップカウンタ回路PP_CNTによる計数で、計数した論理値“1”の個数(PP1+PP2)が、所定個数(32)を超えた場合、メモリコントローラMCTRは、1つ前の32ビットのデータ列のビット位置+1からクロックカウンタ回路CLK_CNTで、論理値“1”の個数を計数し、加算回路ADD_CKTによって、ポップカウンタ回路PP_CNTによって計数された論理値“1”の個数とクロックカウンタ回路CLK_CNTによって計数された論理値“1”の個数とを加算し、所定個数(32)に到達したときのPライト用データ列PW-Dataにおけるビット位置を、分離点として特定する。
【0172】
  メモリコントローラMCTRは、ビット計算回路B_CALによって、Pライト用データ列PW-Dataの全ビットに対して、分離点を特定し、特定した分離点(
図16の例では、分離点1~3)を、ルックアップテーブルLUTに格納し、特定した分離点+1をサイクル数として、ライトシーケンサーW_SQRに通知する。
 
【0173】
  各ブロック入力回路BINCKTは、
図1と同様に、32個の単位入力回路UINを備えている。
図17では、メモリブロックMB0に対応するブロック入力回路BINCKT内の3個の単位入力回路UIN[0]~UIN[2]が例示されている。変形例に係る32個の単位入力回路は、互いに同じ構成を有しているので、ここでは単位入力回路UIN[0]を例に説明する。
 
【0174】
  単位入力回路UIN[0]は、3入力のアンド回路ALG1と、FF回路FFと、2個の比較器(上位側比較器と下位側比較器)CMP_U、CMP_Lとを備えている。アンド回路ALG1には、FF回路FFの出力と、上位側比較器CMP_Uの出力と、下位側比較器CMP_Lの出力とが供給される。アンド回路ALG1の出力が、
図1に示したアンド回路ALGの出力と同様に書き込み有効信号(入力データ)IO[0]となる。また、FF回路FFは、
図1に示したFF回路FFと同様に、書き込むべきデータが、予め格納されている。
 
【0175】
  下位側比較器CMP_Lは、Pライト用データ列PW-Dataにおいて、最下位のビット位置PW-Data[0]に対応するビット位置A0と下位側マスク信号MSK_Lとを比較し、比較の結果を、アンド回路ALG1へ出力する。また、上位側比較器CMP_Uは、上位側の次のビット位置PW-Data[1]に対応するビット位置A1と上位側マスク信号MSK_Uとを比較し、比較の結果を、アンド回路ALG1へ出力する。ここで、ビット位置A0とA1は、単位入力回路UIN[0]内のFF回路FFが配置されている領域を特定する特定情報と見なすことができる。
【0176】
  他の単位入力回路(例えば、単位入力回路UIN[1]、UIN[2])も、単位入力回路UIN[0]と同様であるが、下位側比較器CMP_Lおよび上位側比較器CMP_Uにおいて、比較するビット位置が異なっている。例えば、単位入力回路UIN[1]内の下位側比較器CMP_Lは、この単位入力回路UIN[1]に対応するビット位置A1と下位側マスク信号MSK_Lとを比較し、上位側比較器CMP_Uは、上位側のビット位置A2と上位側マスク信号MSK_Uとを比較する。
【0177】
  上位側マスク信号MSK_Uおよび下位側マスク信号MSK_Lは、ルックアップテーブルLUTから出力される。すなわち、ルックアップテーブルLUTに格納されている分離点が、上位側マスク信号MSK_U、下位側マスク信号MSK_Lとして出力される。
【0178】
  図18は、実施の形態2の変形例に係るルックアップテーブルLUTを説明するための図である。前記したように、ルックアップテーブルLUTには、ビット計算回路B_CALによって特定された分離点が格納される。
図18では、
図16で示した分離点1~3と、ライトシーケンサーW_SQRに通知されたサイクル数とが、ルックアップテーブルLUTに格納された例が示されている。
 
【0179】
  上位側マスク信号MSK_Uと下位側マスク信号MSK_Lとによって、
図16に示した領域1~4が特定される。ルックアップテーブルLUTは、ライトシーケンサーW_SQRからのサイクル信号に従って、サイクル数1~4の順に、分離点を、上位側マスク信号MSK_Uおよび下位側マスク信号MSK_Lとして出力する。例えば、サイクル数1では、ルックアップテーブルLUTは、分離点1を上位側マスク信号MSK_Uとして出力し、数値0を下位側マスク信号MSKとして出力する。これにより、数値0から分離点1の範囲(領域1の範囲)に含まれている複数の単位入力回路は、同時に選択され、複数のメモリセルに対して同時に書き込みを行うことが可能となる、このとき、FF回路FFに論理値“1”が格納されているものについては、書き込み有効信号が論理値“1”となり、書き換えが行われることになる。領域1で書き換えが行われるメモリセルの個数は、所定個数である32個である。このとき、領域1の外側の領域は、マスクされるため、FF回路FFに論理値“1”が格納されていても、書き込み有効信号は論理値“0”となり、書き換え動作は行われない。
 
【0180】
  以降、サイクル数2~4の順に、領域2~4の範囲が順に選択され、同時に複数のメモリセルへの書き込みが行われる。その結果、4サイクルで、256ビットのデータ列(例えばPライト用データ列PW-Data)の書き込みが行われることになる。
【0181】
  ここでは、Pライト用データ列を例にして説明したが、APライト用データ列も同様である。
【0182】
  図17を用いて変形例を説明したが、
図17において、ビット計算回路B_CALから、ポップカウンタ回路PP_CNTおよび加算回路ADD_CKTを削除し、クロックカウンタ回路CLK_CNTで、Pライト用データ列およびAPライト用データ列における論理値“1”の個数を計数し、32ビット毎に分割すれば、
図15(B)で説明した実施の形態2を実現することができる。
 
【0183】
  実施の形態2においては、ルックアップテーブルLUTから出力されるマスク信号MSK_U、MSK_Lによって、256個のFF回路FFが、複数の領域(例えば
図15(B)、
図16の領域1~4)に分割され、分割された複数の領域のそれぞれが異なるタイミング(例えば
図18のサイクル数1~4)で選択され、選択された領域に含まれるFF回路FFの保持データに従って、実質的に同時に書き込みが行われる。ここで、実施の形態2に係るメモリコントローラMCTRは、256個のFF回路FF(記憶回路)において、反転データを格納しているFF回路FFの個数が、所定個数(32個)あるいは所定個数(32個)以下となるように、256個のFF回路FFを複数の領域に分割する分離点を特定する。これにより、実質的に同時に書き換えを行うメモリセルの個数を所定個数以下に制限することが可能となり、電流供給能力の低い昇圧回路であっても、書き込みを行うメモリセルを増やすことが可能となり、書き込みサイクル数を減らして、書き込み時間が長くなるのを抑制することが可能である。
 
【0184】
  (実施の形態3)
  実施の形態2によれば、書き込みを行う領域を分離点によって特定することで、書き込み時間が長くなるのを抑制すること可能である。しかしながら、例えば
図17では、各単位入力回路に、2個の比較器CMP_U、CMP_Lが必要となり、占有面積が増大することが危惧される。
 
【0185】
  図19は、実施の形態3に係る半導体装置の構成を示すブロック図である。
図19は、
図1および
図17と類似している。
図1との主な相違点は、
図19では、データインシーケンサーD_ISQ、ライトセレクタW_SEL、ルックアップテーブルLUT、ライトシーケンサーW_SQR、ビット計算回路B_CALおよび単位入力回路が変更されていることである。
 
【0186】
  先ず、単位入力回路を説明する。256ビットの入力データ(書き込み有効信号)IO[255:0]に対応するように、メモリアレイ回路MARYは、256個の単位入力回路UIN[0]~UIN[255]を備えている。これらの単位入力回路は互いに同じ類似しているので、単位入力回路UIN[n]を代表例として説明する。単位入力回路UIN[n]は、アンド回路ALG2、AND1、AND2、オア回路OR、FF回路FFおよびデータセレクタD_SELによって構成されている。
【0187】
  図19において、符号U_MSKは、実施の形態2の変形例で述べた上位側マスク信号および上位側比較器CMP_Uにより実現される機能、すなわち分離点から下位側で書き込み有効信号が論理値“1”となるのを許容する機能に相当する機能を実現する上位マスク回路を示している。上位マスク回路U_MSKは、アンド回路AND1とオア回路ORとを備えている。ここで、オア回路ORの入力は、入力データバスDI_BS[31:0]内の入力データData[n]とブロック選択信号BL_SL[n+1]とに接続され、アンド回路AND1の入力は、オア回路ORの出力とブロック選択信号BL_SL[n]に接続されている。アンド回路AND1の出力が、上位マスク回路U_MSKの出力である書き込み領域信号W_ARAとなる。
 
【0188】
  図19において、符号L_MSKは、実施の形態2の変形例で述べた下位側マスク信号および下位側比較器CMP_Lにより実現される機能、すなわち分離点から下位側で書き込み有効信号が論理値“1”となるのを禁止する機能に相当する機能を実現する下位マスク回路を示している。下位マスク回路L_MSKは、アンド回路AND2を備えており、アンド回路AND2の入力は、書き込み領域信号W_ARAとリセットイネーブル信号RST_ENに接続されている。
 
【0189】
  データセレクタD_SELは、2個の選択端子S0、S1(
図19では、符号Sを省略し、符号0、符号1)と、3個の入力端子00、01、1Xと、出力端子OTを備えている。選択端子S0、S1に供給される論理値に従って、データセレクタD_SELは、3個の入力端子から1つの入力端子を選択し、選択した入力端子を出力端子OTに電気的に接続する。
 
【0190】
  すなわち、選択端子S0に供給されているデータインイネーブル信号Data-In_ENが論理値“1”で、選択端子S1に供給されているアンド回路AND2の出力が論理値“0”のとき、データセレクタD_SELは、入力端子1Xに接続されている入力データバスDI_BS[31:0]内のデータData[n]を、出力端子OTから出力する。また、選択端子S0におけるデータインイネーブル信号Data-In_ENが論理値“0”で、選択端子S1におけるアンド回路AND2の出力が論理値“0”のとき、データセレクタD_SELは、入力端子00に接続されているFF回路FFから出力されている1ビットのデータを、出力端子OTに出力する。さらに、選択端子S0におけるデータインイネーブル信号Data-In_ENが論理値“0”で、選択端子S1におけるアンド回路AND2の出力が論理値“1”のとき、データセレクタD_SELは、入力端子01に供給されている1ビットの論理値“0”を、出力端子OTに出力する。
【0191】
  FF回路FFは、データセレクタD_SELから出力された1ビットの論理値のデータを格納し、出力する。
【0192】
  FF回路FFの出力と、書き込み領域信号W_ARAとが、アンド回路ALG2の入力に供給され、アンド回路ALG2の出力が、書き込み有効信号(入力データ)IO[n]となる。
【0193】
  データインイネーブル信号Data-In_ENは、データインシーケンサーD_ISQから出力されるものであり、FF回路FFにPライト用データまたはAPライト用データを格納する際に、論理値“1”となる。
【0194】
  入力データバスDI_BS[31:0]とブロック選択信号BL_SL[7:0]は、ライトセレクタW_SELとルックアップテーブルLUTとに接続されている。また、リセットイネーブル信号RST_ENは、ライトシーケンサーW_SQRから出力される。
【0195】
  実施の形態1では、FF回路FFにPライト用データまたはAPライト用データを格納するのに、
図1に示したように、入力データバスDI_BS[31:0]と入力データ選択線DI_SL[7:0]とを用い、書き込みの領域の選択に、ブロック選択信号BL_SL[7:0]を用いていた。これに対して、
図19では、FF回路FFにPライト用データまたはAPライト用データを格納する際の選択と、書き込み領域の選択との両方の選択に、入力データバスDI_BS[31:0]とブロック選択信号BL_SL[7:0]とが用いられる。これにより、配置するバスの個数を抑制することが可能となり、占有面積の増大を抑制することが可能である。
 
【0196】
  図19に示した単位入力回路UIN[n]では、上位マスク回路U_MSKで、書き込み領域の上位側の分離点を特定する機能が実現され、FF回路FFに保持されているPライト用データまたはAPライト用データが書き込まれた後は、下位マスク回路L_MSKで、FF回路FFを論理値“0”にリセットし、書き込み領域の下位側の分離点が特定される。このようにFF回路FFに格納されている論理値を“0”とすることで、書き込み有効信号が論理値“1”になることが禁止され、書き換えが行われなくなる。その結果、下位マスク回路L_MSKで、書き込み領域の下位側の分離点が実質的に特定されることになる。
 
【0197】
  単位入力回路UIN[n]を例にして述べたが、他の単位入力回路は、対応するメモリブロックと対応する書き込み有効信号とに従って、データセレクタD_SELおよびオア回路ORに接続されるDataのビット位置と、オア回路ORとアンド回路AND1が接続されるブロック選択信号が異なるだけで、構成は同様である。
【0198】
  ビット計算回路B_CALは、
図19に示すように、ポップカウンタ回路(第1カウンタ回路)PP_CNTとクロックカウンタ回路(第2カウンタ回路)CLK_CNTとを備えている。メモリコントローラMCTRは、ポップカウンタ回路PP_CNTで、32ビット単位で論理値“1”の個数を計数し、論理値“1”の個数が所定個数に到達するまで計数を行う。また、メモリコントローラMCTRは、ポップカウンタ回路PP_CNTによる計数で、所定個数を超えた場合、超えた32ビット単位の領域に対して、クロックカウンタ回路CLK_CNTで論理値“1”の個数を計数する。また、メモリコントローラMCTRは、クロックカウンタ回路CLK_CNTで、論理値“1”の個数が、所定個数に到達したときの論理値“1”の存在するビット位置を特定する。
 
【0199】
  図19では、メモリコントローラMCTRは、ポップカウンタ回路PP_CNTでの32ビット単位の計数の結果を、対応するブロック選択信号の論理値“1”で表す。例えば、最下位側のPライト用データ列PW-Data[31:0]の計数結果が所定個数以下であれば、最下位側のブロック選択信号BL_SL[0]を、論理値“1”とする。また、メモリコントローラMCTRは、クロックカウンタ回路CLK_CNTで特定された、論理値“1”のビット位置を反映した32ビットの入力データ列Dataを生成する。ビット計算回路B_CALで生成されたブロック選択信号と入力データ列Dataは、ルックアップテーブルLUTに供給され、格納される。
 
【0200】
  次に、図面を用いて動作例を説明する。
図20は、実施の形態3に係る半導体装置を説明するための図である。
 
【0201】
  図20では、Pライト用データ列PW-Dataにおいて、論理値“1”の個数が、所定個数に到達するビット位置のデータがData[n]として示されている。Data[n]のビット位置は、
図20の例では、メモリブロックMB3に格納される32ビットのデータ列内である。
 
【0202】
  メモリコントローラMCTRは、ビット計算回路B_CAL内のポップカウンタ回路PP_CNTによる、メモリブロックMB0~MB3までの計数で、論理値“1”の個数が所定個数を超えたと特定し、メモリブロックMB0~MB3に対応するブロック選択信号BL_SL[7:0]を[1、1、1、1、0、0、0、0]とする。分離点があるメモリブロック(この例ではMB3)と、それより左側(MB0側)のメモリブロックに対応する選択信号をすべて”1”に設定する。また、メモリコントローラMCTRは、ポップカウンタ回路PP_CNTによる、メモリブロックMB3の計数で、論理値“1”の個数が所定個数を超えたと特定し、クロックカウンタ回路CLK_CNTでメモリブロックMB3の論理値“1”の個数を計数する。この計数で、論理値“1”の個数が、所定個数に到達すると、メモリコントローラMCTRは、メモリブロックMB3に対応する32ビットにおける、到達したビット位置を特定する。
図20の例では、4ビット目のビット位置が特定される。メモリコントローラMCTRは、特定したビット位置(4ビット目)から左側(最下位側)の全てのビットを論理値“1”とし、5ビット目から右側(最上位側)の全てのビットを論理値“0”として入力データ列Data[31:0]=32‘b11110000・・・0を生成する。
 
【0203】
  メモリコントローラMCTRによって生成されたブロック選択信号が、
図19に示した単位入力回路UIN[n]内の上位マスク回路U_MSKに供給される。分離点があるメモリブロックより、左側(MB0側)にあるメモリブロックに対しては、ブロック選択信号BL_SL[n]とブロック選択信号BL_SL[n+1]との間の、ビット単位の論理積演算の結果によって選択が行われる。この演算により、メモリブロックMB0~MB2を選択するブロック選択信号BL_SL[n+1]&BL_SL[n]=[1、1、1、0、0、0、0、0]が生成されることになる。これにより、
図20に示すように領域0を構成する第1領域0_0が選択されることになる。
 
【0204】
  また、メモリコントローラMCTRによって生成された入力データ列Data[31:0]が、入力データバスDI_BS[31:0]に供給される。分離点があるメモリブロックでは、ブロック選択信号BL_SL[n]と入力データ列Data[31:0]との間で、ビット単位の論理積演算が実行される。この論理積演算によって、
図20に示すように領域0を構成する第2領域0_1が選択されることになる。
 
【0205】
  領域0では、書き込み領域信号W_ARAが論理値“1”となる。その結果、FF回路FFに論理値“1”が格納されていると、書き込み有効信号IO[n]がハイレベルとなり、書き換えが実行されることになる。
【0206】
  書き込み後に、ライトシーケンサーW_SQRは、リセットイネーブル信号RST_ENを論理値“1”にする。書き込み領域信号W_ARAとリセットイネーブル信号RST_ENが、ともに論理値“1”となることで、データセレクタD_SELは、入力端子01に供給されている論理値“0”をFF回路FFに供給し、FF回路FFのデータを論理値“0”にリセットする。これにより、次のサイクルで書き込み領域信号W_ARAが論理値“1”となっても、書き込み有効信号IO[n]は論理値“0”となり、書き換え動作は行われない。
【0207】
  図21は、実施の形態3に係る書き込み動作を説明するための図である。
図21には、256ビットのPライト用データ列PW-Dataが、書き込まれる場合が示されている。勿論、APライト用データ列APW-Dataでも同様である。
図21では、
図20で示したように、メモリブロックMB3の4ビット目で分離点が特定され、
図21(A)には、分離点から下位側の領域0のデータが同時に書き込まれ、分離点から上位側の領域1のデータが同時に書き込まれる場合が示されている。
 
【0208】
  この場合、ルックアップテーブルLUTには、ビット計算回路B_CALから、
図21(B)に示すような、ブロック選択信号BL_SL[7:0]と入力データ列Data[31:0]が格納される。書き込み動作の際に、ライトシーケンサーW_SQRからのサイクル信号によって、書き込みサイクル数1、2の順に、ブロック選択信号BL_SL[7:0]と入力データ列Data[31:0]が選択され、256個の単位入力回路UIN[0]~UIN[255]に供給され、書き込み動作が行われることになる。
 
【0209】
  図22は、実施の形態3に係る書き込み動作を説明するためのタイミング図である。
図22において、clkはクロック信号を示しており、例えばチャージポンプ回路CPC(
図11)等がこのクロック信号に同期して動作する。
 
【0210】
  書き込み命令P/AP-Writeを発行(
図22では論理値“1”への変化)することで、書き込み動作が開始する。メモリコントローラMCTRから、メモリアレイ回路MARYに対して、複数のメモリブロックB0、B1を順次指定するブロック選択信号BL_SL[7:0]と、入力データD0、D1を順次示す入力データ列Data[31:0]とが供給される。
 
【0211】
  256個の単位入力回路UINにおいては、メモリブロックB0を指定するブロック選択信号BL_SL[7:0]と入力データD0を示す入力データ列Data[31:0]とに基づいて、領域0を指定する書き込み領域信号W_ARAが論理値“1”となり、論理値“1”が格納されている、領域0に対応したFF回路FFに対応する書き込み有効信号が論理値“1”となって、書き換えが実行される。その後、リセットイネーブル信号RST_ENが論理値“1”となることで、領域0に対応したFF回路FFのリセットが行われる。
【0212】
  その後、領域0と同様に、領域1に対する書き換えと、対応するFF回路FFのリセットが行われる。
【0213】
  実施の形態3に係る半導体装置の動作フローは、
図10に示した実施の形態1の動作フローと類似している。相違点は、実施の形態3では、ステップS6_P、S6_Aにおいて、判定回路の代わりにクロックカウンタ回路CLK_CNTが用いられ、ステップS7_P、S7_Aにおいて、入力データ列Data[31:0]とブロック選択信号BL_SL[7:0]がルックアップテーブルLUTに格納されることである。また、実施の形態3では、ステップS5_P、S5_Aにおいて、データインシーケンサーD_ISQが、データインイネーブル信号Data-In_EN(
図19)を有効(論理値“1”)にする。これにより、
図19に示したデータセレクタD_SELが、入力端子1Xを選択し、入力データバスDI_BS[31:0]上の対応する入力データが、FF回路FFに格納される。
 
【0214】
  実施の形態2および3においては、書き換えるメモリセルの個数が、所定個数に到達するまで、計数を行うため、同時に書き込みを行う領域をフレキシブルに選択することが可能であり、書き込みを行う領域を最適化することが可能である。
【0215】
  実施の形態3においては、ルックアップテーブルLUTから出力されるブロック選択信号BL_SL[7:0]と入力データ列Data[31:0]とによって、256個のFF回路FFが、複数の領域(例えば
図20、
図21の領域0~1)に分割され、分割された複数の領域のそれぞれが異なるタイミング(例えば
図21(B)のサイクル数1~2)で選択され、選択された領域に含まれるFF回路FFの保持データに従って、実質的に同時に書き込みが行われる。実施の形態3に係るメモリコントローラMCTRでも、256個のFF回路FF(記憶回路)において、反転データを格納しているFF回路FFの個数が、所定個数(32個)あるいは所定個数(32個)以下となるように、256個のFF回路FFは複数の領域に分割される。これにより、実質的に同時に書き換えを行うメモリセルの個数を所定個数以下に制限することが可能となり、電流供給能力の低い昇圧回路であっても、書き込みを行うメモリセルを増やすことが可能となり、書き込みサイクル数を減らして、書き込み時間が長くなるのを抑制することが可能である。
 
【0216】
  実施の形態では、記憶回路(FF回路FF)がデータ線に対応する例を説明したが、これに限定されるものではない。すなわち、記憶回路は、書き込むべきデータに対応していれば良い。例えば同時に書き込むデータの個数が、データ線の個数よりも少ない場合、記憶回路の個数は、データ線の個数よりも少なくなる。
【0217】
  以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【0218】
1  半導体装置
B_CAL  ビット計算回路
DJ_CKT  判定回路
D_ISQ  データインシーケンサー
LUT  ルックアップテーブル
MB0~MB7  メモリブロック
MARY  メモリアレイ回路
MCTR  メモリコントローラ
PP_CNT  ポップカウンタ回路
P/AP_DR  P/APライトレジスタ
R_DR  リードデータレジスタ
W_DR  ライトデータレジスタ
W_SEL  ライトセレクタ
W_SQR  ライトシーケンサー