diff --git a/docs/architecture.md b/docs/architecture.md
index 4cd3a2b0d..8df2128e5 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -14,33 +14,14 @@ Because the scoreboard is in full control over the functional units it also cont
4. **Write Back**: Once the scoreboard is aware that the functional unit has completed execution, it commits the result in-order to either the architectural register file, CSR register file, floating point register file or data memory. If there are no structural dependencies on the write path the scoreboard can write more than one result at a time.
The scoreboard maintains a connection to each functional unit and each architectural state holding element. For Ariane there is the plan to include the following FUs: ALU, Multiplier and LSU. If it should turn out to be necessary additional ALUs or multipliers can be easily added.
-TODO: Detailed Bookkeeping
+
+**TODO: Detailed Bookkeeping**
> While it will be possible that the execute stage houses more than one ALU or multiplier, this is not going to be the case for the load store unit (LSU). The current assumption will be, that the LSU is like any other functional unit (using a variable amount of cycles to perform its operation), but it should also be in full control over the data memories state. It therefore takes a special role in the whole design.
-The scoreboard has the following entries:
-
-| **Name** | **Abbr.** | **Description** |
-|-------------------------------|-----------|-----------------------------------------------------------------------------------------------------|
-| Program Counter | PC | Program counter of instruction |
-| Functional Unit | FU | Which type of functional unit this instruction is going to need |
-| Operation | OP | Which operation the functional unit is going to perform on it |
-| Destination Register | RD | Destination register address of instruction |
-| Value of destination register | VAL(RD) | Result written by the functional unit. The result in here is valid only if the finished bit is set. |
-| Immediate | IMM | Immediate Field |
-| Source Register 1 | RS1 | First source registers address of instruction |
-| FU Result RS 1 | FURS1 | Which functional unit the RS1 is coming from |
-| FU Result RS 1 Ready | FURS1R | RS1 is ready |
-| Source Register 2 | RS2 | Second source registers address of instruction |
-| FU Result RS 2 | FURS2 | Which functional unit the RS1 is coming from |
-| FU Result RS 2 Ready | FURS2R | RS2 is ready |
-| In Flight | IF | Set to one if the instruction is currently being processed |
-| Valid | VALID | The instruction has been executed and the result is valid |
-| Exception Valid | ISEXCPT | Set if an exception occurred. |
-| Exception Cause | ECAUSE | Exception cause as listed in privileged specification |
-
Register addresses can be of type: CSR, Regfile (x0,.., x31), None (immediate), current PC
-TODO: Register Encoding, OP encoding
+
+**TODO: Register Encoding, OP encoding**
### Exception Propagation
@@ -71,7 +52,14 @@ The FU are not supposed to have inter-unit dependencies for the moment, e.g.: ev
Refer to the [timing diagram](timing_diagrams/#functional-unit) section for further detail.
-TODO: Details about comparisons and branches.
+### Branches
+
+Branches are handled by the branch unit in co-operation with the ALU. It is a little bit specially in the sense that it does not have a write back port to the scoreboard. Actually, the only thing the branch unit writes is PC + 4 (or + 2 in the compressed case) to the destination register. To save write back ports the ALU does this addition and the write back port of the ALU is used to write back to register *rd*. In summary, what this means is - branch instructions (including jumps) are another form of ALU instruction. They can only be performed if the ALU is ready (as the current ALU is single cycle this means always). Furthermore the exception write back port of the ALU is used to signal mis-aligned branch target exceptions (e.g.: an exception which occurs if the branch target is not aligned to a half-word boundary).
+
+The branch unit maintains two more connections to different parts of the processor:
+
+1. The issue and read operand stage: The issue stage will block if it issued a branch instruction which is currently not resolved. Therefore the branch unit will signal the issue and read operand stage that it just resolved a branch. This is only done if it was indeed a branch and not an instruction where branch-prediction just thought it was a branch.
+2. To the PCGEN stage where it signals whether this instruction was a branch, a taken and mis-predicted branch, a un-taken and mis-predicted branch, a taken and correctly predicted branch or an un-taken and correctly predicted branch. If it was a mis-predict the front-end (everything from issue to PCGEN) of the processor is flushed and PCGEN starts re-fetching from the newly calculated PC (which is correct).
### LSU
@@ -88,39 +76,22 @@ Currently the idea is to not speculate past branches or jumps. So the issue wind
If the scoreboard encounters a branch it does not accept new instructions from ID. Executes the branch instruction. In the next cycle the speculated pc is compared to the calculated PC. If they match the scoreboard starts to issue instructions again. If not, a miss-predict is signaled and all fetched instructions are killed prior to the execute stage. The pipeline fills from the new address. Branch prediction data structures are updated accordingly.
## Load Store Unit
-The load store unit is similar to every other functional unit. In addition, it has to manage the interface to the data memory. In particular, it houses the DTLB (Data Translation Lookaside Buffer) and the page table walker (PTW). It arbitrates the access to data memory, giving precedence to PTW lookups. This is done in order to unstall TLB misses as soon as possible.
+The load store unit is similar to every other functional unit. In addition, it has to manage the interface to the data memory. In particular, it houses the DTLB (Data Translation Lookaside Buffer) and the page table walker (PTW). It arbitrates the access to data memory, giving precedence to PTW lookups. This is done in order to un-stall TLB misses as soon as possible. A high level block diagram of the LSU can be found here:
-The load store unit can issue load request immediately while stores need to be kept back as long as the scoreboard does not issue a commit signal. Therefore, upon a load, the LSU also needs to check its SAQ for potential data words. Should it find uncommitted data it stalls, since it can’t satisfy the current request. This means:
+
+
+The LSU can issue load request immediately while stores need to be kept back as long as the scoreboard does not issue a commit signal: This is done because the whole processor is designed to only have a single commit point (the commit stage). Because issuing loads to the memory hierarchy does not have any semantic side effects the LSU can issue them immediately. Totally in contrast to the nature of a store: Stores alter the architectural state and are therefore placed in a store buffer only to be committed in a later step by the commit stage. Sometimes this is also called **posted-store** because the store request is posted to the store queue and waiting for entering the memory hierarchy as soon as the commit signal goes high and the memory interface is not in use.
+
+Therefore, upon a load, the LSU also needs to check its SAQ for potential data words. Should it find uncommitted data it stalls, since it can’t satisfy the current request. This means:
- Two loads to the same address are allowed. They will return in issue order.
- Two stores to the same address are allowed. They are issued in-order by the scoreboard and stored in the SAQ as long as the scoreboard didn’t give the grant to commit them.
- A store followed by a load to the same address can only be satisfied if the store has already been committed (marked as committed in the SAQ). Otherwise the LSU stalls until the scoreboard commits the instruction. We cannot guarantee that the store will eventually be committed (e.g.: an exception occurred).
-For the moment being, the LSU does not handle misaligned accesses (e.g.: access which are not aligned at a 64bit boundary). It simply issues a misaligned exception and lets the exception handler resolve the LD/ST. Furthermore, it can issue a load access exception.
+For the moment being, the LSU does not handle misaligned accesses (e.g.: access which are not aligned at a 64 bit boundary). It simply issues a misaligned exception and lets the exception handler resolve the LD/ST. Furthermore, it can issue a load access exception.
If an exception was signaled by the WB stage, the LSU kills all entries in its store queue except those that have been marked as committed.
The LSU of the core takes care of accessing the data memory. Load and stores on words (32 bit), half words (16 bit) and bytes (8 bit) are supported.
-Table 3 describes the signals that are used by the LSU.
-
-| **Signal** | **Direction** | **Description** |
-|-----------------|---------------|------------------------------------------------------------------------------------------------------------------------|
-| data_req_o | Output | Request ready, must stay high until data_gnt_i is high for one cycle |
-| data_addr_o | Output | Address |
-| data_we_o | Output | Write Enable, high for writes, low for reads. Sent together with data_req_o |
-| data_be_o | Output | Byte Enable. Is set for the bytes to write/read, sent together with data_req_o |
-| data_wdata_o | Output | Data to be written to memory, sent together with data_req_o |
-| data_rdata_i | Input | Data read from memory |
-| data_rvalid_i | Input | data_rdata_is holds valid data when data_rvalid_i is high. This signal will be high for exactly one cycle per request. |
-| data_gnt_i | Input | The other side accepted the request. data_addr_o may change in the next cycle |
-| operator_i | Input | Operation to perform e.g.: LD/SD/... |
-| operand_a_i | Input | Operand a in from scoreboard/issue |
-| operand_b_i | Input | Operand b in from scoreboard/issue |
-| lsu_ready_o | Output | LSU is ready e.g. not busy and can accept new instructions |
-| lsu_valid_i | Input | LSU is requested to perform the instruction given in operator_i |
-| lsu_trans_id_i | Input | Transaction ID needed for the correct writeback |
-| lsu_trans_id_o | Output | Output to writeback for which it acknowledges the corresponding transaction |
-| lsu_valid_o | Output | Output of LSU is valid |
-| lsu_exception_o | Output | To writeback, an exception has occured for the following instruction |
## Protocol
diff --git a/docs/block_details.md b/docs/block_details.md
index 8e0d22b89..d47d21192 100644
--- a/docs/block_details.md
+++ b/docs/block_details.md
@@ -39,55 +39,13 @@ It is possible that a TLB or cache miss occurred. If this is the case the IF sta
The instruction queue is part of the IF stage. Its purpose is to decouple the instruction fetch unit as much as possible from the rest of the pipeline.
-### Interface
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|---------------------|---------------|-------------------------------------------------------------------------------------------------|-----------------------------|
-| epc_i | Input | EPC from CSR registers, depending on the privilege level the epc points to a different address. | CSR Regs |
-| ecall_i | Input | Ecall request from WB | Commit |
-| epc_commit_i | Input | EPC Commit | Commit |
-| epc_commit_valid_i | Input | EPC from Commit is valid | Commit |
-| flush_s1_i | Input | Flush PC Gen stage | Control |
-| flush_s2_i | Input | Flush fetch stage | Control |
-| bp_pc_i | Input | Branch prediction PC, from EX stage | EX -- Update BP/take branch |
-| bp_misspredict_i | Input | Branch was misspredicted | EX -- Update BP/take branch |
-| bp_target_address_i | Input | Target address of miss-predicted jump | EX -- Update BP/take branch |
-| instr_req_o | Output | Request to ICache | ICache |
-| instr_addr_o | Output | Instruction address | ICache |
-| instr_rdata_i | Input | Instruction data in | ICache |
-| dbg_addr_i | Input | Fetch address from debug | Debug |
-| instr_valid_o | Output | Instruction is valid | To ID |
-| instr_rdata_o | Output | Instruction | To ID |
-| pc_o | Output | PC of instruction | To ID |
-| is_spec_branch_o | Output | Is a speculative branch instruction | To ID |
-| spec_branch_pc_o | Output | Speculated branch target | To ID |
-| busy_o | Output | If is busy | To ID |
-| ready_i | Input | ID is ready | From ID |
-
## Instruction Decode (ID)
The ID stage contains the instruction decode logic (including the planned compressed decoder) as well as the register files (CSR, floating point and regular register file). The decoded instruction is committed to the scoreboard. The scoreboard decides which instruction it can issues next to the execute stage.
### Decoder
-The decoder's purpose is to expand the 32 bit incoming instruction stream to set the right values in the scoreboard, e.g.: which functional unit to activate, setting wright path and reading the destination, src1 and src2 register.
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|----------------|---------------|---------------------------------------------------------------------------|---------------|
-| instr_i | Input | 32 bit instruction to decode | From IF |
-| illegal_insn_o | Output | decoded an illegal instruction | Exception |
-| ebrk_insn_o | Output | Ebreak instruction encountered | Exception |
-| mret_insn_o | Output | return from machine exception instruction encountered, as a hint to IF | Exception |
-| sret_insn_o | Output | return from supervisor exception instruction encountered, as a hint to IF | Exception |
-| uret_insn_o | Output | return from user exception instruction encountered, as a hint to IF | Exception |
-| ecall_insn_o | Output | environment call instruction encountered, as a hint to IF | Exception |
-| fu_o | Output | Which functional unit the scoreboard needs to activate | To scoreboard |
-| op_o | Output | Operation the FU should perform | To scoreboard |
-| rd_o | Output | Destination register | To scoreboard |
-| rs1_o | Output | Source register 1 | To scoreboard |
-| rs2_o | Output | Source register 2 | To scoreboard |
-| wfi_o | Output | Wait for interrupt | To IF |
-
+The decoder's purpose is to expand the 32 bit incoming instruction stream to set the right values in the scoreboard, e.g.: which functional unit to activate, setting wright path and reading the destination, *src1* and *src2* register.
The current privilege level is not checked in the decoder since there could be an operation in progress that sets the privilege level to the appropriate level.
### Scoreboard
@@ -121,30 +79,6 @@ The scoreboard also contains all exception information which occurred during exe
If an exception already occurred in IF or ID the corresponding instruction is not executed anymore. Additionally a valid exception is never overwritten. For example an instruction fetch access fault is never overwritten by a load store access fault.
-#### Interface
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|-----------------------|---------------|-----------------------------------------------------------------------------------|------------------------|
-| flush_i | Input | Flush Scoreboard | Control |
-| full_o | Output | Scoreboard is full | Control |
-| rd_clobber_o | Output | Used destination registers, includes the FU that is going to write this register | To issue/read operands |
-| rs1_i | Input | Check the scoreboard for a valid register at that address | From read operands |
-| rs2_i | Input | Check the scoreboard for a valid register at that address | From read operands |
-| rs1_o | Output | Data for rs1 | To read operands |
-| rs1_valid_o | Output | Data for rs1 is valid | To read operands |
-| rs2_o | Output | Data for rs2 | To read operands |
-| rs2_valid_o | Output | Data for rs2 is valid | To read operands |
-| commit_instr_o | Output | Instruction to commit | To WB stage |
-| commit_ack_i | Input | Commit unit acknowledges instruction, it mus immediately begin with processing it | To WB stage |
-| decoded_instr_i | Input | Decoded instruction entering scoreboard | From ID |
-| decoded_instr_valid_i | Input | Decoded instruction entering scoreboard is valid | From ID |
-| issue_instr_o | Output | Instruction to issue stage | To Issue |
-| issue_instr_valid_o | Output | Instruction to issue stage is valid | To Issue |
-| issue_ack_i | Input | Issue stage is acknowledging instruction, it must immediately begin processing | From Issue |
-| pc_i | Input | PC at which to write back the data | From WB |
-| wdata_i | Input | Write data from WB | From WB |
-| wb_valid_i | Input | Data from WB stage is valid | From WB |
-
### Issue
The issue stage itself is not a real stage in the sense that it is pipelined, it is still part of the decode stage. The purpose of the issue stage is to find out whether we can issue the current top of the scoreboard to one of the functional units. It therefore takes into account whether the any other FU has or is going to write the destination register of the current instruction and whether or not the necessary functional unit is currently busy. If the FU is not busy and there are no dependencies we can issue the instruction to the execute stage.
@@ -154,32 +88,6 @@ The issue stage itself is not a real stage in the sense that it is pipelined, it
The compressed decoders purpose is to expand a compressed instruction (16 bit) to its 32 bit equivalent.
-### Interface
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|-------------------|---------------|---------------------------------------------------------------------------------------------------------|---------------------|
-| flush_i | Input | Flush ID, there was an architectural state change that needs to invalidate the whole buffer | From controller |
-| ready_o | Output | The scoreboard is ready to accept new instructions. | To ID |
-| valid_i | Input | The instruction is valid | From ID |
-| imm_i | Input | Immediate field in | From ID |
-| rs1_i | Input | Source register 1 | From ID |
-| rs2_i | Input | Source register 2 | From ID |
-| rd_i | Input | Destination register | From ID |
-| fu_i | Input | Functional unit needed | From ID |
-| op_i | Input | Operation to perform | From ID |
-| exception_i | Input | Exception | From ID |
-| exception_valid_i | Input | Exception is valid | From ID |
-| epc_i | Input | Exception PC | From ID |
-| FU_ALU_o | Output | Signals to ALU e.g.: operation to perform etc. | To ALU |
-| FU_ALU_i | Input | Signals from ALU e.g.: finished operation, result | From ALU |
-| FU_MULT_o | Output | Signals to Multiplier | To Mult |
-| FU_MULT_i | Input | Signals from Multiplier | From Mult |
-| FU_LSU_o | Output | Signals to LSU | To LSU |
-| FU_LSU_i | Input | Signals from LSU | From LSU |
-| Regfile | Inout | Signals from and to register file | From/To regfile |
-| CSR | Inout | Signals from and to CSR register file | From/To CSR regfile |
-
-
## Execute Stage (EX)
### Read Operands
@@ -194,18 +102,6 @@ The scoreboard and forwarding are mutually exclusive. The selection logic is a c
To obtain the right register value we need to poll the scoreboard for both source operands.
-### Interface
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|------------|---------------|---------------------------------------------------|--------------|
-| flush_i | Input | Flush ex stage | CSR Regs |
-| FU_ALU_i | Input | Signals to ALU e.g.: operation to perform etc. | To ALU |
-| FU_ALU_o | Output | Signals from ALU e.g.: finished operation, result | From ALU |
-| FU_MULT_i | Input | Signals to Multiplier | To Mult |
-| FU_MULT_o | Output | Signals from Multiplier | From Mult |
-| FU_LSU_i | Input | Signals to LSU | To LSU |
-| FU_LSU_o | Output | Signals from LSU | From LSU |
-
### Write-Back
The write-back stage writes the results from the FU back to the scoreboard. They are committed in-order in the next stage.
@@ -259,53 +155,8 @@ And the following machine mode CSR registers:
We need to be careful when altering some of the register. Some of those registers would potentially lead to different behavior (e.g.: mstatus by enabling address translation).
-### Interface
-
-| **Signal** | **Direction** | **Description** | **Category** |
-|----------------|---------------|----------------------------------------------|--------------------------|
-| flush_i | Input | Flush WB stage | CSR Regs |
-| instr_commit_i | Input | Instruction to commit | From Scoreboard/ID Stage |
-| CSR Regs | Output | Interface to CSR registers | To CSR Registers |
-| Regfile | Output | Interface to the architectural register file | To regfile |
-| Exception | Output | Exception occured | To PC gen |
-
-
## MMU
-| **Signal** | **Direction** | **Description** |
-| -------------------- | ------------- | ---------------------------------------------------------------------------------------- |
-| enable_translation_i | Input | Enables translation, coming from CSR file. |
-| ireq_o | Output | |
-| ivalid_i | Output | |
-| ierr_i | Input | |
-| ipaddr_o | Output | Physical address out |
-| fetch_req_i | Input | Fetch request in |
-| fetch_gnt_o | Output | Fetch request granted |
-| fetch_valid_o | Output | The output is valid |
-| fetch_err_o | Output | Fetch error |
-| fetch_vaddr_i | Input | Virtual address in |
-| dreq_o | Output | Request to data memory |
-| dgnt_i | Input | Grant from data memory |
-| dvalid_i | Input | Data from data memory is valid |
-| dwe_o | Output | Write enable to data memory |
-| dbe_o | Output | Byte enable to data memory |
-| dpaddr_o | Output | Physical address to data memory |
-| ddata_i | Input | Data from data memory |
-| lsu_req_i | Input | Request from LSU |
-| lsu_gnt_o | Output | Request granted to LSU |
-| lsu_valid_o | Output | Data to LSU is valid |
-| lsu_we_i | Input | Write enable from LSU |
-| lsu_err_o | Output | Error to LSU |
-| lsu_be_i | Input | Byte enable from LSU |
-| lsu_vaddr_i | Input | Virtual address from LSU |
-| priv_lvl_i | Input | Current Privilige Level |
-| flag_pum_i | Input | PUM (Protected User Mode) Flag, prevents S-mode code to alter user mode code -- from CSR |
-| flag_mxr_i | Input | MXR (Make eXecutable Readable), makes it possible to read executable only pages |
-| pd_ppn_i | Input | Physical page number |
-| asid_i | Input | ASID (address space identifier) |
-| flush_tlb_i | Input | Flush TLB |
-| lsu_ready_wb_i | Input | LSU is ready to accept new data |
-
## LSU
@@ -333,6 +184,7 @@ The store queue works with physical addresses only. At the time when they are co
input logic [BE_WIDTH-1:0] data_be_i,
input logic data_we_i,
input logic [ADDR_WIDTH-1:0] data_add_i,
+ input logic data_abort_i,
input logic [ID_WIDTH-1:0] data_ID_i,
output logic data_gnt_o,
diff --git a/docs/fig/lsu_blockdiagram.pdf b/docs/fig/lsu_blockdiagram.pdf
new file mode 100644
index 000000000..1cc9fc727
--- /dev/null
+++ b/docs/fig/lsu_blockdiagram.pdf
@@ -0,0 +1,3883 @@
+%PDF-1.5
%
+1 0 obj
<>/OCGs[6 0 R 49 0 R 92 0 R 135 0 R 178 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
+
+
+
+
+ application/pdf
+
+
+ Druck
+
+
+ 2017-05-27T18:08:50+02:00
+ 2017-05-27T18:08:50+02:00
+ 2017-05-22T16:50:15+02:00
+ Adobe Illustrator CC 2014 (Macintosh)
+
+
+
+ 256
+ 208
+ JPEG
+ /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgA0AEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYqw3XfL+qXvnK3voNcurW2RLNTpqLN9XZoLk3LluMyxk
zRxshPp7AfE3QYqzLFXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq
7FWndI0Z3YIiAszMaAAbkknFVD9I6f8A8tUX/Br/AFxV36R0/wD5aov+DX+uKu/SOn/8tUX/AAa/
1xV36R0//lqi/wCDX+uKu/SOn/8ALVF/wa/1xVLZtSs/0xHSVCv7s8+aUICTBj9r9kuoPzGKpl+k
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
+
+
+
+ uuid:646a4637-03fc-8a46-b26b-3fb046efb9d9
+ xmp.did:1c30b540-da5e-470a-bb2e-f5cd890f7c51
+ uuid:5D20892493BFDB11914A8590D31508C8
+ proof:pdf
+
+ uuid:182b8aad-59f2-4271-bb09-49a37b9e3e8c
+ xmp.did:6ce228ba-3300-1e41-a3a4-a8b78dd690e0
+ uuid:5D20892493BFDB11914A8590D31508C8
+ proof:pdf
+
+
+
+
+ saved
+ xmp.iid:1c30b540-da5e-470a-bb2e-f5cd890f7c51
+ 2017-05-22T16:50:15+02:00
+ Adobe Illustrator CC 2014 (Macintosh)
+ /
+
+
+
+ Print
+ False
+ False
+ 1
+
+ 297.000083
+ 210.001556
+ Millimeters
+
+
+
+
+ MyriadPro-Regular
+ Myriad Pro
+ Regular
+ Open Type
+ Version 2.106;PS 2.000;hotconv 1.0.70;makeotf.lib2.5.58329
+ False
+ MyriadPro-Regular.otf
+
+
+
+
+
+ Black
+
+
+
+
+
+ Standard-Farbfeldgruppe
+ 0
+
+
+
+ Weiß
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 0.000000
+
+
+ Schwarz
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 100.000000
+
+
+ CMYK Rot
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Gelb
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Grün
+ CMYK
+ PROCESS
+ 100.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ CMYK Cyan
+ CMYK
+ PROCESS
+ 100.000000
+ 0.000000
+ 0.000000
+ 0.000000
+
+
+ CMYK Blau
+ CMYK
+ PROCESS
+ 100.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ CMYK Magenta
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=15 M=100 Y=90 K=10
+ CMYK
+ PROCESS
+ 15.000000
+ 100.000000
+ 90.000000
+ 10.000000
+
+
+ C=0 M=90 Y=85 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 90.000000
+ 85.000000
+ 0.000000
+
+
+ C=0 M=80 Y=95 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 80.000000
+ 95.000000
+ 0.000000
+
+
+ C=0 M=50 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 50.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=35 Y=85 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 35.000000
+ 85.000000
+ 0.000000
+
+
+ C=5 M=0 Y=90 K=0
+ CMYK
+ PROCESS
+ 5.000000
+ 0.000000
+ 90.000000
+ 0.000000
+
+
+ C=20 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 20.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=50 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 50.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=75 M=0 Y=100 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 0.000000
+ 100.000000
+ 0.000000
+
+
+ C=85 M=10 Y=100 K=10
+ CMYK
+ PROCESS
+ 85.000000
+ 10.000000
+ 100.000000
+ 10.000000
+
+
+ C=90 M=30 Y=95 K=30
+ CMYK
+ PROCESS
+ 90.000000
+ 30.000000
+ 95.000000
+ 30.000000
+
+
+ C=75 M=0 Y=75 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 0.000000
+ 75.000000
+ 0.000000
+
+
+ C=80 M=10 Y=45 K=0
+ CMYK
+ PROCESS
+ 80.000000
+ 10.000000
+ 45.000000
+ 0.000000
+
+
+ C=70 M=15 Y=0 K=0
+ CMYK
+ PROCESS
+ 70.000000
+ 15.000000
+ 0.000000
+ 0.000000
+
+
+ C=85 M=50 Y=0 K=0
+ CMYK
+ PROCESS
+ 85.000000
+ 50.000000
+ 0.000000
+ 0.000000
+
+
+ C=100 M=95 Y=5 K=0
+ CMYK
+ PROCESS
+ 100.000000
+ 95.000000
+ 5.000000
+ 0.000000
+
+
+ C=100 M=100 Y=25 K=25
+ CMYK
+ PROCESS
+ 100.000000
+ 100.000000
+ 25.000000
+ 25.000000
+
+
+ C=75 M=100 Y=0 K=0
+ CMYK
+ PROCESS
+ 75.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=50 M=100 Y=0 K=0
+ CMYK
+ PROCESS
+ 50.000000
+ 100.000000
+ 0.000000
+ 0.000000
+
+
+ C=35 M=100 Y=35 K=10
+ CMYK
+ PROCESS
+ 35.000000
+ 100.000000
+ 35.000000
+ 10.000000
+
+
+ C=10 M=100 Y=50 K=0
+ CMYK
+ PROCESS
+ 10.000000
+ 100.000000
+ 50.000000
+ 0.000000
+
+
+ C=0 M=95 Y=20 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 95.000000
+ 20.000000
+ 0.000000
+
+
+ C=25 M=25 Y=40 K=0
+ CMYK
+ PROCESS
+ 25.000000
+ 25.000000
+ 40.000000
+ 0.000000
+
+
+ C=40 M=45 Y=50 K=5
+ CMYK
+ PROCESS
+ 40.000000
+ 45.000000
+ 50.000000
+ 5.000000
+
+
+ C=50 M=50 Y=60 K=25
+ CMYK
+ PROCESS
+ 50.000000
+ 50.000000
+ 60.000000
+ 25.000000
+
+
+ C=55 M=60 Y=65 K=40
+ CMYK
+ PROCESS
+ 55.000000
+ 60.000000
+ 65.000000
+ 40.000000
+
+
+ C=25 M=40 Y=65 K=0
+ CMYK
+ PROCESS
+ 25.000000
+ 40.000000
+ 65.000000
+ 0.000000
+
+
+ C=30 M=50 Y=75 K=10
+ CMYK
+ PROCESS
+ 30.000000
+ 50.000000
+ 75.000000
+ 10.000000
+
+
+ C=35 M=60 Y=80 K=25
+ CMYK
+ PROCESS
+ 35.000000
+ 60.000000
+ 80.000000
+ 25.000000
+
+
+ C=40 M=65 Y=90 K=35
+ CMYK
+ PROCESS
+ 40.000000
+ 65.000000
+ 90.000000
+ 35.000000
+
+
+ C=40 M=70 Y=100 K=50
+ CMYK
+ PROCESS
+ 40.000000
+ 70.000000
+ 100.000000
+ 50.000000
+
+
+ C=50 M=70 Y=80 K=70
+ CMYK
+ PROCESS
+ 50.000000
+ 70.000000
+ 80.000000
+ 70.000000
+
+
+
+
+
+ Graustufen
+ 1
+
+
+
+ C=0 M=0 Y=0 K=100
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 100.000000
+
+
+ C=0 M=0 Y=0 K=90
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 89.999400
+
+
+ C=0 M=0 Y=0 K=80
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 79.998800
+
+
+ C=0 M=0 Y=0 K=70
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 69.999700
+
+
+ C=0 M=0 Y=0 K=60
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 59.999100
+
+
+ C=0 M=0 Y=0 K=50
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 50.000000
+
+
+ C=0 M=0 Y=0 K=40
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 39.999400
+
+
+ C=0 M=0 Y=0 K=30
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 29.998800
+
+
+ C=0 M=0 Y=0 K=20
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 19.999700
+
+
+ C=0 M=0 Y=0 K=10
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 9.999100
+
+
+ C=0 M=0 Y=0 K=5
+ CMYK
+ PROCESS
+ 0.000000
+ 0.000000
+ 0.000000
+ 4.998800
+
+
+
+
+
+ Strahlende Farben
+ 1
+
+
+
+ C=0 M=100 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 100.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=75 Y=100 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 75.000000
+ 100.000000
+ 0.000000
+
+
+ C=0 M=10 Y=95 K=0
+ CMYK
+ PROCESS
+ 0.000000
+ 10.000000
+ 95.000000
+ 0.000000
+
+
+ C=85 M=10 Y=100 K=0
+ CMYK
+ PROCESS
+ 85.000000
+ 10.000000
+ 100.000000
+ 0.000000
+
+
+ C=100 M=90 Y=0 K=0
+ CMYK
+ PROCESS
+ 100.000000
+ 90.000000
+ 0.000000
+ 0.000000
+
+
+ C=60 M=90 Y=0 K=0
+ CMYK
+ PROCESS
+ 60.000000
+ 90.000000
+ 0.003100
+ 0.003100
+
+
+
+
+
+
+ Adobe PDF library 10.01
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
endstream
endobj
3 0 obj
<>
endobj
8 0 obj
<>/Resources<>/Font<>/ProcSet[/PDF/Text]/Properties<>>>/Thumb 183 0 R/TrimBox[0.0 0.0 841.89 595.28]/Type/Page>>
endobj
180 0 obj
<>stream
+HWr}W#PMwєbGT!Ih^JP9= R*{OjxٳfLv"7}nOyXeo$3lދ͜lqv99֫ଣ`/x_C>dC7⢍$snW߬
+W?_|bNHd8cP9a2)E
xP5*<d}nE~ʼzْ頞#XO_xjua3zȲz~8Zp_%)'`PsيROx>Kb˧Orv Ŗ1
jO)$]O~*.?ܯ-&6b"u9d1(L\!k8NҊdy}$-gF%f+Z
+(dZP2JDs6ɻ!h&Is&raȉ)[RI d\܈`%B}[NgŕtPd'1|dGuZ?
ˋNoIvJl+u^߾{w}u{m&PTE&!]/0
r2%8p)}7#R
-CWvquqlVۗ?]=Q4c2֎""q#uЛf"%"#($85vѼ9A;9 I6T[SPAP x+)(y|~P0Yi