藏在系统核心芯片中的DRAM控制器

藏在系统核心芯片中的DRAM控制器
藏在系统核心芯片中的DRAM控制器

藏在系统核心芯片中的DRAM控制器

Ron Wilson,总编辑,Altera公司

DRAM控制器藏在您的系统核心芯片系统(SoC)中——可能有两个,甚至是四个。有一些精心制作的逻辑小模块,用于连接SoC内部和外部DRAM,它们并没有引起系统设计人员的注意。它们有可能造成很大的问题,浪费带宽,占用太多的能耗,甚至导致数据被破坏。

DRAM控制器能否正常工作会使得系统有很大的不同,有的系统能够满足其设计要求,而有的系统则运行缓慢,过热,甚至失败。不论哪种情况,最终是由系统设计团队承担责任,他们一般很少掌握控制器的信息。

成功还是失败都源自我们要求DRAM控制器所做的工作。模块不仅仅是一个接口。在高级系统设计中,DRAM控制器必须很好的处理SoC体系结构复杂而又难以预测的存储器申请,以及一侧的系统软件申请,还有另一侧DRAM芯片设计复杂的时序和约束要求。能否处理好这些关系会在多个方面影响DRAM吞吐量:这很容易在系统性能上体现出来。

为解释这些问题——以及系统设计人员能够对此做什么,我们需要回答三个主要问题。首先,我们应检查DRAM芯片提出的要求。然后,需要讨论SoC体系结构对存储器访问模式的影响,第三,研究一个高级DRAM控制器的结构和功能。通过这三部分,我们得出系统设计的一些结论。

DRAM需要什么

系统规划对外部存储器的要求是确定性随机访问:任何时候来自任何位置的任意字,具有固定延时。但是,确定性随机访问恰恰是现代DDR3DRAM所不能提供的。

相反,DRAM提供任何您需要的字,但是具有复杂的时序约束,因此,很难知道数据究竟什么时候出现。图1中“简化的”状态转换图简单解释了为什么会这么复杂。这种复杂度也意味着,命令到达DRAM芯片的顺序会对时序以及带宽有很大的影响。要理解这一点,我们需要深入了解DDR3DRAM。

图1.DDR DRAM芯片“简化的”状态图显示了控制器设计人员所面临的复杂问题。

DRAM芯片将数据存储在电容阵列中。当您读写数据时,您并不会直接访问阵列。而是在读写之前,您激活阵列中的某一行。激活命令使得DRAM读取该行中的所有列的所有比特,将其送入传感放大器块,它实际上用作该行的本地寄存器文件。然后,您可以对传感放大器上的数据发出读写命令。通过这种方式,能够非常快的读写已经激活的行:一般是三到五个时钟来开始一次突发传送,然后,在突发期间传送每个字节需要一个时钟。例如,这种时序安排使得DDR3DRAM非常适合L2高速缓存数据交换。

但是,如果您不使用已经激活的行,那么会非常复杂。改变行时,即使是一个字节,您也必须对当前行去激活,然后激活一个新行。这一过程需要确定已经在一段时间内激活了当前行。由于读取DRAM单元是破坏性的,因此需要最小延时:您激活了一行后,DRAM实际上是将最新到达传感放大器上的数据复制回比特单元阵列中,然后刷新行。您可以在此期间读写当前行,但是,要确定在您改变行之前完成了这一过程。

即使满足了这一要求,也还有其他问题。您必须对阵列预充电。预充电命令使得传感放大器中的数据无效,提升阵列和传感放大器输入之间导线上的电压,使得电压值位于逻辑0和逻辑1电平之间。这种准备是必要的,比特单元电容上很小的电荷都会传送到导线上,以某种方式提示传感放大器。

对导线进行预充电之后,您必须向新行发送一个激活命令,等待操作完成,然后,您最终可以发送一个读操作新命令。加上所有涉及到的延时后,即,读取字节序列的最差情况,每一字节都来自不同的行,这要比读取来自一个新行连续位置相同数量字节的时间慢十倍。

这种不同还只是部分问题。如图2所示,DDR DRAM有多个块:与比特单元无关的阵列。DDR3DRAM中有八个块,每一块都有自己排列成行的传感放大器。因此,原理上,您可以通过激活每一个块中的一行,读写较长的突发,然后,对每一激活后的行进行读写操作——实际上是对块进行间插操作。唯一增加的延时是连接每一块的传感放大器和芯片内部总线的缓冲的切换时间。这一延时要比对相同块中一个新行进行预充电和激活的时间短得多。

图2.一个典型的DDR DRAM结构图。一个DDR3器件会有8个块,而不是4个。

这就是原理。实际中,您可以对块进行间插处理,但是有一个限制,不是基于DRAM逻辑,而是芯片能够承受的热量。这种限制可以通过著名的“滚动四块访问窗口”,即,tRAW来表达:您一次能够有四个激活块的最长时间。这一规则实际上有例外,只要您从一个块转向下一块之前,在一个块上保持一定的时间,那么,您可以有连续激活的8个块。但是您应该知道:这比较复杂。

建立一个控制器

与前面所述不同的是DRAM时序非常复杂,接近混沌。从DRAM芯片设计人员的角度看,这非常合理,但是,很难满足多核SoC的需求。DRAM序列或者时序命令上看起来无关紧要的小改动会导致您访问存储器的带宽的巨大变化。由于存储器带宽通常是关键任务的瓶颈所在,因此,带宽的变化很快就会影响系统性能。然而,命令序列和时序来自应用程序和系统软件之间,以及系统硬件各种单元之间复杂的交互——包括缓存控制器、存储器管理器、直接存储器访问(DMA)控制器和加速器,以及DRAM控制器。

SoC的功能越来越强大,这种情况会更加复杂。目前,一个多核系统级IC会有同时运行的两个甚至更多的多线程CPU,导致共享L2高速缓存来读取指令线,随机对数据线进行读写操作。同时,计算加速器以自己的方式遍历数据结构。一个器件可以处理流视频,另一个用于矩阵乘法预读取,第三个执行路由表的随机访问。增加一个散射收集DMA控制器,处理光纤接口、硬盘和显示器之间的数据,结果是,在DRAM控制器的系统侧会有些不协调。

如果DRAM控制器只是按照系统接收顺序进行操作,那么,优化DRAM操作的工作会同等落在规划人员、设计人员和软件开发人员上——这是很难做到的。Altera公司战略市场经理Argy Krikelis提醒说:“特别是多核设计,规划人员遇到定位和性能问题。”责任落在DRAM控制器上,那么,尽可能利用其信息消除这种不协调,转换为经过优化的命令流。

