SlideShare ist ein Scribd-Unternehmen logo
1 von 10
Downloaden Sie, um offline zu lesen
LatticeMico32 Memory Management Unit Documentation
Yann Sionneau
version 1.0 June 2013
Contents
1 Overview 1
2 Features 2
3 TLB Layout 2
4 Interact with the TLB 3
4.1 Add or Update a TLB entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4.2 Invalidate a TLB entry or Flush the entire TLB . . . . . . . . . . . . . . . . . . . 5
4.3 A sum up of TLB actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
5 Interact with the MMU 6
5.1 Activate the MMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Deactivate the MMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
6 TLB lookups 7
7 CSR registers special behaviours 8
1 Overview
This document describes the LatticeMico32 MMU (Memory Management Unit) features and
how it can be congured.
This MMU is not part of the original LatticeMico32 CPU, it has been added by Yann Sionneau
with the help of the Milkymist community in general and Michael Walle in particular.
The LM32 MMU has been designed with simplicity in head, KISS (Keep It Simple Stupid) is
the motto.
Only the minimum has been implemented to have the minimalistic features which would allow
a modern Operating System like Linux or *BSD to run, providing virtual memory and memory
protection.
1
The Caches are designed to be VIPT (Virtually Indexed Physically Tagged) to allow the TLB
lookup to take place in parallel of the cache lookup so that we don't need to stale the pipeline.
2 Features
• 1024 entries ITLB (Instruction Translation Lookaside Buer)
• 1024 entries DTLB (Data Translation Lookaside Buer)
• CPU exceptions generated upon
 ITLB miss
 DTLB miss
 DTLB page fault (writing to a read-only page)
