1、介绍内部存储器模块
本用户指南介绍了实现以下内存模式的宏功能:
■ RAM:1-Port—Single-port RAM 单口RAM
■ RAM:2-Port—Dual-port RAM 双口RAM
■ ROM:1-Port—Single-port ROM 单口ROM
■ ROM:2-Port—Dual-port ROM 双口ROM
Altera公司提供了两种宏功能来实现内存模式:ALTSYNCRAM和ALTDPRAM宏功能。QuartusII软件会自动选择其中一个宏功能来实现内存模式。选择那种宏功能模式取决于目标器件,存储器模式和RAM和ROM的功能。
本用户指南会让您熟悉宏功能,以及如何创建它们。如果您不熟悉的Altera宏功能或“the MegaWizard™ Plug-In Manager”,请参阅介绍宏功能用户指南。
内部存储器具有如下功能:
■内存模式配置
■存储模块类型
■端口宽度设置
■存储器最大深度设置
■时钟模式和时钟使能
■地址时钟使能
■字使能
■异步清零
■读使能
■同时读写
■存储器初始化
■错误校正码
2、参数设置
Altera建议您使用参数编辑器来配置来构建您的RAM和ROM内存块,以确保您所选择的选项组合是有效的。下表是双口RAM参数设置
选项 | 有效值 | 默认值 | 功能描述 | |
你将如何使用 双端口RAM ? | 一个读/写端口 或者两个读/写端口 | 一个读端口和一个写端口 | 指定如何使用双口RAM | |
你想指定的存储器的位宽? | 一个字的数量 或者一个位的数量 | 一个字的数量 | 确定用字或者位来指定内存大小 | |
存储器的有多少个字? | — | 256 | 指定存储器有多少个字或者字节 | |
不同的端口使用不同的数据宽度 | 开/关 | 关 | 指定不同的端口使用不同的数据宽度 | |
当你选择单端口读/写时,以下选项有用: 输出总线q_a位宽? 输入总线data_a位宽? 输出q宽度? | — | 8 | 指定输入输出端口位宽 | |
当你选择双端口读/写时,下面的选项有效: 输出总线q_a位宽? 输出总线q_b位宽? | ||||
存储块类型是什么? | M-RAM, M4K,M512, M9K, M10K,M144K, MLAB, M20K,LCs | AUTO | 指定存储块的类型,选择什么样存储块类型的取决于目标设备 | |
内存该如何实现? | 使用默认的逻辑单元模式或者Stratix M512 仿真逻辑单元模式 | 使用默认的逻辑单元模式 | 指定逻辑单元实现选项。只有当你选择LCS内存类型时此项才有效。 | |
设置存储器的最大深度 | 32, , 128, 256, 512, 1024, 2048, 4096 | AUTO | 指定内存的最大深度。只有当你选择内存类型是“AUTO”时此选项有效 | |
使用什么样的时钟模式 | 当你选择单端口读/写时,下面的值有效: ■单时钟 ■双时钟:用单独的输入输出时钟 ■双时钟:用单独的读写时钟 当你选择两个读写端口时,下面的值有效: ■单时钟 ■双时钟:用单独的输入输出时钟 ■双时钟:对A和B端口分别使用单独的时钟 | 单时钟 | 单时钟:一个时钟和一个时钟使能控制内存块中所有的寄存器 双时钟:使用单独的输入和输出时钟,一个输入和一个输出时钟控制相关的所有寄存器的数据输入和输出/内存块,包括数据,地址,字使能,读使能,和写使能。 双时钟:使用单独的读写时钟,一个写时钟控制数据输入,写地址,写使能,而读时钟控制数据输出,读地址,读使能寄存器。 双时钟:A和B端口分别使用单独的时钟。时钟A控制A端口所有的寄存器。时钟B控制B端口所有的寄存器。每个端口还支持单独的时钟使能。 | |
当你选择单端口读写时,下面的选项有效: 创建一个读使能信号:“rden” | — | off | 对端口B是否创建一个读使能信号 | |
当你选择双端口读/写时,下面的选项有效: 创建读使能信号:“rden_a”和“rden_b” | 对端口A和B是否创建读使能信号 | |||
端口A创建字节使能 | — | Off | 指定对端口A和B是否创建字节使能。 | |
端口B创建字节使能 | ||||
使能ECC来检查和纠正单比特错误和检查双比特错误 | On/off | off | 指定是否使能ECC特性来纠正单比特错误和检查双比特错误在存储器的输出端。这个选项只有在内存块模式是M144K的器件中有效。 | |
使能ECC来检查和纠正单比特错误,两相邻比特错误和检测三相邻位错误 | On/off | Off | 指定是否使能ECC特性来检查和纠正单比特错误,两相邻比特错误和检测三相邻位错误。此选项只有在支持内存块类型是M20K的器件中有效 | |
那个端口需要寄存? 当你选择一个读端口和一个写端口时,以下选项可用: ◆写输入口‘data’, ‘wraddress’, ‘wren’ ◆读输入口‘raddress’ and ‘rden’ ◆读输出口:‘q’ 当你选择两个读写端口时,以下选项可用: ◆写输入口‘data_a’, ‘wraddress_a’, ‘wren_a’ ◆读输出口:’q_a’ ‘q_b’ | On/off | off | 指定是否寄存读/写输入和输出端口 | |
是否创建时钟使能信号? | On/Off | Off | 指定是否打开这个选项,来为每个时钟信号创建一个时钟使能信号。 | |
时 钟 使 能 选 项 | 双端口RAM的使用方式选择为“一个读端口”和“一个写端口”时可以选择Use clock enable for write input registers写入寄存器使用时钟使能;双端口RAM的使用方式选择为“两个端口都可用读/写”时的可选项包括:Use clock enable for port A input registers(端口A输入寄存器使用时钟使能)、Use clock enable for port B input registers(端口B输入寄存器使用时钟使能)、Use clock enable for port A output registers(端口A输出寄存器使用时钟使能)、Use clock enable for port B output registers(端口B输出寄存器使用时钟使能)。 | On/Off | Off | 端口B的输入和输出寄存器的时钟使能是默认选中的,只需要指定端口A的输入和输出寄存器是否使用时钟使能。 |
时 钟 使 能 选 项 | 双端口RAM的使用方式选择为“一个读端口”和“一个写端口”时可以选择:Create an ‘wr_addressstall ’ input port.(创建一个wr_addresstall输入端口)和Create an ‘rd_addressstall’ input port.(创建一个rd_addresstall输入端口);双端口RAM的使用方式选择为“两个端口都可用读/写”时的可选项包括:Create an ‘addressstall_a’ input port(创建一个addresstall_a输入端口)和Create an ‘addressstall_b’ input port.(创建一个addresstall_b输入端口)。 | On/Off | Off | 指定是否为地址寄存器创建时钟使能,创建这些端口可以作为地址寄存器的低电平时钟使能输入。 |
为寄存器端口创建异步清零信号aclr | On/Off | Off | 指定是否为为寄存器端口创建异步清零信号aclr | |
当一个内存位置同时读/写操作时,如何控制输出Q? | 显示内存原来的值/不定值 | 不定值 | 当读写同时发生时,指定输出的类型。显示内存原来的值:RAM的输出反映的是写操作之前改地址所指的旧数据。 不定值:此选项功能不同,当你打开它取决于 以下内存块类型选择: 当你设置内存块的类型为:Auto,M144K,M512,M4K,M9K,M10K M20K或者其他类型,在同时进行读写操作时RAM输出不定值,不需要考虑时序路径。 | |
不分析读操作和写操作之间的时序。在同一时刻向同一存储器地址进行读写操作时亚稳态问题无法解决。 | On/Off | Off | 当你想让RAM输出不确定值时,打开此选项,在进行读写操作时不分析时序路径。此功能只对LUTRAM有效,并且只有当你设置存储块类型为MLAB时才能使用此功能。 | |
是否初始化RAM? | 不初始化,空的RAM,或者初始化,用文件数据来初始化RAM。 | 不初始化 | 指定存储器的初始内容。选择置空RAM时,初始化存储器为零。选择用文件初始化时,使用一个内存初始化文件(.mlf)或者是(.hex)文件 | |
写期间读时q_a的输出 | New data(新数据), Old Data(原来的数据) | New data(新数据) | 当读写同时发生指定输出行为。 New Data(新数据):在写数据的同一个时钟周期的上升沿新写入的数据可用; Old data(原来的数据):RAM的输出是写入新数据之前原来存储在存储器中的数据。 | |
写期间读时q_b的输出 | ||||
使用字节使能时用X(不定值)代替原来的数据 | On/off | On | 打开此功能时在被屏蔽的字节位置获得X值。 |