深入了解DRAM控制器就会知道,这些模块的设计人员怎样处理这些难题。您可以认为一个现代DRAM控制器有三个主要模块——物理接口、命令处理器以及事物处理器——如图3所示。

图3.一个现代DRAM控制器涉及到事物处理器、命令处理器和物理接口。

物理接口连接DRAM芯片或者存储器模块。它读取来自命令处理器的一个命令流,将具有正确时序的命令发送至DRAM芯片,管理相关的数据字节流。接口收发器、命令和数据同步缓冲,以及产生正确命令和数据时序的状态机都含在这一模块中。而且,还有用于进行复杂的初始化操作的状态机,校准DDR3DRAM规范设定的序列,如图1所示。此外,某些应用的物理接口还会包括自测试、诊断和误码探测以及纠错硬件。当您改变DRAM的容量或者速率等级时,必须调整物理接口。

物理接口的上游是命令处理器。这一模块跟踪DRAM的状态,将到达总线读写周期转换为相应的DRAM命令序列。例如,命令处理器会找到通过其输入队列散射连续字的总线读序列,然后,向其输出队列发出预充电,激活,以及模块读命令。对此,命令处理器必须知道当发出新命令后,将打开哪一芯片的哪一块的哪一行。在某些设计中,命令处理器还处理地址重新映射,在多个块上扩展一个连续的数据结构。

随着对带宽需求的增长,命令处理器的复杂度也在不断提高。例如,处理器会提前处理其输入队列,重新安排操作,尽可能保持在激活的行上,重叠预充电读操作,或者对块进行间插操作。最重要的是,处理器会尽量避免一个块的行之间出现乒乓效应。必须确定所有这些调整,并且随时能够进行调整。

这方面的努力会有其回报。Krikelis说:“我们看到在某些应用中,分组和重新排序能够实现92%的理论最大DRAM带宽。”

最后,事物处理器位于命令处理器和SoC的其他部分之间。一般有一些通道连接至SoC的高速中心交换结构上。事物处理器的主要工作是将到达的各种通道的读写数据流进行组合,加上优先级,这样,每一通道得到了所需的延时和带宽——因此,每一高速缓存控制器、DMA引擎或者这些通道另一端的加速器也得到了所需的延时和带宽。

在动态环境中选择这种优先级方案并不容易。如果您不能精确的预测每一通道的数据流特性,那么,这会非常困难。理想情况下,工作负荷是固定的,因此,您可以为其优化优先级方案。或者,会有一些清晰的访问模式,随着数据流的变化而提供动态调整优先级。Krikelis 说,系统规划人员和控制器设计人员研究了这一问题,使用了从表格到商用DRAM仿真工具的所有工具。但,还是无法让工作更简单一些。

在某些情况下,应用的特征很明显,事物处理器会承担更多的工作。Krikelis说,可以对最近的DRAM行进行高速缓存操作,或者控制器中经常被激活的行进行高速缓存操作。而且,在某些情况下,设计人员可以针对某些通道进行一些特定任务的重新排序或者某些读写操作。

高级DRAM控制器中的三个主要模块协同工作,能够使复杂多核SoC尽可能接近最大理论DRAM带宽。但是提高带宽可能需要牺牲延时,最高优先级线程除外。某些控制器设计会有32或者64深命令序列,意味着,低优先级访问会长时间停留在序列中。一般而言,DRAM 控制器能够进行的工作越多,它处理的SoC体系结构和组合任务就越具体。这就把难题留给了系统设计人员。

回到系统级

您可能会说:“很有趣。对此,我应该做什么?”正如我们在开始所阐述的,软件、系统硬件以及控制器之间的交互会决定您从DRAM那里能够得到的实际带宽。作为一名系统设计人员,您的确有一定的自由度。

最好的方法一般是采用SoC供应商的参考设计。参考设计团队完成了他们的工作。理想情况下,您完全按照设计人员所希望的方式来使用SoC。Krikelis提醒说:“如果您购买了ASSP,那就没有太多的选择。DRAM控制器和芯片中的其他模块会针对特定的应用进行整体优化。”

参考设计中的这些软件也是在知道了这些优化后才编写的。例如,经验丰富的编程人员会尽可能保持存储器参考位于行中,可以同时打开,以便减少高速缓存未命中和DRAM行未命中等问题。他们能够熟练的在块上分配数据结构,采用间插操作。他们可以安排CPU内核、加速器和DMA的工作,避免控制器可能解决不了的冲突问题。他们知道,对于控制器中未处理器的命令,DRAM、高速缓存以及命令队列中的数据,数据一致性是他们要解决的关键问题。采用这类参考设计的系统设计人员的工作是尽量不打破这种一致性。

但是有些时候,系统设计人员会有更大的自由度。Krikelis指出,如果DRAM物理接口是可配置的,您可以通过简单的使用更大的DRAM来提高存储器的有效带宽。在某些情况下,可以调整一些DRAM控制器的内部参数,例如,分配给通道的优先级、重新排序算法,以及命令队列的深度等。

但是,在某些情况下,仅仅进行调整是不够的。Krikelis提醒说:“没有一个简单的答案来满足所有人的规划需求。有时候您需要建立自己的访问抽象层。”

对于资金雄厚的有影响的设计团队,这意味着,与ASSP供应商合作,修改事物处理器,甚至是命令处理器。对于其他规模较大的工程,DRAM带宽需求会满足开发ASIC的要求。

对于不能满足ASIC前端成本的设计,替代方案是系统级FPGA。通过这些方法,系统设计人员在控制器的某些部分采用现有的知识产权(IP),设计尽可能多的定制操作和命令处理操作,以满足其需求。

即使系统团队选择不去修改DRAM控制器,他们理解其功能也很重要。很多选择都能够实现与DRAM控制器的互操作,从DRAM芯片选择到数据怎样在系统中输入输出,线程怎样分配给处理器,应用程序怎样将数据结构映射到物理存储器中等。难点是怎样高效的使用DARM带宽,最终目的是提高整个系统的性能和能效。

DRAM Controllers for System Designers

By Ron Wilson,Editor-in-Chief,Altera Corporation

Buried somewhere inside the system-on-a-chip(SoC)at the heart of your system is a DRAM controller—or maybe there are two,or four.They are carefully-crafted,tiny blocks of logic that quietly go about their business of connecting the internals of the SoC to external DRAM,requiring no attention from system designers.Or,they wreak havoc,wasting bandwidth,burning energy needlessly,and even allowing data to be corrupted.

The proper operation of the DRAM controller can make the difference between a system that meets its design requirements and a system that runs too slow,overheats,or fails.Either way,ultimately the system design team—who often have little access to information about the controller—will bear the responsibility.