• I/D TLB lookup in parallel of the I/D Cache lookup to avoid lookup penalties
• 4 kB pages
As you can see, it is quite minimalistic, here is a list of what's not featured by this MMU:
• No hardware page tree walker
• No dirty or present bit
• No ASID (Address Space Identier)
• No lockable TLB entries
• Only 1 page size supported: 4 kB
3 TLB Layout
Let's name our 32 bits virtual address vaddr.
Let's name our 32 bits physical address paddr.
Let's say vaddr[0] is the Lowest Signicant Bit and vaddr[31] the Most Signicant Bit.
Let's say vaddr[11:0] is the part of vaddr represented by its 12 Lowest Signicant Bits.
Deep inside, the TLB is a Direct-mapped, VIVT (Virtually Indexed Virtually Tagged) Cache.
When the LM32 core is synthetized with MMU support, the CPU pipeline Data and Instruction
Caches turn into VIPT (Virtually Indexed Physically Tagged) Caches.
The TLB is indexed by vaddr[21:12]: The bottom 10 LSB of the virtual PFN (Page Frame
Number).
2
A TLB entry holds: Physical PFN, Physical Tag, Cache inhibit ag (for DTLB), Read-only ag
(for DTLB), Valid entry tag
More precisely:
• A valid DTLB entry: paddr[31:12], vaddr[31:22], paddr[2], paddr[1], 1
• An invalid DTLB entry: paddr[31:12], vaddr[21:22], paddr[2], paddr[1], 0
• A valid ITLB entry: paddr[31:12], vaddr[31:22], 1
• An invalid ITLB entry: paddr[31:12], vaddr[31:22], 0
The meaning of paddr[2] and paddr[1] will be explained later on in the section which explains
how to program the MMU using LM32 assembly instructions.
4 Interact with the TLB
In order to interact with the TLB, three CSR (Control and Status Registers) have been added
to the LM32 CPU:
CSR Description R/W
TLBVADDR You can write the virtual pfn of the entry you
want to update or invalidate or cause a TLB
ush.
You can read the virtual pfn causing a TLB miss
or fault.
Read-Write
TLBPADDR You can write the physical pfn of the entry you
want to update.
Write-only
TLBBADVADDR You can read the virtual address which caused
the TLB exception.
Read-only
• TLBVADDR: holds a virtual address
• TLBPADDR: holds a physical address
A CSR register can be written to like this:
The following code writes the content of the R1 register to TLBVADDR CSR:
wcsr TLBVADDR , r1
A CSR register can be read from like this:
The following code writes the content of TLBPADDR CSR to the R1 register:
rcsr r1, TLBPADDR
3
4.1 Add or Update a TLB entry
First, make sure vaddr[2:0] == 000 (or 3'b0 in verilog) as those 3 bits will be used for other
TLB operations.
Then, write the virtual address to the TLBVADDR CSR.
Then you need to do a logical OR operation on the physical address to set paddr[2:0] according
to your needs:
• paddr[2] set to 1 means the page won't be cached by LM32 Data Cache (only for Data
Cache / DTLB)
• paddr[1] set to 1 means the Page is Read-only (only valid for DTLB)
• paddr[0] set to 1 means you want to update DTLB, use 0 for ITLB
Then, you need to write the OR'ed physical address to the TLBPADDR CSR.
The TLB entry update will be triggered by the write to TLBPADDR CSR.
Code samples:
#define PAGE_SIZE (1  12)
#define PAGE_MASK (PAGE_SIZE - 1)
void update_dtlb_entry(unsigned int vaddr , unsigned int paddr ,
bool read -only , bool not_cached)
{
paddr = ~PAGE_MASK; // Make sure page offset is zeroed
vaddr = ~PAGE_MASK; // Make sure page offset is zeroed
paddr |= 1; // This means we are addressing DTLB
if (read -only)
paddr |= 2;
if (not_cached)
paddr |= 4;
asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : );
asm volatile (wcsr TLBPADDR , %0 :: r(paddr) : );
}
void update_itlb_entry(unsigned int vaddr , unsigned int paddr)
{
paddr = ~PAGE_MASK; // Make sure page offset is zeroed
vaddr = ~PAGE_MASK; // Make sure page offset is zeroed
// We don 't set paddr [0] which means we are addressing
ITLB
asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : );
asm volatile (wcsr TLBPADDR , %0 :: r(paddr) : );
4
}
4.2 Invalidate a TLB entry or Flush the entire TLB
First, you need to do a logical OR operation on the virtual address to set vaddr[2:0] according
to your needs:
• vaddr[2] set to 1 will trigger a ush of the entire selected TLB
• vaddr[1] set to 1 will trigger the invalidation of the entry indexed by vaddr[21:12] inside
the selected TLB
• vaddr[0] set to 1 means you want to operate on DTLB, use 0 for ITLB
The action is triggered upon the write of the OR'ed virtual address to the TLBVADDR CSR.
Code samples:
#define PAGE_SIZE (1  12)
#define PAGE_MASK (PAGE_SIZE - 1)
void invalidate_dtlb_entry(unsigned int vaddr)
{
vaddr = ~PAGE_MASK; // Make sure page offset is zeroed
/*
* 1 because we are addressing DTLB
* 2 because we want to invalidate a specific line
*/
vaddr |= 1 | 2;
asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : );
}
void invalidate_itlb_entry(unsigned int vaddr)
{
vaddr = ~PAGE_MASK; // Make sure page offset is zeroed
vaddr |= 2; // 2 because we want to invalidate a specific
line
asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : );
}
void flush_dtlb(void)
{
unsigned int cmd = 1 | 4;
asm volatile (wcsr TLBVADDR , %0 :: r(cmd) : );
}
void flush_itlb(void)
5
{
unsigned int cmd = 4;
asm volatile (wcsr TLBVADDR , %0 :: r(cmd) : );
}
4.3 A sum up of TLB actions
To summarize all possible TLB actions:
• Writing to TLBPADDR triggers the update of a TLB entry according to the content of
TLBVADDR and TLBPADDR
• Writing to TLBVADDR either prepares for updating a TLB entry if it is followed by
a write operation to TLBPADDR or immediately triggers an action determined by bits
vaddr[2:0] written to TLBVADDR. In the latter case, the action is performed on the TLB
entry indexed by vaddr[21:12].
Possible actions triggered by writing to TLBVADDR:
vaddr[2:0] action
000 No Operation, used for updating TLB entry by writting to TLBPADDR
011 Invalidate DTLB entry indexed by vaddr[21:12]
010 Invalidate ITLB entry indexed by vaddr[21:12]
101 Flush DTLB
100 Flush ITLB
11x Not deterministic, do not use untill it's dened by a future MMU revision
5 Interact with the MMU
In order to interact with the MMU, a new CSR (Control and Status Register) has been added:
PSW (Processor Status Word)
Bits Meaning
31:12 unused
11 BUSR: Breakpoint backup of USR
10 EUSR: Exception backup of USR
9 USR: User mode bit
8 BDTLBE: Breakpoint backup of DTLBE
7 EDTLBE: Exception backup of DTLBE
6 DTLBE: DTLB enabled
5 BITLBE: Breakpoint backup of ITLBE
4 EITLBE: Exception backup of ITLBE
3 ITLBE: ITLB enabled
2 IE.BIE ∗
1 IE.EIE ∗
0 IE.IE ∗
(*) PSW[2:0] is a real mirror of IE[2:0] as described in the LatticeMico32 Processor Reference
Manuel p. 10 Table 5 Fields of the IE CSR. In any condition: PSW[2:0] == IE[2:0]. IE CSR
6
is mirrored in the lower bits of PSW CSR for compatibility reasons. Old programs (ignorant
of the MMU) will keep using IE CSR, newer programs can use PSW to deal with MMU and
interrupts.
5.1 Activate the MMU
Activating the MMU is done by activating each TLB by writing 1 into PSW[ITLBE] and
PSW[DTLBE].
void enable_mmu(void)
{
asm volatile (rcsr r1, PSWnt
ori r1, r1, 72nt
wcsr PSW , r1 ::: r1);
}
5.2 Deactivate the MMU
Disactivating the MMU is done by deactivating each TLB by writing 0 into PSW[ITLBE] and
PSW[DTLBE].
void disable_mmu(void)
{
unsigned int mask = ~(72);
asm volatile (rcsr r1, PSWnt
and r1, r1, %0nt
wcsr PSW , r1 :: r(mask) : r1);
}
6 TLB lookups
This section explains in details how the TLB lookup takes place: what happens in which condi-
tion.
If the TLBs are disabled, nothing special happens, LM32 will behave as if it has been synthetized
without MMU support (except for the presence of PSW, TLBVADDR and TLBPADDR).
If DTLB is enabled:
In parallel of the Data Cache lookup, the DTLB lookup happens.
DTLB is indexed by vaddr[21:11].
If the DTLB entry is invalid (i.e. invalid bit is set), then the DTLB generates a DTLB miss
exception.
If the DTLB entry is valid, the DTLB compares vaddr[31:22] with the DTLB entry tag, if this
comparison fails: the DTLB generates a DTLB miss exception as well.
If the DTLB entry is valid and the vaddr[31:22] matches the DTLB entry tag:
• Then if the memory access was a READ (lb, lbu, lh, lhu, lw)
7
the Data Cache compares the tag of its selected line with the paddr[31:12] extracted
from the DTLB to check if we Hit or Miss the Data Cache
 Then the usual Cache rell happens (using the physical address) in case of a cache
