![Intel FPGA权威设计指南:基于Quartus Prime Pro 19集成开发环境](https://wfqqreader-1252317822.image.myqcloud.com/cover/850/41202850/b_41202850.jpg)
1.2 存储器块
本节将介绍存储器块的设计指导、操作和配置等内容,使读者能正确配置和使用存储器块资源,以达到最好的设计性能,并通过设计实例说明嵌入式存储器块M20K的使用方法。
1.2.1 嵌入式存储器块设计指导
以确保设计的成功,此处需要读者关注一些问题,包括存储器块的选择、访问冲突的解决、写期间读行为和奇偶校验。
1.存储器块的选择
Quartus 软件会根据设计的速度和容量限制将用户定义的存储器分配到存储器块。例如,Quartus 软件可以跨越多个可用存储器块来分布存储器,以提高设计性能。如果要手工将存储器分配给一个特定大小的存储器块,则在参数编辑器中使用 RAM IP 核。对于MLAB,可以使用软件通过仿真实现单端口SRAM,这将使得使用最少的额外逻辑资源。
由于 MLAB 的双重用途架构,在存储器块中只有数据输入寄存器、输出寄存器和写地址寄存器可用。MLAB从ALM获得读地址寄存器。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_53_3.jpg?sign=1738883050-2VcLHEsU1YEV6VtSJTDCAx7d4orwxSPn-0-6c54734b1d78d6f52aea5e0c5ec5b3e0)
注
对于Cyclone 10GX器件,资源属性编辑器和时序分析器将M20K存储器块的位置报告为 EC_X<编号>_Y<编号>_N<编号>。尽管允许的分配位置为 M20K_X<编号>_Y<编号>_N<编号>。嵌入式单元(EC)是M20K存储器块的子位置。
2.访问冲突的解决
在真正的双端口模式下,可以对同一个存储器位置执行两个写操作。然而,存储器块内没有解决冲突的电路。为了避免将未知数据写到地址,请在存储器块的外部实现冲突解决逻辑。
3.写期间读行为
自定义写期间读(read-during-write)行为,以满足设计要求。这个行为有两种模式,即相同端口的写期间读模式和混合端口的写期间读模式。
1)相同端口的写期间读模式
该模式用于单端口 RAM 或真正双端口 RAM 的相同端口。在该模式下的输出模式如表1.13所示,输出模式为新数据的时序如图1.25所示。
表1.13 用于相同端口写期间读模式的输出模式
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_54_1.jpg?sign=1738883050-56g377ZnCxdzcZ63G9L2wtqwBfOuM8tu-0-3477e87d0a68f1d7f80048590fa0632e)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_54_2.jpg?sign=1738883050-14PKbBzEPIPz7CzxEHvyZ9U03ur1zQVG-0-e748d412ef9c243f0a8baab05de4b90d)
图1.25 用于相同端口写期间读模式的时序(输出模式为新数据)
2)混合端口的写期间读模式
该模式适用于简单和真正双端口 RAM 模式,其中两个端口使用相同的时钟对同一个存储器地址执行读和写操作,即一个端口从存储地址读取,而另一个端口向该存储地址写入。在混合端口写期间读模式下,RAM的输出模式如表1.14所示。
表1.14 混合端口写期间读模式下的RAM输出模式
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_54_3.jpg?sign=1738883050-kUzJ4Q6hdA0qxrWDZHmnlmeWvbyD3O3R-0-2b51c5e9e2caec6f44c3da0a77986f0b)
续表
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_55_1.jpg?sign=1738883050-B2G0d7mHuUFlH1ZzJ0gjgSl0uPzoBIm4-0-685c1fae9fe14046f00dafb11cebfacb)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_55_2.jpg?sign=1738883050-tfBUxlbyTyGqsynXvkA6zBc6fpCodnu9-0-52c12b417e50341e1128ca62730a86f1)
图1.26 用于混合端口写期间读模式的时序(输出模式为新数据)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_55_3.jpg?sign=1738883050-FEEwSjgiKfgvxTLKmZ7aFtgdpZBmENxb-0-b8bdb3b4b3a083f7e721f28acc3c9514)
图1.27 用于混合端口写期间读模式的时序(输出模式为旧数据)
4.奇偶校验
M20K块的奇偶校验位支持:
(1)奇偶校验位是与数据宽度为 5、10、20 和 40(位 4、9、14、19、24、29、34 和39)的每4个数据位相关的第5位;
(2)在非奇偶校验数据宽度中,在读取或写入操作期间会跳过奇偶校验位;
(3)不对奇偶校验位执行奇偶校验功能。
1.2.2 存储器块打包模式
M20K 存储器块支持打包模式。打包模式功能将两个独立的单端口 RAM 块打包到一个存储器块中。Quartus软件通过将物理RAM块置于真正的双端口模式并使用地址的MSB来区分两个逻辑 RAM 块,在适当的情况下自动实现打包模式。每个独立单端口 RAM 的大小不能超过目标块大小的一半。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_56_1.jpg?sign=1738883050-G6ttecVJXWdiJo4MEhD2NEol6VFMXytu-0-8dda634104b1e4e68ecd436344af614e)
图1.28 用于混合端口写期间读模式的时序(输出模式为无关值/受限的无关值)
1.2.3 地址时钟使能
嵌入式存储器块支持地址时钟使能,只要信号使能(addressstall=1),就会保留以前的地址值。当存储器块配置为双端口模式时,每个端口都有它自己独立的地址时钟使能。默认,地址时钟使能信号为低(禁止)。
1.2.4 存储器块异步清除
M20K 存储器块支持对输出锁存器和输出寄存器的异步清除。如果 RAM 不使用输出寄存器,使用输出锁存器异步清除来清除RAM的输出。
清除是一个异步信号脉冲,用于清除输出。内部逻辑将清除脉冲进行扩展直到输出时钟的下一个上升沿。输出将被清除,直到清除信号无效。
1.2.5 存储器块纠错码
纠错码(Error Correcting Code,ECC)允许用于检测和纠正存储器块输出的数据错误。ECC 可以在32 位字中纠正单个错误、双邻接错误和三邻接错误。但是,ECC不能检测到4个及以上的错误,M20K存储器块的ECC块图如图1.29所示。
在×32宽度的简单双端口模式下,M20K存储器块内置对ECC的支持:
(1)当使用 ECC 时,M20K 存储器块的运行速度要比没有 ECC 的简单双端口模式要慢。但是,在输出译码器之前,可以选择使能 ECC 流水线寄存器以实现更高的性能,与非流水线的ECC相比,有一个周期延迟的代价。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_57_1.jpg?sign=1738883050-leB9KNOuoeuNF1s9tYuekyDyVQXEStNA-0-a19d2552447369cadbdd7fc405031c55)
图1.29 M20K存储器块的ECC块图
(2)M20K存储器块的ECC状态与两个ECC状态标志通信,包括信号e(错误)和ue (不可纠正错误)。状态标志是存储器块常规输出的一部分,ECC 状态的真值表如表 1.15 所示。当使用ECC时,无法访问两个奇偶校验位,这是因为ECC会代替它们。
表1.15 ECC状态的真值表
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_57_2.jpg?sign=1738883050-gLkx0y8cYk0syaWutegT8LdkOd1gHL04-0-7d11a76eba324758d123fc0af339ee75)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_57_3.jpg?sign=1738883050-YtiCAYwr0rqCCAEGv8SMGRJnnBcbSUc2-0-95bf6d24a99e4f1ee4a33efc6c9333c2)
注
(1)如果使用ECC,则不能使用字节使能特征;
(2)不支持写期间读旧数据模式;
(3)不支持混合宽度配置。
1.2.6 使用M20K实现RAM
带有一个时钟真正双端口 RAM 的 Verilog HDL 描述如代码清单 1-14 所示,适配后的RAM网表结构如图1.30所示。
代码清单1-14 带有一个时钟真正双端口RAM的Verilog HDL描述
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_57_4.jpg?sign=1738883050-RKU320Ei2pfe0gHs7Ji2sbnlTfZzR0LY-0-b0c205016f62c53ff9555bf7988f3e16)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_58_1.jpg?sign=1738883050-PDvH7eji9RiP8ET1B7vtp3lCcKBphrVl-0-8644241d43f33b20c2969bb3f73a142a)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_58_2.jpg?sign=1738883050-xJJTZxJX9qTj34I10ZpB8D7oVcLClXcE-0-08c474340f9b1402f1f30dcb8c46bfce)
图1.30 带有一个时钟真正双端口RAM适配后的RAM网表结构
真正双端口RAM的符号如图1.31所示。Cyclone 10 GX器件中M20K嵌入式存储器块的布局如图1.32所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_59_1.jpg?sign=1738883050-Y7GaBUtsnCIHYye7CTEDRvz2RCHQBYAT-0-517ab13a0abf0501798f76847e540cae)
图1.31 真正双端口RAM的符号
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_59_2.jpg?sign=1738883050-2ZqTGsKoR9NmXl3RRy03WY3w60giZUM7-0-c1ac9fae934a54527ea54ab616599566)
图1.32 Cyclone 10 GX器件中M20K嵌入式存储器块的布局
一个带有字节使能简单双端口同步RAM的Verilog HDL描述如代码清单1-15所示。
代码清单1-15 一个带有字节使能简单双端口同步RAM的Verilog HDL描述
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_59_3.jpg?sign=1738883050-0UoexoW3nXrwQIIFBqeHxY2Z2W8ZpuHm-0-9964ce63345925ca8d79497f0056a39a)
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_60_1.jpg?sign=1738883050-RAryZEqEtKUFbrfzSBRiQTOGhVUP3ZlN-0-c80d4f901017401ed95f80583733dd9a)
适配后 RAM 部分的网表结构如图 1.33 所示。设计在 Cyclone 10 GX 器件中的布局如图1.34所示。
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_60_2.jpg?sign=1738883050-5z4g3EcpVBR7WcXsZ9vnIG4okaLmd2Bq-0-7d9f92724057ca061df79521292fb688)
图1.33 适配后RAM部分的网表结构
![](https://epubservercos.yuewen.com/A53FE3/21440186201517906/epubprivate/OEBPS/Images/38244_61_1.jpg?sign=1738883050-i8GpDwLBrzQVXw5PxqejLtNcb0ulfIQr-0-d0bbadd713d1d41256d4d92f51ae54b8)
图1.34 设计在Cyclone 10 GX器件中的布局