1130310126_李明远_Cache的实现

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第四章‐实验2基本Cache的实现班级:1303101姓名:李明远学号:1130310126一、实验要求:在实现存储芯片的基础上,按照P112,图4.50实现cache的基本功能,其中替换机构和地址映射的方式可以自定。二、实验原理P112,图4.50Cache基本结构如下:主存Cache替换机构可装进?命中?块号块内地址块号块内地址主存Cache地址映象变换机构Cache存储体CPU访问主存替换Cache否否是是访问主存装入Cache直接通路Cache地址主存块号地址总线数据总线三、实验设计主存采用长度为256的向量数组实现(向量长度为4,表示字长为4);Cache采用长度为16的向量数组实现。Cache-主存地址映射采用直接映射方式:设置act变量表示读或写操作,hit变量表示cpu进行读操作时是否命中,并设置大小和Cache一致的标记数组表示标记块。进行读操作时,通过主存高位地址和标记数组进行比较判断是否命中,若命中则直接读取;否则将字块调入Cache。进行写操作时,将数据写入Cache,标记为存入高位地址,然后将字块调入主存。四、程序设计框图五、程序代码libraryIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;--Uncommentthefollowinglibrarydeclarationifusing--arithmeticfunctionswithSignedorUnsignedvalues--useIEEE.NUMERIC_STD.ALL;--Uncommentthefollowinglibrarydeclarationifinstantiating--anyXilinxprimitivesinthiscode.--libraryUNISIM;--useUNISIM.VComponents.all;entitycodeisPort(主存和Cache空间初始化判断读写操作读操作判断是否命中命中,直接读取Cache内容;否则,将主存中内容调入Cache写操作判断是否命中将数据写入Cache中,再将字块调入主存clk:inSTD_LOGIC;Initial:inSTD_LOGIC;act:inSTD_LOGIC;hit:outSTD_LOGIC;high_order:inSTD_LOGIC_VECTOR(3downto0);low_order:inSTD_LOGIC_VECTOR(3downto0);input:inSTD_LOGIC_VECTOR(3downto0);output:outSTD_LOGIC_VECTOR(3downto0););endcode;architectureBehavioralofcodeistypeM_memisarray(255downto0)ofstd_logic_vector(3downto0);typeCacheisarray(15downto0)ofstd_logic_vector(3downto0);sharedvariableMainMem:M_mem;sharedvariableCacheMem:Cache;sharedvariableMark:Cache;signalflag:std_logic;signaldata_show:std_logic_vector(3downto0);beginhit=flag;output=data_show;process(Initial)beginforiin0to225loopMainMem(i):=0000;ifi16thenCacheMem(i):=0000;Mark(i):=0000;endif;endloop;endprocess;process(clk)beginifrising_edge(clk)thenifact='0'thenifMark(conv_integer(low_order))=high_orderthenflag='1';elseflag='0';CacheMem(conv_integer(low_order)):=MainMem(cont_integer(high_order)*16+conv_integer(low_order));Mark(conv_integer(low_order)):=high_order;endif;data_show=CacheMem(conv_integer(low_order));elseifMark(conv_integer(low_order))=high_orderthenflag='1';elseflag='0';endif;CacheMem(conv_integer(low_order)):=input;Mark(conv_integer(low_order)):=high_order;MainMem(conv_integer(high_order)*16+conv_integer(low_order)):=input;endif;endif;endprocess;endBehavioral;六、仿真结果(部分仿真代码)--向00010010写0101waitfor20ns;act='1';clk='0';high_order=0001;low_order=0010;input=0101;waitfor30ns;clk='1';--向01000110写1101waitfor20ns;act='1';clk='0';high_order=0100;low_order=0110;input=1101;waitfor30ns;clk='1';--读00010010的内容waitfor30ns;clk='0';act='0';high_order=0001;low_order=0010;waitfor30ns;clk='1';--读01000110的内容waitfor30ns;clk='0';act='0';high_order=0100;low_order=0110;waitfor30ns;clk='1';--读11011111的内容waitfor30ns;clk='0';act='0';high_order=1101;low_order=1111;waitfor30ns;clk='1';--读11011111的内容waitfor30ns;clk='0';act='0';high_order=1101;low_order=1111;waitfor30ns;clk='1';clk='1';waitfor100ms;endprocess;七、Cache发展情况Cache随CPU的发展而不断改变,可以概括为:从无到有,由小到大,先外后内,纵深配备,软硬兼施。初期的CPU没有Cache,在80386时期出现外部Cache;80486时期开始有内部仅8kB的Cache。Cache的分级也由L1和L2级,发展到L0和L3级的纵深配备;Cache的大小由当初的8kB,直到Merced的1~2MB。为了更好地利用Cache,还专门配有缓存控制指令。现代处理器系统中,多级Cache(通常是两级)被广泛使用。Cache采用如下原则来构建系统:L1(一级)采用高速小容量Cache;L2(二级)采用低速容量较大的Cache。与单级Cache相比,多级Cache有下面几个优势:首先,可以减少缺失损失显而易见,第一级Cache发生缺失,可以在第二级中存取数据其次,第一级Cache与第二级Cache中可以采用不同的设计原则,即采用不同的技术来实现,这就可以实现不同级侧重于不同技术,实现系统的最优化配置最后,多级Cache中距离CPU最近的Cache在大部分时间内都可以命中,下一级Cache有大量空闲时间,该空闲时间可以用来为将来可能出现的缺失做好准备工作

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功