miss
• Then if the memory access was a WRITE (sb, sh, sw)
 The read-only bit ag contained in the DTLB entry is checked
∗ If it is set: it triggers a DTLB fault CPU exception
∗ If it's not set: The Data Cache does the same tag comparison as with the READ
operation to check for Cache Hit/Miss
All these behaviours are summed up in the following table:
Exception EID Condition
ITLB miss 8
• ITLB entry is invalid
• ITLB entry tag does not match
vaddr[31:22]
DTLB miss 9
• DTLB entry is invalid
• DTLB entry tag does not match
vaddr[31:22]
DTLB fault 10 DTLB entry is valid
AND the entry tag matches vaddr[31:22]
AND the read-only bit is set
AND the cpu is doing a memory store
Privilege exception 11
PSW[USR] == 1 and one of the following
instruction is executed:
• iret
• bret
• wcsr
The Condition column's content is a logical OR between each bullet point except for the
DTLB fault where the logical AND is explicitly specied.
7 CSR registers special behaviours
Upon any exception, PSW CSR is modied automatically by the CPU pipeline itself:
• PSW[ITLBE] is saved in PSW[EITLBE] and the former is cleared
• PSW[DTLBE] is saved in PSW[EDTLBE] and the former is cleared
8
• PSW[USR] is saved in PSW[EUSR] and the former is cleared
• TLBVADDR is pre-charged with the virtual PFN (page frame number) which caused an
exception (in case of TLB miss or fault only)
 TLBVADDR[0] is set to 1 when then exception is caused by DTLB, else it is clear
 In case of DTLB miss or fault, TLBVADDR[31:12] is pre-charged the virtual PFN
whose load or store operation caused the exception
 In case of ITLB miss, TLBVADDR[31:12] is pre-charged with the virtual PFN of the
instruction whose fetch caused the exception
 This mechanism allows for faster TLB miss handling because TLBVADDR is already
pre-charged with the right value
 Since TLBVADDR is pre-charged with the virtual PFN: page oset bits (TLB-
VADDR[11:1]) are not set
• TLBBADVADDR∗∗ is written with a virtual address when an exception is caused by a
TLB miss
 In case of ITLB miss, TLBBADVADDR[31:2] contains the PC address whose fetch
triggered the ITLB miss exception. Instructions being 32 bits aligned, PC[1:0] is
always 00.
 In case of DTLB miss or fault, TLBBADVADDR[31:0] contains the virtual address
whose load or store operation caused the exception
 Unlike TLBVADDR, TLBBADVADDR page oset bits are set according to what