The difference between success and failure arises from the job we ask the DRAM controller to do.The block is far more than just an interface.In advanced system designs,the DRAM controller must mediate between the complex and unpredictable patterns of memory requests dictated by the SoC architecture and system software on one side,and the byzantine timing and obstructive constraints of the DRAM chip design on the other.The difference between good and bad mediation can be a factor of two or more in effective DRAM throughput:a change easily visible in system performance.

To explain these issues—and what system designers can do about them—we need to address three topics.First, we will examine the requirements imposed by the DRAM chip.Then we will discuss the influences of the SoC architecture on memory access patterns,and third,we will explore the structure and function of an advanced DRAM controller.These three sections will lead us to some conclusions about system design.

What DRAMs Want

All a system architect asks of external memory is deterministic random access:any word from any location at any time,with a fixed latency.But deterministic random access is exactly what the modern DDR3DRAM does not offer.

Instead,DRAM offers any word you want,but with a labyrinth of timing constraints that make it difficult to know when the data will actually appear.The“simplified”state-transition diagram in Figure1captures some idea of this complexity.This complexity also means that the order in which commands arrive at the DRAM chip can have a huge influence over timing,and hence,bandwidth.To understand,we must look inside the DDR3DRAM.

simplified””state diagram for a DDR DRAM chip suggests the complexity faced by Figure1.The“simplified

controller designers.

The DRAM chip stores data in an array of capacitors.When you read or write data,you don’t go directly to the array.Instead,before reading or writing,you activate a particular row in the array.The activate command causes the DRAM to read all the bits from all the columns in that row into a bank of sense amps,which in effect then serve as a local register file for the row.Then you can issue read or write commands that act on the data in the sense amps.In this way reads and writes to an already-active row can be very fast:typically three to five clocks to begin a burst transfer,and then one clock per byte during the burst.This timing makes the DDR3 DRAM wonderful for exchanging data with L2caches,for example.

But if you leave the row you have activated,things get more complicated.To change rows—even for one byte—you must deactivate the current row and activate the new one.This process requires making sure that the current row has been active for a specified minimum time.This minimum delay is necessary because reading

DRAM cells is destructive:as soon as you activate a row,the DRAM copies the data newly arrived at the sense amps back into the bit-cell array,refreshing the row,in effect.You can do reads and writes on the current row while this is happening,but you have to be sure that this process is completed before you change rows.

Even after this requirement is met,there’s more.You must precharge the array.The precharge command invalidates the data in the sense amps,and it pumps up the voltage on the wires between the array and the sense-amp inputs to halfway between the logic-0and logic-1levels.This preparation is necessary so that the tiny charge—or lack thereof—on the bit cell capacitors can transfer into the wires and tip the sense amps one way or the other.

Once you have precharged the wires,you must send an activate command for the new row,wait for the operation to complete,and then you can finally send a new read command.After adding up all the delays involved,the worst case for reading a sequence of bytes,each from a different row,can be ten times slower than reading the same number of bytes from consecutive locations in one row.

This difference is only part of the story.As Figure2illustrates,DDR DRAM has multiple banks:independent arrays of bit cells.Each bank,of which there are eight in DDR3DRAMs,has its own row of sense amps.So,in principle,you could read or write a longer burst by activating a row in each of several banks,and then reading or writing a burst in each activated row—in effect interleaving the banks.The only additional delay would be the switching time of the buffers that connect each bank’s sense amps to the chip’s internal bus.That delay would be far shorter than the time to precharge and activate a new row within the same bank.

Figure2.A typical DDR DRAM block diagram.A DDR3device would have eight banks instead of four.

That is the principle.In practice you actually can interleave banks,but there is a limitation,based not on the DRAM logic but on the amount of heat the chip can withstand.The limit is expressed as the semi-famous“rolling four-bank access window,”or tRAW:the longest time during which you can have four banks activated at one time.There are actually exceptions to this rule,allowing you to have all eight banks active continuously so long as you spend the right amount of time in one bank before moving to the next one.But you get the idea:it’s complicated.

Creating a Controller

The point of the foregoing excursion is that DRAM timing is intricate,bordering on chaotic.It makes perfect sense from the point of view of a DRAM chip designer,but is hopelessly inappropriate to the needs of a multicore SoC.A small,seemingly inconsequential change in the sequence or timing of commands to the DRAM can result in a huge change in the bandwidth you can actually get through the memory.With memory bandwidth often the bottleneck for critical tasks,the change in bandwidth quickly becomes a change in system performance. Unfortunately,the command sequence and timing come from a complex interaction of the application and

system software,the various elements of the system hardware—including cache controllers,memory managers, direct memory access(DMA)controllers,and accelerators—and the DRAM controller.

The situation only gets more complicated as SoCs grow more powerful.Today a multicore system-level IC may have two or more multithreaded CPUs running concurrently,causing a big shared L2cache to fetch lines of instructions and to read and write lines of data seemingly at random.At the same time,computational accelerators may be traversing data structures,each in its own way.One device may be streaming video while another prefetches for a matrix multiplication and a third executes random accesses to a routing table.Add a scatter-gather DMA controller pumping data between a fiber interface,a disk,and a display,and the result is that,at the system side of the DRAM controller,you have cacophony.

If the DRAM controller simply processed operations in the order received from the system,the responsibility for optimizing DRAM transactions would fall equally upon architects,hardware designers,and software developers—a pretty hopeless situation.“Especially with multicore designs,architects run into localization and performance issues,”warns Argy Krikelis,strategic marketing manager at Altera Corporation.The responsibility falls on the DRAM controller,then,to use the information available to it to turn cacophony into an optimized stream of commands as best it can.

A look inside the DRAM controller shows how designers of these blocks are responding to this predicament.You can think of a modern DRAM controller as having three main blocks—the physical interface,the command processor,and the transaction processor—as shown in Figure3.

Figure3.A modern DRAM controller involves a transaction processor,a command processor,and a physical interface.

The physical interface connects to the DRAM chips or memory modules.It takes in a single stream of commands from the command processor,sends the commands with proper timing to the DRAM chip,and manages the

associated flows of data bytes.The interface transceivers,synchronous buffers for commands and data,and a state machine to generate proper command and data timing are all included in this block.Also,there is a state machine for the complex initialization and calibration sequences specified in the DDR3DRAM spec and alluded to in Figure1.In addition,the physical interface in some applications may include self-test,diagnostic,and error-detection and correction hardware.The physical interface must be adjusted when you change to a different size or speed-grade of DRAM.

