module MyCache(
input [31:0] VirtualAddr, //VirtualAddr是所将要访存的虚拟地址,为32位的十六进制数。
output Hit, //命中与否,外部逻辑电路根据Hit的值来决定是否用下面的Data。
output [31:0] Data
); //上面这些代码类似于函数声明,为外部调用提供引脚。
logic [58:0] Cache[15:0]; //Cache即为系统中所存储数据的这样一组数据单元
logic [58:0] Line;
logic Valid;
logic [25:0] Tag; //这四条语句类似于C语言的声明变量,类似于int x
assign {Valid,Tag,Data} = Cache[VirtualAddr[4:2]]; //为什么是[4:2] 因为这是一个8 = 2 ^ 3 组的直接映存cache需要一个3位的组号。
assign Hit = Valid & (VirtualAddr[31:6] == Tag);
endmodule
介绍
上面的代码段是用System Verilog语言实现的一个 16 个表项的直接映射高速缓存。只是实现了命中方面的代码模块,而对于cache的生成方面并没有涉及。
而上学期学过System Verilog语言,课程内又有cache直接映射方法的逻辑电路图。故尝试着写的一段代码。