caused the exception
∗ In LM32 pipeline, exception happens in the eXecute stage, even though they may be triggered
in the Fetch or Memory stage for example. Load and Store instructions therefore stall the
pipeline for 1 cycle during the eXecute stage if the DTLB is activated.
∗∗ TLBBADVADDR is the same CSR ID as TLBPADDR. The former is read-only and the latter
is write-only.
Upon any breakpoint hit, PSW CSR is also modied by the CPU pipeline:
• PSW[ITLBE] is saved in PSW[BITLBE] and the former is cleared
• PSW[DTLBE] is saved in PSW[BDTLBE] and the former is cleared
• PSW[USR] is saved in PSW[BUSR] and the former is cleared
This means MMU is turned o upon CPU exception or breakpoint hit.
Upon return from exception (iret instruction), PSW CSR is also modied by the CPU pipeline:
• PSW[ITLBE] is restored using the value from PSW[EITLBE]
• PSW[DTLBE] is restored using the value from PSW[EDTLBE]
• PSW[USR] is restored using the value from PSW[EUSR]
Upon return from breakpoint (bret instruction), PSW CSR is also modied by the CPU pipeline:
9
• PSW[ITLBE] is restored using the value from PSW[BITLBE]
• PSW[DTLBE] is restored using the value from PSW[BDTLBE]
• PSW[USR] is restored using the value from PSW[BUSR]
Copyright notice
Copyright c 2013 Yann Sionneau.
Permission is granted to copy, distribute and/or modify this document under the terms of the
BSD License.
10

Weitere ähnliche Inhalte

Was ist angesagt?

Low latency & mechanical sympathy issues and solutions
Low latency & mechanical sympathy  issues and solutionsLow latency & mechanical sympathy  issues and solutions
Low latency & mechanical sympathy issues and solutions
Jean-Philippe BEMPEL
 
Cache aware hybrid sorter
Cache aware hybrid sorterCache aware hybrid sorter
Cache aware hybrid sorter
Manchor Ko
 

Was ist angesagt? (20)

Advanced RAC troubleshooting: Network
Advanced RAC troubleshooting: NetworkAdvanced RAC troubleshooting: Network
Advanced RAC troubleshooting: Network
 
Riyaj real world performance issues rac focus
Riyaj real world performance issues rac focusRiyaj real world performance issues rac focus
Riyaj real world performance issues rac focus
 
Мастер-класс "Логическая репликация и Avito" / Константин Евтеев, Михаил Тюр...
Мастер-класс "Логическая репликация и Avito" / Константин Евтеев,  Михаил Тюр...Мастер-класс "Логическая репликация и Avito" / Константин Евтеев,  Михаил Тюр...
Мастер-класс "Логическая репликация и Avito" / Константин Евтеев, Михаил Тюр...
 
Memory model
Memory modelMemory model
Memory model
 
Implementing distributed mclock in ceph
Implementing distributed mclock in cephImplementing distributed mclock in ceph
Implementing distributed mclock in ceph
 
Paxos building-reliable-system
Paxos building-reliable-systemPaxos building-reliable-system
Paxos building-reliable-system
 
ioDrive de benchmarking 2011 1209_zem_distribution
ioDrive de benchmarking 2011 1209_zem_distributionioDrive de benchmarking 2011 1209_zem_distribution
ioDrive de benchmarking 2011 1209_zem_distribution
 
Corosync and Pacemaker
Corosync and PacemakerCorosync and Pacemaker
Corosync and Pacemaker
 
Ping to Pong
Ping to PongPing to Pong
Ping to Pong
 
Low latency & mechanical sympathy issues and solutions
Low latency & mechanical sympathy  issues and solutionsLow latency & mechanical sympathy  issues and solutions
Low latency & mechanical sympathy issues and solutions
 
Fredericksburg LUG Bitcoin slides
Fredericksburg LUG Bitcoin slidesFredericksburg LUG Bitcoin slides
Fredericksburg LUG Bitcoin slides
 
Fm wtm12-v2
Fm wtm12-v2Fm wtm12-v2
Fm wtm12-v2
 
Cache aware hybrid sorter
Cache aware hybrid sorterCache aware hybrid sorter
Cache aware hybrid sorter
 
Disruptor
DisruptorDisruptor
Disruptor
 
Timers
TimersTimers
Timers
 
MySQL Galera 集群
MySQL Galera 集群MySQL Galera 集群
MySQL Galera 集群
 
opt-mem-trx
opt-mem-trxopt-mem-trx
opt-mem-trx
 
Alternative cryptocurrencies
Alternative cryptocurrencies Alternative cryptocurrencies
Alternative cryptocurrencies
 
Adaptive Linear Solvers and Eigensolvers
Adaptive Linear Solvers and EigensolversAdaptive Linear Solvers and Eigensolvers
Adaptive Linear Solvers and Eigensolvers
 
Kernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architectureKernel Recipes 2015 - Porting Linux to a new processor architecture
Kernel Recipes 2015 - Porting Linux to a new processor architecture
 