Upstream from the physical interface is the command processor.This block keeps track of the state of the DRAM, and translates incoming bus read and write cycles into the proper sequence of DRAM commands.For example, the command processor might find a series of bus reads of consecutive words scattered through its input queue, and,in response,issue a precharge,an activate,and a block-read command to its output queue.In order to do this,the command processor must know which rows in which banks of which chips will be open when the new commands get issued.In some designs,the command processor also does address remapping,in effect spreading one contiguous data structure across multiple blocks.

As the need for bandwidth increases,the complexity of the command processor must increase,too.For example, the processor might look ahead through its input queue and attempt to reorder operations to stay on an activated row as long as possible,to overlap reads with precharges,or to interleave banks.Above all,the processor will seek to avoid ping-ponging between rows within one bank.All of these adjustments must be identified and made on the fly.

This effort can have its rewards.“We’ve shown that in some applications,grouping and reordering can achieve 92percent of the theoretical maximum DRAM bandwidth,”Krikelis says.

Finally,the transaction processor sits between the command processor and the rest of the SoC.It typically has a number of channels connecting it to the SoC’s high-speed central switch.The main job of the transaction processor is to blend together the streams of reads and writes coming in on the various channels,imposing a priority scheme so that each channel—and,therefore,each cache controller,DMA engine,or accelerator on the other ends of those channels—gets the latency and bandwidth it needs.

Selecting such a priority scheme in a dynamic environment is not easy.It is more difficult if you can’t accurately predict the characteristics of the traffic on each channel.Ideally,the workload would be fixed so you could optimize a priority scheme for it.Or there would be several clearly identified modes of access,and provision for dynamically adjusting priorities as the traffic shifted.Krikelis says that system architects and controller designers study this problem to exhaustion with tools ranging from spreadsheets to commercial DRAM simulation tools.But nothing makes the job easy.

In some cases where the application is well characterized,the transaction processor may take on even more responsibility.“It can make sense to cache the most recent DRAM row,or a row that is frequently activated,in the controller,Krikelis says.Also,in some cases,designers may do some task-specific reordering or speculative reads or writes for a particular channel.

Working together,the three major blocks in an advanced DRAM controller can move even a complex multicore SoC closer to the theoretical maximum DRAM bandwidth.But bandwidth may come at the expense of latency for

all but the highest-priority threads.Some controller designs may have32-or64-deep command queues, meaning that a low-priority access may be lodged in the queue a long time.In general,the more aggressive the DRAM controller is,the more specifically it must be tuned to a particular SoC architecture and task mix.And therein lays the challenge for the system designer.

Back to System Level

“Fascinating,”you say.“What does that have to do with me?”As we said at the beginning,interaction of software,system hardware,and the controller will determine the actual bandwidth you get from your DRAMs. As a system designer,you do have some degrees of freedom.

The best approach often is to adopt the SoC vendor’s reference design.The reference design team has—one hopes—done their homework.And ideally,you are using the SoC in the exact way that the designers envisioned.“If you are buying an ASSP,you don’t have many options,”Krikelis warns.“The DRAM controller and the other blocks in the chip have probably been optimized together for a specific application.”

The software in the reference design has probably been written with knowledge of those optimizations,too.For example,skilled programmers will try to keep memory references localized to rows that are likely to be open simultaneously in order to minimize both cache misses and DRAM row misses.They will skillfully distribute data structures across banks to exploit interleaving.They will choreograph operation of CPU cores,accelerators,and DMA to avoid contention issues the controller could not resolve.And they will be aware that with many pending commands queued in the controller and versions of the data spread among the DRAM,caches,and command queues,data coherency is a critical issue that is up to them to solve.The system designer’s job in applying such a reference design is to not break it.

But sometimes the system designer has more freedom.If the DRAM physical interface is configurable,Krikelis points out,you can often add effective memory bandwidth by simply using a bigger DRAM.And in some cases, some of the internal parameters of the DRAM controller,such as the priorities assigned to the channels,the reordering algorithms,or the depth of the command queue,may be adjustable.

For some situations,though,a few knobs are not enough.“There is no single answer to everyone’s scheduling needs,”Krikelis asserts.“Sometimes you have to create your own access abstraction layer.”

For rich and influential design teams,this can mean working with the ASSP vendor to modify the transaction processor and maybe the command processor.For other large projects,the need for DRAM bandwidth may justify developing an ASIC.For designs that can’t justify the up-front cost of an ASIC,the alternative increasingly is a system-level FPGA.These approaches allow system designers to exploit existing intellectual property(IP)for some portions of the controller and to design as much custom transaction and command processing as they require.

Even if the system team chooses not to modify the DRAM controller at all,it is still important for them to understand its function.Many choices--from DRAM chip selection to how data moves in and out of the system, to how threads are allocated to processors,to how applications map data structures into physical memory—all

can interact with the operation of the DRAM controller.At stake is the efficient use of DARM bandwidth and, ultimately,the performance and energy efficiency of the entire system.

主存储器部件的组成与设计.

主存储器部件的组成与设计 主存储器部件的组成与设计 类别:存储器 主存储器概述(1)主存储器的两个重要技术指标◎读写速度:常常用存储周期来度量,存储周期是连续启动两次独立的存储器操作(如读操作)所必需的时间间隔。◎存储容量:通常用构成存储器的字节数或字数来计量。(2)主存储器与CPU及外围设备的连接是通过地址总线、数据总线、控制总线进行连接,见下图主存储器与CPU的连接◎地址总线用于选择主存储器的一个存储单元,若地址总线的位数k,则最大可寻址空间为2k。如k=20,可访问1MB的存储单元。 ◎数据总线用于在计算机各功能部件之间传送数据。◎控制总线用于指明总线的工作周期和本次输入/输出完成的时刻。(3)主存储器分类 ◎按信息保存的长短分:ROM与RAM◎按生产工艺分:静态存储器与动态存储器静态存储器(SRAM):读写速度快,生产成本高,多用于容量较小的高速缓冲存储器。动态存储器(DRAM):读写速度较慢,集成度高,生产成本低,多用于容量较大的主存储器。静态存储器与动态存储器主要性能比较如下表:静态和动态存储器芯片特性比较SRAMDRAM存储信息触发器电容破坏性读出非是 需要刷新不要需要送行列地址同时送分两次送运行速度 快慢集成度低高发热量大小存储成本高低 动态存储器的定期刷新:在不进行读写操作时,DRAM存储器的各单元处于断电状态,由于漏电的存在,保存在电容CS上的电荷会慢慢地漏掉,为此必须定时予以补充,称为刷新操作。2、动态存储器的记忆原理和读写过程(1)动态存储器的组成:由单个MOS管来存储一位二进制信息。信息存储在MOS管的源极的寄生电容CS中。◎写数据时:字线为高电平,T导通。写“1”时,位线(数据线)为低电平,VDD(电源)将向电容充电写“0时,位线(数据线)为高电平,若电容存储了电荷,则将会使电容完成放电,就表示存储了“0”。◎读数据时:先使位线(数据线)变为高电平,当字线高电平到来时T导通,若电容原存储有电荷(是“1”),则电容就要放电,就会使数据线电位由高变低;若电容没有存储电荷(是“0”),则数据线电位不会变化。检测数据线上电位的变化就可以区分读出的数据是1还是0。注意①读操作使电容原存储的电荷丢失,因此是破坏性读出。为保持原记忆内容,必须在读操作后立刻跟随一次写入操作,称为预充电延迟。②向动态存储器的存储单元提供地址,是先送行地址再送列地址。原因就是对动态存储器必须定时刷新(如2ms),刷新不是按字处理,而是每次刷新一行,即为连接在同一行上所有存储单元的电容补充一次能量。③在动态存储器的位线上读出信号很小,必须接读出放大器,通常用触发器线路实现。④存储器芯片内部的行地址和列地址锁存器分先后接受行、列地址。⑤RAS、CAS、WE、Din、

