论文部分内容阅读
[摘要] 本文的Cache是本人为网络安全加速卡NSA所设计的,它主要用来消除DRAM(Dynamic Random Access Memory)的延迟时间,加快系统运行速度.由于此项目是用FPGA实现的,所以本文采用FPGA内部的CAM(Content Addressable Memory)和RAM(Random Access Memory)来实现Cache以达到减小DRAM延迟的目的。与传统Cache相比它简单容易实现、节省FPGA内部资源而且性能又不比传统Cache差。它加快了数据的返回速度,提升了系统性能。
[关键词] CAM RAM Cache FPGA
[Abstract] The Cache in this article is designed for the Network Security Accelerator card named NSA, which is mainly used to eliminate delay time of the DRAM (Dynamic Random Access Memory) and accelerate the system speed.This project is achieved with FPGA, so this paper uses CAM (Content Addressable Memory) and RAM (Random Access Memory) in FPGA to realize the Cache in order to implement the purpose of reducing the DRAM latency. Compared with the traditional Cache, it is simple and easy to comply, saving resources within the FPGA ,and the performance is not worse than traditional Cache. It not only accelerates the return speed of data, but also improves system performance.
[Keywords] CAM RAM Cache FPGA
一、绪论
电子技术的飞速发展,CPU性能的不断提升,为Cache的产生奠定了基础,Cache从出现到现在已有将近30年的历史了。传统的Cache由SRAM(Static Random Access Memory)构成,SRAM不仅占用很大空间、成本高而且难于集成。并且传统Cache的三种实现方式都有其各自的局限性:全相联方式的Cache比较器难于实现;直接映射方式的Cache中比较器虽易于实现,但存储位置容易发生冲突,导致Cache效率降低;组相联映射方式的Cache是前两种方式的结合,两种方式的优缺点它兼而有之。这三种方式中都不同程度的用到了比较器,而比较器即难于实现又占用很大的内部资源。因此这三种实现方式都不适合为项目所用。这为采用FPGA来实现Cache奠定了基础。而且只要项目是以FPGA方式实现的又用到了DRAM,就可以采用此Cache,因此本课题对带有DRAM的FPGA方式实现的设计的性能的提高有重要意义。
二、Cache的概念、作用
(一)Cache:是位于CPU与内存之间的高速缓冲存储器,虽容量小,但存取速度快。存取速度比内存快几倍甚至十几倍。
(二)Cache中储存的是内存的一部分数据,是CPU刚刚使用过或频繁使用的,目的就是方便CPU的读取。当CPU访问内存时,首先判断Cache中是否存有这些数据,如果有,则称为命中,就可以直接从Cache中取出这些数据,而不用再次访问内存,Cache的存储速度相当快,这就减少了CPU的等待时间,提高了CPU的利用率。弥补了CPU与主存之间的速度差异,这也是应用Cache的主要作用。
三、Cache在项目中所处位置及作用
此项目中的Cache位于ddr2控制器中,整个ddr2控制器模块由图1中的顶上三层构成,其中ddr2dimc_rarb模块为ddr2的读模块。主要功能是客户端从此模块发起读请求,并从多个读通道中根据优先级顺序选取一个读通道(并记录此顺序),把读请求传给下一级的ddr2dimc_rw模块,以及把经ddr2dimc_rw模块返回的读取结果按照事先记录的顺序,从相应的通道返回客户端。ddr2dimc_warb模块是ddr2的写模块。其主要功能是客户端从此模块发起写请求,并从多个写通道中仲裁出优先级最高的一个,将写请求从此通道传给下一级的ddr2dimc_rw模块。ddr2dimc_rw模块是读写仲裁模块,其主要功能是仲裁读写请求以及把从ddr2sodim模块中读取的数据返回给上一級的ddr2dimc_rw模块。ddr2sodim模块是xilinx公司提供的ddr2控制器模块,是固有的IP软核。而SDRAM是xilinx公司提供的,由ddr2 SDRAM构成的dimm条仿真模型。
图1 ddr2控制器结构图
当客户端向DRAM发出读写请求时,需要经过较长时间才能从DRAM中取到指定地址下的数据,而且请求经过每一层模块时,都会产生读写延迟,这样就更增加了从DRAM中取出所要数据的时间。如果请求是多路的,延迟就会更大,那么所需时间就会更长,整个项目的运行速度就会更慢。而且项目运行中出现的问题经查证,正是由于此过程中的延迟所导致的,所以本文设计Cache的目的就是尽可能的减小DRAM的延迟时间。
Cache所放的位置则取决于以下两点:(1)能在较短的时间内返回数据结果。从图中可以看到ddr2dimc_rarb模块最靠近用户端,所以能在短时间内快速取得所要数据。如果将Cache嵌入ddr2dimc_rw 模块,则Cache中的数据返回客户端就会产生更大的延迟,这样如果在数据返回客户端的过程中又有新的数据写入,那么后写入的数据就不能及时返回客户端,而要等到下一次再读取此地址时,才能返回。而将Cache嵌入在ddr2dimc_rarb模块,就可以很快将Cache中读取的数据返回客户端。并且每次取得的数据都是最新的。(2)便于设计实现。又因为ddr2dimc_rarb模块的主频与其它模块相比最低,那么周期相对其它模块较长,一个周期内有更充分的时间完成Cache内部操作,这样使Cache的实现更加容易。因此,本文决定将Cache内嵌在ddr2dimc_rarb模块之内。
四、Cache的设计方案
当客户端发起读命令时,从四个读通道中选出优先权最高的一个,然后将预读取的地址装入一FIFO中,再将从FIFO取出的地址与Cache中的地址相比较,若FIFO中的地址与Cache中的地址相匹配,则表示命中,将Cache中该地址下的刷新过的数据代替从DRAM中取回的数据经分发器分发出去,若FIFO中的地址与Cache中的地址不匹配,则将从DRAM中取出的该地址所对应的数据由分发器分发出去。
图2 Cache设计方案结构图
五、Cache内部实现方案
Cache由三部分组成:RAM模块、CAM1模块及CAM2模块。RAM是随机存取存储器,其中存放的是地址和数据,其主要作用是根据给定地址可以找到该地址所对应的数据。Xilinx公司同时提供了分布式RAM和块RAM的IP核生成器。用户可以根据需要选用合适的RAM,并将其调用到设计中,以提高完成设计的速度。由于实际需要,本文RAM模块采用宽128比特,深256比特的xilinx公司提供的RAM的IP核生成,内部存放的是ddr2dimc_warb模块写进来的数据。Cache中的real_dat端口就是数据进入RAM模块的端口。CAM是内容可寻址存储器,其中存放的也是地址和数据,其主要作用是将进来的数据与CAM内的数据进行比较,若匹配,则输出匹配地址。可以利用它查找数据存放的地址。本文的CAM1及CAM2模块采用的是宽24比特,深64比特的xilinx公司提供的CAM的IP核生成,用户也可以直接调用。CAM1及CAM2模块的din端口接进来的是ddr2dimc_warb模块写进来的地址。而cmp_din端口引进的是欲读取的DRAM地址。
图3 Cache内部结构图
(一)CAM2模块的实现
模块中的wr_addr是模块内部的搜索地址,是模块内部逻辑产生的,不是模块端口。CAM2模块的din端口每写入一个新地址,wr_addr就会自动加一。当客户端向DRAM发起写请求的同时也把要写入的地址从CAM2模块中的din端口写进CAM2模块。当客户端向DRAM发起读请求时,从CAM2模块中cmp_din端口写进的欲读取的地址与CAM2模块中由din端口写进的地址相比较,如果相同,就会产生匹配地址,说明要读取的DRAM地址,在CAM2表中含有,既Cache中存在,就会把匹配地址送到RAM的读地址端口。(虽然din端口接进来的是ddr2dimc_warb模块写进的地址,但对于CAM2模块本身来说din端口接进来的相当于数据,而CAM2模块本身的地址是指其内部搜索地址。所以其匹配地址是指匹配时的内部搜索地址。)
(二)RAM模块的实现
对于RAM模块:其写入地址就是CAM2模块的搜索地址。当客户端向DRAM发起写请求时也会同时将要写入的数据从RAM模块的data端口写进RAM。由于CAM表宽24比特,深64比特,所以可知CAM1和CAM2模块的搜索地址是6比特宽。而RAM表是128比特宽,256比特深,所以可知RAM模块的搜索地址是8比特宽。可见RAM表的搜索地址要比CAM表的搜索地址多出两个比特,由此可知CAM表的一条搜索地址对应RAM表的四条搜索地址。由此可见RAM表的搜索地址的高六位对应的是CAM表的搜索地址,低两位则是该搜索地址对应的RAM块的块内选址。这样如果CAM2模块有一个匹配的地址送进RAM模块,就会连续读出四条RAM模块搜索地址对应的数据。
(三)CAM1模块的实现
当客户端向DRAM发起写请求的同时也会把要写入的地址从CAM1模块中的din端口写进CAM1模块。但在地址写进CAM1模块之前,首先将要写入的地址写进CAM1的cmp_din1端口,与CAM1表内已有的地址进行一拍的预先匹配,检查CAM1表中是否已有该地址,如果CAM1表的匹配信号不为零,说明要写进的地址CAM表中已经存在。这样在写进地址和数据时,新写进的数据要替换掉原来该地址对应的数据。这就是此Cache所要实现的更新功能。(对于CAM1模块本身来说din端口接进来的也相当于数据,而其模块本身的地址是与CAM2模块相同的内部搜索地址。)
六、Cache的整体功能实现与验证
在没加入Cache之前,ddr2模块的读、写通道都存在很大的延迟:
数据写进DRAM共产生了约150纳秒的延迟。从图4波形图可以看到,从数据写进DRAM到从DRAM中读出数据,约产生165纳秒的延迟,再传到上一级的ddr2dimc_rw模块又产生了近94纳秒的延迟,最后传到客户端又产生了50纳秒的延迟。所以整个写到读的过程总共产生了近460纳秒的延迟。由于此过程的延迟过长,导致整个项目出现bug。只有减小延迟,此项目才能正常运作。这也是本设计的主要目的。
图4 嵌入Cache前写到读全过程的延迟时序图
嵌入Cache后,生成如下时序图:
从图中可以看到,加入Cache后,从客户端发起写请求至数据写进Cache产生了近90 纳秒的延迟,缩短了写延迟时间,到读取的数据返回客户端,又产生了近150纳秒的延迟。总共延迟240纳秒,比Cache嵌入前减小了220纳秒的延迟时间,使数据返回的速度大大加快了,达到了最初的目的。
图5 嵌入Cache后寫到读全过程的延迟时序图
本文作者创新观点:本文的创新之处就在于Cache的实现是采用FPGA的方式来完成的,摒弃了原有的设计方法,开辟了Cache实现的又一途径。
参考文献:
[1] 武扬. 高速缓冲存储器Cache设计的关键技术分析[J]. 中国科技信息.2006(7).
[2] 王恒娜. 访问局部性原理在Cache系统优化及设计中的应用[J]. 安徽师范大学学报(自然科学版).2004 (04) .
作者简介:
王玥(1980-),女(汉),辽宁省阜新市人,广西工学院鹿山学院电控系教师。专业是微电子与固体电子。
付强(1984-),男(汉),河北省唐山市人,广西工学院鹿山学院艺术系教师。专业是计算机科学与技术。
[关键词] CAM RAM Cache FPGA
[Abstract] The Cache in this article is designed for the Network Security Accelerator card named NSA, which is mainly used to eliminate delay time of the DRAM (Dynamic Random Access Memory) and accelerate the system speed.This project is achieved with FPGA, so this paper uses CAM (Content Addressable Memory) and RAM (Random Access Memory) in FPGA to realize the Cache in order to implement the purpose of reducing the DRAM latency. Compared with the traditional Cache, it is simple and easy to comply, saving resources within the FPGA ,and the performance is not worse than traditional Cache. It not only accelerates the return speed of data, but also improves system performance.
[Keywords] CAM RAM Cache FPGA
一、绪论
电子技术的飞速发展,CPU性能的不断提升,为Cache的产生奠定了基础,Cache从出现到现在已有将近30年的历史了。传统的Cache由SRAM(Static Random Access Memory)构成,SRAM不仅占用很大空间、成本高而且难于集成。并且传统Cache的三种实现方式都有其各自的局限性:全相联方式的Cache比较器难于实现;直接映射方式的Cache中比较器虽易于实现,但存储位置容易发生冲突,导致Cache效率降低;组相联映射方式的Cache是前两种方式的结合,两种方式的优缺点它兼而有之。这三种方式中都不同程度的用到了比较器,而比较器即难于实现又占用很大的内部资源。因此这三种实现方式都不适合为项目所用。这为采用FPGA来实现Cache奠定了基础。而且只要项目是以FPGA方式实现的又用到了DRAM,就可以采用此Cache,因此本课题对带有DRAM的FPGA方式实现的设计的性能的提高有重要意义。
二、Cache的概念、作用
(一)Cache:是位于CPU与内存之间的高速缓冲存储器,虽容量小,但存取速度快。存取速度比内存快几倍甚至十几倍。
(二)Cache中储存的是内存的一部分数据,是CPU刚刚使用过或频繁使用的,目的就是方便CPU的读取。当CPU访问内存时,首先判断Cache中是否存有这些数据,如果有,则称为命中,就可以直接从Cache中取出这些数据,而不用再次访问内存,Cache的存储速度相当快,这就减少了CPU的等待时间,提高了CPU的利用率。弥补了CPU与主存之间的速度差异,这也是应用Cache的主要作用。
三、Cache在项目中所处位置及作用
此项目中的Cache位于ddr2控制器中,整个ddr2控制器模块由图1中的顶上三层构成,其中ddr2dimc_rarb模块为ddr2的读模块。主要功能是客户端从此模块发起读请求,并从多个读通道中根据优先级顺序选取一个读通道(并记录此顺序),把读请求传给下一级的ddr2dimc_rw模块,以及把经ddr2dimc_rw模块返回的读取结果按照事先记录的顺序,从相应的通道返回客户端。ddr2dimc_warb模块是ddr2的写模块。其主要功能是客户端从此模块发起写请求,并从多个写通道中仲裁出优先级最高的一个,将写请求从此通道传给下一级的ddr2dimc_rw模块。ddr2dimc_rw模块是读写仲裁模块,其主要功能是仲裁读写请求以及把从ddr2sodim模块中读取的数据返回给上一級的ddr2dimc_rw模块。ddr2sodim模块是xilinx公司提供的ddr2控制器模块,是固有的IP软核。而SDRAM是xilinx公司提供的,由ddr2 SDRAM构成的dimm条仿真模型。
图1 ddr2控制器结构图
当客户端向DRAM发出读写请求时,需要经过较长时间才能从DRAM中取到指定地址下的数据,而且请求经过每一层模块时,都会产生读写延迟,这样就更增加了从DRAM中取出所要数据的时间。如果请求是多路的,延迟就会更大,那么所需时间就会更长,整个项目的运行速度就会更慢。而且项目运行中出现的问题经查证,正是由于此过程中的延迟所导致的,所以本文设计Cache的目的就是尽可能的减小DRAM的延迟时间。
Cache所放的位置则取决于以下两点:(1)能在较短的时间内返回数据结果。从图中可以看到ddr2dimc_rarb模块最靠近用户端,所以能在短时间内快速取得所要数据。如果将Cache嵌入ddr2dimc_rw 模块,则Cache中的数据返回客户端就会产生更大的延迟,这样如果在数据返回客户端的过程中又有新的数据写入,那么后写入的数据就不能及时返回客户端,而要等到下一次再读取此地址时,才能返回。而将Cache嵌入在ddr2dimc_rarb模块,就可以很快将Cache中读取的数据返回客户端。并且每次取得的数据都是最新的。(2)便于设计实现。又因为ddr2dimc_rarb模块的主频与其它模块相比最低,那么周期相对其它模块较长,一个周期内有更充分的时间完成Cache内部操作,这样使Cache的实现更加容易。因此,本文决定将Cache内嵌在ddr2dimc_rarb模块之内。
四、Cache的设计方案
当客户端发起读命令时,从四个读通道中选出优先权最高的一个,然后将预读取的地址装入一FIFO中,再将从FIFO取出的地址与Cache中的地址相比较,若FIFO中的地址与Cache中的地址相匹配,则表示命中,将Cache中该地址下的刷新过的数据代替从DRAM中取回的数据经分发器分发出去,若FIFO中的地址与Cache中的地址不匹配,则将从DRAM中取出的该地址所对应的数据由分发器分发出去。
图2 Cache设计方案结构图
五、Cache内部实现方案
Cache由三部分组成:RAM模块、CAM1模块及CAM2模块。RAM是随机存取存储器,其中存放的是地址和数据,其主要作用是根据给定地址可以找到该地址所对应的数据。Xilinx公司同时提供了分布式RAM和块RAM的IP核生成器。用户可以根据需要选用合适的RAM,并将其调用到设计中,以提高完成设计的速度。由于实际需要,本文RAM模块采用宽128比特,深256比特的xilinx公司提供的RAM的IP核生成,内部存放的是ddr2dimc_warb模块写进来的数据。Cache中的real_dat端口就是数据进入RAM模块的端口。CAM是内容可寻址存储器,其中存放的也是地址和数据,其主要作用是将进来的数据与CAM内的数据进行比较,若匹配,则输出匹配地址。可以利用它查找数据存放的地址。本文的CAM1及CAM2模块采用的是宽24比特,深64比特的xilinx公司提供的CAM的IP核生成,用户也可以直接调用。CAM1及CAM2模块的din端口接进来的是ddr2dimc_warb模块写进来的地址。而cmp_din端口引进的是欲读取的DRAM地址。
图3 Cache内部结构图
(一)CAM2模块的实现
模块中的wr_addr是模块内部的搜索地址,是模块内部逻辑产生的,不是模块端口。CAM2模块的din端口每写入一个新地址,wr_addr就会自动加一。当客户端向DRAM发起写请求的同时也把要写入的地址从CAM2模块中的din端口写进CAM2模块。当客户端向DRAM发起读请求时,从CAM2模块中cmp_din端口写进的欲读取的地址与CAM2模块中由din端口写进的地址相比较,如果相同,就会产生匹配地址,说明要读取的DRAM地址,在CAM2表中含有,既Cache中存在,就会把匹配地址送到RAM的读地址端口。(虽然din端口接进来的是ddr2dimc_warb模块写进的地址,但对于CAM2模块本身来说din端口接进来的相当于数据,而CAM2模块本身的地址是指其内部搜索地址。所以其匹配地址是指匹配时的内部搜索地址。)
(二)RAM模块的实现
对于RAM模块:其写入地址就是CAM2模块的搜索地址。当客户端向DRAM发起写请求时也会同时将要写入的数据从RAM模块的data端口写进RAM。由于CAM表宽24比特,深64比特,所以可知CAM1和CAM2模块的搜索地址是6比特宽。而RAM表是128比特宽,256比特深,所以可知RAM模块的搜索地址是8比特宽。可见RAM表的搜索地址要比CAM表的搜索地址多出两个比特,由此可知CAM表的一条搜索地址对应RAM表的四条搜索地址。由此可见RAM表的搜索地址的高六位对应的是CAM表的搜索地址,低两位则是该搜索地址对应的RAM块的块内选址。这样如果CAM2模块有一个匹配的地址送进RAM模块,就会连续读出四条RAM模块搜索地址对应的数据。
(三)CAM1模块的实现
当客户端向DRAM发起写请求的同时也会把要写入的地址从CAM1模块中的din端口写进CAM1模块。但在地址写进CAM1模块之前,首先将要写入的地址写进CAM1的cmp_din1端口,与CAM1表内已有的地址进行一拍的预先匹配,检查CAM1表中是否已有该地址,如果CAM1表的匹配信号不为零,说明要写进的地址CAM表中已经存在。这样在写进地址和数据时,新写进的数据要替换掉原来该地址对应的数据。这就是此Cache所要实现的更新功能。(对于CAM1模块本身来说din端口接进来的也相当于数据,而其模块本身的地址是与CAM2模块相同的内部搜索地址。)
六、Cache的整体功能实现与验证
在没加入Cache之前,ddr2模块的读、写通道都存在很大的延迟:
数据写进DRAM共产生了约150纳秒的延迟。从图4波形图可以看到,从数据写进DRAM到从DRAM中读出数据,约产生165纳秒的延迟,再传到上一级的ddr2dimc_rw模块又产生了近94纳秒的延迟,最后传到客户端又产生了50纳秒的延迟。所以整个写到读的过程总共产生了近460纳秒的延迟。由于此过程的延迟过长,导致整个项目出现bug。只有减小延迟,此项目才能正常运作。这也是本设计的主要目的。
图4 嵌入Cache前写到读全过程的延迟时序图
嵌入Cache后,生成如下时序图:
从图中可以看到,加入Cache后,从客户端发起写请求至数据写进Cache产生了近90 纳秒的延迟,缩短了写延迟时间,到读取的数据返回客户端,又产生了近150纳秒的延迟。总共延迟240纳秒,比Cache嵌入前减小了220纳秒的延迟时间,使数据返回的速度大大加快了,达到了最初的目的。
图5 嵌入Cache后寫到读全过程的延迟时序图
本文作者创新观点:本文的创新之处就在于Cache的实现是采用FPGA的方式来完成的,摒弃了原有的设计方法,开辟了Cache实现的又一途径。
参考文献:
[1] 武扬. 高速缓冲存储器Cache设计的关键技术分析[J]. 中国科技信息.2006(7).
[2] 王恒娜. 访问局部性原理在Cache系统优化及设计中的应用[J]. 安徽师范大学学报(自然科学版).2004 (04) .
作者简介:
王玥(1980-),女(汉),辽宁省阜新市人,广西工学院鹿山学院电控系教师。专业是微电子与固体电子。
付强(1984-),男(汉),河北省唐山市人,广西工学院鹿山学院艺术系教师。专业是计算机科学与技术。