URL
https://opencores.org/ocsvn/mytwoqcache/mytwoqcache/trunk
Subversion Repositories mytwoqcache
Compare Revisions
- This comparison shows the changes necessary to convert path
/
- from Rev 12 to Rev 13
- ↔ Reverse comparison
Rev 12 → Rev 13
/mytwoqcache/trunk/2QCache.vhd
138,7 → 138,7
signal stateram: rType; |
signal statequeue: fType; |
signal enableram, enablequeue, queuedone, readsh, writesh, doneh, preempted, |
interrupt, readb, writeb, writec, writet, accdone, accqueue, accinterrupt: std_ulogic; |
interrupt, readb, writeb, writec, writet, accdone, accqueue, accinterrupt, serviced, oldint: std_ulogic; |
|
begin |
|
204,6 → 204,7
statetag <= inittag; |
writet <= '0'; |
enableram <= '0'; |
oldint <= '0'; |
found <= 15; |
free <= 15; |
done <= '0'; -- NEW |
213,6 → 214,7
AddressInh <= ( others => '0'); |
else |
|
oldint <= interrupt; |
case statetag is |
when inittag => |
for i in tagRAMIn'range loop |
264,7 → 266,7
when tagwait => |
writet <= '0'; |
|
if interrupt = '1' then |
if interrupt = '1' and oldint = '0' then |
enableram <= '0'; |
AddressInt <= toFlush; |
statetag <= stateget; |
353,9 → 355,9
lastf <= ( others => '0'); |
counterf <= ( others => '0'); |
else |
hi := accinterrupt or interrupt; |
hi := accinterrupt or (interrupt and not oldint); |
acc := accqueue or queuedone; |
en := enablequeue and ( hi nor acc); |
en := enablequeue and not acc; |
|
if ldCachedWords = 0 then |
index := 0; |
545,8 → 547,6
when ramflush1 => |
if writesh = '0' then |
if del /= 15 and hi = '1' then |
doneh <= '1'; |
en := '1'; |
hi := '0'; |
stateram <= ramwait; |
else |
650,8 → 650,9
removeAm <= '0'; -- NEW |
putA1 <= '0'; -- NEW |
putAm <= '0'; -- NEW |
serviced <= '0'; |
else |
hi := '0'; |
hi := interrupt; |
acc := accdone or doneh; |
|
diff := firstA1 - unsigned( RecBuff.FiFoAddr); |
687,7 → 688,7
statequeue <= queuewaitAm1; |
end if; |
elsif free /= 15 then |
if fullA1 = '1' or (emptyf = '1' and emptyA1 = '0') then |
if fullA1 = '1' or (emptyf = '1' and emptyA1 = '0' and serviced = '0') then |
-- remove last entry from A1 |
if A1Out.valid = '1' then |
del <= to_integer( A1Out.way); |
694,9 → 695,10
toFlush <= A1Out.word; |
getA1 <= '1'; |
hi := '1'; |
serviced <= '1'; |
statequeue <= queuewait; |
end if; |
elsif fullAm = '1' and emptyf = '1' then |
elsif fullAm = '1' and emptyf = '1' and serviced = '0' then |
-- remove last entry from Am |
if AmOut.valid = '1' then |
del <= to_integer( AmOut.way); |
703,6 → 705,7
toFlush <= AmOut.word; |
getAm <= '1'; |
hi := '1'; |
serviced <= '1'; |
statequeue <= queuewait; |
end if; |
else |
710,6 → 713,7
A1In.way <= std_ulogic_vector(to_unsigned( free, ldways + 1)); |
A1In.valid <= '1'; |
putA1 <= '1'; |
serviced <= '0'; |
statequeue <= queuewaitA11; |
end if; |
elsif elim /= 15 then |
742,11 → 746,14
removeAm <= '0'; |
getAm <= '0'; |
getA1 <= '0'; |
queuedone <= '0'; |
|
if acc = '1' then |
if hi = '1' then |
hi := '0'; |
statequeue <= queuestart; |
elsif acc = '1' then |
acc := '0'; |
del <= 15; |
queuedone <= '0'; |
statequeue <= queuestart; |
end if; |
when queuewaitAm1 => |