Ähnlich wie LatticeMico32 MMU documentation

Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Проведение криминалистической экспертизы и анализа руткит-программ на примере...Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Alex Matrosov
 

Ähnlich wie LatticeMico32 MMU documentation (20)

A Brief Introduction of TiDB (Percona Live)
A Brief Introduction of TiDB (Percona Live)A Brief Introduction of TiDB (Percona Live)
A Brief Introduction of TiDB (Percona Live)
 
Managing Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSONManaging Unstructured Data: Lobs in the World of JSON
Managing Unstructured Data: Lobs in the World of JSON
 
Porting NetBSD to the open source LatticeMico32 CPU
Porting NetBSD to the open source LatticeMico32 CPUPorting NetBSD to the open source LatticeMico32 CPU
Porting NetBSD to the open source LatticeMico32 CPU
 
00 chapter07 and_08_conversion_subroutines_force_sp13
00 chapter07 and_08_conversion_subroutines_force_sp1300 chapter07 and_08_conversion_subroutines_force_sp13
00 chapter07 and_08_conversion_subroutines_force_sp13
 
TiDB vs Aurora.pdf
TiDB vs Aurora.pdfTiDB vs Aurora.pdf
TiDB vs Aurora.pdf
 
Monetdb basic bat operation
Monetdb basic bat operationMonetdb basic bat operation
Monetdb basic bat operation
 
An Example MIPS
An Example  MIPSAn Example  MIPS
An Example MIPS
 
Debunking myths about_redo_ppt
Debunking myths about_redo_pptDebunking myths about_redo_ppt
Debunking myths about_redo_ppt
 
How to-mount-3 par-san-virtual-copy-onto-rhel-servers-by-Dusan-Baljevic
How to-mount-3 par-san-virtual-copy-onto-rhel-servers-by-Dusan-BaljevicHow to-mount-3 par-san-virtual-copy-onto-rhel-servers-by-Dusan-Baljevic
How to-mount-3 par-san-virtual-copy-onto-rhel-servers-by-Dusan-Baljevic
 
Detecting hardware virtualization rootkits
Detecting hardware virtualization rootkitsDetecting hardware virtualization rootkits
Detecting hardware virtualization rootkits
 
Lect15
Lect15Lect15
Lect15
 
How Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protectionsHow Triton can help to reverse virtual machine based software protections
How Triton can help to reverse virtual machine based software protections
 
MongoDB Days Silicon Valley: MongoDB and the Hadoop Connector
MongoDB Days Silicon Valley: MongoDB and the Hadoop ConnectorMongoDB Days Silicon Valley: MongoDB and the Hadoop Connector
MongoDB Days Silicon Valley: MongoDB and the Hadoop Connector
 
Sql server clustering msdtc
Sql server clustering msdtcSql server clustering msdtc
Sql server clustering msdtc
 
4 STM32's SysTick.ppt
4 STM32's SysTick.ppt4 STM32's SysTick.ppt
4 STM32's SysTick.ppt
 
Ndb cluster 80_oci_dbt2
Ndb cluster 80_oci_dbt2Ndb cluster 80_oci_dbt2
Ndb cluster 80_oci_dbt2
 
A taste of GlobalISel
A taste of GlobalISelA taste of GlobalISel
A taste of GlobalISel
 
Positive Hack Days. Матросов. Мастер-класс: Проведение криминалистической экс...
Positive Hack Days. Матросов. Мастер-класс: Проведение криминалистической экс...Positive Hack Days. Матросов. Мастер-класс: Проведение криминалистической экс...
Positive Hack Days. Матросов. Мастер-класс: Проведение криминалистической экс...
 
Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Проведение криминалистической экспертизы и анализа руткит-программ на примере...Проведение криминалистической экспертизы и анализа руткит-программ на примере...
Проведение криминалистической экспертизы и анализа руткит-программ на примере...
 
Lec15 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- EPIC VLIW
Lec15 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- EPIC VLIWLec15 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- EPIC VLIW
Lec15 Computer Architecture by Hsien-Hsin Sean Lee Georgia Tech -- EPIC VLIW
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 

