六管静态存储单元结构(每个管都处于饱和导通状态或者截止状态)
T1、T2为工作管,用来保存\存储数据
T3、T4为负载管,用于为T1、T2提供电荷
T5、T6、T7、T8为门控管,用于控制开关
X地址选通(行选通)
T5、T6管被打开,A、B与位线连通
Y地址选通(列选通)
T7、T8管被打开,A、B分别于I/O和非I/O相连通
当I/O=1时,A=1,此时T2处于饱和导通状态,因为T2接地而且B与T2相连,所以B=0
当B=0时,T1与B相连,所以此时T1也为0,T1为0可以使A保持高电平的状态,形成稳定的互锁状态
当A点读入的值为1时,读出结果即I/O结果也为1
当A点读入的值为0时,读出结果即I/O结果也为0
B点同理
注意:不论是读或写,都要求X和Y译码线同时有效!
当X和Y撤销后,由负载管T3、T4分别为T1、T2提供工作电流,保持此互锁状态。
上面提到的双译码结构就是图中的存储单元阵列
X和Y的位数可能不相同,均需要通过驱动器进行扩大
还有控制电路,分为读信号RD、写信号WR和片选信号CS,当片选信号有效时才可以进行其他操作。
(1)某计算机字长16位,其存储器容量为64KB,按字编址时,其寻址范围是多少?
【1】存储容量为64KB时,按字节编址的寻址范围就是64KB【2】当按字编址时,因为一个字有8位,所以结果为64K×8/16=32K
(2)一个16K*32位的SRAM存储芯片,其数据线和地址线之和为多少?
该存储芯片为16K*32位,那么16K为24×210,即它需要的数据线为4+10=14根。此外它还需要32根地址线,所以数据线和地址线的总和为46。
(3)一个16K*32位的SRAM存储芯片,其内部采用位数相同的行列地址译码器,则其内部译码输出线的总量为多少?
【1】16K的存储单元需要的译码输入线为:24×210即14位。【2】因为它采取位数相同的行列地址译码器,所以行列各7位,那么需要的译码输出线为27+27=28。即结果为28。【3】拓展:当采用单译码方式时,译码输出线为24×210=214
最近在看CycloneV代FPGA芯片手册,网上的资料就是把中文手册抄一遍或者是把英文手册翻译一下,不讲解细节以及应用,所以想发一篇从手册中电路出发到实际应用对应的电路到底会消耗什么资源。不管是altera、xilimx还是国产的芯片,这些原理都是一致的。
图1CycloneV器件的ALM高级结构图
本来查找表原理是比较简单的,当然要将内部结构一次搞清楚。打开图1内部详细电路如图2所示,想要一次说清楚好像有亿点复杂。6输入查找表是由2个4输入查找表和4个3输入查找表加一些数据选择器构成的,本节就先了解一下图2中红色部分4输入查找表(LUT),由于CycloneIV、Cyclone10LP这些芯片的查找表均为4输入,其实几输入的原理都一样,只是SRAM地址端个数不同而已。
图2CycloneV器件的ALM内部详细结构
FPGA可以实现所有门电路,然而FPGA却没有门电路这种硬件结构,都是通过一个叫查找表的结构等效实现的。本节内容解决一个查找表凭什么可以综合成任何门电路。下图蓝色边缘的方框就是一个四输入的查找表,四个输入端a、b、c、d,一个输出端。
图3查找表外部结构图
个查找表(LUT)可以实现与门、或门、门、加减法等各种组合逻辑。试想一下,n个输入,最多可以组合成2n个不同的状态,输出也就要与2n个输入状态对应。当查找表在实现固定功能时,输入信号确定时,输出信号也是确定的,只需要先把输入对应的输出结果计算并存储起来,把输入信号作为存储区的地址信号,读出的数据就是对应的输出数据了。
如图4所示,4输入LUT实际有16个1bit基于SRAM结构的存储器,将A、B、C、D四个输作为SRAM存储器的地址信号,输出该地址存储的数据。SRAM存储的数据不同,相同的输入可以得到不同的输出,从而等效成不同门电路,实现使个LUT实现各种组合逻辑的功能。
图44输入查找表内部组成
图54输入查找表实现四输入或门
Quartus在对模块进行综合时,就会生成每个查找表每bitSRAM需要存储的数据,在下载程序或者上电配置时,FPGA查找表对应的SRAM就会被初始化,之后这些查找表就可以等效成对应的门电路了,通过下面代码实现上述电路。
moduletop(inputA,inputB,inputC,inputD,outputdout);assigndout=A|B|C|D;endmodule综合的RTL视图如下所示,右击打开chipplanner查看该或门在芯片内的位置,以及实现方式。
图64四输入或门的RTL视图
图7Chipplanner中对应的查找表所在的LE
图8查找表实现4输入或门
由于查找表是最基本结构,quartus无法在对其进行展开,无法查看更加细节的电路,而vivado是可以导出lut的网表,可以看到lut的ram里面存储的数据,会更加直观。
对xilimx、altera等厂家的FPGA进编程,实际上就是把需要进运算的结果计算出来并存储在SRAM之中,输发相应变化时,将RAM中对应值输出即可。个N输查找表(LUT)可以实现N个输变量的任何逻辑功能,如N输“与”、N输“异或”等。输多于N个的函数、程必须分开个查找表(LUT)实现,这个过程由quartus、vivado等综合软件动完成。
从前面查找表原理有人也会想到,查找表最基本的结构是SRAM,除了能够用来实现门电路,加减法等组合逻辑之外,还可以作为存储体使用。FPGA的RAM分为两部分,一部分是块RAM,在CycloneIV里面叫M9K,在CycloneV系列里面升级为M10K存储体。另一部分叫分布式RAM,查找表就属于分布式RAM,一般情况下,块RAM读写速度会比分布式RAM高,所以在实现FIFO、ROM、双口RAM这些存储体IP时,一般会选择使用块RAM资源,后面到存储体时在详细说。
需要CycloneIV、CycloneV代FPGA中英文手册的在gongzhonghao回复Cyclone即可。