交叉存储器设计

计算机组成原理课程设计 多体交叉存储器 一、设计目的 (1)深入了解提高计算机系统效率的一种有效方式——并行性; (2)研究交叉存储器的设计原理和实现方式,采用并行性的设计思想,设计一个简易的采用低位交叉编址的并行结构存储器; (3)复习和回顾译码电路设计、地址、数据和控制电路设计的相关知识;展开研究性教学,拓展大家知识面,提高分析问题解决问题的能力; (4)培养大家独立思考和创新研究的能力,积极营造自主创新的良好氛围; 二、设计内容 本次研究性设计要求为:设计一个容量为64KB 的采用低位交叉编址的8体并行结构存储器。画出CPU 和存储芯片(芯片容量自定)的连接图,并写出图中每个存储芯片的地址范围(用 十六进制数表示)。 三、设计要求 (1)参考教材中关于交叉存储器的原理,给出系统设计方案,包括译码芯片的选择、各个芯片的工作时序设计; (2)注意片选信号的产生电路设计、地址锁存电路设计、数据信号线的电路设计、控制信号线的设计、交叉存储的实现; (3)要了解交叉存储器并行工作原理、各个存储器提的启动信号和地址、数据、片选信号的关系、如何实现1/8存储器周期就能够读取一次数据。 四、设计方案 (1)总线和控制信号确定 设CPU 共有16根地址线,8根数据线,并用IO /M 作为访问存储器或I/O 的控制信号(高电平为访存,低电平为访I/O ),WR (低电平有效)为写命令,RD (低电平有效)为读命令。

要求:设计一个容量为64KB 的采用低位交叉编址的8体并行结构存储器。画出CPU 和存储芯片(芯片容量自定)的连接图,并写出图中每个存储芯片的地址范围(用十六进制数表示)。 所需存储器芯片和138 Ai A0 … CE … WE Dn D0 RAM 存储器芯片 74LS138译码器 (2)设计分析 要设计一个容量为64KB 、采用低位交叉编址的8体并行结构存储器,则每个存储体容量应为64KB/8 = 8KB ,所以,应选择8KB (213B )的RAM 芯片,需要芯片8块、地址线13根(A12-A0)、数据线8根(D7-D0),其中在片选信号的产生时需要用到74LS138译码器。 (3)设计实现 ① 8片8K ×8RAM 芯片对应的二进制编码 第0片:0000、0008、0010、…、FFF8H ,即: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 … 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 第1片:0001、0009、0011、…、FFF9H ,即: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 … 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 第2片:0002、000A 、0012、…、FFFAH ,即: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 … RAM G1 /Y7 /G2A /Y6 /G2B /Y5 /Y4 /Y3 C /Y2 B /Y1 A /Y0

实验五_存储器设计

计算机组成原理 实验五《存储器设计》 实验报告 姓名:吴速碘黄紫微 学号:13052053 13052067 班级:计算机二班 日期2015、5、25

实验五存储器设计 一、实验目的 1、掌握RAM和ROM的Verilog语言描述方法; 2、学习用宏模块的方法定制RAM和ROM。 二、实验任务 1、设计并实现一个128*16 的单端口的RAM; 2、设计并实现一个128*16的ROM; 3、设计并实现一个双端口的128*16的RAM 4、设计并实现一个16*32的FIFO。 5、设计并实现正弦信号发生器,见“正弦信号发生器实验指南”。 三、实验步骤 1 编写Verilog代码(见附页) 2功能仿真 进行分析与综合,排除语法上的错误 建立波形仿真文件,输入激励 生成功能仿真网表 进行功能仿真,观察输出结果 3选择器件 DE2_70开发板的使用者请选择EP2C70F896C6 4绑定管脚 5 下载验证 DE2_70开发板的下载:使用USB-Blaster进行下载 四、实验内容 五、实验思考题 1、分析存储器采用三态输出的原因是什么? 存储器的输出端是连接在数据总线上的。数据总线相当于一条车流频繁的大马路,必须在绿灯条件下,车辆才能进入这条大马路,否则要撞车发生交通事故。同 理,存储器中的数据是不能随意传送到数据总线上的。例如,若数据总线上的数 据是“1”(高电平5V),存储器中的数据是“0”(低电平0V),两种数据若碰到一 起就会发生短路而损坏单片机。因此,存储器输出端口不仅能呈现“l”和“0”两 种状态,还应具有第三种状态“高阻"态。呈“高阻"态时,输出端口相当于断开,对数据总线不起作用,此时数据总线可被其他器件占用。当其他器件呈“高阻”态 时,存储器在片选允许和输出允许的条件下,才能将自己的数据输出到数据总线 上。 2、单端口和双端口的区别是什么? 单端口ram是ram的读写只有一个端口,同时只能读或者只能写。 双端口ram是ram读端口和写端口分开,一个端口能读,另一个端口可以同时写。 3、什么情况下考虑采用双端口存储器?

计算机组成原理课程设计-相联存储器的设计

沈阳航空航天大学 课程设计报告 课程设计名称:计算机组成原理课程设计课程设计题目:相联存储器的设计与实现 院(系):计算机学院 专业:物联网技术方向 班级:物联1305 学号: 姓名: 指导教师: 完成日期:2016年1月15日

目录 第1章总体设计方案 (1) 设计原理 (1) 设计思路 (2) 设计环境 (3) 第2章详细设计方案 (5) 总体方案的设计与实现 (5) 创建顶层图形设计文件 (5) 器件的选择与引脚锁定 (5) 功能模块的设计与实现 (8) 检索寄存器的设计与实现 (8) 屏蔽寄存器的设计与实现 (8) 存储体的设计与实现 (9) 比较器的设计与实现 (10) 与门芯片的设计与实现 (11) 第3章程序调试与结果测试 (12) 程序调试 (12) 程序测试及结果分析 (12) 参考文献附录(源代码) (15)