Kürzlich hochgeladen (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

LatticeMico32 MMU documentation

  • 1. LatticeMico32 Memory Management Unit Documentation Yann Sionneau version 1.0 June 2013 Contents 1 Overview 1 2 Features 2 3 TLB Layout 2 4 Interact with the TLB 3 4.1 Add or Update a TLB entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4.2 Invalidate a TLB entry or Flush the entire TLB . . . . . . . . . . . . . . . . . . . 5 4.3 A sum up of TLB actions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 5 Interact with the MMU 6 5.1 Activate the MMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5.2 Deactivate the MMU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6 TLB lookups 7 7 CSR registers special behaviours 8 1 Overview This document describes the LatticeMico32 MMU (Memory Management Unit) features and how it can be congured. This MMU is not part of the original LatticeMico32 CPU, it has been added by Yann Sionneau with the help of the Milkymist community in general and Michael Walle in particular. The LM32 MMU has been designed with simplicity in head, KISS (Keep It Simple Stupid) is the motto. Only the minimum has been implemented to have the minimalistic features which would allow a modern Operating System like Linux or *BSD to run, providing virtual memory and memory protection. 1
  • 2. The Caches are designed to be VIPT (Virtually Indexed Physically Tagged) to allow the TLB lookup to take place in parallel of the cache lookup so that we don't need to stale the pipeline. 2 Features • 1024 entries ITLB (Instruction Translation Lookaside Buer) • 1024 entries DTLB (Data Translation Lookaside Buer) • CPU exceptions generated upon ITLB miss DTLB miss DTLB page fault (writing to a read-only page) • I/D TLB lookup in parallel of the I/D Cache lookup to avoid lookup penalties • 4 kB pages As you can see, it is quite minimalistic, here is a list of what's not featured by this MMU: • No hardware page tree walker • No dirty or present bit • No ASID (Address Space Identier) • No lockable TLB entries • Only 1 page size supported: 4 kB 3 TLB Layout Let's name our 32 bits virtual address vaddr. Let's name our 32 bits physical address paddr. Let's say vaddr[0] is the Lowest Signicant Bit and vaddr[31] the Most Signicant Bit. Let's say vaddr[11:0] is the part of vaddr represented by its 12 Lowest Signicant Bits. Deep inside, the TLB is a Direct-mapped, VIVT (Virtually Indexed Virtually Tagged) Cache. When the LM32 core is synthetized with MMU support, the CPU pipeline Data and Instruction Caches turn into VIPT (Virtually Indexed Physically Tagged) Caches. The TLB is indexed by vaddr[21:12]: The bottom 10 LSB of the virtual PFN (Page Frame Number). 2
  • 3. A TLB entry holds: Physical PFN, Physical Tag, Cache inhibit ag (for DTLB), Read-only ag (for DTLB), Valid entry tag More precisely: • A valid DTLB entry: paddr[31:12], vaddr[31:22], paddr[2], paddr[1], 1 • An invalid DTLB entry: paddr[31:12], vaddr[21:22], paddr[2], paddr[1], 0 • A valid ITLB entry: paddr[31:12], vaddr[31:22], 1 • An invalid ITLB entry: paddr[31:12], vaddr[31:22], 0 The meaning of paddr[2] and paddr[1] will be explained later on in the section which explains how to program the MMU using LM32 assembly instructions. 4 Interact with the TLB In order to interact with the TLB, three CSR (Control and Status Registers) have been added to the LM32 CPU: CSR Description R/W TLBVADDR You can write the virtual pfn of the entry you want to update or invalidate or cause a TLB ush. You can read the virtual pfn causing a TLB miss or fault. Read-Write TLBPADDR You can write the physical pfn of the entry you want to update. Write-only TLBBADVADDR You can read the virtual address which caused the TLB exception. Read-only • TLBVADDR: holds a virtual address • TLBPADDR: holds a physical address A CSR register can be written to like this: The following code writes the content of the R1 register to TLBVADDR CSR: wcsr TLBVADDR , r1 A CSR register can be read from like this: The following code writes the content of TLBPADDR CSR to the R1 register: rcsr r1, TLBPADDR 3
  • 4. 4.1 Add or Update a TLB entry First, make sure vaddr[2:0] == 000 (or 3'b0 in verilog) as those 3 bits will be used for other TLB operations. Then, write the virtual address to the TLBVADDR CSR. Then you need to do a logical OR operation on the physical address to set paddr[2:0] according to your needs: • paddr[2] set to 1 means the page won't be cached by LM32 Data Cache (only for Data Cache / DTLB) • paddr[1] set to 1 means the Page is Read-only (only valid for DTLB) • paddr[0] set to 1 means you want to update DTLB, use 0 for ITLB Then, you need to write the OR'ed physical address to the TLBPADDR CSR. The TLB entry update will be triggered by the write to TLBPADDR CSR. Code samples: #define PAGE_SIZE (1 12) #define PAGE_MASK (PAGE_SIZE - 1) void update_dtlb_entry(unsigned int vaddr , unsigned int paddr , bool read -only , bool not_cached) { paddr = ~PAGE_MASK; // Make sure page offset is zeroed vaddr = ~PAGE_MASK; // Make sure page offset is zeroed paddr |= 1; // This means we are addressing DTLB if (read -only) paddr |= 2; if (not_cached) paddr |= 4; asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : ); asm volatile (wcsr TLBPADDR , %0 :: r(paddr) : ); } void update_itlb_entry(unsigned int vaddr , unsigned int paddr) { paddr = ~PAGE_MASK; // Make sure page offset is zeroed vaddr = ~PAGE_MASK; // Make sure page offset is zeroed // We don 't set paddr [0] which means we are addressing ITLB asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : ); asm volatile (wcsr TLBPADDR , %0 :: r(paddr) : ); 4
  • 5. } 4.2 Invalidate a TLB entry or Flush the entire TLB First, you need to do a logical OR operation on the virtual address to set vaddr[2:0] according to your needs: • vaddr[2] set to 1 will trigger a ush of the entire selected TLB • vaddr[1] set to 1 will trigger the invalidation of the entry indexed by vaddr[21:12] inside the selected TLB • vaddr[0] set to 1 means you want to operate on DTLB, use 0 for ITLB The action is triggered upon the write of the OR'ed virtual address to the TLBVADDR CSR. Code samples: #define PAGE_SIZE (1 12) #define PAGE_MASK (PAGE_SIZE - 1) void invalidate_dtlb_entry(unsigned int vaddr) { vaddr = ~PAGE_MASK; // Make sure page offset is zeroed /* * 1 because we are addressing DTLB * 2 because we want to invalidate a specific line */ vaddr |= 1 | 2; asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : ); } void invalidate_itlb_entry(unsigned int vaddr) { vaddr = ~PAGE_MASK; // Make sure page offset is zeroed vaddr |= 2; // 2 because we want to invalidate a specific line asm volatile (wcsr TLBVADDR , %0 :: r(vaddr) : ); } void flush_dtlb(void) { unsigned int cmd = 1 | 4; asm volatile (wcsr TLBVADDR , %0 :: r(cmd) : ); } void flush_itlb(void) 5
  • 6. { unsigned int cmd = 4; asm volatile (wcsr TLBVADDR , %0 :: r(cmd) : ); } 4.3 A sum up of TLB actions To summarize all possible TLB actions: • Writing to TLBPADDR triggers the update of a TLB entry according to the content of TLBVADDR and TLBPADDR • Writing to TLBVADDR either prepares for updating a TLB entry if it is followed by a write operation to TLBPADDR or immediately triggers an action determined by bits vaddr[2:0] written to TLBVADDR. In the latter case, the action is performed on the TLB entry indexed by vaddr[21:12]. Possible actions triggered by writing to TLBVADDR: vaddr[2:0] action 000 No Operation, used for updating TLB entry by writting to TLBPADDR 011 Invalidate DTLB entry indexed by vaddr[21:12] 010 Invalidate ITLB entry indexed by vaddr[21:12] 101 Flush DTLB 100 Flush ITLB 11x Not deterministic, do not use untill it's dened by a future MMU revision 5 Interact with the MMU In order to interact with the MMU, a new CSR (Control and Status Register) has been added: PSW (Processor Status Word) Bits Meaning 31:12 unused 11 BUSR: Breakpoint backup of USR 10 EUSR: Exception backup of USR 9 USR: User mode bit 8 BDTLBE: Breakpoint backup of DTLBE 7 EDTLBE: Exception backup of DTLBE 6 DTLBE: DTLB enabled 5 BITLBE: Breakpoint backup of ITLBE 4 EITLBE: Exception backup of ITLBE 3 ITLBE: ITLB enabled 2 IE.BIE ∗ 1 IE.EIE ∗ 0 IE.IE ∗ (*) PSW[2:0] is a real mirror of IE[2:0] as described in the LatticeMico32 Processor Reference Manuel p. 10 Table 5 Fields of the IE CSR. In any condition: PSW[2:0] == IE[2:0]. IE CSR 6
  • 7. is mirrored in the lower bits of PSW CSR for compatibility reasons. Old programs (ignorant of the MMU) will keep using IE CSR, newer programs can use PSW to deal with MMU and interrupts. 5.1 Activate the MMU Activating the MMU is done by activating each TLB by writing 1 into PSW[ITLBE] and PSW[DTLBE]. void enable_mmu(void) { asm volatile (rcsr r1, PSWnt ori r1, r1, 72nt wcsr PSW , r1 ::: r1); } 5.2 Deactivate the MMU Disactivating the MMU is done by deactivating each TLB by writing 0 into PSW[ITLBE] and PSW[DTLBE]. void disable_mmu(void) { unsigned int mask = ~(72); asm volatile (rcsr r1, PSWnt and r1, r1, %0nt wcsr PSW , r1 :: r(mask) : r1); } 6 TLB lookups This section explains in details how the TLB lookup takes place: what happens in which condi- tion. If the TLBs are disabled, nothing special happens, LM32 will behave as if it has been synthetized without MMU support (except for the presence of PSW, TLBVADDR and TLBPADDR). If DTLB is enabled: In parallel of the Data Cache lookup, the DTLB lookup happens. DTLB is indexed by vaddr[21:11]. If the DTLB entry is invalid (i.e. invalid bit is set), then the DTLB generates a DTLB miss exception. If the DTLB entry is valid, the DTLB compares vaddr[31:22] with the DTLB entry tag, if this comparison fails: the DTLB generates a DTLB miss exception as well. If the DTLB entry is valid and the vaddr[31:22] matches the DTLB entry tag: • Then if the memory access was a READ (lb, lbu, lh, lhu, lw) 7
  • 8. the Data Cache compares the tag of its selected line with the paddr[31:12] extracted from the DTLB to check if we Hit or Miss the Data Cache Then the usual Cache rell happens (using the physical address) in case of a cache miss • Then if the memory access was a WRITE (sb, sh, sw) The read-only bit ag contained in the DTLB entry is checked ∗ If it is set: it triggers a DTLB fault CPU exception ∗ If it's not set: The Data Cache does the same tag comparison as with the READ operation to check for Cache Hit/Miss All these behaviours are summed up in the following table: Exception EID Condition ITLB miss 8 • ITLB entry is invalid • ITLB entry tag does not match vaddr[31:22] DTLB miss 9 • DTLB entry is invalid • DTLB entry tag does not match vaddr[31:22] DTLB fault 10 DTLB entry is valid AND the entry tag matches vaddr[31:22] AND the read-only bit is set AND the cpu is doing a memory store Privilege exception 11 PSW[USR] == 1 and one of the following instruction is executed: • iret • bret • wcsr The Condition column's content is a logical OR between each bullet point except for the DTLB fault where the logical AND is explicitly specied. 7 CSR registers special behaviours Upon any exception, PSW CSR is modied automatically by the CPU pipeline itself: • PSW[ITLBE] is saved in PSW[EITLBE] and the former is cleared • PSW[DTLBE] is saved in PSW[EDTLBE] and the former is cleared 8
  • 9. • PSW[USR] is saved in PSW[EUSR] and the former is cleared • TLBVADDR is pre-charged with the virtual PFN (page frame number) which caused an exception (in case of TLB miss or fault only) TLBVADDR[0] is set to 1 when then exception is caused by DTLB, else it is clear In case of DTLB miss or fault, TLBVADDR[31:12] is pre-charged the virtual PFN whose load or store operation caused the exception In case of ITLB miss, TLBVADDR[31:12] is pre-charged with the virtual PFN of the instruction whose fetch caused the exception This mechanism allows for faster TLB miss handling because TLBVADDR is already pre-charged with the right value Since TLBVADDR is pre-charged with the virtual PFN: page oset bits (TLB- VADDR[11:1]) are not set • TLBBADVADDR∗∗ is written with a virtual address when an exception is caused by a TLB miss In case of ITLB miss, TLBBADVADDR[31:2] contains the PC address whose fetch triggered the ITLB miss exception. Instructions being 32 bits aligned, PC[1:0] is always 00. In case of DTLB miss or fault, TLBBADVADDR[31:0] contains the virtual address whose load or store operation caused the exception Unlike TLBVADDR, TLBBADVADDR page oset bits are set according to what caused the exception ∗ In LM32 pipeline, exception happens in the eXecute stage, even though they may be triggered in the Fetch or Memory stage for example. Load and Store instructions therefore stall the pipeline for 1 cycle during the eXecute stage if the DTLB is activated. ∗∗ TLBBADVADDR is the same CSR ID as TLBPADDR. The former is read-only and the latter is write-only. Upon any breakpoint hit, PSW CSR is also modied by the CPU pipeline: • PSW[ITLBE] is saved in PSW[BITLBE] and the former is cleared • PSW[DTLBE] is saved in PSW[BDTLBE] and the former is cleared • PSW[USR] is saved in PSW[BUSR] and the former is cleared This means MMU is turned o upon CPU exception or breakpoint hit. Upon return from exception (iret instruction), PSW CSR is also modied by the CPU pipeline: • PSW[ITLBE] is restored using the value from PSW[EITLBE] • PSW[DTLBE] is restored using the value from PSW[EDTLBE] • PSW[USR] is restored using the value from PSW[EUSR] Upon return from breakpoint (bret instruction), PSW CSR is also modied by the CPU pipeline: 9
  • 10. • PSW[ITLBE] is restored using the value from PSW[BITLBE] • PSW[DTLBE] is restored using the value from PSW[BDTLBE] • PSW[USR] is restored using the value from PSW[BUSR] Copyright notice Copyright c 2013 Yann Sionneau. Permission is granted to copy, distribute and/or modify this document under the terms of the BSD License. 10