杂凑法存取的算法

下面讲一下杂凑法存取的算法,用这种方法,可以减少搜索时间:
假设一次存取不会多与4096个存储单元,且随即的分布在0到1MB 的空间中。
一般来说杂凑表的索引是真实地址除以杂凑表尺寸的余数。

1:杂凑表函数,以及,杂凑表初始化;
//-------------------------------初始化-------------------------------------
'define HASH 5041
reg [31:0] address_reg['HAS-1:0];
reg [31:0] data_reg['HAS-1:0];

initial
begin
integer i;
for(i=0;i<'HASH;i=i+1)
address_reg[]=8'hxxxxxxxx;
end
//----------------------------------------hash函数------------------------------------
function [31:0]hash;
begin
input [31:0]address;
hash=address%'HASH;
end
endfunction
//--------------杂凑法读存储单元------------------------------------------------

function [31:0]readdata;
input [31:0]address;
integer index,i;

begin
index=hash(address);
if(address_reg[index]==address)
readdata=data_reg[index];
else
begin:search_address
for(i=(index+1)%'HASH;i!=index;i=(i+1)%'HASH)
begin
if(address_reg[i]==address)
begin
readdata=address_reg[i];
disable search_address;
end
else if(address_reg[i]==8'hxxxxxx)//找到一个空的打印错误,没有这个地址
begin
$display("ERROR");
$stop;
end
end
$display("FULL!");//循环一遍没有找到,说明地址栏中已经满了
$stop;
end
end

endfunction


//---------------------------------------杂凑法修改存储单元---------------------------------

task writedata;
input [31:0]data;
input [31:0]address;
integer index,i;
//-------------------------------------------------------------
index=hash(address);
if(address_reg[index]==address)
data_reg[index]=data; //找到了正好在hash算法的地方
else//--------------------------------------------------------
begin:search_address
for(i=(index+1)%'HASH;i!=index;i=(i+1)%'HASH)//找到了地址虽然不在按照
if(address_reg[index]==address) //hash算法的地方
begin
data_reg[index]=data;
disable search_address;
end
else if(address_reg[index]==8'hzzzzzzzz)//找到一个空地址,写入
data_reg[index]=data;
//--------------------------------------------------
$diaplay("FULL");//循环扫描没有找到地址,有没有空地址,满了!
$stop();
end
endtask

readdata和writedata在处理搜索过程中的冲突问题时候,当两个地址指向同一个
位置的时候,处理的办法是,线性扫描剩余的地址空间发现空的地址(对于writedata)
就写入,

好了,明天讲加载交叉存取式存储器!
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值