第1章总体设计方案 1.1设计原理 相联存储器不按地址寻址而按照内容寻址,相联存储器由检索寄存器CR、屏蔽寄存器MR、存储体和结果寄存器SRR构成。设存储器有8个字,8位,则CR 与MR为1字8位,将要检索的内容输入到检索寄存器CR中,用屏蔽寄存器MR 屏蔽掉存储体中不参与比较的位数,其余比较位不变,将这个结果与检索寄存器比较,将结果送入结果寄存器保存,根据结果寄存器的数据可以得到符合检索寄存器的数据所在的存储区域,原理如图1。 图 1 相联存储器原理图

1.2设计思路 检索寄存器(CR):存放要检索的数据,位数与存储器字长一致。 屏蔽寄存器(MR):与CR配合使用,检索位置为1,其余不参与比较的位设为0,位数与存储体字长一致,与存储体里的数据相与,得到的结果送入结果寄存器保存。 存储体:由3-8译码器选择地址输入数据,是8乘8的结构。 结果寄存器:存放检索寄存器和屏蔽寄存器相与的结果。 若存储体存的八个存储单元分别存着数据为: 00100110、、、、01100010、、00101001,CR中存储的数据为00010100,MR存的数据是00011100,经过比较可以发现第三个和第五个存储单元符合CR,所以输出00101000,见图2。 X X X 1 0 1 X X CR SRR 1 1

存储器设计:存储器设计课程设计

计算机组成原理实验 实验五存储器设计 专业班级计算机科学与技术 学号0936008 姓名冯帆 学号0936036 姓名张琪 实验地点理工楼901 实验五存储器设计 一、实验目的 1、掌握RAM 和ROM 的Verilog 语言描述方法; 2、学习用宏模块的方法定制RAM 和ROM 。 二、实验内容

1、设计并实现一个8*8 的单端口的RAM ; 2、设计并实现一个128*16的ROM ; 3、设计并实现一个双端口的128*16的RAM 。 4、设计并实现正弦信号发生器,参考“正弦信号发生器实验指南”。 三、实验仪器及设备 PC 机+ Quartus Ⅱ0 + DE2-70 四、实验步骤 打开Quartus 软件,新建工程。 2.分析单端口,双端口,ROM,RAM 的含义。 3.Verilog 程序如下,并简单注释。 ①

module SingleRamTest(read_data, read_address, write_data, write_address, memwrite, clock, reset); output [7:0] read_data; //数据的输出 input [2:0] read_address; //读数据地址的输入 input [7:0] write_data; //写数据地址的输入 input [2:0] write_address; //写数据地址的输入 input memwrite; //若该信号为1,进行写操作,反之,写操作input clock; input reset; //复位和时钟信号 reg [7:0] read_data, mem0, mem1,mem2,mem3,mem4,mem5,mem6,mem7; //设置存储器存储单元 always @(read_address or mem0 or mem1 or mem2 or mem3 or mem4 or mem5 or mem6 or mem7) //若上述信号有一个发生变化,则启动该模块begin

杭电计算机组成原理存储器设计实验5

杭州电子科技大学计算机学院 课程名称 实验项目 指导教师 实验位置 计算机组成原理 存储器设计实验 实验报告 ______ 姓 ______ 班 名 级 号 期 2015年5月15日

本实验的结果正确,根据自己写的coe 文件中存储的数据进行操作,和实验四 有很多的相似 处,只是进行简单的读写的操作 ,实验的结果正确?能够根据操 作,lED 灯显示具体的数据? 配置管脚: NET "C[0]" LOC = T10; NET "C[1]" LOC = T9; NET "Clk" LOC = C9; ( 接 上) 实验 内容 ( 算 法、 程 序、 步骤 NET "LED[0]" LOC = :U16; NET "LED[1]" LOC = :V16; NET "LED[2]" LOC = :U15; NET "LED[3]" LOC = :V15; NET "LED[4]" LOC = :M11; NET "LED[5]" LOC = :N11; NET "LED[6]" LOC = :R11; NET "LED[7]" LOC = :T11; NET "Mem_Addr[2]" LOC = :V9; NET "Mem_Addr[3]" LOC = :M8; NET "Mem_Addr[4]" LOC = :N8; NET "Mem_Addr[5]" LOC = :U8; NET "Mem_Addr[6]" LOC = :V8; NET "Mem_Addr[7]" LOC = :T5; NET "Mem_Write" L( OC = B8; 实验仿真结果 数据 记录 和计 Objqcti f

计算机组成原理相联存储器的设计

沈阳航空航天大学课程设计报告 目录 第1章总体设计方案 (2) 1.1设计原理 (2) 1.2设计思路 (3) 1.3设计环境 (4) 第2章详细设计方案 (5) 2.1顶层方案图的设计与实现 (5) 2.1.1创建顶层图形设计文件 (5) 2.1.2器件的选择与引脚锁定 (5) 2.1.3编译、综合、适配 (6) 2.2功能模块的设计与实现 (7) 2.2.1 输入寄存器的实现 (7) 2.2.2存储体的设计与实现 (8) 2.2.3 数字比较器的实现 (10) 2.2.4查找结果寄存器的实现 (12) 2.3仿真调试 (13) 第3章编程下载与硬件测试 (15) 3.1编程下载 (15) 3.2硬件测试及结果分析 (15) 参考文献 (17) 附录(电路原理图) (18)

第1章 总体设计方案 1.1 设计原理 相联存储器(C ontent Addressed Memory ),它是一种按内容访问的存储器,可以根据数据记录地一部分内容查找其它部分的内容。在相联存储器中,每个存储的数据记录都是固定长度的字,每个字由若干字段组成,每个字段描述了用一个对象的属性,也称一个内容。 相联存储器的结构框图如图1.1所示。 它主要实现将输入寄存器(CR)的信息与存储体的信息作比较,相匹配的置为“1”,不匹配的置为“0”, 将结果送入查找结果寄存器(SRR)中,并输出结果。 图1.1 相联存储器原理框图

1.2 设计思路 根据相联存储器的原理特点,即按照内容寻址,因此可以将相联存储器分为以下几个部分:输入寄存器,译码选择电路,存储体,数字比较器,查找结果寄存器。 输入寄存器(CR):用来存放检索字,其位数和相联存储器的字长相等。 译码选择电路:用3-8译码器进行译码电路选择,如当置输入端B2B1B0为“000”,时钟脉冲信号为高电位时,可以向存储体第一个单元地址输入八位二进制的字信息,同时其他的存储单元的信息被屏蔽掉。当置输入端B2B1B0为“001”时,时钟信号为高电位时,可以向存储体第二个单元地址输入八位二进制的字信息,同时其他的存储信号单元被屏蔽掉。 存储体(AMU):用于存放待检索的数据,由八个八位二进制存器构成,以便快速存取。 数字比较器:将检索的内容和从存储体中读出的所有单元内容的相应位进行比较,如果有某个存储单元的信息和检索项一致,就把符合寄存器的相应位置“1”,表示该字匹配;否则置“0”,表示不匹配。 查找结果寄存器(SRR):用来存放待检索项与存储体的信息中相符合的单元的寄存器地址,其位数等于相联存储器的存储单元总数,每一位对应一个存储单 元,位的序列数即为相联存储器的单元地址。 设存储体由8个字构成,字长为8位的二进制数。CR为比较寄存器,字长也为8位,存放要比较的两个数。首先向输入寄存器输入一个八位二进制的字,然后通过3—8译码器选择电路依次将八个八位二进制数输入到存储体中。将输入到输入寄存器的字通过比较寄存器分别与存储体里的八个字检索比较,若匹配,则输出信号置1,否则置0。匹配信号通过查找结果寄存器(SRR)输出,我们就能找到匹配的那个字。 若存储体八个单元存储的数据分别为0000000、00000001、00000010、00000011、00000100、00000101、00000110, 00000111,输入寄存器中的存储数据是00000011,通过比较器CR进行比较之后,可以知道发现检索数据与存储体中的第四个单元的内容一致,所以结果查找寄存器SRR中的第四个单元置为“1”,

存储器子系统设计(计算计算机组成原理)

《计算机组成原理》课程设计 题目:存储器子系统设计 1.问题描述 用1K*8b的RAM芯片和2K*8b的ROM芯片以及74LS138译码器构成一个2K*8b的RAM,4K*8b的ROM的静态存储器系统,使用的CPU为8086。 2.需求分析 任务概述: 构造存储器子系统,要求有初步设计方案及示意图,然后还要有详细设计的工程图。 功能描述: 存储器是计算机系统中的记忆设备,需要用不同类型,不同规格的存储器芯片,通过适当的硬件连接,来构成所需要的存储器系统。目前使用广泛的内部存储器是半导体存储器,本次设计使用的是SRAM,SRAM是用一个锁存器作为存储元。只要直流供电电源一直加在这个记忆电路上,它就无限期地保持记忆的1状态或0状态。如果电源断电,那么存储的数据就会丢失,与此同时还用了一个ROM,将其与 CPU 的连接,CPU 对存储器进行读写操作,首先要由地址总线给出地址信号,选择要进行读 / 写操作的存储单元,然后通过控

制总线发出相应的读 / 写控制信号,最后才能在数据总线上进行数据交换。 3.概要设计 通过两片RAM和两片ROM的进行字扩展,3—8译码器译码,与 CPU 的连接。 初步设计方案,其示意图如下: 4.详细设计 用两片1K*8b构成的2KB的RAM和两片2K*8b构成的4KB

的ROM组成的存储器系统,使用CPU8086. 5.参考文献:教材《计算机组成原理》、网上资料。 6.总结报告 存储器是计算机系统中的记忆设备,用来存放程序和数据。 做该课程设计花了4周左右的时间,经过了老师的讲解,指导,还有我们自己上网找资料,从中收获不少,深深体会到了老师讲的“查手册”的重要性,同时对计算机硬件方面有了更深一步的了解。

存储器设计

| ************* 课程设计报告 课程设计名称:计算机组成原理课程设计课程设计题目:存储器设计 、 院(系):*********** 专业:*********** 班级:*********** 学号:*********** & 姓名:*********** 指导教师:*********** 完成日期:***********

目录 第1章总体设计方案 (1) 设计原理 (1) 设计思路 (1) 设计环境 (2) 第2章详细设计方案 (5) 顶层方案图的设计与实现 (5) 创建顶层图形设计文件 (5) 器件的选择与引脚锁定 (5) 编译、综合、适配 (6) 功能模块的设计与实现 (6) RAM256*1存储器模块的设计与实现 (7) RAM1K*1存储器模块的设计与实现 (8) RAM1K*4存储器模块的设计与实现 (10) RAM4K*4存储器模块的设计与实现 (11) 仿真调试 (13) 第3章编程下载与硬件测试 (15) 编程下载 (15) 硬件测试及结果分析 (15) 参考文献 (18) 附录(电路原理图) (19)

第1章总体设计方案 设计原理 当一片RAM(或ROM)不能满足存储容量位数(或字数)要求时,需要多片存储芯片进行扩展,形成一个容量更大、字数位数更多的存储器。扩展方法根据需要有位扩展、字扩展和字位同时扩展3种。 (1)位扩展 若一个存储器的字数用一片集成芯片已经够用,而位数不够用,则用“位扩展”方式将多片该型号集成芯片连接成满足要求的存储器。扩展的方法是将多片同型号的存储器芯片的地址线、读/写控制线(W R)和时钟信号相应连在一起,而将其数据线分别引出接到存储器的数据总线上。 (2)字扩展 若每一片存储器的数据位数够而字线数不够时,则需要采用“字线扩展”的方式将多片该种集成芯片连接成满足要求的存储器。扩展的方法是将各个芯片的数据线、地址线和读写(W R)控制线分别接在一起,用译码器和时钟信号选择集成芯片。 (3)字、位同时扩展 在很多情况下,要组成的存储器比现有的存储芯片的字数、位数都多,需要字位同时进行扩展。扩展时可以先计算出所需芯片的总数及片内地址线、数据线的条数,再用前面介绍的方法进行扩展,先进行位扩展,再进行字扩展。 设计思路 用1K×4位的RAM集成芯片若干片,构成一个8k×8位的RAM 需要RAM的片数=(8k×8位)/(1k×4位)=16(片) 因为1K×4位的RAM容量1024×8位,表明片内字数1024=210,所以地址线 有10条,即(A 0~A 19 ),每字4位,数据线有4条(D ~D 3 )。 而存储容量为8K×8位的RAM,即字数8K=213,所以地址线有13条,即(A ~

实验五存储器设计

计算机组成原理 实验五 《存储器设计》 实验报告 姓名:吴速碘黄紫微 学号: 班级:计算机二班 日期2015、5、25 实验五存储器设计 一、实验目的 1、掌握RAM和ROM的Verilog语言描述方法; 2、学习用宏模块的方法定制RAM和ROM。 二、实验任务 1、设计并实现一个128*16 的单端口的RAM; 2、设计并实现一个128*16的ROM; 3、设计并实现一个双端口的128*16的RAM 4、设计并实现一个16*32的FIFO。 5、设计并实现正弦信号发生器,见“正弦信号发生器实验指南”。 三、实验步骤 1 编写Verilog代码(见附页) 2功能仿真

进行分析与综合,排除语法上的错误 建立波形仿真文件,输入激励 生成功能仿真网表 进行功能仿真,观察输出结果 3选择器件 DE2_70开发板的使用者请选择EP2C70F896C6 4绑定管脚 5 下载验证 DE2_70开发板的下载:使用USB-Blaster进行下载 四、实验内容 五、实验思考题 1、分析存储器采用三态输出的原因是什么? 存储器的输出端是连接在数据总线上的。数据总线相当于一条车流频繁的大马路,必须在绿灯条件下,车辆才能进入这条大马路,否则要撞车发生交通事故。同 理,存储器中的数据是不能随意传送到数据总线上的。例如,若数据总线上的数 据是“1”(高电平5V),存储器中的数据是“0”(低电平0V),两种数据若碰到一 起就会发生短路而损坏单片机。因此,存储器输出端口不仅能呈现“l”和“0”两 种状态,还应具有第三种状态“高阻"态。呈“高阻"态时,输出端口相当于断开,对数据总线不起作用,此时数据总线可被其他器件占用。当其他器件呈“高阻”态 时,存储器在片选允许和输出允许的条件下,才能将自己的数据输出到数据总线 上。 2、单端口和双端口的区别是什么? 单端口ram是ram的读写只有一个端口,同时只能读或者只能写。 双端口ram是ram读端口和写端口分开,一个端口能读,另一个端口可以同时写。 3、什么情况下考虑采用双端口存储器? (1)为了使不致因为等待存储器读写操作的完成而无事可做,可以采取一些加速CPU 和存储器之间有效传输的特殊措施: ●采用更高速的,或加长存储器的; ●采用并行操作的双端口存储器; ●在CPU和之间插入一个(Cache),以缩短读出时间; ●在每个存储器周期中存取几个字.(采用交叉存储器)

存储器设计实验报告

实验一:存储器设计 一、实验目的: 1、掌握随机存储器RAM的工作特性及使用方法; 2、掌握半导体存储器存储和读写数据的工作原理。 二、实验电路及其原理: 1.实验电路图 2、设计原理 存储器就是选择RAM地址,并对其操作存入数据,在需要时对其读取,

并把数据输出到数据总线。实验思路大致为: ①第一个74273用来接收数据存放在RAM里的地址,即A0…7。当CPMAR 有效时数据进入芯片。 ②当WE=1,RD=0时,RAM进行写操作,接收存储在74273里的数传到地址端口,同时接收从B0…7输入的数据传到数据端口,把数据写到相应RAM里。 ③当WE=0。RD=1时,RAM进行读操作,把对应存储单元的数据传到第二个74273,通过74273传到74244芯片输出。 三、实验步骤 1、根据实验原理在maxplus下连接电路图,对其进行编译。 2、根据实验原理设计各个输入端的波形图,对其进行仿真模拟获得输出数据,仿真波形如下图。 四、仿真图 说明:RAM在WRE=1时才工作,为方便起见WRE置为1;74244在RAM_BUS=0时工作,为方便起见RAM_BUS置为0。因CPMOR为一个周期变换一次,为了不浪费存储空间,A0为两倍的周期变换,A1为四周期变换,以此类推。存储的数据从11H起依次增加。 五、实验总结 通过本次实验熟练掌握MAX+PLUS软件,并运用该软件设计存储器,了解了存储器的结构设计和工作原理,并在理解的基础上自己设计了一个简单的存储器。在之后的波形仿真图模拟时,发现自己不能很好控制各个芯片的片选信号,不知道如何使各个芯片在合适的时间工作,在经过仔细分析后,设置了上图的波形图,保证每个存储单元都可以存到数,没有刚开始的浪费现象,数据在各个数据线之间的传输也正常,存储器的数据输出为两个周期输出一次(这是因为WR、

计算机组成原理2---设计存储器

南京信息工程大学实验(实习)报告 实验(实习)名称设计存储器实验(实习)日期 2014.1.06 得分指导教师林美华 系计算机专业软件工程年级 11 班次 3 姓名高翔学号 20112344905 1. 实验目的 (1)掌握用存储芯片构成存储器的原理。 (2)掌握存储器与CPU的连接方法(位并联法、地址串联法)。 (3)了解存储器的相关知识。 2. 实验要求 有一个16K×16位的存储器,由1K×4位的DRAM芯片构成(芯片内部是64×64结构)。问: 总共需要多少DRAM芯片? 设计此存储器组成框图(要考虑刷新电路部分) 若采用异步刷新方式,且刷新间隔不超过2ms,则刷新信号周期是多少? 若采用集中刷新方式,存储器刷新一遍最少用多少读/写周期?设读/写周期T=0.1us,那么死时间率是多少? 3. 实验内容 主存储器主要有以下几个性能指标: 存储容量:所谓存储容量即存储器能够保存的数据的数量。常用的单位有GB、MB、KB等。1GB=1024MB,1MB=1024KB,1KB=1024B。也可以用乘积的方式表示,公式为:容量=字数×字长(如1KB可以表示为1K×8位,1MB可以表示为1M×8位等)。 存取速度:所谓存取速度即是单位时间内存储器能读写的位数或字节数。该参数跟存储器的时钟频率有关。一般情况下,时钟频率越高,存取速度越快。如果用位数衡量,常用单位有Kb/s、Mb/s等;如果用字节数衡量,常用单位有KB/s、MB/s等。 读写周期:所谓读写周期是指读写一位或一个字节所需要的时间。该参数与

存取速度成反比。存取速度越快,周期越短,反之亦然。 解:芯片1K×4位,片内地址线10位(A9--A0 ),数据线4位。芯片总数为:(16K×16)/(1K×4)=16×4=64片 存储器容量为16K,故地址线总数为14位(A13─A0),其中A13A12A11A10通过4:16译码器产生片选信号CS0─CS15。 刷新信号周期为:2ms/64=31.3us。 若用集中式刷新,则刷新一遍用64个读/写周期。 死时间率为:64×0.1/2×1000=0.32%。 4. 实验总结 通过本次实验,学习了存储器的相关知识,掌握用存储芯片构成存储器的原理。掌握存储器与CPU的连接方法(位并联法、地址串联法)。更加清晰的了解了存储器的结构。

相关文档
最新文档