Initial Commit

This commit is contained in:
Thomas Fehmel
2016-10-18 14:21:45 +02:00
commit 657a54ba18
176 changed files with 43750 additions and 0 deletions

37
.gitignore vendored Normal file
View File

@@ -0,0 +1,37 @@
### TEX Temps
*.out
*.toc
*.aux
*.log
*.pdf
*.synctex.gz
*.lof
*.lot
*.lol
*.dvi
*.bbl
*.ps
*.blg
*.loc
*.pyg
### Other Files
*~
*.kate-swp
*.patch
*.orig
### Assembler Eclipse Stuff
assembler/.cproject
assembler/.project
assembler/.settings/org.eclipse.cdt.managedbuilder.core.prefs
### Assembler Project Compiles
assembler/obj/*
assembler/asm
assembler/test.ram
assembler/test.map
### test program files
*.ram
*.map

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
As of the time of the year 2015, intellectual property ownership of the processor core LT16x32,
its software assembler, the documentation and as well as the various components comprising
the LT16 system on chip lies with the Electronics Design Automation Group, University of Kaiserlsautern, Germany (henceforth the "Owner").
The Owner grants the following rights free of charge:
* duplication
* modification, and
* use
for private, educational and academic purposes.
To obtain the following rights, the Owner needs to be contacted and explicit permission granted:
* redistribution
* republishing
of the original or modified work for commercial, academic or educational purposes, and
* use
for commercial puposes and applications.
In all cases mentioned above, the orginal author's notices and license must be kept in place and redistributed with any copies made.
Contact the original authors first in case of doubt to ensure your intended use does not violate this license or get explicit permission to use it in a way not covered or prohibited by this license.

30
README Normal file
View File

@@ -0,0 +1,30 @@
Setup
The following Instruction apply if you are intending to build the toolchain for the LT16x32 and associated SoC, and want to create a synthesized bitfile of said SoC.
It is assumed that:
* you run linux
* have make installed
* have gcc, flex and bison installed
* have inkscape installed
* have all required latex packages installed (install texlive-latex-extra metapackage for ubuntu/Debian)
** packages for openSUSE: texlive-latex,texlive-multirow,texlive-lineno
* pygmetize for minted source code, (python-pygments package in ubuntu/Debian/openSuse)
1. Making of...
1.1 the assembler
Change into the 'assembler' directory and run the Makefile with
$ make all
The LT16x32 assembler should then be present as 'asm' binary executeable.
To integrate this executeable, create a symbolic link in a user directory which exists in your $PATH or directly link to it.
1.2 the documentation
Change into the 'documentation' directory and run the Makefile with
$ make all
A file named 'soc.pdf' should then pop up and be placed in the documentation directory.
It contains information about the the LT16x32 core and assembler.

104
assembler/Makefile Normal file
View File

@@ -0,0 +1,104 @@
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
CC = gcc -g
IDIR=inc
ODIR=obj
SDIR=src
CFLAGS = -Wall
_DEPS = command.h files.h labels.h
DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS))
_OBJS = output.o msg.o check.o label.o main.o handle_o.o handle_oi.o handle_omi.o handle_omr.o handle_omr2.o handle_or2.o handle_or2i.o handle_or3.o handle_ori.o handle_or.o handle_om.o
OBJS = $(patsubst %,$(ODIR)/%,$(_OBJS))
_FLEX_OBJ = asm.tab.o lex.yy.o
FLEX_OBJS = $(patsubst %,$(ODIR)/%,$(_FLEX_OBJ))
_FLEX_COMPILES = asm.tab.c asm.tab.h lex.yy.c
FLEX_COMPILES = $(patsubst %,$(ODIR)/%,$(_FLEX_COMPILES))
# All Target
all: $(ODIR) asm
$(ODIR):
mkdir -p $(ODIR)
# Tool invocations
asm: flex bison $(FLEX_OBJS) $(OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GCC C Linker'
$(CC) -o "asm" -I"inc/" $(OBJS) $(FLEX_OBJS) $(CFLAGS)
@echo 'Finished building target: $@'
@echo ' '
bison: $(SDIR)/asm.y
bison -o obj/asm.tab.c -d $(SDIR)/asm.y
flex: $(SDIR)/asm.l
flex -o obj/lex.yy.c $(SDIR)/asm.l
# Object Files
#obj/%.o: src/%.c $(DEPS)
# $(CC) -c -o $@ $< $(CFLAGS)
obj/asm.tab.c: bison
obj/asm.tab.h: bison
obj/lex.yy.c : flex
$(ODIR)/output.o: $(SDIR)/output.c
$(CC) -c $(CFLAGS) -o $@ $<
$(ODIR)/msg.o: $(SDIR)/msg.c
$(CC) -c $(CFLAGS) -o $@ $<
$(ODIR)/check.o: $(SDIR)/check.c
$(CC) -c $(CFLAGS) -o $@ $<
$(ODIR)/main.o: $(SDIR)/main.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/label.o: $(SDIR)/label.c
$(CC) -c $(CFLAGS) -o $@ $<
$(ODIR)/handle_or3.o: $(SDIR)/handle_or3.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_or2i.o: $(SDIR)/handle_or2i.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_ori.o: $(SDIR)/handle_ori.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_omr2.o: $(SDIR)/handle_omr2.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_omi.o: $(SDIR)/handle_omi.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_omr.o: $(SDIR)/handle_omr.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_oi.o: $(SDIR)/handle_oi.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_o.o: $(SDIR)/handle_o.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_or2.o: $(SDIR)/handle_or2.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_or.o: $(SDIR)/handle_or.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/handle_om.o: $(SDIR)/handle_om.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/asm.tab.o: $(ODIR)/asm.tab.c
$(CC) -c -o $@ $< $(CFLAGS)
$(ODIR)/lex.yy.o: $(ODIR)/lex.yy.c
$(CC) -c -o $@ $< $(CFLAGS)
# Other Targets
clean:
-$(RM) $(OBJS) $(FLEX_OBJS) $(FLEX_COMPILES) asm
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets

33
assembler/inc/check.h Normal file
View File

@@ -0,0 +1,33 @@
/*
* This file declares functions for
* - checking instruction parameters for their validity
*/
#ifndef CHECK_H_
#define CHECK_H_
/*
* returns a valid register number or throws error if r out of range
* r: number of register to be checked
*/
int reg(int r);
/*
* returns a valid 8bit signed value or throws error if imm out of range
* imm: immediate to be checked
*/
int signed8(int imm);
/*
* returns a valid 4bit unsigned value or throws error if imm out of range
* imm: immediate to be checked
*/
int unsigned4(int imm);
/*
* returns a valid 32bit signed value or throws error if imm out of range
* imm: immediate to be checked
*/
int word(int imm);
#endif /* CHECK_H_ */

85
assembler/inc/global.h Normal file
View File

@@ -0,0 +1,85 @@
/*
* This file
* - defines globally used constants
* - defines enum types
* - declares globally used variables
*/
#ifndef GLOBAL_H_
#define GLOBAL_H_
#include <stdio.h>
// maximal filename length
#define MAX_FILENAME_LENGTH (128);
// nop instruction for 16bit
#define nop16 (0b0000000000000000)
// number of link register
#define lr_num (13)
// all supported modes
typedef enum {
mode_eq, mode_neq, mode_ge, mode_gg, mode_le, mode_ll,
mode_cond_true, mode_cond_unconditional
} opmode_t;
// all supported (pseudo) instructions and directives
typedef enum {
op_add, op_sub, op_and, op_or, op_xor, op_lsh, op_rsh, op_addi,
op_cmp, op_ssr,
op_ldr, op_ld08, op_ld16, op_ld32, op_st08, op_st16, op_st32,
op_brt, op_br, op_call, op_trap, op_reti,
op_tst,
op_mov, op_nop, op_ret, op_clr,
op_word, // used for direct placement of words (=32 bit)
op_addr, // used for setting of current address (forward movement only)
op_align, // used for aligning next instruction/immediate value
} op_t;
// input file
extern FILE* f_in;
// output file
extern FILE* f_out;
// map file, 0 if unused
extern FILE* f_map;
// input filename
char* inputfile;
// do verbose output, boolean value
int verbose;
// automatically align 32bit instructions, boolean value
int autoalign;
// fill branch delay slot with nop, boolean value
int fillbds;
// continue even after error, boolean value
int continueonerror;
// error has happened in first run, boolean value
int errorhappened;
// buffer of the currently parsed line
char linebuf[500];
/* in first run, boolean value
* 1 if in first run
* 0 if in second run
*/
int isfirstrun;
// current address (byte address)
int address;
// destructor, closes programs and cleans up memory
// exitvalue: value for exit
void destruct();
#endif /* GLOBAL_H_ */

99
assembler/inc/handle.h Normal file
View File

@@ -0,0 +1,99 @@
/*
* This file declares functions for
* - handling of instructions
*/
#ifndef HANDLE_H_
#define HANDLE_H_
#include "global.h"
/*
* outputs instruction to output for instructions width or3 instruction type
* opcode: opcode of instruction
* r1: register 1
* r2: register 2
* r3: register 3
*/
void handle_or3(op_t opcode, int r1, int r2, int r3);
/*
* outputs instruction to output for instructions width ori instruction type
* opcode: opcode of instruction
* r1: register 1
* imm: immediate
*/
void handle_ori(op_t opcode, int r1, int imm);
/*
* outputs instruction to output for instructions width omr2 instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
* r2: register 2
*/
void handle_omr2(op_t opcode, opmode_t mode, int r1, int r2);
/*
* outputs instruction to output for instructions width omi instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* imm: immediate
*/
void handle_omi(op_t opcode, opmode_t mode, int imm);
/*
* outputs instruction to output for instructions width omr instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
*/
void handle_omr(op_t opcode, opmode_t mode, int r1);
/*
* outputs instruction to output for instructions width oi instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* imm: immediate
*/
void handle_oi(op_t opcode, int imm);
/*
* outputs instruction to output for instructions width o instruction type
* opcode: opcode of instruction
*/
void handle_o(op_t opcode);
/*
* outputs instruction to output for instructions width or instruction type
* opcode: opcode of instruction
* r1: register 1
*/
void handle_or(op_t opcode, int r1);
/*
* outputs instruction to output for instructions width or2 instruction type
* opcode: opcode of instruction
* r1: register 1
* r2: register 2
*/
void handle_or2(op_t opcode, int r1, int r2);
/*
* outputs instruction to output for instructions width or2i instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
* r2: register 2
* imm: immediate
*/
void handle_or2i(op_t opcode, int r1, int r2, int imm);
/*
* outputs instruction to output for instructions width om instruction type
* opcode: opcode of instruction
* mode: mode of instruction
*/
void handle_om(op_t opcode, opmode_t mode);
#endif /* HANDLE_H_ */

51
assembler/inc/label.h Normal file
View File

@@ -0,0 +1,51 @@
/*
* This file declares functions and declares variables for
* - handling of labels
* and defines constants, types.
*/
#ifndef LABEL_H_
#define LABEL_H_
// maximum length of label names
#define LABEL_MAX_NAME_LENGTH (64)
// struct of a label item in list
typedef struct {
// name of the label
char name[LABEL_MAX_NAME_LENGTH];
// address the label points to
int address;
// next item in list
void* next;
} label_t;
// head of list
label_t* label_listhead;
/*
* adds a label to the list
* name: name of the label
* address: address the label points to
*/
void label_add(char* name, int address);
/*
* returns absolute address of a label
* name: name of the label
* return: absolute address of label or -1 if label not found
*/
int label_absolute(char* name);
/*
* returns relative address of a label
* name: name of the label
* return: relative address of label or -1 if label not found
*/
int label_relative(char* name);
/*
* frees the allocated space used for the list of labels
*/
void label_free();
#endif /* LABEL_H_ */

21
assembler/inc/msg.h Normal file
View File

@@ -0,0 +1,21 @@
/*
* This file declares functions for
* - checking instruction parameters for range
*/
#ifndef MSG_H_
#define MSG_H_
/*
* verbose output (if flag is set)
* msg: verbose message
*/
void yyverbose(char* msg);
/*
* error handler
* msg: error message
*/
void yyerror(char* msg);
#endif /* MSG_H_ */

36
assembler/inc/output.h Normal file
View File

@@ -0,0 +1,36 @@
/*
* This file declares functions for
* - writing to output file
* - writing to map file
*/
#ifndef OUTPUT_H_
#define OUTPUT_H_
/*
* outputs a number of length bits, given in instr to the output stream and inserts a linebreak after each 32bit
* instr: number to be printed
* length: number of bits to be printed
*/
void output_instr(int instr, int length);
/*
* outputs a number of 16bits and updates address
* instr: number to be printed
*/
void output_instr16(int instr);
/*
* outputs a number of 32bits and updates address
* instr: number to be printed
*/
void output_instr32(int instr);
/*
* outputs a line to the mapfile (if specified and if in first run)
* s: string to be put to mapfile
*/
void output_line(char* s);
#endif /* OUTPUT_H_ */

105
assembler/src/asm.l Normal file
View File

@@ -0,0 +1,105 @@
%option nodefault yylineno
%{
#include <string.h>
#include "../inc/msg.h"
#include "../inc/label.h"
#include "../inc/global.h"
#include "../inc/output.h"
#include "../obj/asm.tab.h"
void yyerror(char *s);
union yylval {
op_t op;
int i;
};
%}
LABELNAME [_a-zA-Z][_a-zA-Z0-9]*
%%
\n.* { strncpy(linebuf, yytext+1, sizeof(linebuf)); /* save the next line */
yyless(1); /* give back all but the \n to rescan */
output_line(linebuf); return EOL;
}
\r\n.* {
strncpy(linebuf, yytext+2, sizeof(linebuf)); /* save the next line */
yyless(2); /* give back all but the \r\n to rescan */
output_line(linebuf); return EOL;
}
<<EOF>> { yyterminate(); return EOL; }
[ \t] { /* ignore whitespace*/ }
[,] { return ','; }
"//".*$ { /* comment */ }
[r][0-9]+ { yylval.i = atoi(yytext+1); return REGISTER; }
(sp) { yylval.i = 12; return REGISTER; }
(lr) { yylval.i = 13; return REGISTER; }
(sr) { yylval.i = 14; return REGISTER; }
(pc) { yylval.i = 15; return REGISTER; }
[+-]?"0x"?[0-9A-F]+ { yylval.i = strtol(yytext, 0, 0); return IMMEDIATE; }
(add) { yylval.op = op_add; return MNEMONIC; }
(sub) { yylval.op = op_sub; return MNEMONIC; }
(and) { yylval.op = op_and; return MNEMONIC; }
(or) { yylval.op = op_or; return MNEMONIC; }
(xor) { yylval.op = op_xor; return MNEMONIC; }
(lsh) { yylval.op = op_lsh; return MNEMONIC; }
(rsh) { yylval.op = op_rsh; return MNEMONIC; }
(addi) { yylval.op = op_addi; return MNEMONIC; }
(cmp) { yylval.op = op_cmp; return MNEMONIC; }
(ssr) { yylval.op = op_ssr; return MNEMONIC; }
(ldr) { yylval.op = op_ldr; return MNEMONIC; }
(ld08) { yylval.op = op_ld08; return MNEMONIC; }
(ld16) { yylval.op = op_ld16; return MNEMONIC; }
(ld32) { yylval.op = op_ld32; return MNEMONIC; }
(st08) { yylval.op = op_st08; return MNEMONIC; }
(st16) { yylval.op = op_st16; return MNEMONIC; }
(st32) { yylval.op = op_st32; return MNEMONIC; }
(brt) { yylval.op = op_brt; return MNEMONIC; }
(br) { yylval.op = op_br; return MNEMONIC; }
(call) { yylval.op = op_call; return MNEMONIC; }
(trap) { yylval.op = op_trap; return MNEMONIC; }
(reti) { yylval.op = op_reti; return MNEMONIC; }
(tst) { yylval.op = op_tst; return MNEMONIC; }
(mov) { yylval.op = op_mov; return MNEMONIC; }
(nop) { yylval.op = op_nop; return MNEMONIC; }
(ret) { yylval.op = op_ret; return MNEMONIC; }
(clr) { yylval.op = op_clr; return MNEMONIC; }
(\.word) { yylval.op = op_word; return MNEMONIC; }
(\.address) { yylval.op = op_addr; return MNEMONIC; }
(\.align) { yylval.m = op_align; return MNEMONIC; }
(eq) { yylval.m = mode_eq; return MODE; }
(neq) { yylval.m = mode_neq; return MODE; }
(gg) { yylval.m = mode_gg; return MODE; }
(ge) { yylval.m = mode_ge; return MODE; }
(ll) { yylval.m = mode_ll; return MODE; }
(le) { yylval.m = mode_le; return MODE; }
(true) { yylval.m = mode_cond_true; return MODE; }
(always) { yylval.m = mode_cond_unconditional; return MODE; }
{LABELNAME} { strcpy(yylval.s, yytext); return LABEL; }
(\>{LABELNAME}) { yylval.i = label_relative(yytext+1); return IMMEDIATE; }
(\={LABELNAME}) { yylval.i = label_absolute(yytext+1); return IMMEDIATE; }
: { return ':'; }
. { yyerror("unexpected input"); }
%%
int yywrap() { return 1; }

59
assembler/src/asm.y Normal file
View File

@@ -0,0 +1,59 @@
%{
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/handle.h"
#include "../inc/label.h"
#include "../inc/global.h"
%}
%union {
int i;
op_t op;
opmode_t m;
char s[32];
}
%token EOL
%token <op> MNEMONIC
%token <m> MODE
%token <i> REGISTER
%token <i> IMMEDIATE
%token <s> LABEL
%%
line:
| line lbldef
| line r3-line EOL
| line r2-line EOL
| line ri-line EOL
| line r2i-line EOL
| line mr2-line EOL
| line mi-line EOL
| line mr-line EOL
| line i-line EOL
| line o-line EOL
| line or-line EOL
| line om-line EOL
| line EOL
| line error-line EOL
;
r3-line: MNEMONIC REGISTER ',' REGISTER ',' REGISTER { handle_or3($1, $2, $4, $6); }
r2-line: MNEMONIC REGISTER ',' REGISTER { handle_or2($1, $2, $4); }
ri-line: MNEMONIC REGISTER ',' IMMEDIATE { handle_ori($1, $2, $4); }
r2i-line: MNEMONIC REGISTER ',' REGISTER ',' IMMEDIATE { handle_or2i($1, $2, $4, $6); }
mr2-line: MNEMONIC MODE REGISTER ',' REGISTER { handle_omr2($1, $2, $3, $5); }
mi-line: MNEMONIC MODE IMMEDIATE { handle_omi($1, $2, $3); }
mr-line: MNEMONIC MODE REGISTER { handle_omr($1, $2, $3); }
i-line: MNEMONIC IMMEDIATE { handle_oi($1, $2); }
o-line: MNEMONIC { handle_o($1); }
or-line: MNEMONIC REGISTER { handle_or($1, $2); }
om-line: MNEMONIC MODE { handle_om($1, $2); }
lbldef: LABEL ':' { label_add($1, address); }
error-line: error { }
%%

70
assembler/src/check.c Normal file
View File

@@ -0,0 +1,70 @@
/*
* This file implements functions for
* - checking instruction parameters for their validity
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/global.h"
/*
* returns a valid register number or throws error if r out of range
* r: number of register to be checked
*/
int reg(int r) {
if ((r >= 0) && (r <= 15)) {
// in valid range
return r;
} else {
// out of valid range
yyerror("register number out of range");
return 0;
}
}
/*
* returns a valid 8bit signed value or throws error if imm out of range
* imm: immediate to be checked
*/
int signed8(int imm) {
if ((imm >= -128) && (imm <= 127)) {
// in valid range
return imm & 0xFF;
} else {
// out of valid range
yyerror(
"immediate value out of bounds. expecting 8bit signed immediate.");
return 0;
}
}
/*
* returns a valid 4bit unsigned value or throws error if imm out of range
* imm: immediate to be checked
*/
int unsigned4(int imm) {
if ((imm >= 0) && (imm <= 15)) {
// in valid range
return imm & 0x0F;
} else {
// out of valid range
yyerror(
"immediate value out of bounds. expecting 4bit unsigned immediate.");
return 0;
}
}
/*
* returns a valid 32bit signed value or throws error if imm out of range
* imm: immediate to be checked
*/
int word(int imm) {
if ((imm >= -2147483648) && (imm <= 2147483647)) {
// in valid range
return imm;
} else {
// out of valid range
yyerror(
"immediate value out of bounds. expecting 32bit signed immediate.");
return 0;
}
}

72
assembler/src/handle_o.c Normal file
View File

@@ -0,0 +1,72 @@
/*
* This file implements functions for
* - handling of instructions of type o
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width o instruction type
* opcode: opcode of instruction
*/
void handle_o(op_t opcode) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_reti: // reti instruction
// opcode: bct
instr |= (0b1100) << 12;
// mode: reti
instr |= (0b0000) << 8;
// output instruction
output_instr16(instr);
break;
case op_ret: // return instruction (unconditional)
// model with branch always to lr
// opcode: branch
instr |= (0b1100) << 12;
// mode: to register
instr |= (0b0110) << 8;
// register a: LR
instr |= lr_num << 4;
// output instruction
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
case op_nop: // no operation instruction
// model with or r0, r0, r0
// opcode: or
instr |= (0b0000) << 12;
// all registers: r0
// output instruction
output_instr16(instr);
break;
case op_align: // make address be word-aligned
if ((address % 4) != 0) {
// not word-aligned, insert nop
output_instr16(nop16);
} else {
// already word-aligned, put verbose message
yyverbose("Already aligned, ignoring .align directive.");
}
break;
default: // invalid opcode for o-instruction
yyerror("opcode not compatible with o syntax");
break;
}
}

90
assembler/src/handle_oi.c Normal file
View File

@@ -0,0 +1,90 @@
/*
* This file implements functions for
* - handling of instructions of type i
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width oi instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* imm: immediate
*/
void handle_oi(op_t opcode, int imm) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_word: // add immediate word
// immediate word
instr = word(imm);
// output instruction
output_instr32(instr);
break;
case op_addr: // move to new address
if (imm >= address) {
// if new address is larger than current address
while (imm - 2 >= address) {
// add nop until next new address is equal to immediate value
output_instr16(nop16);
}
} else {
// new address smaller than current address
// backward setting of address not possible
yyerror("can't move backwards with .address");
}
break;
case op_trap: // trap instruction
// opcode: bct
instr |= (0b1100) << 12;
// mode: trap
instr |= (0b1100) << 8;
// immediate: irq number
instr |= signed8(imm) << 0;
// output
output_instr16(instr);
break;
case op_br: // branch instruction to immediate (unconditional)
// opcode: bct
instr |= (0b1100) << 12;
// immediate: branch target
instr |= signed8(imm) << 0;
// mode: branch and unconditional to immediate
instr |= (0b0100) << 8;
// output
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
case op_call: // call instruction to immediate (unconditional)
// opcode: bct
instr |= (0b1100) << 12;
// immediate: call target
instr |= signed8(imm) << 0;
// mode: call unconditional to immediate
instr |= (0b1000) << 8;
// output
output_instr16(instr);
break;
default:
// invalid opcode for oi-instruction
yyerror("opcode not compatible with i syntax");
break;
}
}

55
assembler/src/handle_om.c Normal file
View File

@@ -0,0 +1,55 @@
/*
* This file implements functions for
* - handling of instructions of type om
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width om instruction type
* opcode: opcode of instruction
* mode: mode of instruction
*/
void handle_om(op_t opcode, opmode_t mode) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_ret: // return instruction
// model with branch to lr
// opcode: branch
instr |= (0b1100) << 12;
// mode: to register and condition
switch (mode) {
case mode_cond_true: // if true
instr |= (0b0111) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b0110) << 8;
break;
default: // invalid mode for branch instruction
yyerror("mode invalid for ret instruction.");
}
// register a: LR
instr |= lr_num << 4;
// output instruction
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
default: // invalid opcode for o-instruction
yyerror("opcode not compatible with om syntax");
break;
}
}

View File

@@ -0,0 +1,74 @@
/*
* This file implements functions for
* - handling of instructions of type omi
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width omi instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* imm: immediate
*/
void handle_omi(op_t opcode, opmode_t mode, int imm) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_br: // branch instruction to immediate
// opcode: bct
instr |= (0b1100) << 12;
// immediate: branch target
instr |= signed8(imm) << 0;
// mode: branch and (un)conditional to immediate
switch (mode) {
case mode_cond_true: // if true
instr |= (0b0101) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b0100) << 8;
break;
default: // invalid mode for branch instruction
yyerror("mode invalid for branch instruction.");
}
// output
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
case op_call: // call instruction to immediate
// opcode: bct
instr |= (0b1100) << 12;
// immediate: call target
instr |= signed8(imm) << 0;
// mode: call (un)conditional to immediate
switch (mode) {
case mode_cond_true: // if true
instr |= (0b1001) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b1000) << 8;
break;
default: // invalid mode for branch instruction
yyerror("mode invalid for call instruction.");
}
// output
output_instr16(instr);
break;
default: // invalid opcode for omi-instruction
yyerror("opcode not compatible with mi syntax");
break;
}
}

100
assembler/src/handle_omr.c Normal file
View File

@@ -0,0 +1,100 @@
/*
* This file implements functions for
* - handling of instructions of type omr
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width omr instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
*/
void handle_omr(op_t opcode, opmode_t mode, int r1) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_brt: // branch to table instruction
// opcode: branch to table
instr |= (0b1100) << 12;
// register a: branch target register
instr |= reg(r1) << 4;
// mode: branch to table (un)conditional to register
switch (mode) {
case mode_cond_true: // if true
instr |= (0b0011) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b0010) << 8;
break;
default: // invalid mode for branch to table instruction
yyerror("mode invalid for branch to table instruction.");
}
// output
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
case op_br: // branch instruction to register
// opcode: bct
instr |= (0b1100) << 12;
// register a: branch target register
instr |= reg(r1) << 4;
// mode: branch to table (un)conditional to register
switch (mode) {
case mode_cond_true: // if true
instr |= (0b0111) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b0110) << 8;
break;
default: // invalid mode for branch instruction
yyerror("mode invalid for branch instruction.");
}
// output
output_instr16(instr);
// fill branch delay with nop if flag is set
if (fillbds) {
yyverbose("filled branch delay slot with nop.");
output_instr16(nop16);
}
break;
case op_call: // call instruction to register
// opcode: bct
instr |= (0b1100) << 12;
// register a: call target
instr |= reg(r1) << 4;
// mode: call (un)conditional to register
switch (mode) {
case mode_cond_true: // if true
instr |= (0b1011) << 8;
break;
case mode_cond_unconditional: // always
instr |= (0b1010) << 8;
break;
default: // invalid mode for call instruction
yyerror("mode invalid for call instruction.");
}
// output
output_instr16(instr);
break;
default: // invalid opcode for omr-instruction
yyerror("opcode not compatible with mr syntax");
break;
}
}

View File

@@ -0,0 +1,64 @@
/*
* This file implements functions for
* - handling of instructions of type omr2
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width omr2 instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
* r2: register 2
*/
void handle_omr2(op_t opcode, opmode_t mode, int r1, int r2) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_cmp: // compare instruction
// opcode: compare
instr |= (0b1000) << 12;
// register a: first register
instr |= r1 << 4;
// register b: second register
instr |= r2 << 0;
// mode
switch (mode) {
case mode_eq: // equal
instr |= (0b0000) << 8;
break;
case mode_neq: // not equal
instr |= (0b1000) << 8;
break;
case mode_gg: // greater than
instr |= (0b0010) << 8;
break;
case mode_ge: // greater than or equal
instr |= (0b0001) << 8;
break;
case mode_ll: // less than
instr |= (0b1001) << 8;
break;
case mode_le: // less than or equal
instr |= (0b1010) << 8;
break;
default: // invalid mode for compare instruction
yyerror("mode invalid for call instruction.");
break;
}
// output
output_instr16(instr);
break;
default: // invalid opcode for omr2-instruction
yyerror("opcode not compatible with omr2 syntax");
break;
}
}

39
assembler/src/handle_or.c Normal file
View File

@@ -0,0 +1,39 @@
/*
* This file implements functions for
* - handling of instructions of type or
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width or instruction type
* opcode: opcode of instruction
* r1: register 1
*/
void handle_or(op_t opcode, int r1) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_clr: // clear register, model as xor r1, r1, r1
// opcode: cor
instr |= (0b0100) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 1
instr |= reg(r1) << 0;
// output
output_instr16(instr);
break;
default: // invalid opcode for or-instruction
yyerror("opcode not compatible with or syntax");
break;
}
}

130
assembler/src/handle_or2.c Normal file
View File

@@ -0,0 +1,130 @@
/*
* This file implements functions for
* - handling of instructions of type or2
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width or2 instruction type
* opcode: opcode of instruction
* r1: register 1
* r2: register 2
*/
void handle_or2(op_t opcode, int r1, int r2) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_mov: // move instruction, model with or r1, r2, r2
// opcode: or
instr |= (0b0000) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// register a: register 2
instr |= reg(r2) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_ld08: // load byte instruction
// opcode: mem
instr |= (0b1011) << 12;
// mode: load byte
instr |= (0b0000) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_ld16: // load halfword
// opcode: mem
instr |= (0b1011) << 12;
// mode: load halfword
instr |= (0b0001) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_ld32: // load word
// opcode: mem
instr |= (0b1011) << 12;
// mode: load word
instr |= (0b0010) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_st08: // store byte
// opcode: mem
instr |= (0b1011) << 12;
// mode: store byte
instr |= (0b1000) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_st16: // store halfword
// opcode: mem
instr |= (0b1011) << 12;
// mode: store halfword
instr |= (0b1001) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_st32: // store word
// opcode: mem
instr |= (0b1011) << 12;
// mode: store word
instr |= (0b1010) << 8;
// register a: register 1
instr |= reg(r1) << 4;
// register b: register 2
instr |= reg(r2) << 0;
// output
output_instr16(instr);
break;
case op_tst: // test and set
// opcode: test and set instruction
instr |= (0b1001) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// register a: register 2
instr |= reg(r2) << 4;
// output
output_instr16(instr);
break;
default: // invalid opcode for ri-instruction
yyerror("opcode not compatible with ri syntax");
break;
}
}

View File

@@ -0,0 +1,63 @@
/*
* This file implements functions for
* - handling of instructions of type or2i
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width or2i instruction type
* opcode: opcode of instruction
* mode: mode of instruction
* r1: register 1
* r2: register 2
* imm: immediate
*/
void handle_or2i(op_t opcode, int r1, int r2, int imm) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_lsh: // left shift instruction
// immediate must not be 0
if (imm == 0)
yyerror("lsh with immediate=0 not allowed");
// opcode: left shift instruction
instr |= (0b0101) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// register a: register 2
instr |= reg(r2) << 4;
// immediate: imm-1 (+1 in processor)
instr |= unsigned4(imm - 1) << 0;
// output
output_instr16(instr);
break;
case op_rsh: // right shift instruction
// immediate must not be zero
if (imm == 0)
yyerror("rsh with immediate=0 not allowed");
// opcode: right shift instruction
instr |= (0b0110) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// register a: register 2
instr |= reg(r2) << 4;
// immediate: imm-1 (+1 in processor)
instr |= unsigned4(imm - 1) << 0;
// output
output_instr16(instr);
break;
default: // invalid opcode for or2i-instruction
yyerror("opcode not compatible with or2i syntax");
break;
}
}

View File

@@ -0,0 +1,74 @@
/*
* This file implements functions for
* - handling of instructions of type or3
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width or3 instruction type
* opcode: opcode of instruction
* r1: register 1
* r2: register 2
* r3: register 3
*/
void handle_or3(op_t opcode, int r1, int r2, int r3) {
// instruction to be build
int instr = 0;
// here, scheme is simple and always the same
// register d: register 1
instr |= r1 << 8;
// register a: register 2
instr |= r2 << 4;
// register b: register 3
instr |= r3 << 0;
// opcode
switch (opcode) {
case op_add: // add instruction
// opcode
instr |= (0b0011) << 12;
// output
output_instr16(instr);
break;
case op_sub: // subtract instruction
// opcode
instr |= (0b0001) << 12;
// output
output_instr16(instr);
break;
case op_and: // bitwise and instruction
// opcode
instr |= (0b0010) << 12;
// output
output_instr16(instr);
break;
case op_or: // bitwise or instruction
// opcode
instr |= (0b0000) << 12;
// output
output_instr16(instr);
break;
case op_xor: // bitwise xor instruction
// opcode
instr |= (0b0100) << 12;
// output
output_instr16(instr);
break;
default: // invalid opcode for or3-instruction
yyerror("opcode not compatible with or3 syntax");
break;
}
}

View File

@@ -0,0 +1,50 @@
/*
* This file implements functions for
* - handling of instructions of type oi
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/output.h"
#include "../inc/check.h"
#include "../inc/global.h"
/*
* outputs instruction to output for instructions width ori instruction type
* opcode: opcode of instruction
* r1: register 1
* imm: immediate
*/
void handle_ori(op_t opcode, int r1, int imm) {
// instruction to be build
int instr = 0;
switch (opcode) {
case op_addi: // add immediate instruction
// opcode: add immediate instruction
instr |= (0b0111) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// immediate: value to add
instr |= signed8(imm) << 0;
// output
output_instr16(instr);
break;
case op_ldr: // load pc-relative instruction
// opcode: load pc-relative instruction
instr |= (0b1010) << 12;
// register d: register 1
instr |= reg(r1) << 8;
// immediate: pc-offset
instr |= signed8(imm) << 0;
// output
output_instr16(instr);
break;
default: // invalid opcode for ori-instruction
yyerror("opcode not compatible with ori syntax");
break;
}
}

175
assembler/src/label.c Normal file
View File

@@ -0,0 +1,175 @@
/*
* This file implements functions for
* - handling of labels
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../inc/msg.h"
#include "../inc/label.h"
#include "../inc/global.h"
/*
* adds a label to the list
* name: name of the label
* address: address the label points to
*/
void label_add(char* name, int address) {
// new element inserted
label_t* newelement;
// tail of list
label_t* tail;
// verbose message: added label (in second run)
if (verbose) {
char msg[64 + LABEL_MAX_NAME_LENGTH];
char tmpname[LABEL_MAX_NAME_LENGTH];
strncpy(tmpname, name, LABEL_MAX_NAME_LENGTH);
sprintf(msg, "adding label '%s' at address '0x%08x'.", tmpname,
address);
yyverbose(msg);
}
// don't add labels in second run
if (!isfirstrun) {
return;
}
// check if label already exists
if (label_absolute(name) != -1) {
yyerror("label already exists.");
return;
}
// allocate memory for new label
newelement = malloc(sizeof(label_t));
if (newelement == 0) {
fprintf(stderr, "no free memory.");
return;
}
// copy data to new label
strncpy(newelement->name, name, LABEL_MAX_NAME_LENGTH);
newelement->address = address;
newelement->next = 0;
// find tail of list
if (label_listhead == 0) {
// empty list, insert as list head
label_listhead = newelement;
} else {
// list not empty find tail
tail = label_listhead;
while (tail->next != 0) {
tail = tail->next;
}
// set next item pointer
tail->next = newelement;
}
// output information to map file
if (f_map) {
fprintf(f_map, "0x%x: %s\n", newelement->address, newelement->name);
}
}
/*
* returns absolute address of a label
* name: name of the label
* return: absolute address of label or -1 if label not found
*/
int label_absolute(char* name) {
// tail of search
label_t* tail;
if (label_listhead == 0) {
// if empty list, label is not in list, return -1
return -1;
} else {
// list not empty find tail
// start search at list head
tail = label_listhead;
while (1) {
if (strcmp(tail->name, name) == 0) {
// name of search tail matches searched name
// return address
return tail->address;
}
if (tail->next != 0) {
// end of list not reached, update tail pointer
tail = tail->next;
} else {
// end of list, not found
if (!isfirstrun) { // second run: label must be found.
yyerror("label not found.");
}
// return -1, as label is not found
return -1;
}
}
}
// program does not reach this point due to earlier returns
}
/*
* returns relative address of a label
* name: name of the label
* return: relative address of label or -1 if label not found
*/
int label_relative(char* name) {
// absolute address of label
int absolute;
// find absolute address
absolute = label_absolute(name);
if (absolute > 0) {
// label found, calculate relative address
return (absolute - address) / 2 - 1;
} else {
// label not found, error message already prompted in label_absolute
return -1;
}
}
/*
* frees the allocated space used for the list of labels
*/
void label_free() {
// current element pointer
label_t* ptr;
// next element pointer
label_t* next;
// start at list head
ptr = label_listhead;
while (ptr != 0) {
// walk through list until end of list reached
// store next pointer
next = ptr->next;
// delete current item
free(ptr);
// proceed in list
ptr = next;
}
// reset list head
label_listhead = 0;
}

232
assembler/src/main.c Normal file
View File

@@ -0,0 +1,232 @@
/*
* This file implements the main function
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <getopt.h>
#include "../inc/msg.h"
#include "../inc/label.h"
#include "../inc/global.h"
#include "../inc/output.h"
#include "../obj/asm.tab.h"
// reference to linenumber supplied by flex/bison
extern int yylineno;
// reference to yyrestart function supplied by flex/bison
void yyrestart(FILE* inputfile);
// file variable definitions and initialization
FILE* f_in = 0;
FILE* f_out = 0;
FILE* f_map = 0;
/*
* main function
* argc: number of arguments
* argv: arguments
*/
int main(int argc, char **argv) {
// output filename
char* output = 0;
// mapfile filename
char* map = 0;
// index of command line argument
int option_index = 0;
// character of command line argument
int c;
static struct option long_options[] = { { "verbose", 0, 0, 0 }, {
"autoalign", 0, 0, 0 }, { "fillbds", 0, 0, 0 }, {
"continue-on-error", 0, 0, 0 }, { 0, 0, 0, 0 } };
// reset flags
verbose = 0;
autoalign = 0;
continueonerror = 0;
errorhappened = 0;
while (1) {
// iterate through all command line options
// reset option_index
option_index = 0;
// get next option
c = getopt_long(argc, argv, "vm:o:", long_options, &option_index);
if (c == -1)
// no more options available, end loop
break;
// check which option it was
switch (c) {
case 0: // long option
if (strcmp(long_options[option_index].name, "verbose") == 0) {
// verbose flag
verbose = 1;
} else if (strcmp(long_options[option_index].name, "autoalign")
== 0) {
// auto-align flag
autoalign = 1;
} else if (strcmp(long_options[option_index].name, "fillbds")
== 0) {
// fill branch delay slot flag
fillbds = 1;
} else if (strcmp(long_options[option_index].name,
"continue-on-error") == 0) {
// continue on error flag
continueonerror = 1;
} else {
// unknown option
fprintf(stderr, "error: unknown command line option \"%s\"\n",
long_options[option_index].name);
destruct(EXIT_FAILURE);
}
break;
case 'v':
// verbose flag (short version)
verbose = 1;
break;
case 'm':
// map file
map = (char*) optarg;
break;
case 'o':
// output file
output = (char*) optarg;
break;
default:
// unknown option
fprintf(stderr, "error: unknown command line option \"%s\"\n",
long_options[option_index].name);
destruct(EXIT_FAILURE);
}
}
// Check non-option command line arguments
if (optind < argc) {
// one option still available (input)
inputfile = argv[optind++];
if (optind < argc) {
// more than one option still available, only one input file supported
fprintf(stderr, "too many input files specified.\n");
destruct(EXIT_FAILURE);
}
} else {
// no option available (no input file)
fprintf(stderr, "no input file specified.\n");
destruct(EXIT_FAILURE);
}
// Check if output file is specified
if (output == 0) {
// output file not specified
fprintf(stderr, "no output file specified.\n");
destruct(EXIT_FAILURE);
}
// Open all (specified) files
// open input file (must be specified, is checked before)
f_in = fopen(inputfile, "r");
if (!f_in) {
// could not open input file
fprintf(stderr, "error: could not open input file %s\n", inputfile);
perror(inputfile);
destruct(EXIT_FAILURE);
}
// open output file (must be specified, is checked before)
f_out = fopen(output, "w");
if (!f_out) {
// could not open output file
fprintf(stderr, "error: could not open output file %s\n", output);
perror(output);
destruct(EXIT_FAILURE);
}
// open map file if specified
if (map != 0) {
// mapfile is specified
f_map = fopen(map, "w");
if (!f_map) {
// could not open mapfile
fprintf(stderr, "error: could not open map file %s\n", map);
perror(map);
destruct(EXIT_FAILURE);
}
}
// reset variables
address = 0;
label_listhead = 0;
// start parsing f_in - first run
isfirstrun = 1;
yyrestart(f_in);
yyparse();
// go back to first character in input file
fseek(f_in, 0, SEEK_SET);
yylineno = 1;
// start parsing f_in - second run
address = 0;
isfirstrun = 0;
yyrestart(f_in);
yyparse();
// fill last word
if (address % 4 == 2) {
output_instr16(nop16);
}
// destruction
// final message
if (verbose) {
printf("%s: : info: output written to %s.\n", inputfile, output);
}
// exit main
if (!errorhappened) {
// no error happened
destruct(EXIT_SUCCESS);
} else {
// error happend in between
destruct(EXIT_FAILURE);
}
return 0; // suppress warning, actual program exit in destruct
}
// destructor, closes programs and cleans up memory
// exitvalue: value for exit
void destruct(int exitvalue) {
if (f_in) {
fclose(f_in);
}
if (f_out) {
fclose(f_out);
}
if (f_map) {
fclose(f_map);
}
label_free();
exit(exitvalue);
}

47
assembler/src/msg.c Normal file
View File

@@ -0,0 +1,47 @@
/*
* This file implements functions for
* - checking instruction parameters for range
*/
#include <stdlib.h>
#include <stdio.h>
#include "../inc/global.h"
// reference to linenumber supplied by flex
extern int yylineno;
/*
* verbose output (if flag is set)
* msg: verbose message
*/
void yyverbose(char* msg) {
if (verbose) {
// if verbose flag is set
if (!isfirstrun) {
// output verbose messages in second run
printf("%s:% 3i: info: %s (\"%s\")\n", inputfile, yylineno, msg,
linebuf);
}
}
}
/*
* error handler
* msg: error message
*/
void yyerror(char *s) {
if ((!continueonerror) || (!isfirstrun)) {
// output error messages if either stop at error or in second run
fprintf(stderr, "%s:% 3i: error: %s (\"%s\")\n", inputfile, yylineno, s,
linebuf);
}
// set error happened flag
errorhappened = 1;
if (!continueonerror) {
// if stop on error, stop
destruct(EXIT_FAILURE);
}
}

105
assembler/src/output.c Normal file
View File

@@ -0,0 +1,105 @@
/*
* This file implements functions for
* - writing to output file
* - writing to map file
*/
#include <stdio.h>
#include "../inc/msg.h"
#include "../inc/global.h"
/*
* outputs a number of length bits, given in instr to the output stream and inserts a linebreak after each 32bit
* instr: number to be printed
* length: number of bits to be printed
*/
void output_instr(int instr, int length) {
// index of outputted bit
int i;
for (i=length-1; i>=0; i--) {
// iterate through length bits
if(instr & (1<<i)) {
// if bit is 1 output '1'
fprintf(f_out, "1");
} else {
// if bit is 0 output '0'
fprintf(f_out, "0");
}
}
}
/*
* outputs a number of 16bits and updates address
* instr: number to be printed
*/
void output_instr16(int instr) {
if ((instr & 0xFFFF) == instr) {
// instruction fits into 16 bits
if (!isfirstrun) {
// in second run, output instruction
output_instr(instr, 16);
}
// increment address
address += 2;
// add line break
if ((!isfirstrun) && ((address % 4) == 0)) {
// not in first run and word is filled
fprintf(f_out, "\n");
}
} else {
// instruction does not fit into 16 bit
yyerror("internal error. 16bit instruction did not fit");
}
}
/*
* outputs a number of 32bits and updates address
* instr: number to be printed
*/
void output_instr32(int instr) {
if ((instr & 0xFFFFFFFF) == instr) {
// instruction fits into 32bits
if ((address % 4) != 0) {
// address not aligned
if (autoalign) {
// auto-align flag set
output_instr16(nop16);
} else {
// auto-align flag not set, output error
yyerror("32bit instruction not aligned.");
return;
}
}
// increment address
address += 4;
if (!isfirstrun) {
// in second run, output instruction
output_instr(instr, 32);
fprintf(f_out, "\n");
}
} else {
// instruction does not fit into 32bits
yyerror("internal error. 32bit instruction did not fit");
}
}
/*
* outputs a line to the mapfile (if specified and if in first run)
* s: string to be put to mapfile
*/
void output_line(char* s) {
if (isfirstrun && f_map) {
// if in first run and mapfile is specified
fprintf(f_map, "\t%s\n", s);
}
}

27
documentation/Makefile Normal file
View File

@@ -0,0 +1,27 @@
SVGS= $(wildcard figures/*.svg)
IMGS= $(SVGS:.svg=.pdf)
SRCS= $(wildcard *.tex)
#SRCS+= refs3.bib
docu=soc
TARGET=$(addsuffix .pdf,$(docu))
all: target images
target: $(TARGET) $(IMGS)
images: $(IMGS)
figures/%.pdf: figures/%.svg
inkscape -z -T -A $@ $<
%.pdf: %.tex $(SRCS) $(IMGS)
pdflatex -jobname=$(basename $@) -synctex=1 -interaction=nonstopmode -shell-escape $<
pdflatex -jobname=$(basename $@) -synctex=1 -interaction=nonstopmode -shell-escape $<
## Other Targets
clean:
rm -f $(IMGS) *.aux *.log *.dvi soc.pdf *.ps *.pyg *.toc *.loc *.lot *.out *.lof *.lol *.synctex.gz
.PHONY: all clean

View File

@@ -0,0 +1,164 @@
\chapter{Processor Architecture}
\section{Block Diagram}
A simplified block diagram of the \procname can be found in Figure \ref{fig:blockdiagram_core}.
A diagram of the datapath can be found in Figure \ref{fig:blockdiagram_dp}
\begin{figure}[htb]
\centering
\includegraphics[scale=0.5]{./figures/block_core.pdf}
\caption{Simplified Block diagram of core architecture with surrounding entities}
\label{fig:blockdiagram_core}
\end{figure}
\begin{sidewaysfigure}[htb]
\centering
\includegraphics[scale=0.6]{./figures/block_dp.pdf}
\caption{Block diagram of the datapath}
\label{fig:blockdiagram_dp}
Pipeline registers in gray, for reasons of clarity, not all signals are included.
\end{sidewaysfigure}
\section{Configuration}
\label{sec:config}
Easy ways to configure the \procname can be found in package \inlinevhdl{lt16x32\_internal} (see Listing \ref{lst:configcode_internal}) and in package \inlinevhdl{lt16x32$\_$global} (see Listing \ref{lst:configcode_global}).
\begin{vhdl}[Possible Configurations in internal package]{lst:configcode_internal}
-- execute branch delay slot. if set to true,
-- the first operation behind any type of branch
-- is executed. if set to false, stalls are inserted
constant execute_branch_delay_slot : boolean := TRUE;
-- register width
constant reg_width : integer := 32;
-- pc width (should be smaller or equal to register width)
constant pc_width : integer := 32;
\end{vhdl}
\begin{vhdl}[Possible Configurations in global package]{lst:configcode_global}
-- width of the vector holding the interrupt
-- number, maximum 7 due to processor architecture
constant irq_num_width : integer := 4;
-- width of the vector holding the interrupt
-- priority, maximum 6 due to processor architecture
constant irq_prio_width : integer := 4;
\end{vhdl}
Currently, three values can be configured:
\paragraph{Branch delay slot}
\label{sec:branchdelayslot}
If the constant \inlinevhdl{execute$\_$branch$\_$delay$\_$slot} is set to \inlinevhdl{true}, the instruction behind a branch instruction is always executed.
If the constant is set to \inlinevhdl{false}, a \inlineasm{nop} is inserted if a branch is performed.
By default, the branch delay slot is always executed.
Pay attention that even if the branch is not yet taken in the branch delay slot, the program counter may contain the new address.
Hence, instructions using the program counter should not be placed in the branch delay slot.
This also means, that storing the current address for function returns can not be done in the branch delay slot.
Instead, use the \inlinevhdl{call} instruction for this purpose.
\paragraph{Register width}
With the constant \inlinevhdl{reg$\_$width} the width of the internal registers can be set. Valid values are 8, 16 and 32, by default 32bits are used.
\paragraph{PC width}
With the constant \inlinevhdl{pc$\_$width} the width of the program counter can be set.
Valid values are 8, 16 and 32, it must be smaller or equal to the register width.
By default, 32bits are used.
\paragraph{Interrupt Number Width}
This constant holds the width of the interrupt number, values between 1 and 7 are valid.
This determines the number of possible interrupts.
By default, 4bits are used, allowing $2^4 = 16$ interrupts.
\begin{equation*}
\text{Possible Interrupts} = 2^{(\text{Width})}
\end{equation*}
\paragraph{Interrupt Priority Width}
\label{sec:config_priowidth}
This constant determines the width of the runtime/interrupt priority, values between 1 and 6 are valid.
By default, 16 levels of priority are allowed.
One additional bit is supported by the use of non-maskable interrupts (NMI, see Section \ref{sec:nmi}).
\section{Pipeline Stages}
As shown in Figure \ref{fig:blockdiagram_dp}, the processor has three pipeline stages.
Due to this scheme, there is a delay between reading the instruction and changing data in the (register) memory of three clock cycles.
\paragraph{Stage 1: Decode/Setup}
In the first stage, the instruction is fetched from the instruction memory and decoded. Also, the needed register contents are loaded from the register file.
\paragraph{Stage 2: Load and Execute}
In this stage, the ALU is performing the operation and data is read from the data memory.
\paragraph{Stage 3: Writeback}
Data is written back to the register file and written to the data memory.
Possible sources for this data are the data read from the memory in the last clock cycle or the contents of register b.
\section{Registers}
The \procname has 16 registers, 14 of which can be used as general purpose registers.
The other four have special functions, VHDL defines are given in Listing \ref{lst:vhdl_regnumbers} and can be found in the \inlinevhdl{lt16x32\_internal} package.
\begin{vhdl}[Constant Defines for the Special Purpose Registers]{lst:vhdl_regnumbers}
-- register number for stack pointer
constant sp_num : reg_number := to_reg_number(12);
-- register number for link register
constant lr_num : reg_number := to_reg_number(13);
-- register number for status register
constant sr_num : reg_number := to_reg_number(14);
-- register number for pc register
constant pc_num : reg_number := to_reg_number(15);
\end{vhdl}
\subsection{General Purpose Registers}
Registers \inlineasm{r0} to \inlineasm{r11} can be used without special consideration as general purpose registers.
Registers \inlineasm{r12} (stack pointer) and \inlineasm{r13} (link register) can also be used as general purpose register but are additionally altered with special instructions.
\subsection{Stack Pointer}
The stackpointer (\inlineasm{r12}) is used when jumping into or out of interrupt handlers (i.e. external interrupts or \inlineasm{trap} instructions and \inlineasm{reti}).
It must be set to the correct address of the stack, before any interrupt occurs.
\subsection{Link Register}
The link register (\inlineasm{r13}) is set by the \inlineasm{call} instruction.
This allows for flexible function returns using the pseudo instruction \inlineasm{ret} (a branch to the link register).
\subsection{Status Register r14}
The status register is a special 32bit register.
The register contents are displayed in table \ref{tbl:SR}, reserved bits always read zero and should be written to as zeroes for future compatibility.
\begin{table}
\center
\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
\hline
31 & 30 & 29 & 28 & 27 & 26 & 25 & 24 & 23 & 22 & 21 & 20 & 19 & 18 & 17 & 16\\
\hline
\multicolumn{16}{|c|}{reserved}\\
\hline
\multicolumn{16}{c}{}\\
\hline
15 & 14 & 13 & 12 & 11 & 10 & 9 & 8 & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 \\
\hline
\multicolumn{8}{|c|}{reserved} & \multicolumn{6}{|c|}{priority} & T & O \\
\hline
\end{tabular}
\caption{Status Register Contents}
\label{tbl:SR}
\end{table}
\subsubsection{Runtime Priority - SR[7-2]}
Bits seven to two define the current runtime priority, larger numbers mean higher priority. The priority is left aligned.
With a runtime priority width configured to four bits, the priority is stored in bits seven to four and the other bits read zero.
Writes to not used priority bits are discarded.
\subsubsection{Truthflag - SR[1]}
Bit one is the truth flag, which can be set/reset by compare instructions and are used for conditional branches and calls.
Also, the truth flag can be set manually by writing to the status register.
\subsubsection{Overflowflag - SR[0]}
Bit zero is the overflow flag, which is set by arithmetic instructions, such as addition and subtraction.
In additions an overflow has occured, if both operands are the same sign and the result's sign is different (i.e. $5 + 6 < 0$ or $(-5) + (-7) > 0$, listing \ref{lst:ovf_add}).
In subtractions an overflow occured, if both operands are from opposing sign and the minuend's sign differ from the result's (i.e. $(-8) - 5 > 0$ or $5 - (-4) < 0$, listing \ref{lst:ovf_sub}).
This follows normal rules for signed calculations, which are as well used in other processor designs.
\begin{vhdl}[Overflow Generation for Addition]{lst:ovf_add}
c_out <= (in_a(reg_width-1) AND in_b(reg_width-1)
AND not result(reg_width-1))
OR (not in_a(reg_width-1) AND not in_b(reg_width-1)
AND result(reg_width-1));
\end{vhdl}
\begin{vhdl}[Overflow Generation for Subtraction]{lst:ovf_sub}
c_out <= (in_a(reg_width-1) AND not in_b(reg_width-1)
AND not result(reg_width-1))
OR (not in_a(reg_width-1) AND in_b(reg_width-1)
AND result(reg_width-1));
\end{vhdl}
\subsection{Program Counter}
Register \inlineasm{r15} is reserved for the program counter and is read only from the user interface. Write accesses are ignored. It may be altered with special instructions such as branch and call and in interrupt request situations by the processor itself.

View File

@@ -0,0 +1,212 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% To make formatting easy tell LaTeX what kind of document you want to write
% by changing the according {} to {#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Which language do you want to write in
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%English
\newcommand{\EN}[1]{#1}
%German
\newcommand{\DE}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% For print single or double page?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\single}[1]{#1}
\newcommand{\double}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now this is followed by a lot of page and command definitions. For the beginning you
% should be able to continue where you find the next comment section like this one.
% However, you might want to take a look a the definitions sometime to be able to use
% them. Of course you can also add the defintions you needed yourself.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\single{\documentclass[12pt,a4paper,oneside,german,english]{book}}
\double{\documentclass[12pt,a4paper,twoside,german,english]{book}}
\usepackage[ngerman,english]{babel}
%\usepackage[draft,breaklinks=true,colorlinks=false,dvips,bookmarks,pdffitwindow,pdfcenterwindow=true,pdfstartview=Fit]{hyperref}
%\usepackage[breaklinks=true,colorlinks=false,dvips,bookmarks,pdffitwindow,pdfcenterwindow=true,pdfstartview=Fit]{hyperref}
\usepackage{setspace}
\usepackage{cite}
\usepackage{float,times}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsthm,latexsym}
\usepackage[dvips]{epsfig}
\usepackage{subfigure}
\usepackage{rotating}
\usepackage{minted}
\usepackage{newfloat}
\usepackage{xspace}
\usepackage{xcolor}
\usepackage{afterpage}
\usepackage{multirow}
\usepackage{array}
%! put the new-command after the inputenc package use, so 'ü' will not be shown as abomination ASCII -TF
\input{globalcommands.tex}
\newcommand{\DocuTitle}{Documentation to the LT16x32} %TODO: can not use \procname here, why so ever...
%\newcommand{\DiplTitleGerman}{Dokumentation für den LT16x32}
% format page layout.
\setlength{\topmargin}{0cm}
\setlength{\textwidth}{15cm}
\setlength{\textheight}{22cm}
\setlength{\oddsidemargin}{1cm}
\setlength{\evensidemargin}{0cm}
\setlength{\headheight}{15pt}
% \setlength{\voffset}{-0cm}
% \setlength{\topmargin}{0cm}
% \setlength{\headheight}{0.54cm}
% \setlength{\textheight}{23cm}
% % \setlength{\headsep}{1.5cm}
% %\setlength{\hoffset}{-2.54cm}
% \setlength{\hoffset}{0cm}
% \setlength{\oddsidemargin}{0.46cm}
% \setlength{\evensidemargin}{0.46cm}
% \setlength{\textwidth}{15cm}
% \setlength{\marginparsep}{0cm}
% \setlength{\marginparwidth}{1.54cm}
\setcounter{secnumdepth}{3}
% \setlength{\footskip}{1cm}
% \setlength{\parindent}{0cm}
% \setlength{\parskip}{1em}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{} % clear all header fields
%\fancyhead[LO, RE]{\slshape \nouppercase{\leftmark}} % chapter titles
%\fancyhead[LE, RO]{\slshape \nouppercase{\leftmark}\\\nouppercase{\rightmark}} % section titles
\double{\fancyhead[LE]{\slshape \nouppercase{\leftmark}}} % chapter titles
\fancyhead[RO]{\slshape \nouppercase{\rightmark}} % section titles
\fancyfoot{} % clear all footer fields
\fancyfoot[C]{\thepage}
\usepackage[%dvips,
colorlinks=false,
bookmarks,
pdffitwindow,
pdfcenterwindow=true,
pdfstartview=Fitpdftex,
pdfauthor={Lasse Schnepel},
pdftitle={\DocuTitle},
pdfsubject={LT16x32 Documentation}, % one sentence summery
pdfkeywords={Processor,Firmware-based Verification,Architecture design}, %comma-seperated keywords
pdfproducer={Latex with hyperref},
pdfcreator={}]{hyperref}
\begin{document}
%\lhead[\fancyplain{}{\thepage}] {\fancyplain{}{\rightmark}}
%\chead[\fancyplain{}{}] {\fancyplain{}{}}
%\rhead[\fancy{}{\rightmark}] {\fancy{}{\thepage}}
%\rhead[\fancyplain{}{\rightmark}] {\fancyplain{}{\thepage}}
%\lfoot[\fancyplain{}{}] {\fancyplain{\tstamp}{\tstamp}}
%\cfoot[\fancy{\thepage}{}] {\fancy{\thepage}{}}
%\cfoot[\fancyplain{\thepage}{}] {\fancyplain{\thepage}{}}
%\rfoot[\fancyplain{\tstamp} {\tstamp}] {\fancyplain{}{}}
% \fancyhf{} %delete the current section for header and footer
% \fancyhead[LE,RO]{\bfseries\thepage}
% \fancyhead[LO]{\bfseries\rightmark}
% \fancyhead[RE]{\bfseries\leftmark}
% \renewcommand{\headrulewidth}{0.5pt}
% % make space for the rule
% \fancypagestyle{plain}{%
% \fancyhead{} %get rid of the headers on plain pages
% %\renewcommand{\headrulewidth}{0} % and the line
% }
\EN{\selectlanguage{english}}
\DE{\selectlanguage{german}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Here you have to start editing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\DiplTitle}
\author{Lasse Schnepel}
\pagenumbering{arabic}
\hyphenation{Bit-ebenen Gateprop Bit-ebene Fanin Boole-sche
Partial-produkt-generator
Code-inspektion
Verifika-tions-ablauf
IPC-Verifika-tions-ablauf
Abhangig-keiten
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% title page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\frontmatter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% titel page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\thispagestyle{empty}
\begin{center}
\mbox{}
\vspace{2cm}
\Large{Documentation of the \procname}
\vspace{1cm}
\normalsize
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Put the current year here
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Kaiserslautern, 2014 \\
\vfill
\end{center}
\tableofcontents
\mainmatter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now this is followed by your chapters
% this usually starts with introduction and Fundamentals and then
% continues with whatever you need or did
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input{content}
\backmatter
\listoffigures
\listoftables
\listofcodefloat %triggers Errors for me, for whatever reason, but the pdf is generated nonetheless -TF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Choose your Bibtex Style File (here alphadin.bst) and references.
% Hint: For references make a local link refs2 to our jabref
% directory "/import/jabref/refs2.bib"
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\bibliographystyle{alphadin}
\bibliography{refs3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Curriculum Vitae
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%\selectlanguage{german}
%\input{cv.tex}
%\selectlanguage{english}
\end{document}

View File

@@ -0,0 +1,11 @@
SVGS= $(wildcard *.svg)
IMGS= $(SVGS:.svg=.pdf)
all: $(IMGS)
%.pdf: %.svg
inkscape -z -T -A $@ $<
clean:
rm -f *.pdf

View File

@@ -0,0 +1,714 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="802.78064"
height="701"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="block_core.svg">
<defs
id="defs4">
<inkscape:path-effect
effect="spiro"
id="path-effect7432"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect6828"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect5614"
is_visible="true" />
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
id="path4135"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path4111"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-3"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4111-5"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-9"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4111-9"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-1"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-5"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-2"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4111-2"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-8"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-1"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend-6"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4111-3"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-3"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-16"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-3-7"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-16-4"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-3-7-6"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-16-4-8"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="marker4932-3-76"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4934-16-44"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="444.0771"
inkscape:cy="336.95829"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-402.55087,0.50001738"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-165.16502,425.50002"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="0.5,764.17534"
id="guide2991" />
<sodipodi:guide
orientation="1,0"
position="325.5,847.00785"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="475.5,827.81495"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="300.5,493.45446"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="500.5,837.91648"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="650.5,788.41901"
id="guide3003" />
<sodipodi:guide
orientation="0,1"
position="-297.495,50.500017"
id="guide3005" />
<sodipodi:guide
orientation="0,1"
position="-379.31736,150.50002"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="50.5,483.35294"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="150.5,450.50002"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="725.5,344.96204"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="775.5,304.55594"
id="guide3015" />
<sodipodi:guide
orientation="0,1"
position="-577.30726,450.50002"
id="guide3027" />
<sodipodi:guide
orientation="0,1"
position="-581.34787,550.50002"
id="guide3029" />
<sodipodi:guide
orientation="0,1"
position="-470.23109,200.50002"
id="guide3035" />
<sodipodi:guide
orientation="0,1"
position="-46.97717,350.50002"
id="guide3037" />
<sodipodi:guide
orientation="0,1"
position="-373.25644,275.50002"
id="guide3039" />
<sodipodi:guide
orientation="0,1"
position="-235.8757,650.50002"
id="guide3049" />
<sodipodi:guide
orientation="0,1"
position="103.53556,700.50002"
id="guide3051" />
<sodipodi:guide
orientation="1,0"
position="400.5,623.76414"
id="guide3059" />
<sodipodi:guide
orientation="0,1"
position="-198.50005,288.00002"
id="guide3069" />
<sodipodi:guide
orientation="1,0"
position="313,572.24636"
id="guide3071" />
<sodipodi:guide
orientation="1,0"
position="225.5,622.75399"
id="guide3871" />
<sodipodi:guide
orientation="1,0"
position="575.5,450.50002"
id="guide3873" />
<sodipodi:guide
orientation="1,0"
position="75.5,599.52048"
id="guide3875" />
<sodipodi:guide
orientation="0,1"
position="116.66754,625.50002"
id="guide3877" />
<sodipodi:guide
orientation="1,0"
position="675.5,376.27677"
id="guide3879" />
<sodipodi:guide
orientation="0,1"
position="254.04829,75.500017"
id="guide3881" />
<sodipodi:guide
orientation="0,1"
position="-43.946712,582.34789"
id="guide8097" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.5,-351.86218)">
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="400"
y="550.35699"
id="text3863"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3865"
x="400"
y="550.35699">Program</tspan><tspan
sodipodi:role="line"
x="400"
y="580.35699"
id="tspan3867">Counter</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 0,627.36218 50,0 0,275 -50,0"
id="path3017"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 150,1052.3622 0,-50 500,0 0,50"
id="path3019"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 150,627.36218 0,275 150,0 0,-275 z"
id="path3021"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 500,627.36218 0,275 150,0 0,-275 z"
id="path3023"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 325,627.36218 150,0 0,275 -150,0 z"
id="path3025"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 725,702.36218 50,0"
id="path3041"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 775,777.36218 -50,0"
id="path3043"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 725,852.36218 50,0"
id="path3045"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 325,502.36218 0,100 150,0 0,-100 z"
id="path3047"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 150,352.36218 0,50 500,0 0,-50"
id="path3053"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
x="400"
y="380.64645"
id="text3055"
sodipodi:linespacing="125%"
inkscape:transform-center-x="87.883271"><tspan
sodipodi:role="line"
id="tspan3057"
x="400"
y="380.64645">Instruction Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="400"
y="1041.1285"
id="text3061"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3063"
x="400"
y="1041.1285"
style="font-size:24px">Data Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="764.86218"
y="-8.5804214"
id="text3065"
sodipodi:linespacing="125%"
transform="matrix(0,1,-1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3067"
x="764.86218"
y="-8.5804214">Interrup Controller</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 8;stroke-dashoffset:0"
d="m 312.5,702.36218 412.5,0"
id="path3841"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 8;stroke-dashoffset:0"
d="m 312.5,777.36218 412.5,0"
id="path3843"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:8, 8;stroke-dashoffset:0"
d="m 312.5,852.36218 412.5,0"
id="path3845"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="225"
y="883.53467"
id="text3847"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3849"
x="225"
y="883.53467">Decoder</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="400"
y="871.56519"
id="text3851"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3853"
x="400"
y="871.56519">Control</tspan><tspan
sodipodi:role="line"
x="400"
y="901.56519"
id="tspan3855">Path</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="575"
y="870.59564"
id="text3857"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3859"
x="575"
y="870.59564">Data</tspan><tspan
sodipodi:role="line"
x="575"
y="900.59564"
id="tspan3861">Path</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:2, 6;stroke-dashoffset:0"
d="m 75,427.36218 600,0 0,550 -600,0 z"
id="path3883"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="741.03833"
y="-784.04626"
id="text3906"
sodipodi:linespacing="125%"
transform="matrix(0,1,-1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan3908"
x="741.03833"
y="-784.04626">Pipeline Stages</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="747.22614"
y="824.36218"
id="text3910"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3912"
x="747.22614"
y="824.36218">1</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="747.41364"
y="748.77148"
id="text3914"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3916"
x="747.41364"
y="748.77148">2</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="746.93317"
y="672.52454"
id="text3918"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3920"
x="746.93317"
y="672.52454">3</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)"
d="m 300,875.58549 25,0"
id="path3922"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 325,890.36218 -25,0"
id="path4548"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)"
d="m 475.40368,808.59814 25,0"
id="path3922-9"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 500.40368,823.37483 -25,0"
id="path4548-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)"
d="m 475.40368,730.8164 25,0"
id="path3922-5"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 500.40368,745.59309 -25,0"
id="path4548-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow1Lend)"
d="m 475.40368,656.06511 25,0"
id="path3922-4"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow1Lend)"
d="m 500.40368,670.8418 -25,0"
id="path4548-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 392,602.36218 0,25"
id="path5008"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 408,627.36218 0,-25"
id="path5210"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 258.59905,627.36218 c 5.01765,-9.24688 11.47169,-17.71254 19.05948,-25 13.11451,-12.59543 29.6459,-21.59832 47.34147,-25.78185"
id="path5612"
inkscape:path-effect="#path-effect5614"
inkscape:original-d="m 258.59905,627.36218 c 0,0 11.10621,-18.17705 19.05948,-25 C 291.29653,590.66241 325,576.58033 325,576.58033"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 179,627.36218 0,-225"
id="path5816"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 197,402.36218 0,225"
id="path6018"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 150,774.86218 -100,0"
id="path6220"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 50,756.36218 100,0"
id="path6422"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 400,502.36218 0,-100"
id="path6624"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#marker4932-3)"
d="M 575,627.36218 C 568.75604,611.84327 558.80617,597.8299 546.2132,586.81896 526.7285,569.78208 500.88168,560.19981 475,560.41789"
id="path6826"
inkscape:path-effect="#path-effect6828"
inkscape:original-d="m 575,627.36218 c 0,0 -12.12013,-29.38584 -28.7868,-40.54322 C 529.54653,575.66158 475,560.41789 475,560.41789"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 475,541.22499 c 35.18442,-0.81611 70.43536,14.25506 94.15489,40.25493 11.51738,12.62463 20.37336,27.66592 25.82496,43.86195"
id="path7430"
inkscape:path-effect="#path-effect7432"
inkscape:original-d="m 475,541.22499 c 0,0 71.39164,75.67674 94.15489,40.25493 11.67899,-18.17363 25.82496,43.86195 25.82496,43.86195"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 392,902.36218 0,100.00002"
id="path7634"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3-7)"
d="m 408,1002.3622 0,-100.00002"
id="path7860"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3)"
d="m 567.49248,903.52966 0,100.00004"
id="path7634-6"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3-7)"
d="m 583.49248,1003.5297 0,-100.00004"
id="path7860-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4932-3-76)"
d="m 619.22351,627.36218 0,-125.53313 c -1.04983,-22.00241 -6.1572,-32.30705 -31.31473,-31.31474 l -179.80715,0 c 0,0 0.29304,-9.0735 -8.10163,-8.9651 -9.65969,0.12473 -9.3235,8.9651 -9.3235,8.9651 l -135.10791,0 c -21.13279,1.6645 -31.2202,7.26974 -30.56859,31.31474 l 0,125.53313"
id="path8099"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccscccc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,460 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="559.17493"
height="331.40314"
id="svg3692"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="block_cp.svg">
<defs
id="defs3694">
<marker
inkscape:stockid="Arrow1Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Lend"
style="overflow:visible">
<path
id="path5005"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.8,0,0,-0.8,-10,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3922"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="239.27726"
inkscape:cy="107.13609"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:snap-midpoints="true"
inkscape:object-nodes="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="1,0"
position="550,82.451336"
id="guide3955" />
<sodipodi:guide
orientation="0,1"
position="550,-10.503104"
id="guide3999" />
<sodipodi:guide
orientation="1,0"
position="300,165.92546"
id="guide4037" />
<sodipodi:guide
orientation="1,0"
position="50,93.782606"
id="guide4039" />
<sodipodi:guide
orientation="1,0"
position="0,189.49689"
id="guide4077" />
<sodipodi:guide
orientation="1,0"
position="825,-17.553764"
id="guide4079" />
<sodipodi:guide
orientation="1,0"
position="772.8571,-41.931674"
id="guide4102" />
<sodipodi:guide
orientation="0,1"
position="112.8571,39.496896"
id="guide4116" />
<sodipodi:guide
orientation="0,1"
position="-83.5715,139.49689"
id="guide4118" />
<sodipodi:guide
orientation="0,1"
position="-75.7143,189.49689"
id="guide4120" />
<sodipodi:guide
orientation="1,0"
position="161.864,-76.232914"
id="guide4182" />
<sodipodi:guide
orientation="1,0"
position="412.5,-75.732964"
id="guide4184" />
<sodipodi:guide
orientation="1,0"
position="662.5,5.9254659"
id="guide4186" />
<sodipodi:guide
orientation="0,1"
position="447.9885,89.496916"
id="guide4188" />
<sodipodi:guide
orientation="0,1"
position="242.1428,314.49689"
id="guide4190" />
<sodipodi:guide
orientation="0,1"
position="126.4285,-135.50311"
id="guide4192" />
<sodipodi:guide
orientation="0,1"
position="161.864,-185.50311"
id="guide4194" />
<sodipodi:guide
orientation="0,1"
position="550,114.49691"
id="guide4208" />
<sodipodi:guide
orientation="0,1"
position="550,64.496906"
id="guide4210" />
<sodipodi:guide
orientation="1,0"
position="338.8214,39.763616"
id="guide4214" />
<sodipodi:guide
orientation="0,1"
position="212.26395,192.71222"
id="guide5735" />
<sodipodi:guide
orientation="0,1"
position="232.02058,38.02595"
id="guide3165" />
<sodipodi:guide
orientation="0,1"
position="91.044172,28.024075"
id="guide3167" />
<sodipodi:guide
orientation="1,0"
position="81.044,38.02388"
id="guide3169" />
<sodipodi:guide
orientation="1,0"
position="382.638,38.0321"
id="guide3171" />
<sodipodi:guide
orientation="1,0"
position="232.02058,38.02595"
id="guide3173" />
<sodipodi:guide
orientation="0,1"
position="232.02058,16.496075"
id="guide3175" />
<sodipodi:guide
orientation="1,0"
position="91.044172,38.02388"
id="guide3177" />
<sodipodi:guide
orientation="1,0"
position="372.63844,38.0321"
id="guide3179" />
<sodipodi:guide
orientation="1,0"
position="222.021,38.02595"
id="guide3181" />
<sodipodi:guide
orientation="1,0"
position="242.021,28.024075"
id="guide3183" />
<sodipodi:guide
orientation="0,1"
position="213.60379,206.77403"
id="guide3207" />
<sodipodi:guide
orientation="0,1"
position="212.26395,164.73855"
id="guide3209" />
<sodipodi:guide
orientation="0,1"
position="142.43151,178.65007"
id="guide3211" />
<sodipodi:guide
orientation="1,0"
position="469.41516,204.52413"
id="guide3213" />
</sodipodi:namedview>
<metadata
id="metadata3697">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(50,-310.45593)">
<rect
style="fill:#000000;fill-opacity:0.12999998;stroke:none"
id="rect3863-4-0"
width="36.690029"
height="464.04031"
x="-542.08423"
y="-50"
transform="matrix(0,-1,1,0,0,0)" />
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3973-4"
transform="matrix(0.56247312,0,0,0.56247312,-193.66798,120.12169)">
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3969-1">
<rect
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3863-6-4-0"
width="65.229836"
height="222.72812"
x="-750.69141"
y="555.92194"
transform="matrix(0,-1,1,0,0,0)" />
<path
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 768.10078,750.69137 -10.18,-17.6323 -10.1801,17.6323"
id="path3867-8-3-1"
inkscape:connector-curvature="0" />
</g>
</g>
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3973-4-7"
transform="matrix(0.56247312,0,0,0.56247312,-334.28626,120.12169)">
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3969-1-4">
<rect
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3863-6-4-0-2"
width="65.229836"
height="222.72812"
x="-750.69141"
y="555.92194"
transform="matrix(0,-1,1,0,0,0)" />
<path
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 768.10078,750.69137 -10.18,-17.6323 -10.1801,17.6323"
id="path3867-8-3-1-7"
inkscape:connector-curvature="0" />
</g>
</g>
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect4100"
width="43.372009"
height="55.947292"
x="118.89194"
y="421.17322" />
<rect
style="fill:#000000;fill-opacity:0.12999998;stroke:none"
id="rect3863-4-0-0"
width="36.690029"
height="464.04031"
x="-392.89954"
y="-50"
transform="matrix(0,-1,1,0,0,0)" />
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3973-4-7-1"
transform="matrix(0.56247312,0,0,0.56247312,-334.28626,-29.062984)">
<g
style="stroke-width:1.77786279;stroke-miterlimit:4;stroke-dasharray:none"
id="g3969-1-4-9">
<rect
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3863-6-4-0-2-4"
width="65.229836"
height="222.72812"
x="-750.69141"
y="555.92194"
transform="matrix(0,-1,1,0,0,0)" />
<path
style="fill:none;stroke:#000000;stroke-width:1.77786279;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 768.10078,750.69137 -10.18,-17.6323 -10.1801,17.6323"
id="path3867-8-3-1-7-3"
inkscape:connector-curvature="0" />
</g>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 41.044172,603.83519 0,-59.33512"
id="path4196"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 41.044172,505.39791 0,-110.71638"
id="path4198"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 182.02058,603.83312 -0.35826,-59.8667"
id="path4200"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 322.63844,603.82697 0,-28.12366 91.40188,0"
id="path4202"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 140.57795,505.42162 0,-26.72144"
id="path4216"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 162.93321,463.20899 251.77637,0"
id="path4218"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 414.04244,435.08503 -250.43865,0"
id="path4220"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 41.044172,356.49071 0,-33.9003 372.996148,0"
id="path4222"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="419.41516"
y="439.08502"
id="text5444"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5446"
x="419.41516"
y="439.08502">T-flag</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="419.41516"
y="573.36218"
id="text5448"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5450"
x="419.41516"
y="573.36218">Stage 1</tspan><tspan
sodipodi:role="line"
x="419.41516"
y="588.36218"
id="tspan5452">Control Signals</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="419.41516"
y="459.20898"
id="text5448-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5450-5"
x="419.41516"
y="459.20898">Stage 2</tspan><tspan
sodipodi:role="line"
x="419.41516"
y="474.20898"
id="tspan5452-7">Control Signals</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="419.41516"
y="319.36218"
id="text5478"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5480"
x="419.41516"
y="319.36218">Stage 3</tspan><tspan
sodipodi:role="line"
x="419.41516"
y="334.36218"
id="tspan5482">Control Signals</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="182.02058"
y="639.36298"
id="text5484"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5486"
x="182.02058"
y="639.36298">Decoder Input Signals</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="140.57794"
y="415.17322"
id="text5488"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5490"
x="140.57794"
y="415.17322">pc_comb</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
d="m 181.66245,505.75542 0,-40.84855"
id="path5737"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 81.044,291.27392 c 0,0 0,10.00187 10.000172,10.00187 70.819828,-3e-5 70.819828,-3e-5 130.976828,0 9.99958,0 9.99958,11.528 9.99958,11.528"
id="path3185"
inkscape:connector-curvature="0"
transform="translate(-50,312.5592)"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 332.99716,603.83312 c 0,0 0,10.00187 -10.00017,10.00187 -70.81983,-3e-5 -70.81983,-3e-5 -130.97683,0 -9.99958,0 -9.99958,11.528 -9.99958,11.528"
id="path3185-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,369 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="440.31995"
height="388.49945"
id="svg3543"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="block_pc.svg">
<defs
id="defs3545">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path5321"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="142.98452"
inkscape:cy="285.44162"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-midpoints="true"
inkscape:object-nodes="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:snap-nodes="true"
inkscape:snap-grids="true"
inkscape:snap-to-guides="true"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-66.316389,203.67664"
id="guide3660" />
<sodipodi:guide
orientation="0,1"
position="153.59516,103.16979"
id="guide3694" />
<sodipodi:guide
orientation="1,0"
position="153.59516,103.16979"
id="guide3732" />
<sodipodi:guide
orientation="1,0"
position="312.61486,103.16979"
id="guide3845" />
<sodipodi:guide
orientation="1,0"
position="394.44495,167.55969"
id="guide4165" />
<sodipodi:guide
orientation="1,0"
position="198.79336,157.09389"
id="guide5027" />
<sodipodi:guide
orientation="1,0"
position="23.59908,285.81113"
id="guide5181" />
<sodipodi:guide
orientation="1,0"
position="0.5,324.63346"
id="guide5183" />
<sodipodi:guide
orientation="0,1"
position="46.69817,324.63346"
id="guide5185" />
<sodipodi:guide
orientation="0,1"
position="46.69817,285.81113"
id="guide5187" />
<sodipodi:guide
orientation="0,1"
position="137.52496,153.42329"
id="guide5284" />
<sodipodi:guide
orientation="1,0"
position="88.36526,206.99139"
id="guide5286" />
<sodipodi:guide
orientation="1,0"
position="176.19426,103.16979"
id="guide5290" />
<sodipodi:guide
orientation="0,1"
position="233.10501,40.051886"
id="guide5292" />
<sodipodi:guide
orientation="0,1"
position="267.41666,56.258686"
id="guide5740" />
<sodipodi:guide
orientation="0,1"
position="348.24678,167.55969"
id="guide5930" />
<sodipodi:guide
orientation="0,1"
position="348.24678,128.73736"
id="guide5932" />
<sodipodi:guide
orientation="1,0"
position="104.39348,307.15476"
id="guide6120" />
<sodipodi:guide
orientation="0,1"
position="104.39348,373.38227"
id="guide6122" />
</sodipodi:namedview>
<metadata
id="metadata3548">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-146.11844,-405.89966)">
<path
inkscape:connector-curvature="0"
id="path5871"
d="m 458.7333,644.31812 -43.9482,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
sodipodi:nodetypes="cc" />
<text
sodipodi:linespacing="125%"
id="text3832-1"
y="791.56903"
x="379.22345"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="791.56903"
x="379.22345"
sodipodi:role="line"
id="tspan5813">cp.summand_select</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 344.9118,637.30522 68.6233,-18.3876 0,144.6234 -68.6233,-18.3876 0,-107.8482"
id="path3847-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="464.73331"
y="742.14044"
id="text4355-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4357-0"
x="464.73331"
y="742.14044">dp.register_value</tspan></text>
<g
transform="matrix(-1,0,0,1,1314.1108,484.07686)"
id="g3662-8">
<path
inkscape:connector-curvature="0"
id="path5112-3-8"
d="m 1030.4674,156.89896 -16.0702,9.2781 0,81.9508 65.2299,-37.6605 c 0,-35.7122 0,-71.4243 0,-107.1365 l -65.2299,-37.660498 0,81.950498 z"
style="fill:none;stroke:#000000;stroke-width:0.93616813;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
sodipodi:nodetypes="cccccccc" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="1052.4672"
y="162.89885"
id="text5621-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5623-2"
x="1052.4672"
y="162.89885"
style="font-size:20px;text-align:center;text-anchor:middle">+</tspan></text>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 379.22345,779.56902 0,-25.2218"
id="path3818"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="464.73331"
y="695.22931"
id="text4355-3-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4357-0-5"
x="464.73331"
y="695.22931">dp.immediate_value</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 476.95012,612.28232 17.4151,-4.66634 0,73.40422 -34.8301,-9.33267 0,-54.73885 17.415,-4.66634 0,-12.80136"
id="path3847-8-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="546.56342"
y="630.83942"
id="text4167"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4169"
x="546.56342"
y="630.83942">0x01</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="546.56342"
y="669.66174"
id="text4171"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4173"
x="546.56342"
y="669.66174">0x02</tspan></text>
<text
sodipodi:linespacing="125%"
id="text3832-1-5"
y="595.48096"
x="476.95013"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
y="595.48096"
x="476.95013"
sodipodi:role="line"
id="tspan5813-9">cp.instruction_width</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect3863-6-0"
width="26.066879"
height="89.005699"
x="273.64673"
y="442.74152" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 273.64674,527.53155 7.04615,-4.06809 -7.04615,-4.06813"
id="path3867-8-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 299.71362,487.24435 45.19818,0 0,103.47812 -43.76963,0"
id="path5029"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
inkscape:connector-curvature="0"
id="path5871-6"
d="m 228.44853,487.24435 44.12677,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 210.23171,455.20855 -17.4151,-4.66634 0,73.40422 34.8301,-9.33267 0,-54.73885 -17.415,-4.66634 0,-12.80136"
id="path3847-8-6-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="210.2317"
y="436.4072"
id="text5280"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan5282"
x="210.2317"
y="436.4072">cp.mode</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 234.4837,640.97582 -64.76618,0 0,-132.38784 21.84909,0"
id="path5288"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 322.3127,691.22932 0,63.1179 -175.69426,0 0,-284.58157 44.59103,0"
id="path5294"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 344.9118,691.22932 -43.59106,0"
id="path5742"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 458.7333,691.22932 -44.12677,0"
id="path5744"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 458.7333,738.14042 -44.30534,0"
id="path5746"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 540.56339,626.83942 -44.59103,0"
id="path5934"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 540.56339,665.66175 -44.41246,0"
id="path5936"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
d="m 250.51192,487.24435 0,-66.22751"
id="path6124"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="250.51192"
y="415.01685"
id="text6308"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6310"
x="250.51192"
y="415.01685">pc_value</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -0,0 +1,877 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="425.37238"
height="450.35718"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="decoder_fsm_states.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow1Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow1Mend"
style="overflow:visible">
<path
id="path4098"
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt"
transform="matrix(-0.4,0,0,-0.4,-4,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path4110"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-1"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-5"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-19"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-8"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-0"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-1"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-02"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-6"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-08"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-81"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4625"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4627"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4629"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4631"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4633"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4635"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4637"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4639"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-01"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-15"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4762"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4764"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4766"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4768"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4770"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4772"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4774"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4776"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4774-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4776-6"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-06"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-4"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-4"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-7"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4774-5-3"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4776-6-0"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-2"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-74"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-7"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-3"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="marker4774-5-3-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4776-6-0-9"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend-9"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path4110-9"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="3.959798"
inkscape:cx="228.84549"
inkscape:cy="357.01679"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="1,0"
position="199.87193,274.78448"
id="guide2999" />
<sodipodi:guide
orientation="0,1"
position="45.586215,577.6429"
id="guide3779" />
<sodipodi:guide
orientation="1,0"
position="49.871925,501.2143"
id="guide3805" />
<sodipodi:guide
orientation="1,0"
position="349.87193,399.78572"
id="guide3807" />
<sodipodi:guide
orientation="1,0"
position="-100.12807,406.92857"
id="guide3809" />
<sodipodi:guide
orientation="0,1"
position="-123.36158,350.5"
id="guide3887" />
<sodipodi:guide
orientation="0,1"
position="-83.460558,275.5"
id="guide3891" />
<sodipodi:guide
orientation="0,1"
position="-49.115371,200.5"
id="guide3893" />
<sodipodi:guide
orientation="0,1"
position="-0.12807486,125.5"
id="guide3895" />
<sodipodi:guide
orientation="0,1"
position="-77.270932,50.499997"
id="guide3899" />
<sodipodi:guide
orientation="0,1"
position="-66.556646,-24.500003"
id="guide3901" />
<sodipodi:guide
orientation="0,1"
position="125.94336,25.499997"
id="guide5140" />
<sodipodi:guide
orientation="0,1"
position="168.57251,53.687337"
id="guide5144" />
<sodipodi:guide
orientation="0,1"
position="-68.520932,354.42857"
id="guide5146" />
<sodipodi:guide
orientation="0,1"
position="61.657635,299.78572"
id="guide6765" />
<sodipodi:guide
orientation="-0.70710678,0.70710678"
position="193.26479,388.35714"
id="guide6771" />
<sodipodi:guide
orientation="0.70710678,0.70710678"
position="199.87193,394.96428"
id="guide6773" />
<sodipodi:guide
orientation="0,1"
position="130.58622,0.49999738"
id="guide7239" />
<sodipodi:guide
orientation="1,0"
position="424.87193,229.78572"
id="guide7241" />
<sodipodi:guide
orientation="1,0"
position="399.87193,25.499997"
id="guide7245" />
<sodipodi:guide
orientation="0,1"
position="323.44336,329.5"
id="guide7247" />
<sodipodi:guide
orientation="1,0"
position="27.729065,245.5"
id="guide7249" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-100.12807,-52.505005)">
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="300"
y="152.36218"
id="text2989"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991"
x="300"
y="152.36218">normal</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(10.086212,-37.214275)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="150"
y="227.36218"
id="text2989-0-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0"
x="150"
y="227.36218">copyPCtoLR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(-139.91378,37.785719)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="300"
y="228.0777"
id="text2989-0-7-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-58"
x="300"
y="228.0777">irq_pushSR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-1"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(10.086229,38.50124)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="300"
y="303.07773"
id="text2989-0-7-5-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-5-2"
x="300"
y="303.07773">irq_pushLR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-7-0"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(10.086229,113.50124)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 299.99995,244.85134 0,32.20921"
id="path3903-5-2"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="300"
y="378.07773"
id="text2989-0-7-1-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-8-8"
x="300"
y="378.07773">irq_setSR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-5-8"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(10.086229,188.50123)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 299.99995,319.85133 0,32.20921"
id="path3903-6-1"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="300"
y="453.0777"
id="text2989-0-7-11-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-4-2"
x="300"
y="453.0777">irq_setPC</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-2-5"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(10.086239,263.50124)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 299.99995,394.85134 0,32.20921"
id="path3903-2-3"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="450"
y="227.36218"
id="text2989-0-7-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-60"
x="450"
y="227.36218">reti_incSP1</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-4"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(160.08623,37.785715)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="450"
y="302.36218"
id="text2989-0-7-5-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-5-28"
x="450"
y="302.36218">reti_popLR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-7-8"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(160.08623,112.78571)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 449.99995,244.13581 0,32.20921"
id="path3903-5-6"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="450"
y="377.36218"
id="text2989-0-7-1-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-8-9"
x="450"
y="377.36218">reti_incSP2</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-5-3"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(160.08623,187.7857)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 449.99995,319.1358 0,32.20921"
id="path3903-6-5"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="450"
y="452.36215"
id="text2989-0-7-11-95"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-4-7"
x="450"
y="452.36215">reti_popSR</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-2-3"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(160.08624,262.78571)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 449.99995,394.13581 0,32.20921"
id="path3903-2-7"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:none;marker-end:url(#marker4774)"
d="m 199.50353,148.27266 50.16493,0"
id="path5148-3"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4774-5)"
d="m 262.11157,160.92287 c 0,0 -5.56852,7.64702 -17.36277,11.24607 -19.00707,5.80006 -50.50399,5.769 -66.91709,13.53427 -6.19884,2.93276 -16.7354,14.6156 -16.7354,14.6156"
id="path6444"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 300.17628,168.94114 0,32.89589"
id="path3903-5-2-2"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4774-5)"
d="m 334.66135,163.12951 c 0,0 5.56852,7.64702 17.36277,11.24607 19.00707,5.80006 50.50399,5.769 66.91709,13.53427 6.19884,2.93276 16.7354,14.6156 16.7354,14.6156"
id="path6444-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cssc" />
<path
style="fill:none;stroke:#000000;stroke-width:1.24157143px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4774-5-3)"
d="m 321.36012,129.66284 c 0,0 -0.21095,-10.37522 -3.12524,-19.98163 -1.92566,-6.3476 -9.09523,-11.971529 -17.26019,-11.925785 -18.2263,0 -19.11583,14.970685 -19.16463,29.997395"
id="path6781"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cscc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="215.71428"
y="173.07649"
id="text7003"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7005"
x="215.71428"
y="173.07649">call</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="297.18387"
y="186.6479"
id="text7007"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7009"
x="297.18387"
y="186.6479">interrupt</tspan><tspan
sodipodi:role="line"
x="297.18387"
y="201.6479"
id="tspan7011">request</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="389.28571"
y="191.6479"
id="text7013"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7015"
x="389.28571"
y="191.6479">reti</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4774-5-3)"
d="m 150,244.14544 0,232.8695 c 0,0 0.29116,10.3776 8.78583,17.55379 9.22535,7.79345 16.21417,7.79345 16.21417,7.79345 l 325,0 c 0,0 12.43414,-0.45718 18.48848,-6.18719 C 525,490.01231 525,477.36218 525,477.36218 l 0,-304 c 0,0 0.18227,-9.66519 -6.7215,-17.07556 -7.19851,-7.72674 -18.20707,-7.85301 -18.20707,-7.85301 l -149.16968,0"
id="path7251"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccsccsccscc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 450.00777,469.29192 0,32.20921"
id="path3903-2-7-8"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="150"
y="77.362183"
id="text2989-0-7-5-9-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-5-2-2"
x="150"
y="77.362183">reset</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-7-0-0"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(-139.91375,-112.21431)" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="150"
y="152.36218"
id="text2989-0-7-1-1-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991-5-0-8-8-9"
x="150"
y="152.36218">reset2</tspan></text>
<path
sodipodi:type="arc"
style="fill:none;stroke:#000000;stroke-width:1;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="path3777-8-5-5-8-3"
sodipodi:cx="289.91379"
sodipodi:cy="185.57646"
sodipodi:rx="49.371933"
sodipodi:ry="20.357147"
d="m 339.28572,185.57646 c 0,11.24294 -22.10457,20.35715 -49.37193,20.35715 -27.26737,0 -49.37194,-9.11421 -49.37194,-20.35715 0,-11.24294 22.10457,-20.35715 49.37194,-20.35715 27.26736,0 49.37193,9.11421 49.37193,20.35715 z"
transform="translate(-139.91375,-37.214324)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 149.99996,94.135776 0,32.209204"
id="path3903-6-1-4"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#marker4774-5-3)"
d="m 250.79471,449.26019 -61.81592,0 c 0,0 -9.66519,0.18227 -17.07556,-6.7215 -7.72674,-7.19851 -7.85301,-18.20707 -7.85301,-18.20707 l 0,-180.73695"
id="path7251-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccscc" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-mid:none;marker-end:url(#Arrow2Lend)"
d="m 232.9438,73.506751 -32.20921,0"
id="path3903-6-1-4-9"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="319.46283"
y="98.273109"
id="text7625"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan7627"
x="319.46283"
y="98.273109">all other</tspan><tspan
sodipodi:role="line"
x="319.46283"
y="113.27311"
id="tspan7629">instructions</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -0,0 +1,337 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="671.48407"
height="230.5"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="decoder_schematic.ps">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3895"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="488.96302"
inkscape:cy="18.678135"
inkscape:document-units="px"
inkscape:current-layer="g7722"
showgrid="false"
inkscape:snap-grids="true"
showguides="false"
inkscape:guide-bbox="true"
inkscape:snap-midpoints="true"
inkscape:snap-object-midpoints="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="1,0"
position="123.23438,242.2185"
id="guide2991" />
<sodipodi:guide
orientation="1,0"
position="273.23438,225.04594"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="423.23438,207.87335"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="573.23438,174.53832"
id="guide2997" />
<sodipodi:guide
orientation="0,1"
position="-95.96107,-774.5"
id="guide3769" />
<sodipodi:guide
orientation="0,1"
position="100.51359,125.5"
id="guide3771" />
<sodipodi:guide
orientation="0,1"
position="48.234375,205.5"
id="guide3804" />
<sodipodi:guide
orientation="0,1"
position="-60.100659,45.499997"
id="guide3824" />
<sodipodi:guide
orientation="1,0"
position="348.23438,278.079"
id="guide3864" />
<sodipodi:guide
orientation="1,0"
position="498.23438,227.5713"
id="guide3866" />
<sodipodi:guide
orientation="0,1"
position="161.62783,0.49999725"
id="guide6866" />
<sodipodi:guide
orientation="1,0"
position="48.234375,338.3571"
id="guide7118" />
<sodipodi:guide
orientation="1,0"
position="648.23438,142.21344"
id="guide7120" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-26.765625,-47.362187)">
<g
id="g7722">
<rect
transform="scale(1,-1)"
y="-176.90875"
x="100.45343"
height="49.093132"
width="99.093132"
id="rect3777"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-176.90875"
x="250.45343"
height="49.093132"
width="99.093132"
id="rect3777-6"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-176.90875"
x="400.45343"
height="49.093132"
width="99.093132"
id="rect3777-5"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-96.908752"
x="400.45343"
height="49.093132"
width="99.093132"
id="rect3777-5-1"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-256.90875"
x="400.45343"
height="49.093132"
width="99.093132"
id="rect3777-5-1-7"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<rect
transform="scale(1,-1)"
y="-176.90875"
x="550.45343"
height="49.093132"
width="99.093132"
id="rect3777-5-1-1"
style="fill:none;stroke:#000000;stroke-width:0.90686679;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path3868"
d="m 199.54657,152.36219 50.90686,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-mid:none;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path6060"
d="m 349.54657,152.36219 50.90686,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path6260"
d="m 375,152.36218 0,-79.999997 25.45343,3e-6"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path6462"
d="M 375.41401,152.34457 375,232.36218 l 25.45343,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path6662"
d="m 499.54657,72.362186 25.45343,-3e-6 0,79.999997"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6664"
d="m 499.54657,232.36218 25.45343,0 0,-80"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<path
inkscape:connector-curvature="0"
id="path6666"
d="m 499.54657,152.36219 50.90686,0"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path6870"
d="m 300,176.90875 0,100.45343 300,0 0,-100.45343"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<text
sodipodi:linespacing="125%"
id="text7070"
y="160.36218"
x="150"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="160.36218"
x="150"
id="tspan7072"
sodipodi:role="line">Pre</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7074"
y="160.36218"
x="300"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="160.36218"
x="300"
id="tspan7076"
sodipodi:role="line">FSM</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7078"
y="80.362183"
x="450"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="80.362183"
x="450"
id="tspan7080"
sodipodi:role="line">16bit</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7078-8"
y="160.36218"
x="450"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="160.36218"
x="450"
id="tspan7080-1"
sodipodi:role="line">32bit</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7078-2"
y="240.36218"
x="450"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="240.36218"
x="450"
id="tspan7080-5"
sodipodi:role="line">shadow</tspan></text>
<text
sodipodi:linespacing="125%"
id="text7112"
y="160.36218"
x="600"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="160.36218"
x="600"
id="tspan7114"
sodipodi:role="line">MUX</tspan></text>
<path
inkscape:connector-curvature="0"
id="path7122"
d="m 75,152.36218 25.45343,1e-5"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<path
inkscape:connector-curvature="0"
id="path7322"
d="M 649.54657,152.36219 675,152.36218"
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" />
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="89.999998%"
id="text7522"
y="45"
x="-152.36218"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:89.99999762%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;line-height:89.99999762%;writing-mode:lr-tb;text-anchor:middle"
y="45"
x="-152.36218"
sodipodi:role="line"
id="tspan7783">instruction</tspan><tspan
style="font-size:24px;text-align:center;line-height:89.99999762%;writing-mode:lr-tb;text-anchor:middle"
y="66.599998"
x="-152.36218"
sodipodi:role="line"
id="tspan7787">memory</tspan></text>
<text
transform="matrix(0,-1,1,0,0,0)"
sodipodi:linespacing="125%"
id="text7526"
y="693.25751"
x="-152.36218"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
xml:space="preserve"><tspan
style="font-size:24px;text-align:center;text-anchor:middle"
y="693.25751"
x="-152.36218"
id="tspan7528"
sodipodi:role="line">controlpath</tspan></text>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -0,0 +1,527 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="527.50391"
height="267.53638"
viewBox="0 0 14887.332 7550.4709"
version="1.1"
xml:space="preserve"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="usage_sc_slices.svg"
style="stroke-width:28.22200012;stroke-linejoin:round"><metadata
id="metadata250"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs248" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1041"
id="namedview246"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.1378333"
inkscape:cx="183.67944"
inkscape:cy="110.3736"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" /><path
d="m 6691.4872,6270.4794 -5356,0 0,-6142.99996 10711.9998,0 0,6142.99996 -5355.9998,0 z"
id="path6"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,6269.4794 -10711.9998,0"
id="path8"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,5501.4794 -10711.9998,0"
id="path10"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,4733.4794 -10711.9998,0"
id="path12"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,3965.4794 -10711.9998,0"
id="path14"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,3198.4794 -10711.9998,0"
id="path16"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,2430.4794 -10711.9998,0"
id="path18"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,1662.4794 -10711.9998,0"
id="path20"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,894.47944 -10711.9998,0"
id="path22"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,126.47944 -10711.9998,0"
id="path24"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1335.4872,6419.4794 0,-150"
id="path26"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1335.4872,6419.4794 0,-150"
id="path28"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 6691.4872,6419.4794 0,-150"
id="path30"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 6691.4872,6419.4794 0,-150"
id="path32"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,6419.4794 0,-150"
id="path34"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12047.487,6419.4794 0,-150"
id="path36"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1335.4872,6269.4794 10711.9998,0"
id="path38"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,6269.4794 150,0"
id="path40"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,6269.4794 150,0"
id="path42"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,5501.4794 150,0"
id="path44"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,5501.4794 150,0"
id="path46"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,4733.4794 150,0"
id="path48"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,4733.4794 150,0"
id="path50"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,3965.4794 150,0"
id="path52"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,3965.4794 150,0"
id="path54"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,3198.4794 150,0"
id="path56"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,3198.4794 150,0"
id="path58"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,2430.4794 150,0"
id="path60"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,2430.4794 150,0"
id="path62"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,1662.4794 150,0"
id="path64"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,1662.4794 150,0"
id="path66"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,894.47944 150,0"
id="path68"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,894.47944 150,0"
id="path70"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,126.47944 150,0"
id="path72"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1185.4872,126.47944 150,0"
id="path74"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1335.4872,6269.4794 0,-6142.99996"
id="path76"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1335.4872,3474.4794 5356,-968 5355.9998,-1719.99996"
id="path78"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-width:80;stroke-linejoin:round" /><path
d="m 1210.4872,3349.4794 0,249 250,0 0,-249 -250,0 z"
id="path80"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 1210.4872,3349.4794 0,249 250,0 0,-249 -250,0 z"
id="path82"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 6566.4872,2381.4794 0,250 250,0 0,-250 -250,0 z"
id="path84"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 6566.4872,2381.4794 0,250 250,0 0,-250 -250,0 z"
id="path86"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 11922.487,661.47944 0,250 250,0 0,-250 -250,0 z"
id="path88"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 11922.487,661.47944 0,250 250,0 0,-250 -250,0 z"
id="path90"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 1335.4872,4118.4794 5356,-690 5355.9998,-1874"
id="path92"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-width:80;stroke-linejoin:round" /><path
d="m 1210.4872,4118.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path94"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 1210.4872,4118.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path96"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><path
d="m 6566.4872,3428.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path98"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 6566.4872,3428.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path100"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><path
d="m 11922.487,1554.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path102"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 11922.487,1554.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path104"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><text
class="TextShape"
id="text106"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan108"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="1242.4872"
y="6837.4795"
id="tspan110"><tspan
id="tspan112"
style="fill:#000000;stroke:none">8</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text114"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan116"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="6506.4873"
y="6837.4795"
id="tspan118"><tspan
id="tspan120"
style="fill:#000000;stroke:none">16</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text122"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan124"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="11863.487"
y="6837.4795"
id="tspan126"><tspan
id="tspan128"
style="fill:#000000;stroke:none">32</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text130"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan132"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="900.48718"
y="6390.4795"
id="tspan134"><tspan
id="tspan136"
style="fill:#000000;stroke:none">0</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text138"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan140"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="715.48718"
y="5622.4795"
id="tspan142"><tspan
id="tspan144"
style="fill:#000000;stroke:none">50</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text146"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan148"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="4854.4795"
id="tspan150"><tspan
id="tspan152"
style="fill:#000000;stroke:none">100</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text154"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan156"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="4086.4795"
id="tspan158"><tspan
id="tspan160"
style="fill:#000000;stroke:none">150</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text162"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan164"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="3318.4795"
id="tspan166"><tspan
id="tspan168"
style="fill:#000000;stroke:none">200</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text170"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan172"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="2550.4795"
id="tspan174"><tspan
id="tspan176"
style="fill:#000000;stroke:none">250</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text178"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan180"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="1782.4795"
id="tspan182"><tspan
id="tspan184"
style="fill:#000000;stroke:none">300</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text186"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan188"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="1014.4794"
id="tspan190"><tspan
id="tspan192"
style="fill:#000000;stroke:none">350</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text194"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan196"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="529.48718"
y="246.47943"
id="tspan198"><tspan
id="tspan200"
style="fill:#000000;stroke:none">400</tspan></tspan></tspan></text>
<path
d="m 12988.487,3326.4794 800,0"
id="path202"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-width:80;stroke-linejoin:round" /><path
d="m 13282.487,3221.4794 0,210 211,0 0,-210 -211,0 z"
id="path204"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 13282.487,3221.4794 0,210 211,0 0,-210 -211,0 z"
id="path206"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 12988.487,3823.4794 800,0"
id="path208"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-width:80;stroke-linejoin:round" /><path
d="m 13282.487,3823.4794 106,105 105,-105 -105,-105 -106,105 z"
id="path210"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 13282.487,3823.4794 106,105 105,-105 -105,-105 -106,105 z"
id="path212"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><text
class="TextShape"
id="text214"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan216"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="13888.487"
y="3446.4795"
id="tspan218"><tspan
id="tspan220"
style="fill:#000000;stroke:none">Speed</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text222"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan224"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="13888.487"
y="3943.4795"
id="tspan226"><tspan
id="tspan228"
style="fill:#000000;stroke:none">Area</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text230"
x="-801.51282"
y="-926.52057"><tspan
class="TextParagraph"
font-size="318px"
font-weight="400"
id="tspan232"
style="font-size:318px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="5322.4873"
y="7484.4795"
id="tspan234"><tspan
id="tspan236"
style="fill:#000000;stroke:none">Register Width</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text238"
x="-5282.3662"
y="-5282.5742"
transform="matrix(0,-1,1,0,0,0)"><tspan
class="TextParagraph"
font-size="318px"
font-weight="400"
id="tspan240"
style="font-size:318px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="-4445.3662"
y="230.42578"
transform="matrix(0,-1,1,0,-4676,6350)"
id="tspan242"><tspan
id="tspan244"
style="fill:#000000;stroke:none">Occupied Slices</tspan></tspan></tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,527 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="530.39807"
height="267.35919"
viewBox="0 0 14969.012 7545.4704"
version="1.1"
xml:space="preserve"
id="svg2"
inkscape:version="0.48.4 r9939"
sodipodi:docname="usage_sc_speed.svg"
style="stroke-width:28.22200012;stroke-linejoin:round"><metadata
id="metadata250"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs
id="defs248" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1041"
id="namedview246"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:zoom="2.1378333"
inkscape:cx="191.72491"
inkscape:cy="153.16267"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg2" /><path
d="m 6772.1664,6265.4794 -5356,0 0,-6136.99996 10710.9996,0 0,6136.99996 -5354.9996,0 z"
id="path6"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,6264.4794 -10710.9996,0"
id="path8"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,5496.4794 -10710.9996,0"
id="path10"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,4729.4794 -10710.9996,0"
id="path12"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,3962.4794 -10710.9996,0"
id="path14"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,3196.4794 -10710.9996,0"
id="path16"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,2428.4794 -10710.9996,0"
id="path18"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,1661.4794 -10710.9996,0"
id="path20"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,894.47944 -10710.9996,0"
id="path22"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,126.47944 -10710.9996,0"
id="path24"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1416.1664,6414.4794 0,-150"
id="path26"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1416.1664,6414.4794 0,-150"
id="path28"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 6772.1664,6414.4794 0,-150"
id="path30"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 6772.1664,6414.4794 0,-150"
id="path32"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,6414.4794 0,-150"
id="path34"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 12127.166,6414.4794 0,-150"
id="path36"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1416.1664,6264.4794 10710.9996,0"
id="path38"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,6264.4794 150,0"
id="path40"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,6264.4794 150,0"
id="path42"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,5496.4794 150,0"
id="path44"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,5496.4794 150,0"
id="path46"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,4729.4794 150,0"
id="path48"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,4729.4794 150,0"
id="path50"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,3962.4794 150,0"
id="path52"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,3962.4794 150,0"
id="path54"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,3196.4794 150,0"
id="path56"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,3196.4794 150,0"
id="path58"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,2428.4794 150,0"
id="path60"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,2428.4794 150,0"
id="path62"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,1661.4794 150,0"
id="path64"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,1661.4794 150,0"
id="path66"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,894.47944 150,0"
id="path68"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,894.47944 150,0"
id="path70"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,126.47944 150,0"
id="path72"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1266.1664,126.47944 150,0"
id="path74"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1416.1664,6264.4794 0,-6137.99996"
id="path76"
inkscape:connector-curvature="0"
style="fill:none;stroke:#b3b3b3;stroke-linejoin:round" /><path
d="m 1416.1664,825.47944 5356,520.99996 5354.9996,96"
id="path78"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-width:80;stroke-linejoin:round" /><path
d="m 1291.1664,700.47944 0,250 250,0 0,-250 -250,0 z"
id="path80"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 1291.1664,700.47944 0,250 250,0 0,-250 -250,0 z"
id="path82"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 6647.1664,1221.4794 0,250 250,0 0,-250 -250,0 z"
id="path84"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 6647.1664,1221.4794 0,250 250,0 0,-250 -250,0 z"
id="path86"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 12002.166,1317.4794 0,250 250,0 0,-250 -250,0 z"
id="path88"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 12002.166,1317.4794 0,250 250,0 0,-250 -250,0 z"
id="path90"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 1416.1664,1396.4794 5356,534 5354.9996,-188"
id="path92"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-width:80;stroke-linejoin:round" /><path
d="m 1291.1664,1396.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path94"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 1291.1664,1396.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path96"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><path
d="m 6647.1664,1930.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path98"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 6647.1664,1930.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path100"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><path
d="m 12002.166,1742.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path102"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 12002.166,1742.4794 125,125 125,-125 -125,-125 -125,125 z"
id="path104"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><text
class="TextShape"
id="text106"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan108"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="1323.1664"
y="6832.4795"
id="tspan110"><tspan
id="tspan112"
style="fill:#000000;stroke:none">8</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text114"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan116"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="6587.1665"
y="6832.4795"
id="tspan118"><tspan
id="tspan120"
style="fill:#000000;stroke:none">16</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text122"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan124"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="11943.166"
y="6832.4795"
id="tspan126"><tspan
id="tspan128"
style="fill:#000000;stroke:none">32</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text130"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan132"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="981.16638"
y="6385.4795"
id="tspan134"><tspan
id="tspan136"
style="fill:#000000;stroke:none">0</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text138"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan140"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="796.16638"
y="5617.4795"
id="tspan142"><tspan
id="tspan144"
style="fill:#000000;stroke:none">20</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text146"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan148"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="796.16638"
y="4850.4795"
id="tspan150"><tspan
id="tspan152"
style="fill:#000000;stroke:none">40</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text154"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan156"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="796.16638"
y="4083.4795"
id="tspan158"><tspan
id="tspan160"
style="fill:#000000;stroke:none">60</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text162"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan164"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="796.16638"
y="3316.4795"
id="tspan166"><tspan
id="tspan168"
style="fill:#000000;stroke:none">80</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text170"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan172"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="610.16638"
y="2548.4795"
id="tspan174"><tspan
id="tspan176"
style="fill:#000000;stroke:none">100</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text178"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan180"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="610.16638"
y="1781.4795"
id="tspan182"><tspan
id="tspan184"
style="fill:#000000;stroke:none">120</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text186"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan188"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="610.16638"
y="1014.4794"
id="tspan190"><tspan
id="tspan192"
style="fill:#000000;stroke:none">140</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text194"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan196"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="610.16638"
y="246.47943"
id="tspan198"><tspan
id="tspan200"
style="fill:#000000;stroke:none">160</tspan></tspan></tspan></text>
<path
d="m 13070.166,3324.4794 800,0"
id="path202"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-width:80;stroke-linejoin:round" /><path
d="m 13364.166,3219.4794 0,210 211,0 0,-210 -211,0 z"
id="path204"
inkscape:connector-curvature="0"
style="fill:#004586;stroke:none" /><path
d="m 13364.166,3219.4794 0,210 211,0 0,-210 -211,0 z"
id="path206"
inkscape:connector-curvature="0"
style="fill:none;stroke:#004586;stroke-linejoin:round" /><path
d="m 13070.166,3821.4794 800,0"
id="path208"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-width:80;stroke-linejoin:round" /><path
d="m 13364.166,3821.4794 106,105 105,-105 -105,-105 -106,105 z"
id="path210"
inkscape:connector-curvature="0"
style="fill:#ff420e;stroke:none" /><path
d="m 13364.166,3821.4794 106,105 105,-105 -105,-105 -106,105 z"
id="path212"
inkscape:connector-curvature="0"
style="fill:none;stroke:#ff420e;stroke-linejoin:round" /><text
class="TextShape"
id="text214"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan216"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="13970.166"
y="3444.4795"
id="tspan218"><tspan
id="tspan220"
style="fill:#000000;stroke:none">Speed</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text222"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="353px"
font-weight="400"
id="tspan224"
style="font-size:353px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="13970.166"
y="3941.4795"
id="tspan226"><tspan
id="tspan228"
style="fill:#000000;stroke:none">Area</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text230"
x="-721.83362"
y="-925.52057"><tspan
class="TextParagraph"
font-size="318px"
font-weight="400"
id="tspan232"
style="font-size:318px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="5403.1665"
y="7479.4795"
id="tspan234"><tspan
id="tspan236"
style="fill:#000000;stroke:none">Register Width</tspan></tspan></tspan></text>
<text
class="TextShape"
id="text238"
x="-5425.8755"
y="-5623.5742"
transform="matrix(0,-1,1,0,0,0)"><tspan
class="TextParagraph"
font-size="318px"
font-weight="400"
id="tspan240"
style="font-size:318px;font-weight:400;font-family:Liberation Sans"><tspan
class="TextPosition"
x="-4588.8755"
y="230.42578"
transform="matrix(0,-1,1,0,-5017,6691)"
id="tspan242"><tspan
id="tspan244"
style="fill:#000000;stroke:none">Maximum Frequency</tspan></tspan></tspan></text>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,315 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="552.36322"
height="587.33984"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="fundamentals_generalsystemarch.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart"
style="overflow:visible">
<path
id="path3811"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path3814"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="177.59442"
inkscape:cy="353.85916"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1215"
inkscape:window-height="776"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-820.52478,586.33984"
id="guide2985" />
<sodipodi:guide
orientation="0,1"
position="-662.94098,486.33984"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-517.47901,411.33984"
id="guide2989" />
<sodipodi:guide
orientation="0,1"
position="-525.56023,336.33984"
id="guide2991" />
<sodipodi:guide
orientation="0,1"
position="-681.12373,136.33984"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="49.71909,649.02034"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="249.71909,636.89844"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="299.71909,681.34524"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="499.71909,626.79694"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="549.71909,586.33984"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="749.71909,626.79694"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="149.71909,263.14205"
id="guide4789" />
<sodipodi:guide
orientation="1,0"
position="399.71909,336.33984"
id="guide4791" />
<sodipodi:guide
orientation="1,0"
position="174.71909,367.76841"
id="guide6459" />
<sodipodi:guide
orientation="0,1"
position="-233.13805,536.33984"
id="guide6461" />
<sodipodi:guide
orientation="1,0"
position="59.71909,336.33984"
id="guide6471" />
<sodipodi:guide
orientation="1,0"
position="289.71909,377.76841"
id="guide6473" />
<sodipodi:guide
orientation="0,1"
position="11.147661,326.33984"
id="guide6475" />
<sodipodi:guide
orientation="0,1"
position="49.71909,26.339844"
id="guide6477" />
<sodipodi:guide
orientation="0,1"
position="-180.28091,36.339844"
id="guide6479" />
<sodipodi:guide
orientation="1,0"
position="169.71909,263.14205"
id="guide6481" />
<sodipodi:guide
orientation="1,0"
position="179.71909,210.62555"
id="guide6483" />
<sodipodi:guide
orientation="0,1"
position="-164.56662,186.33984"
id="guide6499" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-0.28090991,-51.362183)">
<rect
style="fill:none"
id="rect3777"
width="200"
height="100"
x="50"
y="52.362183" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3779"
width="200"
height="100"
x="50"
y="52.362183" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect3785"
width="200"
height="100"
x="300"
y="52.362183" />
<path
style="fill:none;stroke:#000000;stroke-width:1.99102128;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);marker-mid:none;marker-end:url(#Arrow2Lend)"
d="M 2.9250229,227.36218 550,227.36218"
id="path3787"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 150,152.36218 0,75"
id="path4793"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 400,152.36218 0,75"
id="path5163"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 175,227.36218 0,75"
id="path5905"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="150"
y="108.36218"
id="text6463"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6465"
x="150"
y="108.36218">Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="400"
y="108.36218"
id="text6467"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6469"
x="400"
y="108.36218"
style="font-size:24px;text-align:center;text-anchor:middle">further I/O</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect6485"
width="250"
height="310"
x="50"
y="302.36218" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect6487"
width="110"
height="290"
x="60"
y="312.36218" />
<rect
style="fill:none;stroke:#000000;stroke-width:2;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="rect6489"
width="110"
height="290"
x="180"
y="312.36218" />
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-452.36218"
y="120.97237"
id="text6491"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan6493"
x="-452.36218"
y="120.97237">Control</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="-452.36218"
y="246"
id="text6495"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
id="tspan6497"
x="-452.36218"
y="246"
style="font-size:24px;text-align:center;text-anchor:middle">Datapath</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="175"
y="638.36218"
id="text6501"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6503"
x="175"
y="638.36218">Processor</tspan></text>
<text
xml:space="preserve"
style="font-size:24px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="450"
y="251.36218"
id="text6505"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan6507"
x="450"
y="251.36218">Bus</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,295 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="576.03876"
height="50.561794"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="memory_hierarchy.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Lstart"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lstart"
style="overflow:visible">
<path
id="path4018"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(1.1,0,0,1.1,1.1,0)"
inkscape:connector-curvature="0" />
</marker>
<marker
inkscape:stockid="Arrow2Lend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Lend"
style="overflow:visible">
<path
id="path4021"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
inkscape:connector-curvature="0" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="425.32954"
inkscape:cy="111.15921"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:snap-midpoints="true"
inkscape:object-nodes="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-11.623468,50.042403"
id="guide2985" />
<sodipodi:guide
orientation="1,0"
position="0.51938927,102.18526"
id="guide3803" />
<sodipodi:guide
orientation="0,1"
position="-33.320721,0.04240334"
id="guide3805" />
<sodipodi:guide
orientation="1,0"
position="75.519389,63.725383"
id="guide3811" />
<sodipodi:guide
orientation="1,0"
position="100.51939,67.765993"
id="guide3813" />
<sodipodi:guide
orientation="1,0"
position="200.51939,89.484273"
id="guide3815" />
<sodipodi:guide
orientation="1,0"
position="300.51939,89.484273"
id="guide3817" />
<sodipodi:guide
orientation="1,0"
position="400.51939,67.260913"
id="guide3819" />
<sodipodi:guide
orientation="1,0"
position="500.51939,71.806603"
id="guide3821" />
<sodipodi:guide
orientation="1,0"
position="38.019389,49.803913"
id="guide3854" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.51938927,-151.84279)">
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987"
width="75"
height="49.523014"
x="0"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="37.5"
y="173.5556"
id="text2989"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan2991"
x="37.5"
y="173.5556">Processor</tspan><tspan
sodipodi:role="line"
x="37.5"
y="188.5556"
id="tspan2993">Core</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987-2"
width="75"
height="49.523014"
x="100"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="137.5"
y="173.91275"
id="text2989-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="137.5"
y="173.91275"
id="tspan2993-2">Level 1</tspan><tspan
sodipodi:role="line"
x="137.5"
y="188.91275"
id="tspan3937">Cache</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987-22"
width="75"
height="49.523014"
x="200"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="237.5"
y="173.91275"
id="text2989-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="237.5"
y="173.91275"
id="tspan2993-25">Level 2</tspan><tspan
sodipodi:role="line"
x="237.5"
y="188.91275"
id="tspan3941">Cache</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987-8"
width="75"
height="49.523014"
x="300"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="337.5"
y="173.91275"
id="text2989-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="337.5"
y="173.91275"
id="tspan2993-5">Level 3</tspan><tspan
sodipodi:role="line"
x="337.5"
y="188.91275"
id="tspan3945">Cache</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987-7"
width="75"
height="49.523014"
x="400"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="437.5"
y="173.91275"
id="text2989-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="437.5"
y="173.91275"
id="tspan2993-7">Memory</tspan><tspan
sodipodi:role="line"
x="437.5"
y="188.91275"
id="tspan3949">(RAM)</tspan></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.03877854;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987-26"
width="75"
height="49.523014"
x="500"
y="152.36218" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="537.5"
y="165.89127"
id="text2989-01"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="537.5"
y="165.89127"
id="tspan2993-9">Secondary</tspan><tspan
sodipodi:role="line"
x="537.5"
y="180.89127"
id="tspan3968">Storage</tspan><tspan
sodipodi:role="line"
x="537.5"
y="195.89127"
id="tspan3966">(HDD)</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 75,177.12369 25,0"
id="path3986"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 175,177.12369 25,0"
id="path3988"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 275,177.12369 25,0"
id="path3990"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 375,177.12369 25,0"
id="path3992"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow2Lstart);marker-end:url(#Arrow2Lend)"
d="m 475,177.12369 25,0"
id="path3994"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 10 KiB

View File

@@ -0,0 +1,617 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="310.68066"
height="191"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_imem.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-8"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-3"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-1"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-38"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-7"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-0"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-78"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-05"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-6"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="300.73509"
inkscape:cy="171.65657"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:object-nodes="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-113.39077,185.5"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-130.53363,165.5"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="40.180664,294.0714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="65.180664,267.64286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="115.18066,269.07143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="165.18066,209.07143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="215.18066,236.21429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="265.18066,214.07143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="60.180664,244.07143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="70.180664,216.21429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="110.18066,369.7857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="120.18066,313.3571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="160.18066,279.7857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="170.18066,251.21429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="210.18066,208.35714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="220.18066,203.35714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="260.18066,226.21429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="270.18066,229.07143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="315.18066,216.92857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="320.18066,206.92857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="310.18066,262.64286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="365.18066,185.5"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="370.18066,175.5"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="360.18066,175.5"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="415.18066,204.07143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="410.18066,243.35714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="420.18066,226.92857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-113.39077,175.5"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="465.18066,195.74897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="460.18066,185.5"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="470.18066,201.80988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="515.18066,154.83779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="510.18066,151.80733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="520.18066,138.17027"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="565.18066,111.40123"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="570.18066,111.40123"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="560.18066,104.83524"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-153.00974,135.5"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-108.56303,145.5"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-84.319362,125.5"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-36.962193,172.5"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="35.180664,224.07143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="40.180664,95.499997"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="1.0385281,105.5"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="35.180664,85.499997"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="-7.0426915,65.499997"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="9.6248251,55.499997"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="9.6248251,45.499997"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="-2.4970055,132.5"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-50.479251,92.499997"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-30.781277,52.499997"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-87.349816,25.499997"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-112.60364,12.499997"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-148.96913,15.499997"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-153.51481,5.4999974"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-39.819336,-14.500003"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="-3.3907635,-24.500003"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="-12.676479,-27.500003"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="-19.819336,-34.500003"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="-13.747907,-54.500003"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-31.247907,-67.500003"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="-27.319336,-74.500003"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="-3.3907635,-64.500003"
id="guide9011" />
<sodipodi:guide
orientation="1,0"
position="90.180664,205.85714"
id="guide8576" />
<sodipodi:guide
orientation="1,0"
position="140.18066,206.21429"
id="guide8578" />
<sodipodi:guide
orientation="1,0"
position="190.18066,204.78571"
id="guide8580" />
<sodipodi:guide
orientation="1,0"
position="240.18066,204.78571"
id="guide8582" />
<sodipodi:guide
orientation="1,0"
position="290.18066,209.78571"
id="guide8584" />
<sodipodi:guide
orientation="1,0"
position="340.18066,198.71429"
id="guide8586" />
<sodipodi:guide
orientation="1,0"
position="390.18066,206.92857"
id="guide8588" />
<sodipodi:guide
orientation="1,0"
position="440.18066,197.64286"
id="guide8590" />
<sodipodi:guide
orientation="1,0"
position="490.18066,204.42857"
id="guide8592" />
<sodipodi:guide
orientation="0,1"
position="-6.2479065,190.5"
id="guide3619" />
<sodipodi:guide
orientation="0,1"
position="-17.676479,0.49999738"
id="guide3621" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(15.180664,-136.86218)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 275.34314,152.36218 -2.50488,10.14357 -20.03899,0 -5.00972,-20.28714 -20.03897,0 -5.00975,20.28714 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -20.03897,0 -5.009738,-20.28714 -20.03898,0 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.71257883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 275.35586,152.36218 277.85873,142.21847 295,142.36218"
id="path3123-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 75.461636,243.8051 c 10.95238,15.5 37.344834,-1.13642 49.368644,14.36358"
id="path5873-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">address</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-5"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">en</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-53"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">data</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="315.36218"
id="text3925-07"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-1"
x="20"
y="315.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">ready</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,192.36218 25,0 5,-10 40,0 10,20 40,0 50,0 5,-10 95,0"
id="path3605"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,192.36218 5,10 40,0 10,-20 90,0 5,10"
id="path3607"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,232.36218 25,0 5,-10 140,0 10,20 40,0 5,0 5,-10 40,0"
id="path3609"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,272.36218 75,0 5,-10 40,0 5,10 50,0 5,-10 40,0 5,10 45,0"
id="path3611"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 100,272.36218 5,10 40,0 5,-10"
id="path3613"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 200,272.36218 5,10 40,0 5,-10"
id="path3615"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,312.36218 75,0 5,-10 40,0 10,20 40,0 10,-20 40,0 5,10 45,0"
id="path3617"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 75,137.36218 0,190"
id="path3625"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 125,137.36218 0,190"
id="path3627"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 175,137.36218 0,190"
id="path3629"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 225,137.36218 0,190"
id="path3631"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 275,137.36218 0,190"
id="path3633"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 169.87942,300.29349 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 126.42005,243.8051 c 21.57373,15.09936 73.56093,-1.10705 97.24514,13.99232"
id="path5873-8-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 225.51315,243.8051 c 10.95238,15.5 37.34483,-1.13642 49.36864,14.36358"
id="path5873-8-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 220.3964,300.29349 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 120.03926,300.21659 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,503 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="240.68066"
height="151"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_dmem_write.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-1"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-0"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-7"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-1"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-4"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-6"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-8"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-15"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-89"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-4"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-49"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-8"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="111.2505"
inkscape:cy="67.888404"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-113.39077,145.78571"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-130.53363,125.78571"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="40.180664,254.35711"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="65.180664,227.92857"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="115.18066,229.35714"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="165.18066,169.35714"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="215.18066,196.5"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="265.18066,174.35714"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="60.180664,204.35714"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="70.180664,176.5"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="110.18066,330.07141"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="120.18066,273.64281"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="160.18066,240.07141"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="170.18066,211.5"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="210.18066,168.64285"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="220.18066,163.64285"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="260.18066,186.5"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="270.18066,189.35714"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="315.18066,177.21428"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="320.18066,167.21428"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="310.18066,222.92857"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="365.18066,145.78571"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="370.18066,135.78571"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="360.18066,135.78571"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="415.18066,164.35714"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="410.18066,203.64285"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="420.18066,187.21428"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-113.39077,135.78571"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="465.18066,156.03468"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="460.18066,145.78571"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="470.18066,162.09559"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="515.18066,115.1235"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="510.18066,112.09304"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="520.18066,98.455977"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="565.18066,71.686937"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="570.18066,71.686937"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="560.18066,65.120947"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-153.00974,95.785707"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-108.56303,105.78571"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-84.319362,85.785707"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-36.962193,132.78571"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="35.180664,184.35714"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="40.180664,55.785707"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="1.0385282,65.785707"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="35.180664,45.785707"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="-7.0426918,25.785707"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="9.6248252,15.785707"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="9.6248252,5.7857074"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="-2.4970058,92.785707"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-50.479251,52.785707"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-30.781277,12.785707"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-87.349816,-14.214293"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-112.60364,-27.214293"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-148.96913,-24.214293"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-153.51481,-34.214293"
id="guide8154" />
<sodipodi:guide
orientation="1,0"
position="190.18066,157.92856"
id="guide8262" />
<sodipodi:guide
orientation="1,0"
position="240.18066,114.71428"
id="guide8264" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(15.180664,-137.14789)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 225,152.36218 -2.25917,10.14357 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -20.03897,0 -5.009738,-20.28714 -20.03898,0 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,192.36218 5,10 40,0 5,-10 5,10 40,0 5,-10 5,10 40,0 5,-10"
id="path8266"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,272.36218 25,0 5,-10 40,0 5,10 5,-10 40,0 5,10 75,0"
id="path8268"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,272.36218 5,10 40,0 5,-10 5,10 40,0 5,-10"
id="path8270"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,232.36218 25,0 5,-10 90,0 10,20 40,0 5,-10 25,0"
id="path8272"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">address</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-6"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">data</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">en</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 74.819334,137.64789 0,150"
id="path3987"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 124.81933,137.64789 0,150"
id="path3991"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 174.81934,137.64789 0,150"
id="path3997"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 69.858596,244.29349 c 2.10865,16.07519 7.18996,-1.17859 9.50488,14.8966"
id="path5873-8-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 119.50145,244.29349 c 2.10865,16.07519 7.18996,-1.17859 9.50488,14.8966"
id="path5873-8-5-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 169.49194,245.00914 c 2.10865,16.07519 7.18996,-1.17859 9.50488,14.8966"
id="path5873-8-5-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 40.180664,50.643573 25,0 5,-10.000003 39.999996,0 5,10.000003 5,-10.000003 40,0 5,10.000003 5,-10.000003 40,0 5,10.000003 25,0"
id="path4908"
inkscape:connector-curvature="0"
transform="translate(-15.180664,141.71861)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

View File

@@ -0,0 +1,617 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="320.43652"
height="191"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_imem.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-8"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-3"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-1"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-38"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-5"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-7"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-0"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-78"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-05"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-6"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="309.4808"
inkscape:cy="171.65657"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:object-nodes="true"
inkscape:snap-grids="false"
inkscape:snap-to-guides="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-103.63491,185.5"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-120.77777,165.5"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="49.936523,294.0714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="74.936523,267.64286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="124.93652,269.07143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="174.93652,209.07143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="224.93652,236.21429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="274.93652,214.07143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="69.936523,244.07143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="79.936523,216.21429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="119.93652,369.7857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="129.93652,313.3571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="169.93652,279.7857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="179.93652,251.21429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="219.93652,208.35714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="229.93652,203.35714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="269.93652,226.21429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="279.93652,229.07143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="324.93652,216.92857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="329.93652,206.92857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="319.93652,262.64286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="374.93652,185.5"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="379.93652,175.5"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="369.93652,175.5"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="424.93652,204.07143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="419.93652,243.35714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="429.93652,226.92857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-103.63491,175.5"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="474.93652,195.74897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="469.93652,185.5"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="479.93652,201.80988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="524.93652,154.83779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="519.93652,151.80733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="529.93652,138.17027"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="574.93652,111.40123"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="579.93652,111.40123"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="569.93652,104.83524"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-143.25388,135.5"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-98.807167,145.5"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-74.563503,125.5"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-27.206334,172.5"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="44.936523,224.07143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="49.936523,95.499997"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="10.794387,105.5"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="44.936523,85.499997"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="2.7131674,65.499997"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="19.380684,55.499997"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="19.380684,45.499997"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="7.2588534,132.5"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-40.723392,92.499997"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-21.025418,52.499997"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-77.593957,25.499997"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-102.84778,12.499997"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-139.21327,15.499997"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-143.75895,5.4999974"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-30.063477,-14.500003"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="6.3650954,-24.500003"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="-2.9206196,-27.500003"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="-10.063477,-34.500003"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="-3.9920476,-54.500003"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-21.492048,-67.500003"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="-17.563477,-74.500003"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="6.3650954,-64.500003"
id="guide9011" />
<sodipodi:guide
orientation="1,0"
position="99.936523,205.85714"
id="guide8576" />
<sodipodi:guide
orientation="1,0"
position="149.93652,206.21429"
id="guide8578" />
<sodipodi:guide
orientation="1,0"
position="199.93652,204.78571"
id="guide8580" />
<sodipodi:guide
orientation="1,0"
position="249.93652,204.78571"
id="guide8582" />
<sodipodi:guide
orientation="1,0"
position="299.93652,209.78571"
id="guide8584" />
<sodipodi:guide
orientation="1,0"
position="349.93652,198.71429"
id="guide8586" />
<sodipodi:guide
orientation="1,0"
position="399.93652,206.92857"
id="guide8588" />
<sodipodi:guide
orientation="1,0"
position="449.93652,197.64286"
id="guide8590" />
<sodipodi:guide
orientation="1,0"
position="499.93652,204.42857"
id="guide8592" />
<sodipodi:guide
orientation="0,1"
position="3.5079524,190.5"
id="guide3619" />
<sodipodi:guide
orientation="0,1"
position="-7.9206196,0.49999738"
id="guide3621" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(24.936523,-136.86218)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 275.34314,152.36218 -2.50488,10.14357 -20.03899,0 -5.00972,-20.28714 -20.03897,0 -5.00975,20.28714 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -20.03897,0 -5.009738,-20.28714 -20.03898,0 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.71257883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 275.35586,152.36218 277.85873,142.21847 295,142.36218"
id="path3123-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 75.461636,243.8051 c 10.95238,15.5 37.344834,-1.13642 49.368644,14.36358"
id="path5873-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">address</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-5"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">en</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-53"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">instruction</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="315.36218"
id="text3925-07"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-1"
x="20"
y="315.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">ready</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,192.36218 25,0 5,-10 40,0 10,20 40,0 50,0 5,-10 95,0"
id="path3605"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,192.36218 5,10 40,0 10,-20 90,0 5,10"
id="path3607"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,232.36218 25,0 5,-10 140,0 10,20 40,0 5,0 5,-10 40,0"
id="path3609"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,272.36218 75,0 5,-10 40,0 5,10 50,0 5,-10 40,0 5,10 45,0"
id="path3611"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 100,272.36218 5,10 40,0 5,-10"
id="path3613"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 200,272.36218 5,10 40,0 5,-10"
id="path3615"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,312.36218 75,0 5,-10 40,0 10,20 40,0 10,-20 40,0 5,10 45,0"
id="path3617"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 75,137.36218 0,190"
id="path3625"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 125,137.36218 0,190"
id="path3627"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 175,137.36218 0,190"
id="path3629"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 225,137.36218 0,190"
id="path3631"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 275,137.36218 0,190"
id="path3633"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 169.87942,300.29349 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 126.42005,243.8051 c 21.57373,15.09936 73.56093,-1.10705 97.24514,13.99232"
id="path5873-8-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 225.51315,243.8051 c 10.95238,15.5 37.34483,-1.13642 49.36864,14.36358"
id="path5873-8-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 220.3964,300.29349 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow2Mend)"
d="m 120.03926,300.21659 c 2.10865,-16.07519 7.18996,1.17859 9.50488,-14.8966"
id="path5873-8-5-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

View File

@@ -0,0 +1,511 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="288.23438"
height="151"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_irq_req.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="311.73361"
inkscape:cy="36.901838"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:snap-midpoints="true">
<sodipodi:guide
orientation="0,1"
position="-85.837055,145.5"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-102.97992,125.5"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="67.734375,254.0714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="92.734375,227.64286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="142.73438,229.07143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="192.73438,169.07143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="242.73438,196.21429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="292.73438,174.07143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="87.734375,204.07143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="97.734375,176.21429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="137.73438,329.7857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="147.73438,273.3571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="187.73438,239.7857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="197.73438,211.21429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="237.73438,168.35714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="247.73438,163.35714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="287.73438,186.21429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="297.73438,189.07143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="342.73438,176.92857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="347.73438,166.92857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="337.73438,222.64286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="392.73438,145.5"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="397.73438,135.5"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="387.73438,135.5"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="442.73438,164.07143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="437.73438,203.35714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="447.73438,186.92857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-85.837055,135.5"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="492.73438,155.74897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="487.73438,145.5"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="497.73438,161.80988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="542.73438,114.83779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="537.73438,111.80733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="547.73438,98.170267"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="592.73438,71.401227"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="597.73438,71.401227"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="587.73438,64.835237"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-125.45603,95.499997"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-81.009315,105.5"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-56.765655,85.499997"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-9.408482,132.5"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="62.734375,184.07143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="67.734375,55.499997"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="28.592239,65.499997"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="62.734375,45.499997"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="20.511019,25.499997"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="37.178536,15.5"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="37.178536,5.5"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="25.056705,92.499997"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-22.92554,52.499997"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-3.227566,12.5"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-59.796105,-14.5"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-85.049925,-27.5"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-121.41541,-24.5"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-125.9611,-34.5"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-12.265625,-54.5"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="24.162947,-64.5"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="14.877232,-67.5"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="7.734375,-74.5"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="13.805804,-94.5"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-3.694196,-107.5"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="0.234375,-114.5"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="24.162947,-104.5"
id="guide9011" />
<sodipodi:guide
orientation="0,1"
position="13.091518,150.5"
id="guide7835" />
<sodipodi:guide
orientation="0,1"
position="12.734375,0.5"
id="guide7837" />
<sodipodi:guide
orientation="1,0"
position="117.73438,159.78571"
id="guide7858" />
<sodipodi:guide
orientation="1,0"
position="167.73438,162.28571"
id="guide7860" />
<sodipodi:guide
orientation="1,0"
position="217.73438,164.78571"
id="guide7862" />
<sodipodi:guide
orientation="1,0"
position="267.73438,150.5"
id="guide7864" />
<sodipodi:guide
orientation="1,0"
position="130.21216,145.64357"
id="guide3727" />
<sodipodi:guide
orientation="1,0"
position="155.26087,125.35643"
id="guide3729" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(42.734375,-136.86218)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 245,142.36218 -17.24942,-0.14357 -5.00975,20.28714 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -10.01948,-0.14357 m -25.048715,-20 -10.019493,-0.14357 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 175.46164,259.78064 c 10.95238,-15.5 37.34484,1.13642 49.36865,-14.36358"
id="path5873-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-2"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">num, prio, nmi</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-7"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">req</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-6-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-7-8"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">ack</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,192.36218 25,0 5,-10 32.477785,0 m 25.048715,0 82.4735,0 5,10 45,0"
id="path7823"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,282.36218 20,0 42.477785,0 m 25.048715,0 32.4735,0 10,-20 40,0 10,20 40,0"
id="path7829"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,242.36218 20,0 10,-20 32.477785,0 m 25.048715,0 82.4735,0 10,20 40,0"
id="path7831"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,192.36218 5,10 32.477785,0 m 25.048715,0 82.4735,0 5,-10"
id="path7833"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 75,137.36218 0,150"
id="path7866"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 125,137.36218 0,150"
id="path7868"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 175,137.36218 0,150"
id="path7870"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 225,137.36218 0,150"
id="path7872"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="100.00001"
y="152.36218"
id="text3731"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3733"
x="100.00001"
y="152.36218">...</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="100.00001"
y="192.36218"
id="text3731-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3733-7"
x="100.00001"
y="192.36218">...</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="100.00001"
y="222.36218"
id="text3731-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3733-9"
x="100.00001"
y="222.36218">...</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
x="100.00001"
y="282.36218"
id="text3731-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3733-6"
x="100.00001"
y="282.36218">...</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,503 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="200.43652"
height="151"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_irq_trap.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend-9"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906-5"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="83.054512"
inkscape:cy="55.868701"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-103.63491,145.5"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-120.77777,125.5"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="49.936523,254.0714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="74.936523,227.64286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="124.93652,229.07143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="174.93652,169.07143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="224.93652,196.21429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="274.93652,174.07143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="69.936523,204.07143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="79.936523,176.21429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="119.93652,329.7857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="129.93652,273.3571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="169.93652,239.7857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="179.93652,211.21429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="219.93652,168.35714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="229.93652,163.35714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="269.93652,186.21429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="279.93652,189.07143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="324.93652,176.92857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="329.93652,166.92857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="319.93652,222.64286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="374.93652,145.5"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="379.93652,135.5"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="369.93652,135.5"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="424.93652,164.07143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="419.93652,203.35714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="429.93652,186.92857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-103.63491,135.5"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="474.93652,155.74897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="469.93652,145.5"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="479.93652,161.80988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="524.93652,114.83779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="519.93652,111.80733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="529.93652,98.170267"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="574.93652,71.401227"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="579.93652,71.401227"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="569.93652,64.835237"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-143.25388,95.499997"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-98.807167,105.5"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-74.563503,85.499997"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-27.206334,132.5"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="44.936523,184.07143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="49.936523,55.499997"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="10.794387,65.499997"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="44.936523,45.499997"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="2.7131674,25.499997"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="19.380684,15.499997"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="19.380684,5.4999974"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="7.2588534,92.499997"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-40.723392,52.499997"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-21.025418,12.499997"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-77.593957,-14.500003"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-102.84778,-27.500003"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-139.21327,-24.500003"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-143.75895,-34.500003"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-30.063477,-54.500003"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="6.3650954,-64.500003"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="-2.9206196,-67.500003"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="-10.063477,-74.500003"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="-3.9920476,-94.500003"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-21.492048,-107.5"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="-17.563477,-114.5"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="6.3650954,-104.5"
id="guide9011" />
<sodipodi:guide
orientation="1,0"
position="99.936523,165.85714"
id="guide8576" />
<sodipodi:guide
orientation="1,0"
position="149.93652,166.21429"
id="guide8578" />
<sodipodi:guide
orientation="1,0"
position="199.93652,164.78571"
id="guide8580" />
<sodipodi:guide
orientation="1,0"
position="249.93652,164.78571"
id="guide8582" />
<sodipodi:guide
orientation="1,0"
position="299.93652,169.78571"
id="guide8584" />
<sodipodi:guide
orientation="1,0"
position="349.93652,158.71429"
id="guide8586" />
<sodipodi:guide
orientation="1,0"
position="399.93652,166.92857"
id="guide8588" />
<sodipodi:guide
orientation="1,0"
position="449.93652,157.64286"
id="guide8590" />
<sodipodi:guide
orientation="1,0"
position="499.93652,164.42857"
id="guide8592" />
<sodipodi:guide
orientation="0,1"
position="-74.706334,150.5"
id="guide8749" />
<sodipodi:guide
orientation="0,1"
position="-35.063477,0.49999738"
id="guide8751" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(24.936523,-136.86218)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 24.856,152.36218 2.504871,-10.14357 20.03897,0 5.009743,20.28714 20.03897,0 5.009738,-20.28714 20.03898,0 5.009738,20.28714 20.03897,0 5.00973,-20.28714 20.03899,0 5.00974,20.28714 20.03899,0 L 175,152.36218"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 74.881279,205.2783 c 10.95238,15.5 37.344841,-1.13642 49.368651,14.36358"
id="path5873-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-6"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">instruction</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,182.36218 20,0 10,20 40,0 10,-20 40,0 10,20 20,0"
id="path8640"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,202.36218 20,0 10,-20 40,0 10,20 40,0 10,-20 20,0"
id="path8642"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="75"
y="195.36218"
id="text3925-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-2"
x="75"
y="195.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">trap</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-6-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-6-2"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">number</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,232.36218 75,0 5,-10 40,0 5,10 25,0"
id="path8698"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 100,232.36218 5,10 40,0 5,-10"
id="path8700"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-6-1-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-6-2-6"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">req</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,282.36218 70,0 10,-20 40,0 10,20 20,0"
id="path8723"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m 74.866071,205.30861 c 0.451958,11.98933 6.863625,41.86982 21.986933,42.55268 14.807466,0.66859 20.875236,3.37536 28.057706,11.21964"
id="path5873-8-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 75,137.36218 0,150"
id="path8753"
inkscape:connector-curvature="0" />
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:4, 4;stroke-dashoffset:0"
d="m 125,137.36218 0,150"
id="path8755"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -0,0 +1,619 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="450.70508"
height="261.14359"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_mem_interlacing.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.979899"
inkscape:cx="189.1049"
inkscape:cy="157.40994"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="false"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<sodipodi:guide
orientation="0,1"
position="-83.366352,260.5"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-100.50921,240.5"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="70.205078,369.0714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="95.205078,342.64286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="145.20508,344.07143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="195.20508,284.07143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="245.20508,311.21429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="295.20508,289.07143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="90.205078,319.07143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="100.20508,291.21429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="140.20508,444.7857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="150.20508,388.3571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="190.20508,354.7857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="200.20508,326.21429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="240.20508,283.35714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="250.20508,278.35714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="290.20508,301.21429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="300.20508,304.07143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="345.20508,291.92857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="350.20508,281.92857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="340.20508,337.64286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="395.20508,260.5"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="400.20508,250.5"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="390.20508,250.5"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="445.20508,279.07143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="440.20508,318.35714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="450.20508,301.92857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-83.366352,250.5"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="495.20508,270.74897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="490.20508,260.5"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="500.20508,276.80988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="545.20508,229.83779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="540.20508,226.80733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="550.20508,213.17027"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="595.20508,186.40123"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="600.20508,186.40123"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="590.20508,179.83524"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-122.98532,210.5"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-78.538612,220.5"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-54.294948,200.5"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-6.9377789,247.5"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="65.205078,299.07143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="70.205078,170.5"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="31.062942,180.5"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="65.205078,160.5"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="22.981722,140.5"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="39.649239,130.5"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="39.649239,120.5"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="27.527408,207.5"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-20.454837,167.5"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-0.75686288,127.5"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-57.325402,100.5"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-82.579222,87.499997"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-118.94471,90.499997"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-123.49039,80.499997"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-9.7949219,60.499997"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="26.63365,50.499997"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="17.347935,47.499997"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="10.205078,40.499997"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="16.276507,20.499997"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-1.2234929,7.4999974"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="2.7050781,0.49999738"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="26.63365,10.499997"
id="guide9011" />
<sodipodi:guide
orientation="1,0"
position="120.20508,180.5"
id="guide9213" />
<sodipodi:guide
orientation="1,0"
position="170.20508,127.5"
id="guide9215" />
<sodipodi:guide
orientation="1,0"
position="220.20508,108.71428"
id="guide9217" />
<sodipodi:guide
orientation="1,0"
position="270.20508,110.85714"
id="guide9219" />
<sodipodi:guide
orientation="1,0"
position="320.20508,120.5"
id="guide9221" />
<sodipodi:guide
orientation="1,0"
position="370.20508,109.42857"
id="guide9223" />
<sodipodi:guide
orientation="0,1"
position="-73.236059,265.5"
id="guide7048" />
<sodipodi:guide
orientation="0,1"
position="-28.284271,-4.5"
id="guide7052" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(45.205078,-141.71861)">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 275.34314,152.36218 -2.50488,10.14357 -20.03899,0 -5.00972,-20.28714 -20.03897,0 -5.00975,20.28714 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -20.03897,0 -5.009738,-20.28714 -20.03898,0 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.71257883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 275.35586,152.36218 2.50287,-10.14371 20.023,0 5.00575,20.28742 20.02299,0 5.00575,-20.28742 20.02299,0 5.00575,20.28742 20.02299,0 5.00575,-20.28742 20.023,0 5.00574,20.28742 L 405,162.36218"
id="path3123-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccc" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="195.36218"
id="text3925-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9"
x="20"
y="195.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">address</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="235.36218"
id="text3925-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-5"
x="20"
y="235.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">instruction</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="275.36218"
id="text3925-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8"
x="20"
y="275.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">imem en</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="315.36218"
id="text3925-6-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8-9"
x="20"
y="315.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">dmem read en</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="355.36218"
id="text3925-6-10"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8-0"
x="20"
y="355.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">dmem write en</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,192.36218 25,0 5,-10 90,0 5,10 5,-10 90,0 5,10 5,-10 90,0 5,10 55,0"
id="path9168"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 50,192.36218 5,10 90,0 5,-10 5,10 90,0 5,-10 5,10 90,0 5,-10"
id="path9170"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,232.36218 75,0 5,-10 90,0 5,10 5,-10 90,0 5,10 5,-10 90,0 5,10 5,0"
id="path9172"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 100,232.36218 5,10 90,0 5,-10 5,10 90,0 5,-10 5,10 90,0 5,-10 0,0 0,0 0,0 0,0"
id="path9174"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,272.36218 25,0 5,-10 340,0 5,10 5,0 0,0 0,0"
id="path9176"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,322.36218 70,0 10,-20 40,0 10,20 40,0 210,0 0,0"
id="path9178"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,362.36218 170,0 10,-20 40,0 10,20 150,0"
id="path9180"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="395.36218"
id="text3925-6-10-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-8-0-4"
x="20"
y="395.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">memory active</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 25,392.3622 50.000002,0 5,-10 39.999998,0 5,10 5,-10 40,0 5,10 5,-10 40,0 5,10 5,-10 40,0 5,10 5,-10 40,0 5,10 5,-10 40,0 5,10 30,0"
id="path9209"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccccccccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 75.000002,392.3622 5,10 39.999998,0 5,-10 5,10 40,0 5,-10 5,10 40,0 5,-10 5,10 40,0 5,-10 5,10 40,0 5,-10 5,10 40,0 5,-10"
id="path9211"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="100"
y="395.36218"
id="text3925-1-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9"
x="100"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">imem</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="150"
y="395.36218"
id="text3925-1-2-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9-1"
x="150"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">dmem</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="200"
y="395.36218"
id="text3925-1-2-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9-7"
x="200"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">imem</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="250"
y="395.36218"
id="text3925-1-2-8-2"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9-7-8"
x="250"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">dmem</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="300"
y="395.36218"
id="text3925-1-2-8-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9-7-5"
x="300"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">imem</tspan></text>
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="350"
y="395.36218"
id="text3925-1-2-8-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927-9-9-7-6"
x="350"
y="395.36218"
style="font-size:10px;text-align:center;text-anchor:middle;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">dmem</tspan></text>
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 120.20508,-4.3564148 0,270.0000048"
id="path7054"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 170.20508,-4.3564148 0,270.0000048"
id="path7056"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 220.20508,-4.3564148 0,270.0000048"
id="path7058"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 270.20508,-4.3564148 0,270.0000048"
id="path7060"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 320.20508,-4.3564148 0,270.0000048"
id="path7062"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="m 370.20508,-4.3564148 0,270.0000048"
id="path7064"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:4, 4;stroke-dashoffset:0;opacity:0.5"
d="M 421.73869,-4.3564148 420.22346,265.64359"
id="path7066"
inkscape:connector-curvature="0"
transform="translate(-45.205078,141.71861)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,390 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="744.09448819"
height="1052.3622047"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="signal_template.svg">
<defs
id="defs4">
<marker
inkscape:stockid="Arrow2Mend"
orient="auto"
refY="0"
refX="0"
id="Arrow2Mend"
style="overflow:visible">
<path
inkscape:connector-curvature="0"
id="path5906"
style="fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
transform="scale(-0.6,-0.6)" />
</marker>
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="2.8"
inkscape:cx="53.286618"
inkscape:cy="835.71927"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
showguides="true"
inkscape:guide-bbox="true"
inkscape:window-width="1920"
inkscape:window-height="984"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1">
<sodipodi:guide
orientation="0,1"
position="-128.57143,910"
id="guide2987" />
<sodipodi:guide
orientation="0,1"
position="-145.71429,890"
id="guide2989" />
<sodipodi:guide
orientation="1,0"
position="25,1018.5714"
id="guide2993" />
<sodipodi:guide
orientation="1,0"
position="50,992.14286"
id="guide2995" />
<sodipodi:guide
orientation="1,0"
position="100,993.57143"
id="guide2997" />
<sodipodi:guide
orientation="1,0"
position="150,933.57143"
id="guide2999" />
<sodipodi:guide
orientation="1,0"
position="200,960.71429"
id="guide3001" />
<sodipodi:guide
orientation="1,0"
position="250,938.57143"
id="guide3003" />
<sodipodi:guide
orientation="1,0"
position="45,968.57143"
id="guide3005" />
<sodipodi:guide
orientation="1,0"
position="55,940.71429"
id="guide3007" />
<sodipodi:guide
orientation="1,0"
position="95,1094.2857"
id="guide3009" />
<sodipodi:guide
orientation="1,0"
position="105,1037.8571"
id="guide3011" />
<sodipodi:guide
orientation="1,0"
position="145,1004.2857"
id="guide3013" />
<sodipodi:guide
orientation="1,0"
position="155,975.71429"
id="guide3015" />
<sodipodi:guide
orientation="1,0"
position="195,932.85714"
id="guide3017" />
<sodipodi:guide
orientation="1,0"
position="205,927.85714"
id="guide3019" />
<sodipodi:guide
orientation="1,0"
position="245,950.71429"
id="guide3021" />
<sodipodi:guide
orientation="1,0"
position="255,953.57143"
id="guide3023" />
<sodipodi:guide
orientation="1,0"
position="300,941.42857"
id="guide3025" />
<sodipodi:guide
orientation="1,0"
position="305,931.42857"
id="guide3027" />
<sodipodi:guide
orientation="1,0"
position="295,987.14286"
id="guide3029" />
<sodipodi:guide
orientation="1,0"
position="350,910"
id="guide3031" />
<sodipodi:guide
orientation="1,0"
position="355,900"
id="guide3033" />
<sodipodi:guide
orientation="1,0"
position="345,900"
id="guide3035" />
<sodipodi:guide
orientation="1,0"
position="400,928.57143"
id="guide3037" />
<sodipodi:guide
orientation="1,0"
position="395,967.85714"
id="guide3039" />
<sodipodi:guide
orientation="1,0"
position="405,951.42857"
id="guide3041" />
<sodipodi:guide
orientation="0,1"
position="-128.57143,900"
id="guide3064" />
<sodipodi:guide
orientation="1,0"
position="450,920.24897"
id="guide3105" />
<sodipodi:guide
orientation="1,0"
position="445,910"
id="guide3107" />
<sodipodi:guide
orientation="1,0"
position="455,926.30988"
id="guide3109" />
<sodipodi:guide
orientation="1,0"
position="500,879.33779"
id="guide3111" />
<sodipodi:guide
orientation="1,0"
position="495,876.30733"
id="guide3113" />
<sodipodi:guide
orientation="1,0"
position="505,862.67027"
id="guide3115" />
<sodipodi:guide
orientation="1,0"
position="550,835.90123"
id="guide3117" />
<sodipodi:guide
orientation="1,0"
position="555,835.90123"
id="guide3119" />
<sodipodi:guide
orientation="1,0"
position="545,829.33524"
id="guide3121" />
<sodipodi:guide
orientation="0,1"
position="-168.1904,860"
id="guide3147" />
<sodipodi:guide
orientation="0,1"
position="-123.74369,870"
id="guide3149" />
<sodipodi:guide
orientation="0,1"
position="-99.500026,850"
id="guide3151" />
<sodipodi:guide
orientation="0,1"
position="-52.142857,897"
id="guide3931" />
<sodipodi:guide
orientation="1,0"
position="20,948.57143"
id="guide3935" />
<sodipodi:guide
orientation="0,1"
position="25,820"
id="guide3937" />
<sodipodi:guide
orientation="0,1"
position="-14.142136,830"
id="guide3939" />
<sodipodi:guide
orientation="0,1"
position="20,810"
id="guide3941" />
<sodipodi:guide
orientation="0,1"
position="-22.223356,790"
id="guide3943" />
<sodipodi:guide
orientation="0,1"
position="-5.555839,780"
id="guide3945" />
<sodipodi:guide
orientation="0,1"
position="-5.555839,770"
id="guide3947" />
<sodipodi:guide
orientation="0,1"
position="-17.67767,857"
id="guide3949" />
<sodipodi:guide
orientation="0,1"
position="-65.659915,817"
id="guide3951" />
<sodipodi:guide
orientation="0,1"
position="-45.961941,777"
id="guide3953" />
<sodipodi:guide
orientation="0,1"
position="-102.53048,750"
id="guide8148" />
<sodipodi:guide
orientation="0,1"
position="-127.7843,737"
id="guide8150" />
<sodipodi:guide
orientation="0,1"
position="-164.14979,740"
id="guide8152" />
<sodipodi:guide
orientation="0,1"
position="-168.69547,730"
id="guide8154" />
<sodipodi:guide
orientation="0,1"
position="-55,710"
id="guide8997" />
<sodipodi:guide
orientation="0,1"
position="-18.571428,700"
id="guide8999" />
<sodipodi:guide
orientation="0,1"
position="-27.857143,697"
id="guide9001" />
<sodipodi:guide
orientation="0,1"
position="-35,690"
id="guide9003" />
<sodipodi:guide
orientation="0,1"
position="-28.928571,670"
id="guide9005" />
<sodipodi:guide
orientation="0,1"
position="-46.428571,657"
id="guide9007" />
<sodipodi:guide
orientation="0,1"
position="-42.5,650"
id="guide9009" />
<sodipodi:guide
orientation="0,1"
position="-18.571428,660"
id="guide9011" />
<sodipodi:guide
orientation="1,0"
position="75,930.35714"
id="guide8576" />
<sodipodi:guide
orientation="1,0"
position="125,930.71429"
id="guide8578" />
<sodipodi:guide
orientation="1,0"
position="175,929.28571"
id="guide8580" />
<sodipodi:guide
orientation="1,0"
position="225,929.28571"
id="guide8582" />
<sodipodi:guide
orientation="1,0"
position="275,934.28571"
id="guide8584" />
<sodipodi:guide
orientation="1,0"
position="325,923.21429"
id="guide8586" />
<sodipodi:guide
orientation="1,0"
position="375,931.42857"
id="guide8588" />
<sodipodi:guide
orientation="1,0"
position="425,922.14286"
id="guide8590" />
<sodipodi:guide
orientation="1,0"
position="475,928.92857"
id="guide8592" />
</sodipodi:namedview>
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<path
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 275.34314,152.36218 -2.50488,10.14357 -20.03899,0 -5.00972,-20.28714 -20.03897,0 -5.00975,20.28714 -20.03895,0 -5.00975,-20.28714 -20.03898,0 -5.00972,20.28714 -20.03899,0 -5.00974,-20.28714 -20.03899,0 -5.00973,20.28714 -20.03897,0 -5.009738,-20.28714 -20.03898,0 -5.009738,20.28714 -20.03897,0 -5.009743,-20.28714 -20.03897,0 -2.504871,10.14357"
id="path3123"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccccccccccccccccccc" />
<path
style="fill:none;stroke:#000000;stroke-width:0.71257883px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 275.35586,152.36218 2.50287,-10.14371 20.023,0 5.00575,20.28742 20.02299,0 5.00575,-20.28742 20.02299,0 5.00575,20.28742 20.02299,0 5.00575,-20.28742 20.023,0 5.00574,20.28742 20.023,0 5.00575,-20.28742 20.02299,0 5.00575,20.28742 20.02299,0 5.00575,-20.28742 20.02299,0 5.00575,20.28742 20.023,0 2.50287,-10.14371"
id="path3123-1"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;text-align:end;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:end;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
x="20"
y="155.36218"
id="text3925"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3927"
x="20"
y="155.36218"
style="font-size:10px;text-align:end;text-anchor:end;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans">clk</tspan></text>
<path
style="opacity:0.5;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Mend)"
d="m -115.25265,103.44795 c 10.95238,15.5 37.344842,-1.13642 49.368652,14.36358"
id="path5873-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,557 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="677"
height="652.5"
id="svg3104"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="soc_overview.svg">
<defs
id="defs3106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.98994949"
inkscape:cx="272.83894"
inkscape:cy="279.43084"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
objecttolerance="15"
inkscape:window-width="835"
inkscape:window-height="656"
inkscape:window-x="720"
inkscape:window-y="339"
inkscape:window-maximized="0"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3178"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="5px"
spacingy="5px"
dotted="false"
originx="1px"
originy="-323.5px" />
</sodipodi:namedview>
<metadata
id="metadata3109">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.999999,-76.362183)">
<rect
style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-4-2"
width="675"
height="650"
x="1e-06"
y="77.362183"
ry="0" />
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 3;stroke-dashoffset:0"
d="m 375,527.36218 0,-325 -140,0"
id="path4266"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130"
width="525"
height="75"
x="75"
y="327.36218" />
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-4"
width="200"
height="100"
x="25.000002"
y="127.36218"
ry="0" />
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8"
width="125"
height="100"
x="25"
y="527.36218" />
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8-8"
width="150"
height="100"
x="350"
y="527.36218" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 50,252.36218 0,250"
id="path3294"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 125,427.36218 0,75"
id="path3296"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8-8-0"
width="100"
height="100"
x="525"
y="527.36218" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 60,252.36218 -20,0 10,-25 z"
id="path3355-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#c8c8c8;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 425,427.36218 0,75"
id="path3296-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 575,427.36218 0,75"
id="path3296-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 150,252.36218 0,50"
id="path3298-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="350"
y="377.36218"
id="text3132"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134"
x="350"
y="377.36218"
style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans">Bus Interconnect</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="125"
y="177.36218"
id="text3132-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8"
x="125"
y="177.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans">LT16x32</tspan><tspan
sodipodi:role="line"
x="125"
y="199.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3059">core wrapper</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="85"
y="577.36218"
id="text3132-9-1-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8-0-5"
x="85"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans">Instruction</tspan><tspan
sodipodi:role="line"
x="85"
y="599.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3057">Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="425"
y="577.36218"
id="text3132-9-1-5-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8-0-5-1"
x="425"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans">Interrupt</tspan><tspan
sodipodi:role="line"
x="425"
y="599.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3292">Controller</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="575"
y="577.36218"
id="text3132-9-1-5-5-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="575"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3292-8">I/O</tspan><tspan
sodipodi:role="line"
x="575"
y="599.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3446">Controller</tspan></text>
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 3;stroke-dashoffset:0"
d="m 650,727.36218 0,-550 -415,0"
id="path4266-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 225,202.36218 15,-5 0,10 z"
id="path4286"
inkscape:connector-curvature="0" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 225,177.36218 15,-5 0,10 z"
id="path4286-1"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="-377.36218"
y="25"
id="text4306"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
x="-377.36218"
y="25"
id="tspan4310"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Instruction</tspan><tspan
sodipodi:role="line"
x="-377.36218"
y="40"
id="tspan4314"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Fetch Line</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="-292.36218"
y="125"
id="text4306-7"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
x="-292.36218"
y="125"
id="tspan4314-7"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Data</tspan><tspan
sodipodi:role="line"
x="-292.36218"
y="140"
id="tspan4342"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Bus</tspan></text>
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 160,252.36218 -20,0 10,-25 z"
id="path3355-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 585,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#c8c8c8;fill-opacity:1;stroke:none"
d="m 435,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-98"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 140,302.36218 20,0 -10,25 z"
id="path3355-5-6-5-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 565,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#c8c8c8;fill-opacity:1;stroke:none"
d="m 415,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 115,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-21"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 40,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="165"
y="302.36218"
id="text4555"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557"
x="165"
y="302.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Master IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="520"
y="522.36218"
id="text4555-3-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2"
x="520"
y="522.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Slave IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#c8c8c8;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="430"
y="497.36218"
id="text4555-3-5-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="430"
y="497.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#c8c8c8;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3833">No Slave IF yet</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="60"
y="522.36218"
id="text4555-3-5-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-9"
x="60"
y="522.36218"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan4752">Slave</tspan><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan4754"> IFs</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="172.36218"
id="text4555-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-1"
x="250"
y="172.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">stall</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="217.36218"
id="text4555-9-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-1-3"
x="250"
y="217.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">irq</tspan></text>
<rect
style="color:#000000;fill:#b4b4b4;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8-5"
width="150"
height="100"
x="175"
y="527.36218" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 250,427.36218 0,75"
id="path3296-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 260,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-6-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 240,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-21-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="577.36218"
id="text3132-9-1-5-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8-0-5-6"
x="250"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans">Data</tspan><tspan
sodipodi:role="line"
x="250"
y="599.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3057-7">Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="575"
y="102.36218"
id="text3132-9-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="575"
y="102.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3059-4">Toplevel Entity</tspan></text>
<path
style="fill:#b4b4b4;fill-opacity:1;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 575,637.36218 0,80"
id="path3296-8-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-opacity:1"
d="m 580,642.36218 -10,0 5,-15 z"
id="path3355-5-6-5-1-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-opacity:1"
d="m 570,712.36218 10,0 -5,15 z"
id="path3355-5-6-5-4-3-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#b4b4b4;fill-opacity:1;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 400,637.36218 0,90"
id="path3296-8-7-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#999999;fill-opacity:1;stroke:#999999;stroke-opacity:1"
d="m 405,642.36218 -10,0 5,-15 z"
id="path3355-5-6-5-1-5-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="260"
y="522.36218"
id="text4555-3-5-4-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-0-7"
x="260"
y="522.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Slave IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="460"
y="642.36218"
id="text4555-3-5-4-1-7"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-0-7-9"
x="460"
y="642.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Interrupts</tspan><tspan
sodipodi:role="line"
x="460"
y="657.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan4352">Sources</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="585"
y="642.36218"
id="text4555-3-5-4-1-7-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="585"
y="642.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan4352-2">I/O lines</tspan></text>
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 3;stroke-dashoffset:0"
d="m 550,627.36218 0,75 -100,0 0,-65"
id="path4266-2-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 450,627.36218 5,15 -10,0 z"
id="path4286-9"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 27 KiB

View File

@@ -0,0 +1,516 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="510.61719"
height="527.5"
id="svg3104"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="soc_overview2.svg">
<defs
id="defs3106" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="114.87758"
inkscape:cy="240.3358"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="true"
objecttolerance="15"
inkscape:window-width="1920"
inkscape:window-height="1025"
inkscape:window-x="-2"
inkscape:window-y="-3"
inkscape:window-maximized="1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0">
<inkscape:grid
type="xygrid"
id="grid3178"
empspacing="5"
visible="true"
enabled="true"
snapvisiblegridlinesonly="true"
spacingx="5px"
spacingy="5px"
dotted="false"
originx="-15.882812px"
originy="-424px" />
</sodipodi:namedview>
<metadata
id="metadata3109">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-15.882813,-100.86218)">
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 3;stroke-dashoffset:0"
d="m 300,527.36218 0,-325 -65,0"
id="path4266"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130"
width="425"
height="75"
x="75"
y="327.36218" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7"
width="200"
height="75"
x="325"
y="152.36218" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-4"
width="200"
height="100"
x="25.000002"
y="127.36218"
ry="0" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8"
width="125"
height="100"
x="25"
y="527.36218" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8-8"
width="150"
height="100"
x="175"
y="527.36218" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 50,252.36218 0,250"
id="path3294"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 125,427.36218 0,75"
id="path3296"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 375,252.36218 0,50"
id="path3298"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 475,252.36218 0,25 50,0 0,175 -50,0 0,-25"
id="path3302"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccccc" />
<rect
style="color:#000000;fill:#316591;fill-opacity:1;stroke:#000000;stroke-width:2;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
id="rect3130-7-8-8-0"
width="100"
height="100"
x="350"
y="527.36218" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 60,252.36218 -20,0 10,-25 z"
id="path3355-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 250,427.36218 0,75"
id="path3296-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 400,427.36218 0,75"
id="path3296-8"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#000000;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 150,252.36218 0,50"
id="path3298-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="285"
y="377.36218"
id="text3132"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134"
x="285"
y="377.36218"
style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1">Bus Interconnect</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="125"
y="177.36218"
id="text3132-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8"
x="125"
y="177.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1">LT16x32</tspan><tspan
sodipodi:role="line"
x="125"
y="199.86218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1"
id="tspan3059">core wrapper</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="425"
y="202.36218"
id="text3132-9-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8-0"
x="425"
y="202.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1">Host Bridge</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="85"
y="577.36218"
id="text3132-9-1-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="85"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;fill:#ffffff;fill-opacity:1;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan3057">Memory</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="577.36218"
id="text3132-9-1-5-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan3134-8-0-5-1"
x="250"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1">Interrupt</tspan><tspan
sodipodi:role="line"
x="250"
y="607.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1"
id="tspan3292">Controller</tspan></text>
<text
xml:space="preserve"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="400"
y="577.36218"
id="text3132-9-1-5-5-1"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
x="400"
y="577.36218"
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;text-anchor:middle;font-family:Sans;-inkscape-font-specification:Sans;fill:#ffffff;fill-opacity:1"
id="tspan3292-8">I/O</tspan></text>
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:9, 3;stroke-dashoffset:0"
d="m 325,177.36218 -90,0"
id="path4266-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 225,202.36218 15,-5 0,10 z"
id="path4286"
inkscape:connector-curvature="0" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 225,177.36218 15,-5 0,10 z"
id="path4286-1"
inkscape:connector-curvature="0" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="-377.36218"
y="25"
id="text4306"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
x="-377.36218"
y="25"
id="tspan4310"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Instruction</tspan><tspan
sodipodi:role="line"
x="-377.36218"
y="40"
id="tspan4314"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Fetch Line</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="-292.36218"
y="125"
id="text4306-7"
sodipodi:linespacing="125%"
transform="matrix(0,-1,1,0,0,0)"><tspan
sodipodi:role="line"
x="-292.36218"
y="125"
id="tspan4314-7"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Data</tspan><tspan
sodipodi:role="line"
x="-292.36218"
y="140"
id="tspan4342"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Bus</tspan></text>
<path
style="fill:none;stroke:#999999;stroke-width:3;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 425,102.36218 0,25"
id="path3298-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cc" />
<path
style="fill:#999999;fill-opacity:1;stroke:none"
d="m 415,127.36218 20,0 -10,25 z"
id="path3355-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 160,252.36218 -20,0 10,-25 z"
id="path3355-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 385,252.36218 -20,0 10,-25 z"
id="path3355-5-6-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 485,252.36218 -20,0 10,-25 z"
id="path3355-5-6-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 485,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-9"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 410,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-1"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 260,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-98"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 135,427.36218 -20,0 10,-25 z"
id="path3355-5-6-5-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 140,302.36218 20,0 -10,25 z"
id="path3355-5-6-5-4"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 365,302.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-6"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 390,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 240,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-2"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 115,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-21"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<path
style="fill:#000000;fill-opacity:1;stroke:none"
d="m 40,502.36218 20,0 -10,25 z"
id="path3355-5-6-5-4-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="165"
y="302.36218"
id="text4555"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557"
x="165"
y="302.36218"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Master IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="390"
y="302.36218"
id="text4555-3"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4"
x="390"
y="302.36218"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Master IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="345"
y="522.36218"
id="text4555-3-5"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2"
x="345"
y="522.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Slave IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="490"
y="242.36218"
id="text4555-3-5-8"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-8"
x="490"
y="242.36218"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">Slave</tspan><tspan
sodipodi:role="line"
x="490"
y="257.36218"
id="tspan4643"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="195"
y="522.36218"
id="text4555-3-5-4"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-0"
x="195"
y="522.36218"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans">Slave IF</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="60"
y="522.36218"
id="text4555-3-5-6"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-4-2-9"
x="60"
y="522.36218"><tspan
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Sans;-inkscape-font-specification:Sans"
id="tspan4752">Slave</tspan><tspan
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal"
id="tspan4754"> IFs</tspan></tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="172.36218"
id="text4555-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-1"
x="250"
y="172.36218"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">stall</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="250"
y="217.36218"
id="text4555-9-0"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-1-3"
x="250"
y="217.36218"
style="-inkscape-font-specification:Sans;font-family:Sans;font-weight:normal;font-style:normal;font-stretch:normal;font-variant:normal">irq</tspan></text>
<text
xml:space="preserve"
style="font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#999999;fill-opacity:1;stroke:none;font-family:Monospace;-inkscape-font-specification:Monospace"
x="440"
y="122.36218"
id="text4555-9-9"
sodipodi:linespacing="125%"><tspan
sodipodi:role="line"
id="tspan4557-1-31"
x="440"
y="122.36218"
style="font-family:Sans;-inkscape-font-specification:Sans">Host</tspan><tspan
sodipodi:role="line"
x="440"
y="137.36218"
id="tspan4750"
style="font-family:Sans;-inkscape-font-specification:Sans">Interface</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 24 KiB

View File

@@ -0,0 +1,130 @@
%%%%%%%%%%%%
%%% MINTED
%%%%%%%%%%%%
\DeclareFloatingEnvironment[
fileext=loc,
listname=List of Listings,
name=Listing,
placement=htp,
]{codefloat}
\newenvironment{vhdl}[2][]
{\codefloat[htb]
\if\relax\detokenize{#1}\relax\else\caption{#1}\fi
\if\relax\detokenize{#2}\relax\else\label{#2}\fi
\minted[%linenos,
%numbersep=5pt,
tabsize=3,
frame=lines,
framesep=2mm,
fontsize=\footnotesize]
{vhdl}}
{\endminted
\endcodefloat}
\newenvironment{asm}[2][]
{\codefloat[htb]
\if\relax\detokenize{#1}\relax\else\caption{#1}\fi
\if\relax\detokenize{#2}\relax\else\label{#2}\fi
\minted[%linenos,
%numbersep=5pt,
tabsize=3,
frame=lines,
framesep=2mm,
fontsize=\footnotesize]
{c}}
{\endminted
\endcodefloat}
%%%%%%%%%%%%
%%% COMMENTS AND TODO-MARKERS
%%%%%%%%%%%%
% \newcommand{\comment}[3]{\marginpar{\textcolor{#2}{Comment: #1}}\textcolor{#2}{\textit{[#1: #3]}}}
% \newcommand{\TF}[1]{\comment{TF}{orange}{#1}}
% \newcommand{\LS}[1]{\comment{LS}{blue}{#1}}
%
% \newcommand{\qn}{\todo{qn!}}
% \newcommand{\sectodo}{\todo{Still todo.}}
% \newcommand{\seccheck}{\marginpar{\textcolor{orange}{reread}}}
% \newcommand{\secthomas}{\marginpar{\textcolor{green}{thomas}}}
% \newcommand{\secdone}{\marginpar{\textcolor{gray}{done}}}
% %\newcommand{\todo}[1]{\pagecolor{red!10}\afterpage{\nopagecolor}\textcolor{red}{\textit{[#1]}}\marginpar{\textcolor{red}{\textbf{TODO}}}}
% \newcommand{\todo}[1]{\textcolor{red}{\textit{[#1]}}\marginpar{\textcolor{red}{\textbf{TODO}}}}
%
%
% %%% BLANK COMMANDS FOR PUBLISHING
% \newcommand{\publish}[1]{}
% \renewcommand{\publish}[1]{#1} % TODO: uncomment this line before printing!
%
% \publish{\renewcommand{\comment}[3]{}}
% \publish{\renewcommand{\TF}[1]{}}
% \publish{\renewcommand{\LS}[1]{}}
% \publish{\renewcommand{\qn}{}}
% \publish{\renewcommand{\sectodo}{}}
% \publish{\renewcommand{\seccheck}{}}
% \publish{\renewcommand{\secthomas}{}}
% \publish{\renewcommand{\secdone}{}}
% \publish{\renewcommand{\todo}[1]{}}
\newcommand{\comment}[3]{\marginpar{\textcolor{#2}{Comment: #1}}\textcolor{#2}{\textit{[#1: #3]}}}
\newcommand{\TF}[1]{\comment{TF}{red}{#1}}
\newcommand{\TS}[1]{\comment{TS}{blue}{#1}}
\newcommand{\FP}[1]{\comment{TS}{orange}{#1}}
%%%%%%%%%%%%
%%% LOGIC OPERATORS
%%%%%%%%%%%%
\newcommand{\logicxor}{\texttt{XOR}\xspace}
\newcommand{\logicor}{$||$\xspace}%TODO: does not show up as OR
\newcommand{\logicand}{\&\xspace}
%%%%%%%%%%%%
%%% STUFF
%%%%%%%%%%%%
\newcommand{\mem}[1]{*#1\xspace}
\newcommand{\x}{--\xspace}
%%%%%%%%%%%%
%%% NAMES
%%%%%%%%%%%%
\newcommand{\procname}{\textsl{LT16x32}\xspace}
%%%%%%%%%%%%
%%% FORMAT SHORTCUTS
%%%%%%%%%%%%
\newcommand{\floatplace}{[ht]}
\newcommand{\tc}[1]{\textbf{#1}}
\newcommand{\hex}[1]{#1}
\newcommand{\bits}[1]{#1}
\newcommand{\filename}[1]{{\small\texttt{#1}}}
\newcommand{\command}[1]{{\small\texttt{#1}}}
\newcommand{\inlinevhdl}[1]{{\small\texttt{#1}}} %TODO with syntax highlighting and check for $\_$
\newcommand{\inlinec}[1]{{\small\texttt{#1}}} %TODO with syntax highlighting and check for $\_$
\newcommand{\inlineasm}[1]{{\small\texttt{#1}}} %TODO with syntax highlighting and check for $\_$
\newcommand{\instruction}[7]{
\subsubsection{#1}
\label{instr_#2}
\begin{description}
\nolistskip
\item[Opcode:] \texttt{#3}
\item[Assembler:] \inlineasm{#4}
\item[Operation:] #5
\item[C-Equivalent:] \inlinec{#6}
\item[Status Register:] #7
\end{description}
}
%%%%%%%%%%%%
%%% TEX WORKAROUNDS
%%%%%%%%%%%%
\newcommand{\nolistskip}{\itemsep-3pt}

34
documentation/guides.tex Normal file
View File

@@ -0,0 +1,34 @@
\chapter{Guides}
\section{How to implement a lookup or branch table}
Due to the limitation of the \verb=ldr= instruction,
addressing large fields of constants with it is not feasible,
especially if those constants are refered to by more than one part of the program.
This can be circumvented by using the assemblers directive \verb|=labelname| to store a pointer to a labels location (See Section~\ref{sec:AssemblerDirectives}).
Pointers to data in memory can be stored conviently close to an \verb=ldr= instruction,
making the access to the memory content via a pointer based load or store instruction possible.
The most common use of this mechanic is the lookup table.
An example is given in Listing~\ref{lst:ldr_useage}.
\begin{asm}[Example on indirect LDR use]{lst:ldr_useage}
.align
lookup_table:
.word 0x0001
.word 0x0010
//...
// large amounts of code and/or data
//...
.align
lookuptable_ptr:
.word =lookup_table
//...
ldr rX , >lookuptable_ptr
//...
ld32 rY,rX // load from pointer
addi rX, 4
ld32 rZ,rX // load from pointer with offset
//...
\end{asm}

View File

@@ -0,0 +1,359 @@
\chapter{Assembler and Instructions}
\section{Processor Instructions}
The \procname features a RISC instruction set with 16bit instructions and is prepared to be extended with 32bit and allows multicycle instructions.
In 16bit instructions, the first nibble (4bits) of the instruction code is the opcode determining the operation.
The opcode \bits{1111} is reserved for 32bit instructions which are always are word aligned.
\subsection{Instruction Format}
Several different instruction formats are used in the \procname.
As at the moment, no 32bit instruction is implemented, this section describes instruction formats for 16bit instructions only.
Each halfword is split up into four nibbles (each of a size of 4bits), whose meaning can be seen in Table \ref{tbl:instr_formatnibbles}.
\begin{table}
\caption{16bit Instruction Formats}
\label{tbl:instr_formatnibbles}
\begin{center}
\begin{tabular}{|l||c|c|c|c||p{0.2\textwidth}|}
\hline
Format & 15-12 & 11-8 & 7-4 & 3-0 & Example Uses\\
\hline\hline
Three Registers & opcode & Rd & Ra & Rb & Calculations\\
\hline
4bit Immediate & opcode & Rd & Ra & Imm(3-0) & Shift\\
\hline
8bit Immediate & opcode & Rd & Imm(7-4) & Imm(3-0) & Add Immediate, Load PC-Relative\\
\hline
Mode with Register & opcode & Mode & Ra & Rb & Compare, Load/Store\\
\hline
Mode with Immediate & opcode & Mode & Imm(7-4) & Imm(3-0) & Branch/Call to Immediate\\
\hline
\end{tabular}
\end{center}
\end{table}
\subsection{List of available Instructions}
\label{sec:instructionlist}
The following instructions are supported:
\paragraph{Arithmetic Operations}
\begin{itemize}
\nolistskip
\item \hyperref[instr_add]{Signed Addition}
\item \hyperref[instr_sub]{Signed Subtraction}
\item \hyperref[instr_addi]{Signed Addition with Immediate}
\end{itemize}
\paragraph{Bitwise/Logic Operations}
\begin{itemize}
\nolistskip
\item \hyperref[instr_and]{Bitwise AND}
\item \hyperref[instr_or]{Bitwise OR}
\item \hyperref[instr_xor]{Bitwise XOR}
\item \hyperref[instr_lsh]{Logic Shift Left}
\item \hyperref[instr_rsh]{Logic Shift Right}
\item \hyperref[instr_cmp]{Compare}
\end{itemize}
\paragraph{Memory Operations}
\begin{itemize}
\nolistskip
\item \hyperref[instr_ldr]{Load PC Relative}
\item \hyperref[instr_ld]{Load Data from Pointer}
\item \hyperref[instr_st]{Store Data to Pointer}
\end{itemize}
\paragraph{Branch/Call/Trap Operations}
\begin{itemize}
\nolistskip
\item \hyperref[instr_bri]{Branch to Offset}
\item \hyperref[instr_brr]{Branch to Register}
\item \hyperref[instr_calli]{Call to Offset}
\item \hyperref[instr_callr]{Call to Register}
\item \hyperref[instr_trap]{Trap}
\item \hyperref[instr_reti]{Return from Interrupt}
\item \hyperref[instr_brt]{Branch to Table}
\end{itemize}
\paragraph{Miscellaneous Operations}
\begin{itemize}
\nolistskip
\item \hyperref[instr_tst]{Test and Set}
\end{itemize}
\instruction{Signed Addition}{add}
{0011 dddd aaaa bbbb}
{add rd, ra, rb}
{Registers ra and rb are treated as two signed numbers and are added. The result is stored in rd.}
{rd = ra + rb;}
{The overflow flag is updated.}
\instruction{Signed Subtraction}{sub}
{0001 dddd aaaa bbbb}
{add rd, ra, rb}
{Registers ra and rb are treated as two signed numbers and are subtracted. The result is stored in rd.}
{rd = ra - rb;}
{The overflow flag is updated.}
\instruction{Bitwise AND}{and}
{0010 dddd aaaa bbbb}
{and rd, ra, rb}
{Registers ra and rb are treated as bit masks and are anded with each other. The result is stored in rd.}
{rd = ra \& rb;}
{No flag is updated.}
\instruction{Bitwise OR}{or}
{0000 dddd aaaa bbbb}
{or rd, ra, rb}
{Registers ra and rb are treated as bit masks and are ored with each other. The result is stored in rd.}
{rd = ra | rb;}
{No flag is updated.}
\instruction{Bitwise XOR}{xor}
{0100 dddd aaaa bbbb}
{xor rd, ra, rb}
{Registers ra and rb are treated as bit masks and are xored with each other. The result is stored in rd.}
{rd = ra $\hat\ $ rb;}
{No flag is updated.}
\instruction{Logic Shift Left}{lsh}
{0101 dddd aaaa bbbb}
{lsh rd, ra, imm}
{Register ra is treated as bit masks and shifted to the left by imm bits, ra is filled with zeroes. imm is treated as unsigned number. The result is stored in rd. Internally, imm is incremented by one, which is compensated for in the assembler.}
{rd = ra $<<$ imm;}
{No flag is updated.}
\instruction{Logic Shift Right}{rsh}
{0110 dddd aaaa bbbb}
{rsh rd, ra, imm}
{Register ra is treated as bit masks and shifted to the right by imm bits, ra is filled with zeroes. imm is treated as unsigned number. The result is stored in rd. Internally, imm is incremented by one, which is compensated for in the assembler.}
{rd = ra $>>$ imm;}
{No flag is updated.}
\instruction{Signed Addition with Immediate}{addi}
{0111 dddd iiii iiii}
{addi rd, imm}
{Register rd and imm are treated as signed numbers and are added. The result is stored in rd.}
{rd = rd + imm;}
{The overflow flag is updated.}
\instruction{Compare}{cmp}
{1000 mmmm aaaa bbbb}
{cmp mode ra, rb}
{Registers ra and rb are treated as signed numbers and are compared. If the condition, given by mode is true, the truth-flag is set, otherwise reset. Allowed modes are\begin{description}\nolistskip
\item[0000, eq]equal
\item[1000, neq]not equal
\item[0010, gg]greater
\item[0001, ge]greater or equal
\item[1001, ll]less
\item[1010, le]less or equal
\end{description}}
{(ra == rb) ? (T=1) : (T=0);\\// where == is interchangable by mode}
{The truth flag is updated.}
\instruction{Load PC Relative}{ldr}
{1010 dddd iiii iiii}
{ldr rd, imm}
{Register rd is loaded with memory data from address (PC+(imm$<<$1)), where imm is treated as signed number and is left shifted by one bit.}
{rd = *(PC + (imm$<<$1)}
{No flag is updated.}
\instruction{Load Data from Pointer}{ld}
{1011 0mmm aaaa bbbb}
{ld08 ra, rb\\ld16 ra, rb\\ld32 ra, rb}
{Loads data from pointer. Register rb's content is used as absolute address, the loaded data is written to register ra. Following modes are supported:
\begin{description}
\nolistskip
\item[000] Load byte
\item[001] Load halfword
\item[010] Load word
\end{description}
}
{ra = *rb}
{No flag is updated}
\instruction{Store Data to Pointer}{st}
{1011 1mmm aaaa bbbb}
{st08 ra, rb\\st16 ra, rb\\st32 ra, rb}
{Stores data to pointer. Register ra's content is used as absolute address to store the content of register rb. Following modes are supported:
\begin{description}
\nolistskip
\item[000] Store byte
\item[001] Store halfword
\item[010] Store word
\end{description}
As the data is valid only after two clock cycles, the user must ensure that the same address is not used in read transactions in the following instruction (such as ld, ldr, tst).
}
{*ra = rb}
{No flag is updated}
\instruction{Branch to Offset}{bri}
{1100 010c iiii iiii}
{br imm\\br always/true imm}
{Sets the program counter to PC+imm, where imm is treated as signed number. For details about the branch delay slot see section \ref{sec:branchdelayslot}. If c==1, the branch is conditional and performed only, if the truth flag is set.}
{if ((c==0) \logicor (T==1)) goto (PC+imm);}
{No flag is updated}
\instruction{Branch to Register}{brr}
{1100 011c aaaa xxxx}
{br ra\\br always/true ra}
{Sets the program counter to register a. For details about the branch delay slot see section \ref{sec:branchdelayslot}. If c==1, the branch is conditional and performed only, if the truth flag is set.}
{if ((c==0) \logicor (T==1)) goto (ra$<<$1);}
{No flag is updated}
\instruction{Call to Offset}{calli}
{1100 100c iiii iiii}
{call imm\\call always/true imm}
{Sets the program counter to PC+imm, where imm is treated as signed number, and stores the current program counter in the link register. If c==1, the call is conditional and performed only, if the truth flag is set. This is a multicycle operation which consumes two clock cycles.}
{if ((c==0) \logicor (T==1)) \{LR=PC; goto (PC+imm);\}}
{No flag is updated}
\instruction{Call to Register}{callr}
{1100 101c aaaa xxxx}
{call ra\\call always/true ra}
{Sets the program counter to register a and stores the current program counter in the link register. If c==1, the call is conditional and performed only, if the truth flag is set. This is a multicycle operation which consumes two clock cycles.}
{if ((c==0) \logicor (T==1)) \{LR=PC; goto (ra$<<$1);\}}
{No flag is updated}
\instruction{Trap}{trap}
{1100 11xx iiii iiii}
{trap imm}
{Request an interrupt of number imm. Number of bits for imm can be set in processor configuration, the number must be right aligned.}
{no equivalent}
{No flag is updated}
\instruction{Return from Interrupt}{reti}
{1100 000x xxxx xxxx}
{reti}
{Returns from Interrupt, by popping the link and status register from the stack and branching to the current link register contents. This is a multicycle operation which consumes five clock cycles.}
{no equivalent}
{No flag is updated.}
\instruction{Branch to Table}{brt}
{1100 001c aaaa xxxx}
{brt ra}
{Increments the program counter by register a. This allows for easy creation of branch tables. For details about the branch delay slot see section \ref{sec:branchdelayslot}. If c==1, the branch is conditional and only performed if the truth flag is set.}
{PC = PC + (ra$<<$1)}
{No flag is updated.}
\instruction{Test and Set}{tst}
{1001 dddd aaaa xxxx}
{tst rd, ra}
{Test and set can be used to implement mutexes. The lower seven bits of the byte can be used to implement semaphores.}
{temp=$_\text{byte}$*ra; rd = temp;\\T = (temp \& 0x80==0); temp=temp $|$ 0x80; *ra=$_\text{byte}$temp;}
{The T-flag is set if the mutex is free and reset if the mutex is already reserved.}
\section{Assembler}
The supplied assembler is a two-pass assembler (see thesis, Section 2.6) based on \filename{flex} and \filename{bison} which are used to parse the input file.
\subsection{HowTo: Assemble Input Files}
A prepared assembler file \filename{input.prog} (see examples in \filename{/source/programs/}) can easily assembled into a formatted file \filename{output.ram} supported by the \procname by calling the assembler \filename{asm}:
\begin{verbatim}
asm input.prog -o output.ram
\end{verbatim}
\subsection{Allowed Input}
The input to the assembler is case sensitive and all mnemonics have to be lower case. A typical line follows Listing \ref{lst:asm_general}, where all parts are optional (a mnemonic is needed if parameters are supplied though).
\begin{asm}[General Inputline]{lst:asm_general}
label: mnemonic mode par1, par2, par3 // comment
\end{asm}
Parameters can either be registers names r0 to r15, SP, LR, SR or PC,
or can be immediate values in various number formats (decimal, binary or hexadecimal numbers),
for prefixes see Table \ref{tbl:asm_numberformats}.
Binary and hexadecimal numbers are not sign extended and always treated as unsigned values.
Also, absolute or relative references to labels are allowed as parameters, see Section \ref{sec:labels} for details.
Number and type of parameters vary for each instruction, allowed combinations are listed in Section \ref{sec:instructionlist}.
\begin{table}
\begin{center}
\begin{tabular}{|c|c|c|}
\hline
Numberformat & Prefix & Example\\
\hline\hline
Decimal & None & -45 \\
Binary & 0b & 0b11011 \\
Hexadecimal & 0x & 0xFE \\
\hline
\end{tabular}
\end{center}
\caption{Number Format Prefixes}
\label{tbl:asm_numberformats}
\end{table}
\subsection{Pseudo Instructions}
Several instructions are supported which are not directly processed by the \procname but which are mapped to other instructions.
For details on the instructions used, see Section \ref{sec:instructionlist}.
\begin{description}
\item[No Operation (nop)] No operation is performed, wait one clock cycle. Mapped to \inlineasm{or r0, r0, r0}.
\item[Move Register (mov rd, ra)] The content of \inlineasm{ra} is copied to \inlineasm{rd}. Mapped to \inlineasm{or rd, ra, ra}.
\item[Return (ret)] Returns to callee after a call instruction. Mapped to \inlineasm{br always lr}.
\item[Clear Register (clr rd)] Resets \inlineasm{rd} to zero. Mapped to \inlineasm{xor rd, rd, rd}.
\end{description}
\subsection{Directives}%
\label{sec:AssemblerDirectives}%
The assembler supports several directives which can be included in the input code, see Listing \ref{lst:asm_directives}.
\begin{description}
\item[.word]stores the following parameter directly into the memory.
\item[.address]inserts nops until the address given as parameter is reached.
\item[.align]if needed, a 16bit nop is inserted to align the following instruction
\end{description}
\begin{asm}[Example for the use of directives]{lst:asm_directives}
// load variables from constant pointer
ldr r0, >variableA
ldr r1, >variableB
// store variableA
.align // fix eventual non-word-alignment
variableA: .word 0x1234
// store variableB
.address 0x100 // store variableB at address 0x100
variableB: .word 0xABCD
\end{asm}
\subsection{Labels}
\label{sec:labels}
Labels can be set in the code directly, as seen in Listing \ref{lst:asm_general}.
They can be reffered to in absolute or relative manner (see Listing \ref{lst:asm_labels}).
Label names can include upper and lower case letters, numbers and underscores.
While absolute referencing puts the whole address into the output, relative referencing adds only the difference to the address of instruction which is referencing to the label.
\begin{asm}[Label References]{lst:asm_labels}
label: br >label // relative reference
.word =label // absolute reference
\end{asm}
\subsection{Assembler Options}
Several command line options are available:
\begin{description}
\item[-o filename]Determines the output file.
\item[-m filename]The assembler outputs a map file, containing all labels and their addresses.
\item[-v or -\xspace -verbose]Outputs all intermediate information.
\item[-\xspace -autoalign]Automatically aligns 32bit instruction and immediate values
\item[-\xspace -fillbds]Fills branch delay slots with nop instruction (i.e. inserts nop after all branches)
\item[-\xspace -continue-on-error]Continues parsing even with errors.
\end{description}
\subsection{Output}
The standard output format is a one-word-per-line bitstring representation of the instruction memory, which can directly be read by the testbench provided and used as input for memory synthesis.
\section{HowTo: Add more instructions}
\subsection{Processor Side}
\begin{enumerate}
\item Add opcode constant define to \verb=lt16x32_internal= package.
\item Add case to 16bit decoder and set control signals that differ from default settings.
\end{enumerate}
\subsection{Assembler Side}
\begin{enumerate}
\item Add enumerate item to op$\_$t in global.h
\item Add pattern to flex code in asm.l
\item Add handling to handle$\_$xy.c according to wished syntax style.
\item Recompile assembler by running the make script.
\end{enumerate}
\subsection{32bit Extension}
If 32bit instruction should be implemented, follow the structure of the 16bit decoder to implement the 32bit decoder in \filename{decoder\_32bit.vhd}.
\subsection{Multicycle Instructions}
To implement multicycle operations, changes need to be implemented in \filename{decoder$\_$fsm.vhd}.
Use the implementation of reti as an example.

View File

@@ -0,0 +1,70 @@
\chapter{Interrupts}
\section{Interrupt Controller}
\label{sec:irq_ctrl}
The interrupt controller features a configurable number of interrupt lines with a configurable amount of priorities.
The configuration follows that of the \procname (see Section \ref{sec:config}).
These intterupts lines need to be asserted for one clock cycle to trigger an interrupt request to the processor core.
Additionally, trap requests from the core are handled (as described in \ref{sec:trap}).
\section{Priority, NMI}
\label{sec:nmi}
The processor features multiple levels of runtime priority (configurable, see Section \ref{sec:config_priowidth}) where a greater number means higher priority.
Additionally, non maskable interrupts (NMI) are supported which are always executed regardless the current processor runtime priority.
The processor starts with the highest possible runtime priority by default to disable interrupts at startup (with the exception of NMI).
This is needed as the stack pointer needs to be set to a valid address before any interrupt (including NMI) can be executed.
\section{Interface and Timing Diagram}
Both ports \inlinevhdl{in\_irq} and \inlinevhdl{out\_irq} (for type definitions see Listing \ref{lst:typedef_irq}) should be connected to a fitting interrupt controller (for example the implementation described in Section \ref{sec:irq_ctrl}).
\begin{vhdl}[Type definitions for Interrupt Controller Ports]{lst:typedef_irq}
-- collection of all signals from the
-- interrupt controller to the core
type irq_core is record
-- interrupt number of requested interrupt
num : unsigned(irq_num_width - 1 downto 0);
-- priority of requested interrupt
-- (higher number means higher priority)
priority : unsigned(irq_prio_width - 1 downto 0);
-- request signal, active high
req : std_logic;
-- non maskable interrupt flag, active high
nmi : std_logic;
end record;
-- collection of all signals from the core
-- to the interrupt controller
type core_irq is record
-- interrupt acknowledge
-- high if requested interrupt is processed
ack : std_logic;
-- number of interrupt requested by
-- internal trap instruction
trap_num : unsigned(irq_num_width - 1 downto 0);
-- request signal for internal trap, active high
trap_req : std_logic;
end record;
\end{vhdl}
\subsection{Interrupt Request}
The external world (i.e. the interrupt controller) can request an interrupt by writing the interrupt number, its priority to \inlinevhdl{in\_irq} and setting the \inlinevhdl{nmi} bit accordingly.
After these are set, \inlinevhdl{req} can be asserted and must be held high until the core acknowledges the interrupt request by asserting \inlinevhdl{ack} for one clock cycle (see Figure \ref{fig:signal_irq_req}).
\begin{figure}[htb]
\center
\includegraphics[scale=1]{./figures/signal_irq_req.pdf}
\caption{Signal Pattern for Interrupt Requests}
\label{fig:signal_irq_req}
\end{figure}
\subsection{Trap Implementation}
\label{sec:trap}
When executing a trap instruction, an interrupt line to the interrupt controller is asserted for one clock cycle with the interrupt number asserted as well, see Figure \ref{fig:signal_irq_trap}.
Note, that an arbitrary time (and number of instructions) may take place between a trap and the interrupt handler execution.
\begin{figure}[htb]
\centering
\includegraphics[scale=1]{./figures/signal_irq_trap.pdf}
\caption{Signal Pattern for Trap Instruction}
\label{fig:signal_irq_trap}
\end{figure}

130
documentation/memory.tex Normal file
View File

@@ -0,0 +1,130 @@
\chapter{Memory}
The \procname is connected to the memory through a harvard architecture style interface.
While the interface to the instruction memory is read only, the data memory interface must handle read and write transactions simultaneously.
Externally, both instruction and data memory can be mapped to a Von-Neumann architecture.
The implemented Harvard architecture is more general and allows for two caches to be implemented.
\section{Endianess and Memory Width}
The memory width is defined in the \inlinevhdl{lt16x32\_internal} package.
Currently, memory widths of 32bits are supported only.
Of course, this memory width can be mapped to any other memory width by a memory controller.
The memory organizes data in big endian format.
This can be seen (and changed) in the memory controller, Listing \ref{lst:endianess}.
The same is valid for halfword-accesses.
\begin{vhdl}[Byte-Order in Memory]{lst:endianess}
case byteaddress is
when "00" =>
dmem_data(7 downto 0) <= word(7 downto 0);
when "01" =>
dmem_data(7 downto 0) <= word(15 downto 8);
when "10" =>
dmem_data(7 downto 0) <= word(23 downto 16);
when "11" =>
dmem_data(7 downto 0) <= word(31 downto 24);
\end{vhdl}
\section{Interface and Timing Description}
\subsection{Instruction Memory Interface}
The \procname is connected to the instruction memory through two ports, as seen in Listing \ref{lst:imem_interface}.
Their datatype definitions can be found in the \inlinevhdl{lt16x32\_global} package.
\begin{vhdl}[Instruction Memory Interface]{lst:imem_interface}
entity core is
port(
[...]
-- signals from instruction memory
in_imem : in imem_core;
-- signals to instruction memory
out_imem : out core_imem;
[...]
);
end entity core;
\end{vhdl}
\subsubsection{Read Access}
As all clocked signals in this design, the address and data signals to the instruction memory must be read on each rising clock edge.
Data must be provided if enable (\inlinevhdl{en}) is asserted and the memory content is read on the next rising clock edge.
This single data rate scheme allows for double data rate memory access to allow for pseudo-simultaneous data and instruction memory access.
A standard signal pattern can found in Figure \ref{fig:signal_imem}.
\begin{figure}[htb]
\centering
\includegraphics[scale=1]{./figures/signal_imem.pdf}
\caption{Signal Pattern for the Instruction Memory Interface}
\label{fig:signal_imem}
\end{figure}
\subsection{Data Memory Interface}
The \procname is connected to the data memory through two ports, as seen in Listing \ref{lst:dmem_interface}, their datatype definitions can be found in the \inlinevhdl{lt16x32\_global} package.
The data memory interface must be able to handle simultaneous read and write accesses, as these are performed in different pipeline stages and can overlap.
This is good for memory transaction performance but introduces a high memory load.
\begin{vhdl}[Data Memory Interface]{lst:dmem_interface}
entity core is
port(
[...]
-- signals from data memory
in_dmem : in dmem_core;
-- signals to data memory
out_dmem : out core_dmem;
[...]
);
end entity core;
\end{vhdl}
\subsubsection{Read Access}
The read access to the data memory is similar to the instruction memory interface and a standard signal pattern is shown in Figure \ref{fig:signal_imem}.
\subsubsection{Write Access}
In a write access, data and address are supplied at the same time and should be copied to the memory at the rising clock edge if enable is active, see Figure \ref{fig:signal_dmem_write}.
\begin{figure}[htb]
\centering
\includegraphics[scale=1]{./figures/signal_dmem_write.pdf}
\caption{Signal Pattern for Data Memory Write}
\label{fig:signal_dmem_write}
\end{figure}
\subsection{Memory Bandwidth Solutions}
As mentioned before, the very liberal memory interface demands high memory bandwidth.
In a worst-case scenario three memory accesses are needed per clockcycle (instruction read, data read and data write).
\subsubsection{Instruction Alignment}
Fortunately this worst-case scenario can be avoided by clever instruction alignment.
As standard instructions are 16bit wide and the instruction memory is organized
in 32bit words the instruction memory must be read only once every two clock cycles\footnote{Branching may introduce additional read operations.}.
If memory access instructions are now aligned in such a way, that read/write actions are performed when the instruction memory is idle, a simple single data rate memory is sufficient.
An exemplatory signal pattern is shown in Figure \ref{fig:signal_mem_interlacing}.
Note, that the instruction memory enable must be asserted the whole time,
but the memory controller does not need to read the actual memory,
as the address is changed only every second clock cycle.
\begin{figure}[htb]
\centering
\includegraphics[scale=1]{./figures/signal_mem_interlacing.pdf}
\caption{Signal Pattern for Memory Interlacing}
\label{fig:signal_mem_interlacing}
\end{figure}
\subsubsection{Processor Stalling}
If instruction alignment is too cumbersome or the memory is too slow for any other reason, it can deassert the ready signal (\inlinevhdl{ready}) to the processor (per interface).
If \inlinevhdl{ready} is deasserted, the processor is stalled and waits for \inlinevhdl{ready} to become asserted again.
\section{Memory Mapped I/O}
\label{sec:memmappedio}
In the concept of memory mapped input/output (I/O), the processor core does not distinguish between data memory transactions and transactions with other kinds of devices.
Writing to special memory addresses (i.e. outside of the memory range) are forwarded to a device, reading from these addresses means accessing the device's registers.
The systems memory is defined as follows:
\begin{itemize}
\item The instruction memory starts at address zero, its length should be configured to a word boundary.\footnote{The default component uses is configured using a word count.}
\item The data memory starts after the instruction memory, its length is also configurable and should also end on a word boundary.
\item The address space of the peripheral components starts at address \verb=0x000F0000=
\end{itemize}
\section{Memory Controller}
\label{sec:memoryctrl}
A generic memory controller named \verb=dmem= is given.
It has a size of 256 bytes, sectioned in four 64 byte blocks with an access size of one byte.
The default configuration is that its base address is directly after the instruction memory.
It can and should be used to maintain the stack, as frequent accesses to the instruction memory can slow down the performance.
The content of the memory at startup is undefined, and should not be used without initialization.

998
documentation/minted.sty Normal file
View File

@@ -0,0 +1,998 @@
%%
%% This is file `minted.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% minted.dtx (with options: `package')
%% Copyright 2013--2014 Geoffrey M. Poore
%% Copyright 2010--2011 Konrad Rudolph
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
%% of this license or (at your option) any later version.
%% The latest version of this license is in
%% http://www.latex-project.org/lppl.txt
%% and version 1.3 or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
%%
%% Additionally, the project may be distributed under the terms of the new BSD
%% license.
%%
%% This work has the LPPL maintenance status `maintained'.
%%
%% The Current Maintainer of this work is Geoffrey Poore.
%%
%% This work consists of the files minted.dtx and minted.ins
%% and the derived file minted.sty.
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{minted}[2013/12/21 v2.0-alpha3 ]
\RequirePackage{keyval}
\RequirePackage{kvoptions}
\RequirePackage{fancyvrb}
\RequirePackage{float}
\RequirePackage{ifthen}
\RequirePackage{calc}
\RequirePackage{ifplatform}
\RequirePackage{pdftexcmds}
\RequirePackage{etoolbox}
\RequirePackage{xstring}
\RequirePackage{lineno}
\AtBeginDocument{\@ifpackageloaded{color}{}{\RequirePackage{xcolor}}}
\DeclareVoidOption{chapter}{\def\minted@float@within{chapter}}
\DeclareVoidOption{section}{\def\minted@float@within{section}}
\newboolean{minted@cache}
\DeclareVoidOption{cache}{%
\minted@cachetrue
\AtEndOfPackage{\ProvideDirectory{\minted@outputdir\minted@cachedir}}%
}
\StrSubstitute{\jobname}{ }{_}[\minted@jobname]
\StrSubstitute{\minted@jobname}{"}{}[\minted@jobname]
\StrSubstitute{\minted@jobname}{*}{-}[\minted@jobname]
\newcommand{\minted@cachedir}{.minted-\minted@jobname}
\let\minted@cachedir@windows\minted@cachedir
\define@key{minted}{cachedir}{%
\@namedef{minted@cachedir}{#1}%
\StrSubstitute{\minted@cachedir}{/}{\@backslashchar}[\minted@cachedir@windows]}
\let\minted@outputdir\@empty
\let\minted@outputdir@windows\@empty
\define@key{minted}{outputdir}{%
\@namedef{minted@outputdir}{#1/}%
\StrSubstitute{\minted@outputdir}{/}%
{\@backslashchar}[\minted@outputdir@windows]}
\newboolean{minted@langlinenos}
\DeclareVoidOption{langlinenos}{\minted@langlinenostrue}
\DeclareBoolOption{draft}
\ProcessKeyvalOptions*
\newcommand{\minted@infile}{\jobname.out.pyg}
\newcommand{\minted@cachefiles}{}
\newcommand{\minted@addcachefile}[1]{%
\expandafter\long\expandafter\gdef\expandafter\minted@cachefiles\expandafter{%
\minted@cachefiles,^^J%
\space\space#1}%
\expandafter\gdef\csname minted@current@#1\endcsname{}%
}
\newcommand{\minted@savecachefiles}{%
\immediate\write\@mainaux{%
\string\gdef\string\minted@oldcachefiles\string{%
\minted@cachefiles\string}}%
}
\newcommand{\minted@cleancache}{%
\ifthenelse{\boolean{minted@cache}}{%
\ifcsname minted@oldcachefiles\endcsname
\def\do##1{%
\ifthenelse{\equal{##1}{}}{}{%
\ifcsname minted@current@##1\endcsname\else
\DeleteFile[\minted@outputdir\minted@cachedir]{##1}%
\fi
}%
}%
\expandafter\docsvlist\expandafter{\minted@oldcachefiles}%
\else
\fi
}{}%
}
\ifthenelse{\boolean{minted@cache}}%
{\AtEndDocument{%
\ifthenelse{\boolean{minted@draft}}%
{\ifcsname minted@oldcachefiles\endcsname
\let\minted@cachefiles\minted@oldcachefiles
\minted@savecachefiles
\fi}%
{\minted@savecachefiles
\minted@cleancache}}%
}%
{}%
\ifwindows
\providecommand{\DeleteFile}[2][]{%
\ifthenelse{\equal{#1}{}}%
{\IfFileExists{#2}{\immediate\write18{del "#2"}}{}}%
{\IfFileExists{#1/#2}{%
\StrSubstitute{#1}{/}{\@backslashchar}[\minted@windir]
\immediate\write18{del "\minted@windir\@backslashchar #2"}}{}}}
\else
\providecommand{\DeleteFile}[2][]{%
\ifthenelse{\equal{#1}{}}%
{\IfFileExists{#2}{\immediate\write18{rm "#2"}}{}}%
{\IfFileExists{#1/#2}{\immediate\write18{rm "#1/#2"}}{}}}
\fi
\ifwindows
\newcommand{\ProvideDirectory}[1]{%
\StrSubstitute{#1}{/}{\@backslashchar}[\minted@windir]
\immediate\write18{if not exist "\minted@windir" mkdir "\minted@windir"}}
\else
\newcommand{\ProvideDirectory}[1]{%
\immediate\write18{mkdir -p "#1"}}
\fi
\newboolean{AppExists}
\newread\minted@appexistsfile
\newcommand{\TestAppExists}[1]{
\ifwindows
\DeleteFile{\jobname.aex}
\immediate\write18{for \string^\@percentchar i in (#1.exe #1.bat #1.cmd)
do set >\jobname.aex <nul: /p
x=\string^\@percentchar \string~$PATH:i>>\jobname.aex}
%$ <- balance syntax highlighting
\immediate\openin\minted@appexistsfile\jobname.aex
\expandafter\def\expandafter\@tmp@cr\expandafter{\the\endlinechar}
\endlinechar=-1\relax
\readline\minted@appexistsfile to \minted@apppathifexists
\endlinechar=\@tmp@cr
\ifthenelse{\equal{\minted@apppathifexists}{}}
{\AppExistsfalse}
{\AppExiststrue}
\immediate\closein\minted@appexistsfile
\DeleteFile{\jobname.aex}
\immediate\typeout{file deleted}
\else
\immediate\write18{which #1 && touch \jobname.aex}
\IfFileExists{\jobname.aex}
{\AppExiststrue
\DeleteFile{\jobname.aex}}
{\AppExistsfalse}
\fi
}
\newcommand{\minted@optg}{}
\let\minted@lang\@empty
\newcommand{\minted@optlang}{}
\newcommand{\minted@optcmd}{}
\newcommand{\minted@checklang}{%
\ifcsname minted@optlang\minted@lang\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang\endcsname{}%
\fi
\ifcsname minted@optlang\minted@lang @extra\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang @extra\endcsname{}%
\fi
}
\newcommand{\minted@resetoptcmd}{%
\@namedef{minted@optcmd@extra}{}%
\let\minted@optcmd@autogobble\relax}
\newcommand{\minted@getoptg}[1]{%
\expandafter\detokenize%
\expandafter\expandafter\expandafter{\csname minted@optg@#1\endcsname}}
\newcommand{\minted@getoptlang}[1]{%
\expandafter\detokenize\expandafter\expandafter\expandafter{%
\csname minted@optlang\minted@lang @#1\endcsname}}
\newcommand{\minted@getoptcmd}[1]{%
\expandafter\detokenize%
\expandafter\expandafter\expandafter{\csname minted@optcmd@#1\endcsname}}
\newcommand{\minted@regoptg}[1]{%
\ifcsname minted@optg@#1@reg\endcsname\else
\expandafter\let\csname minted@optg@#1@reg\endcsname\@empty
\expandafter\def\expandafter\minted@optg\expandafter{%
\minted@optg\space\minted@getoptg{#1}}%
\fi
}
\newcommand{\minted@regoptlang}[1]{%
\ifcsname minted@optlang\minted@lang @#1@reg\endcsname\else
\ifcsname minted@optlang\minted@lang\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang\endcsname{}%
\fi
\expandafter\let\csname minted@optlang\minted@lang @#1@reg\endcsname\@empty
\expandafter\let\expandafter\minted@optlang%
\csname minted@optlang\minted@lang\endcsname
\expandafter\def\expandafter\minted@optlang\expandafter{%
\minted@optlang\space\minted@getoptlang{#1}}%
\expandafter\let\csname minted@optlang\minted@lang\endcsname\minted@optlang
\let\minted@optlang\@empty
\fi
}
\newcommand{\minted@regoptcmd}[1]{%
\ifcsname minted@optcmd@#1@reg\endcsname\else
\expandafter\let\csname minted@optcmd@#1@reg\endcsname\@empty
\expandafter\def\expandafter\minted@optcmd\expandafter{%
\minted@optcmd\space\minted@getoptcmd{#1}}%
\expandafter\def\expandafter\minted@resetoptcmd\expandafter{%
\minted@resetoptcmd
\@namedef{minted@optcmd@#1}{}}%
\fi
}
\newcommand{\minted@define@opt}[4][]{%
\ifthenelse{\equal{#1}{}}%
{\define@key{minted@optg}{#2}{\@namedef{minted@optg@#2}{#3=#4}%
\@namedef{minted@optg@#2@val}{#4}%
\minted@regoptg{#2}}%
\define@key{minted@optlang}{#2}{%
\@namedef{minted@optlang\minted@lang @#2}{#3=#4}%
\@namedef{minted@optlang\minted@lang @#2@val}{#4}%
\minted@regoptlang{#2}}%
\define@key{minted@optcmd}{#2}{\@namedef{minted@optcmd@#2}{#3=#4}%
\@namedef{minted@optcmd@#2@val}{#4}%
\minted@regoptcmd{#2}}}%
{\define@key{minted@optg}{#2}[#1]{\@namedef{minted@optg@#2}{#3=#4}%
\@namedef{minted@optg@#2@val}{#4}%
\minted@regoptg{#2}}%
\define@key{minted@optlang}{#2}[#1]{%
\@namedef{minted@optlang\minted@lang @#2}{#3=#4}%
\@namedef{minted@optlang\minted@lang @#2@val}{#4}%
\minted@regoptlang{#2}}%
\define@key{minted@optcmd}{#2}[#1]{\@namedef{minted@optcmd@#2}{#3=#4}%
\@namedef{minted@optcmd@#2@val}{#4}%
\minted@regoptcmd{#2}}}%
}
\newcommand{\minted@namexdef}[1]{\expandafter\xdef\csname #1\endcsname}
\edef\minted@hashchar{\string#}
\edef\minted@lbracechar{\string{}
\edef\minted@rbracechar{\string}}
\edef\minted@dollarchar{\string$}
\edef\minted@ampchar{\string&}
\edef\minted@uscorechar{\string_}
\newcommand{\minted@bechar}{%
\begingroup
\let\#\minted@hashchar
\let\%\@percentchar
\let\{\minted@lbracechar
\let\}\minted@rbracechar
\let\$\minted@dollarchar
\let\&\minted@ampchar
\let\_\minted@uscorechar
}
\newcommand{\minted@eechar}{\endgroup}
\newcommand{\minted@define@opt@escchar}[4][]{%
\ifthenelse{\equal{#1}{}}%
{\define@key{minted@optg}{#2}{\minted@bechar%
\minted@namexdef{minted@optg@#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optg@#2@val}{#4}%
\minted@regoptg{#2}}%
\define@key{minted@optlang}{#2}{%
\minted@bechar%
\minted@namexdef{minted@optlang\minted@lang @#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optlang\minted@lang @#2@val}{#4}%
\minted@regoptlang{#2}}%
\define@key{minted@optcmd}{#2}{\minted@bechar%
\minted@namexdef{minted@optcmd@#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optcmd@#2@val}{#4}%
\minted@regoptcmd{#2}}}%
{\define@key{minted@optg}{#2}[#1]{\minted@bechar%
\minted@namexdef{minted@optg@#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optg@#2@val}{#4}%
\minted@regoptg{#2}}%
\define@key{minted@optlang}{#2}[#1]{%
\minted@bechar%
\minted@namexdef{minted@optlang\minted@lang @#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optlang\minted@lang @#2@val}{#4}%
\minted@regoptlang{#2}}%
\define@key{minted@optcmd}{#2}[#1]{\minted@bechar%
\minted@namexdef{minted@optcmd@#2}{#3=#4}%
\minted@eechar%
\@namedef{minted@optcmd@#2@val}{#4}%
\minted@regoptcmd{#2}}}%
}
\newcommand{\minted@define@optstyle}{%
\define@key{minted@optg}{style}{%
\@namedef{minted@optg@style}{-P style=##1 -P commandprefix=PYG##1}%
\minted@regoptg{style}\minted@regstyle{##1}}%
\define@key{minted@optlang}{style}{%
\@namedef{minted@optlang\minted@lang @style}%
{-P style=##1 -P commandprefix=PYG##1}%
\minted@regoptlang{style}\minted@regstyle{##1}}%
\define@key{minted@optcmd}{style}{%
\@namedef{minted@optcmd@style}{-P style=##1 -P commandprefix=PYG##1}%
\minted@regoptcmd{style}\minted@regstyle{##1}}%
}
\newcommand{\minted@patchZsq}[1]{%
\ifx\upquote@cmtt\minted@undefined\else
\ifx\encodingdefault\upquote@OTone
\ifx\ttdefault\upquote@cmtt
\expandafter\ifdefstring\expandafter{\csname PYG#1Zsq\endcsname}{\char`\'}%
{\expandafter\gdef\csname PYG#1Zsq\endcsname{\char13 }}{}%
\else
\expandafter\ifdefstring\expandafter{\csname PYG#1Zsq\endcsname}{\char`\'}%
{\expandafter\gdef\csname PYG#1Zsq\endcsname{\textquotesingle}}{}%
\fi
\else
\expandafter\ifdefstring\expandafter{\csname PYG#1Zsq\endcsname}{\char`\'}%
{\expandafter\gdef\csname PYG#1Zsq\endcsname{\textquotesingle}}{}%
\fi
\fi
}
\newcommand{\minted@regstyle}[1]{%
\ifcsname minted@stylereg@#1\endcsname\else
\expandafter\global\expandafter%
\let\csname minted@stylereg@#1\endcsname\@empty
\ifthenelse{\boolean{minted@cache}}%
{\IfFileExists{\minted@outputdir\minted@cachedir/#1.pygstyle}{}{%
\ifwindows
\immediate\write18{\MintedPygmentize\space -S #1 -f latex
-P commandprefix=PYG#1
> "\minted@outputdir@windows\minted@cachedir@windows\@backslashchar#1.pygstyle"}%
\else
\immediate\write18{\MintedPygmentize\space -S #1 -f latex
-P commandprefix=PYG#1
> "\minted@outputdir\minted@cachedir/#1.pygstyle"}%
\fi
}%
\begingroup
\let\def\gdef
\endlinechar=-1\relax
\input{\minted@outputdir\minted@cachedir/#1.pygstyle}%
\endgroup
\minted@addcachefile{#1.pygstyle}}%
{\ifwindows
\immediate\write18{\MintedPygmentize\space -S #1 -f latex
-P commandprefix=PYG#1 > "\minted@outputdir@windows\jobname.out.pyg"}%
\else
\immediate\write18{\MintedPygmentize\space -S #1 -f latex
-P commandprefix=PYG#1 > "\minted@outputdir\jobname.out.pyg"}%
\fi
\begingroup
\let\def\gdef
\endlinechar=-1\relax
\input{\minted@outputdir\jobname.out.pyg}%
\endgroup}%
\ifx\@onlypreamble\@notprerr
\minted@patchZsq{#1}%
\else
\minted@patchZsq{#1}%
\AtBeginDocument{\minted@patchZsq{#1}}%
\fi
\fi
}
\ifthenelse{\boolean{minted@draft}}{\renewcommand{\minted@regstyle}[1]{}}{}
\newcommand{\minted@define@switch}[3][]{
\define@booleankey{minted@optg}{#2}
{\@namedef{minted@optg@#2}{#3}\minted@regoptg{#2}}
{\@namedef{minted@optg@#2}{#1}\minted@regoptg{#2}}
\define@booleankey{minted@optlang}{#2}
{\@namedef{minted@optlang\minted@lang @#2}{#3}\minted@regoptlang{#2}}
{\@namedef{minted@optlang\minted@lang @#2}{#1}\minted@regoptlang{#2}}
\define@booleankey{minted@optcmd}{#2}
{\@namedef{minted@optcmd@#2}{#3}\minted@regoptcmd{#2}}
{\@namedef{minted@optcmd@#2}{#1}\minted@regoptcmd{#2}}
}
\newcommand{\minted@define@extra}[1]{
\define@key{minted@optg}{#1}{%
\expandafter\def\expandafter\minted@optg@extra\expandafter{%
\minted@optg@extra,#1=##1}}
\@namedef{minted@optg@extra}{}
\define@key{minted@optlang}{#1}{%
\ifcsname minted@optlang\minted@lang @extra\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang @extra\endcsname{}%
\fi
\expandafter\let\expandafter\minted@optlang@extra%
\csname minted@optlang\minted@lang @extra \endcsname
\expandafter\def\expandafter\minted@optlang@extra\expandafter{%
\minted@optlang@extra,#1=##1}%
\expandafter\let\csname minted@optlang\minted@lang @extra\endcsname%
\minted@optlang@extra
\let\minted@optlang@extra\@empty}%
\@namedef{minted@optlang@extra}{}
\define@key{minted@optcmd}{#1}{%
\expandafter\def\expandafter\minted@optcmd@extra\expandafter{%
\minted@optcmd@extra,#1=##1}}
\@namedef{minted@optcmd@extra}{}
}
\newcommand{\minted@define@extra@switch}[1]{
\define@booleankey{minted@optg}{#1}
{\expandafter\def\expandafter\minted@optg@extra\expandafter{%
\minted@optg@extra,#1}}
{\expandafter\def\expandafter\minted@optg@extra\expandafter{%
\minted@optg@extra,#1=false}}
\define@booleankey{minted@optlang}{#1}
{%
\ifcsname minted@optlang\minted@lang @extra\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang @extra\endcsname{}%
\fi
\expandafter\let\expandafter\minted@optlang@extra%
\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\def\expandafter\minted@optlang@extra\expandafter{%
\minted@optlang@extra,#1}%
\expandafter\let\csname minted@optlang\minted@lang @extra\endcsname%
\minted@optlang@extra
\let\minted@optlang@extra\@empty}
{%
\ifcsname minted@optlang\minted@lang @extra\endcsname\else
\expandafter\def\csname minted@optlang\minted@lang @extra\endcsname{}%
\fi
\expandafter\let\expandafter\minted@optlang@extra%
\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\def\expandafter\minted@optlang@extra\expandafter{%
\minted@optlang@extra,#1=false}%
\expandafter\let\csname minted@optlang\minted@lang @extra\endcsname%
\minted@optlang@extra
\let\minted@optlang@extra\@empty}
\define@booleankey{minted@optcmd}{#1}
{\expandafter\def\expandafter\minted@optcmd@extra\expandafter{%
\minted@optcmd@extra,#1}}
{\expandafter\def\expandafter\minted@optcmd@extra\expandafter{%
\minted@optcmd@extra,#1=false}}
}
\minted@define@opt{encoding}{-P encoding}{#1}
\minted@define@opt{outencoding}{-P outencoding}{#1}
\minted@define@opt@escchar{escapeinside}{-O escapeinside}{"#1"}
\minted@define@opt{stripnl}{-P stripnl}{#1}
\minted@define@switch[-P python3=False]{python3}{-P python3=True}
\minted@define@switch[-P funcnamehighlighting=False]%
{funcnamehighlighting}{-P funcnamehighlighting}
\minted@define@switch[-P startinline=False]{startinline}{-P startinline}
\ifthenelse{\boolean{minted@draft}}%
{\minted@define@extra{gobble}}%
{\minted@define@opt{gobble}{-F gobble:n}{#1}}
\minted@define@opt{codetagify}{-F codetagify:codetags}{#1}
\minted@define@opt{keywordcase}{-F keywordcase:case}{#1}
\minted@define@switch[-P texcomments=False]{texcl}{-P texcomments}
\minted@define@switch[-P texcomments=False]{texcomments}{-P texcomments}
\minted@define@switch[-P mathescape=False]{mathescape}{-P mathescape}
\ifthenelse{\boolean{minted@draft}}%
{\define@booleankey{FV}{linenos}{\@nameuse{FV@Numbers@left}}{\@nameuse{FV@Numbers@none}}%
\minted@define@extra@switch{linenos}}%
{\minted@define@switch[-P linenos=False]{linenos}{-P linenos}}
\minted@define@optstyle
\minted@define@extra{frame}
\minted@define@extra{framesep}
\minted@define@extra{framerule}
\minted@define@extra{rulecolor}
\minted@define@extra{numbersep}
\minted@define@extra{numbers}
\minted@define@extra{firstnumber}
\minted@define@extra{stepnumber}
\minted@define@extra{firstline}
\minted@define@extra{lastline}
\minted@define@extra{baselinestretch}
\minted@define@extra{xleftmargin}
\minted@define@extra{xrightmargin}
\minted@define@extra{fillcolor}
\minted@define@extra{tabsize}
\minted@define@extra{fontfamily}
\minted@define@extra{fontsize}
\minted@define@extra{fontshape}
\minted@define@extra{fontseries}
\minted@define@extra{formatcom}
\minted@define@extra{label}
\minted@define@extra@switch{numberblanklines}
\minted@define@extra@switch{showspaces}
\minted@define@extra@switch{resetmargins}
\minted@define@extra@switch{samepage}
\minted@define@extra@switch{showtabs}
\minted@define@extra@switch{obeytabs}
\minted@define@extra@switch{breaklines}
\minted@define@extra@switch{breakbytoken}
\minted@define@extra{breakindent}
\minted@define@extra@switch{breakautoindent}
\minted@define@extra{breaksymbol}
\minted@define@extra{breaksymbolsep}
\minted@define@extra{breaksymbolindent}
\let\minted@optcmd@bgcolor\@empty
\define@key{minted@optcmd}{bgcolor}{\@namedef{minted@optcmd@bgcolor}{#1}}
\newcommand{\minted@encoding}{%
\ifcsname minted@optcmd@encoding@val\endcsname
\csname minted@optcmd@encoding@val\endcsname
\else
\ifcsname minted@optlang\minted@lang @encoding@val\endcsname
\csname minted@optlang\minted@lang @encoding@val\endcsname
\else
\ifcsname minted@optg@encoding@val\endcsname
\csname minted@optg@encoding@val\endcsname
\else
UTF8%
\fi
\fi
\fi
}
\define@booleankey{minted@optg}{autogobble}
{\expandafter\let\csname minted@optg@autogobble\endcsname\@empty}
{\expandafter\let\csname minted@optg@autogobble\endcsname\relax}
\define@booleankey{minted@optlang}{autogobble}
{\expandafter\let\csname minted@optlang\minted@lang @autogobble\endcsname\@empty}
{\expandafter\let\csname minted@optlang\minted@lang @autogobble\endcsname\relax}
\define@booleankey{minted@optcmd}{autogobble}
{\expandafter\let\csname minted@optcmd@autogobble\endcsname\@empty}
{\expandafter\let\csname minted@optcmd@autogobble\endcsname\relax}
\newboolean{minted@autogobble}
\newcommand{\minted@set@autogobble}{%
\ifcsname minted@optg@autogobble\endcsname\else
\expandafter\let\csname minted@optg@autogobble\endcsname\relax
\fi
\ifcsname minted@optlang\minted@lang @autogobble\endcsname\else
\expandafter\let\csname minted@optlang\minted@lang @autogobble\endcsname\relax
\fi
\ifcsname minted@optcmd@autogobble\endcsname\else
\expandafter\let\csname minted@optcmd@autogobble\endcsname\relax
\fi
\expandafter\ifx\csname minted@optcmd@autogobble\endcsname\@empty
\setboolean{minted@autogobble}{true}%
\else
\expandafter\ifx\csname minted@optlang\minted@lang @autogobble\endcsname\@empty
\setboolean{minted@autogobble}{true}%
\else
\expandafter\ifx\csname minted@optg@autogobble\endcsname\@empty
\setboolean{minted@autogobble}{true}%
\else
\setboolean{minted@autogobble}{false}%
\fi
\fi
\fi
}
\let\FV@ListProcessLine@Orig\FV@ListProcessLine
\define@booleankey{FV}{breaklines}%
{\let\FV@ListProcessLine\FV@ListProcessLine@Break}%
{\let\FV@ListProcessLine\FV@ListProcessLine@Orig}
\define@booleankey{FV}{breakbytoken}%
{\let\minted@pyghook\minted@pyghook@breakbytoken}%
{\let\minted@pyghook\minted@pyghook@null}
\newdimen\FV@BreakIndent
\define@key{FV}{breakindent}{\FV@BreakIndent=#1}
\fvset{breakindent=0pt}
\newboolean{FV@BreakAutoIndent}
\define@booleankey{FV}{breakautoindent}%
{\FV@BreakAutoIndenttrue}{\FV@BreakAutoIndentfalse}
\fvset{breakautoindent=true}
\define@key{FV}{breaksymbol}{\def\FancyVerbBreakSymbol{#1}}
\fvset{breaksymbol=\ensuremath{\hookrightarrow}}
\newdimen\FV@BreakSymbolSep
\define@key{FV}{breaksymbolsep}{\FV@BreakSymbolSep=#1}
\fvset{breaksymbolsep=10pt}
\newdimen\FV@BreakSymbolIndent
\settowidth{\FV@BreakSymbolIndent}{\ttfamily xxxx}
\define@key{FV}{breaksymbolindent}{\FV@BreakSymbolIndent=#1}
\newsavebox{\FV@LineBox}
\newsavebox{\FV@IndentBox}
\newsavebox{\FV@LinenoBox}
\let\FV@LineIndentChars\@empty
\def\FV@GetNextChar{\let\FV@NextChar=}
\def\FV@CleanRemainingChars#1\FV@Undefined{}
\def\FV@GetLineIndent{\afterassignment\FV@CheckChar\FV@GetNextChar}
\def\FV@CheckChar{%
\ifx\FV@NextChar\FV@Undefined
\let\FV@Next=\relax
\else
\expandafter\ifx\FV@NextChar\FV@Space
\g@addto@macro{\FV@LineIndentChars}{\FV@Space}%
\let\FV@Next=\FV@GetLineIndent
\else
\expandafter\ifx\FV@NextChar\FV@Tab
\g@addto@macro{\FV@LineIndentChars}{\FV@Tab}%
\let\FV@Next=\FV@GetLineIndent
\else
\let\FV@Next=\FV@CleanRemainingChars
\fi
\fi
\fi
\FV@Next
}
\newcommand{\FancyVerbFormatBreakSymbol}{%
\ifnum\value{linenumber}=1\relax\else\FancyVerbBreakSymbol\fi}%
\AtBeginEnvironment{Verbatim}{\lineskip=0pt\xdef\FV@theprevdepth{0pt}}
\def\FV@ListProcessLine@Break#1{%
\hbox to \hsize{%
\kern\leftmargin
\hbox to \linewidth{%
\sbox{\FV@LineBox}{\FancyVerbFormatLine{#1}}%
\ifdim\wd\FV@LineBox>\linewidth
\let\FV@theprevdepth@temp\FV@theprevdepth
\savebox{\FV@LineBox}{%
\begingroup
\vbox{\hsize=\linewidth
\raggedright
\prevdepth\FV@theprevdepth
\leftlinenumbers*
\setcounter{linenumber}{1}%
\let\thelinenumber\FancyVerbFormatBreakSymbol
\begin{internallinenumbers}%
\linenumbersep=\FV@BreakSymbolSep
\advance\hsize by -\FV@BreakIndent
\advance\linewidth by -\FV@BreakIndent
\noindent\hspace*{-\FV@BreakIndent}%
\ifdefempty{\FancyVerbBreakSymbol}{}{%
\advance\hsize by -\FV@BreakSymbolIndent
\advance\linewidth by -\FV@BreakSymbolIndent
\hspace*{-\FV@BreakSymbolIndent}}%
\ifthenelse{\boolean{FV@BreakAutoIndent}}%
{\let\FV@LineIndentChars\@empty
\FV@GetLineIndent#1\FV@Undefined
\savebox{\FV@IndentBox}{\FV@LineIndentChars}%
\advance\hsize by -\wd\FV@IndentBox
\advance\linewidth by -\wd\FV@IndentBox
\hspace*{-\wd\FV@IndentBox}%
}{}%
\FancyVerbFormatLine{#1}%
\end{internallinenumbers}%
\par\xdef\FV@theprevdepth{\the\prevdepth}}%
\endgroup
}%
\savebox{\FV@LinenoBox}{\FV@LeftListNumber}%
\vbox to\ht\FV@LineBox{%
\prevdepth\FV@theprevdepth@temp\FV@LeftListNumber\vfill}%
\FV@LeftListFrame
\null\hfill\usebox{\FV@LineBox}\hss
\FV@RightListFrame
\vbox to\ht\FV@LineBox{%
\prevdepth\FV@theprevdepth@temp\FV@RightListNumber\vfill}%
\else
\FV@LeftListNumber
\FV@LeftListFrame
\vbox{\hsize=\linewidth
\prevdepth\FV@theprevdepth
\noindent\FancyVerbFormatLine{#1}%
\par\xdef\FV@theprevdepth{\the\prevdepth}}\hss
\FV@RightListFrame
\FV@RightListNumber
\fi}%
\hss}}
\newsavebox{\minted@bgbox}
\newenvironment{minted@colorbg}[1]{
%\setlength{\fboxsep}{-\fboxrule}
\def\minted@bgcol{#1}
\noindent
\begin{lrbox}{\minted@bgbox}
\begin{minipage}{\linewidth-2\fboxsep}}
{\end{minipage}
\end{lrbox}%
\colorbox{\minted@bgcol}{\usebox{\minted@bgbox}}}
\newwrite\minted@code
\newcommand{\minted@savecode}[1]{
\immediate\openout\minted@code\jobname.pyg\relax
\immediate\write\minted@code{\expandafter\detokenize\expandafter{#1}}%
\immediate\closeout\minted@code}
\newcommand{\minted@write@detok}[1]{%
\immediate\write\FV@OutFile{\detokenize{#1}}}
\newcommand{\minted@FVB@VerbatimOut}[1]{%
\@bsphack
\begingroup
\FV@UseKeyValues
\FV@DefineWhiteSpace
\def\FV@Space{\space}%
\FV@DefineTabOut
\let\FV@ProcessLine\minted@write@detok
\immediate\openout\FV@OutFile #1\relax
\let\FV@FontScanPrep\relax
\let\@noligs\relax
\FV@Scan}
\newcommand{\MintedPygmentize}{pygmentize}
\newcommand{\minted@pygmentize}[2][\jobname.pyg]{%
\minted@checklang
\minted@set@autogobble
\ifthenelse{\boolean{minted@autogobble}}%
{\def\minted@codefile{\jobname.pyg}}%
{\def\minted@codefile{#1}}%
\def\minted@cmd{\MintedPygmentize\space -l #2
-f latex -F tokenmerge
\minted@optg \space \csname minted@optlang\minted@lang\endcsname
\space \minted@optcmd \space -P "verboptions=\minted@getoptg{extra}%
\minted@getoptlang{extra}\minted@getoptcmd{extra}"
-o "\minted@outputdir\minted@infile" \space
"\minted@outputdir\minted@codefile"}%
% For debugging, uncomment: %%%%
% \immediate\typeout{\minted@cmd}%
% %%%%
\ifthenelse{\boolean{minted@cache}}%
{%
\ifx\XeTeXinterchartoks\minted@undefined
\ifthenelse{\boolean{minted@autogobble}}%
{\edef\minted@hash{\pdf@filemdfivesum{#1}%
\pdf@mdfivesum{\minted@cmd autogobble}}}%
{\edef\minted@hash{\pdf@filemdfivesum{#1}%
\pdf@mdfivesum{\minted@cmd}}}%
\else
\immediate\openout\minted@code\jobname.mintedcmd\relax
\immediate\write\minted@code{\minted@cmd}%
\ifthenelse{\boolean{minted@autogobble}}%
{\immediate\write\minted@code{autogobble}}{}%
\immediate\closeout\minted@code
%Cheating a little here by using ASCII codes to write `{` and `}`
%in the Python code
\def\minted@hashcmd{%
\detokenize{python -c "import hashlib;
hasher = hashlib.sha1();
f = open(\"}\minted@outputdir\jobname.mintedcmd\detokenize{\", \"rb\");
hasher.update(f.read());
f.close();
f = open(\"}\minted@outputdir#1\detokenize{\", \"rb\");
hasher.update(f.read());
f.close();
f = open(\"}\minted@outputdir\jobname.mintedmd5\detokenize{\", \"w\");
macro = \"\\edef\\minted@hash\" + chr(123) + hasher.hexdigest() + chr(125) + \"\";
f.write(\"\\makeatletter\" + macro + \"\\makeatother\\endinput\n\");
f.close();"}}%
\immediate\write18{\minted@hashcmd}%
\input{\minted@outputdir\jobname.mintedmd5}%
\fi
\ifwindows
\edef\minted@infile{%
\minted@cachedir@windows\@backslashchar\minted@hash.pygtex}%
\else
\edef\minted@infile{%
\minted@cachedir/\minted@hash.pygtex}%
\fi
\IfFileExists{\minted@cachedir/\minted@hash.pygtex}{}{%
\ifthenelse{\boolean{minted@autogobble}}{%
%Need a version of open() that supports encoding under Python 2
\edef\minted@autogobblecmd{%
\detokenize{python -c "import sys;
import textwrap;
from io import open;
f = open(\"}\minted@outputdir#1\detokenize{\", \"r\", encoding=\"}\minted@encoding\detokenize{\");
t = f.read();
f.close();
f = open(\"}\minted@outputdir\jobname.pyg\detokenize{\", \"w\", encoding=\"}\minted@encoding\detokenize{\");
f.write(textwrap.dedent(t));
f.close();"}%
}%
\immediate\write18{\minted@autogobblecmd}}{}%
\immediate\write18{\minted@cmd}}%
\expandafter\minted@addcachefile\expandafter{\minted@hash.pygtex}%
\minted@inputpyg}%
{%
\ifthenelse{\boolean{minted@autogobble}}{%
%Need a version of open() that supports encoding under Python 2
\edef\minted@autogobblecmd{%
\detokenize{python -c "import sys;
import textwrap;
from io import open;
f = open(\"}\minted@outputdir#1\detokenize{\", \"r\", encoding=\"}\minted@encoding\detokenize{\");
t = f.read();
f.close();
f = open(\"}\minted@outputdir\jobname.pyg\detokenize{\", \"w\", encoding=\"}\minted@encoding\detokenize{\");
f.write(textwrap.dedent(t));
f.close();"}%
}%
\immediate\write18{\minted@autogobblecmd}}{}%
\immediate\write18{\minted@cmd}%
\minted@inputpyg}%
}
\newcommand{\minted@inputpyg}{%
\ifthenelse{\equal{\minted@optcmd@bgcolor}{}}%
{}%
{\begin{minted@colorbg}{\minted@optcmd@bgcolor}}%
\input{\minted@outputdir\minted@infile}%
\ifthenelse{\equal{\minted@optcmd@bgcolor}{}}%
{}%
{\end{minted@colorbg}}%
}
\newcounter{minted@FancyVerbLineTemp}
\newcommand{\minted@langlinenoson}{%
\ifcsname c@minted@lang\minted@lang\endcsname\else
\newcounter{minted@lang\minted@lang}%
\fi
\setcounter{minted@FancyVerbLineTemp}{\value{FancyVerbLine}}%
\setcounter{FancyVerbLine}{\value{minted@lang\minted@lang}}%
}
\newcommand{\minted@langlinenosoff}{%
\setcounter{minted@lang\minted@lang}{\value{FancyVerbLine}}%
\setcounter{FancyVerbLine}{\value{minted@FancyVerbLineTemp}}%
}
\ifthenelse{\boolean{minted@langlinenos}}{}{%
\let\minted@langlinenoson\relax
\let\minted@langlinenosoff\relax
}
\newcommand{\setminted}[2][]{%
\ifthenelse{\equal{#1}{}}%
{\setkeys{minted@optg}{#2}}%
{\def\minted@lang{#1}\setkeys{minted@optlang}{#2}}%
}
\newcommand{\usemintedstyle}[2][]{\setminted[#1]{style=#2}}
\newrobustcmd{\mintinline}[2][]{%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\def\minted@lang{#2}%
\begingroup
\let\do\@makeother\dospecials
\catcode`\{=1
\catcode`\}=2
\catcode`\^^I=\active
\@ifnextchar\bgroup
{\minted@inline@iii}%
{\catcode`\{=12\catcode`\}=12
\minted@inline@i}}
\def\minted@inline@i#1{%
\endgroup
\def\minted@inline@ii##1#1{%
\minted@inline@iii{##1}}%
\begingroup
\let\do\@makeother\dospecials
\minted@inline@ii}
\ifthenelse{\boolean{minted@draft}}%
{\newcommand{\minted@inline@iii}[1]{%
\endgroup
\def\minted@argretok{%
\begingroup
\everyeof{\noexpand}%
\endlinechar-1\relax
\let\do\@makeother\dospecials
\catcode`\ =\active
\catcode`\^^I=\active
\scantokens{#1}%
\endgroup}%
\begingroup
\expandafter\fvset\expandafter{\minted@optg@extra}%
\minted@checklang
\expandafter\let\expandafter\minted@optlang@extra\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\fvset\expandafter{\minted@optlang@extra}%
\expandafter\fvset\expandafter{\minted@optcmd@extra}%
\FV@BeginVBox
\frenchspacing
\FV@SetupFont
\FV@DefineWhiteSpace
\FancyVerbDefineActive
\FancyVerbFormatCom
\FV@ObeyTabsInit
\hbox{\FancyVerbFormatLine{\minted@argretok}}%
\FV@EndVBox
\endgroup}}%
{\newcommand{\minted@inline@iii}[1]{%
\endgroup
\immediate\openout\minted@code\jobname.pyg\relax
\immediate\write\minted@code{\detokenize{#1}}%
\immediate\closeout\minted@code
\begingroup
\RecustomVerbatimEnvironment{Verbatim}{BVerbatim}{}%
\minted@pygmentize{\minted@lang}%
\endgroup}}
\ifthenelse{\boolean{minted@draft}}%
{\newcommand{\mint}[3][]{%
\def\minted@lang{#2}%
\DefineShortVerb{#3}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\minted@langlinenoson
\begingroup
\expandafter\fvset\expandafter{\minted@optg@extra}%
\minted@checklang
\expandafter\let\expandafter\minted@optlang@extra\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\fvset\expandafter{\minted@optlang@extra}%
\expandafter\fvset\expandafter{\minted@optcmd@extra}%
\SaveVerb[aftersave={%
\UndefineShortVerb{#3}%
\let\FV@Line\FV@SV@minted@verb
\FV@VerbatimBegin\FV@PreProcessLine\FV@VerbatimEnd
\endgroup
\UndefineShortVerb{#3}%
\minted@langlinenosoff
\@doendpe\global\@ignorefalse\ignorespaces}]{minted@verb}#3}}%
{\newcommand{\mint}[3][]{%
\def\minted@lang{#2}%
\DefineShortVerb{#3}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\SaveVerb[aftersave={%
\UndefineShortVerb{#3}%
\minted@langlinenoson
\minted@savecode{\FV@SV@minted@verb}%
\minted@pygmentize{#2}%
\minted@langlinenosoff}]{minted@verb}#3}}
\ifthenelse{\boolean{minted@draft}}%
{\newenvironment{minted}[2][]
{\VerbatimEnvironment
\let\FVB@VerbatimOut\minted@FVB@VerbatimOut
\def\minted@lang{#2}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\expandafter\fvset\expandafter{\minted@optg@extra}%
\minted@checklang
\expandafter\let\expandafter\minted@optlang@extra\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\fvset\expandafter{\minted@optlang@extra}%
\expandafter\fvset\expandafter{\minted@optcmd@extra}%
\minted@langlinenoson
\begin{Verbatim}}%
{\end{Verbatim}%
\minted@langlinenosoff}}%
{\newenvironment{minted}[2][]
{\VerbatimEnvironment
\let\FVB@VerbatimOut\minted@FVB@VerbatimOut
\def\minted@lang{#2}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\begin{VerbatimOut}[codes={\catcode`\^^I=12}]{\jobname.pyg}}%
{\end{VerbatimOut}%
\minted@langlinenoson
\minted@pygmentize{\minted@lang}%
\minted@langlinenosoff}}
\ifthenelse{\boolean{minted@draft}}%
{\newcommand{\inputminted}[3][]{%
\def\minted@lang{#2}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\begingroup
\expandafter\fvset\expandafter{\minted@optg@extra}%
\minted@checklang
\expandafter\let\expandafter\minted@optlang@extra\csname minted@optlang\minted@lang @extra\endcsname
\expandafter\fvset\expandafter{\minted@optlang@extra}%
\expandafter\fvset\expandafter{\minted@optcmd@extra}%
\VerbatimInput{#3}%
\endgroup}}%
{\newcommand{\inputminted}[3][]{%
\def\minted@lang{#2}%
\minted@resetoptcmd
\setkeys{minted@optcmd}{#1}%
\minted@pygmentize[#3]{#2}}}
\newcommand{\newminted}[3][]{
\ifthenelse{\equal{#1}{}}
{\def\minted@envname{#2code}}
{\def\minted@envname{#1}}
\newenvironment{\minted@envname}
{\VerbatimEnvironment
\begin{minted}[#3]{#2}}
{\end{minted}}
\newenvironment{\minted@envname *}[1]
{\VerbatimEnvironment\begin{minted}[#3,##1]{#2}}
{\end{minted}}}
\newcommand{\newmint}[3][]{
\ifthenelse{\equal{#1}{}}
{\def\minted@shortname{#2}}
{\def\minted@shortname{#1}}
\expandafter\newcommand\csname\minted@shortname\endcsname[2][]{
\mint[#3,##1]{#2}##2}}
\newcommand{\newmintedfile}[3][]{
\ifthenelse{\equal{#1}{}}
{\def\minted@shortname{#2file}}
{\def\minted@shortname{#1}}
\expandafter\newcommand\csname\minted@shortname\endcsname[2][]{
\inputminted[#3,##1]{#2}{##2}}}
\newcommand{\newmintinline}[3][]{%
\ifthenelse{\equal{#1}{}}%
{\def\minted@shortname{#2inline}}%
{\def\minted@shortname{#1}}%
\expandafter\newrobustcmd\csname\minted@shortname\endcsname{%
\begingroup
\let\do\@makeother\dospecials
\catcode`\{=1
\catcode`\}=2
\@ifnextchar[{\endgroup\minted@inliner[#3][#2]}%
{\endgroup\minted@inliner[#3][#2][]}}%
\def\minted@inliner[##1][##2][##3]{\mintinline[##1,##3]{##2}}%
}
\@ifundefined{minted@float@within}
{\newfloat{listing}{h}{lol}}
{\newfloat{listing}{h}{lol}[\minted@float@within]}
\newcommand{\listingscaption}{Listing}
\floatname{listing}{\listingscaption}
\newcommand{\listoflistingscaption}{List of listings}
\providecommand{\listoflistings}{\listof{listing}{\listoflistingscaption}}
\AtEndOfPackage{%
\ifthenelse{\boolean{minted@draft}}{}{%
\ifnum\pdf@shellescape=1\relax\else
\PackageError{minted}%
{You must invoke LaTeX with the
-shell-escape flag}%
{Pass the -shell-escape flag to LaTeX. Refer to the minted.sty
documentation for more information.}%
\fi
\TestAppExists{pygmentize}
\ifAppExists\else
\PackageError{minted}%
{You must have `pygmentize' installed
to use this package}%
{Refer to the installation instructions in the minted
documentation for more information.}%
\fi
\setminted{style=default}%
}%
}
\AtEndDocument{
\ifx\XeTeXinterchartoks\minted@undefined
\else
\DeleteFile[\minted@outputdir]{\jobname.mintedcmd}%
\DeleteFile[\minted@outputdir]{\jobname.mintedmd5}%
\fi
\DeleteFile[\minted@outputdir]{\jobname.pyg}%
\DeleteFile[\minted@outputdir]{\jobname.out.pyg}%
}
%% \Finale
\endinput
%%
%% End of file `minted.sty'.

167
documentation/soc.tex Normal file
View File

@@ -0,0 +1,167 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% To make formatting easy tell LaTeX what kind of document you want to write
% by changing the according {} to {#1}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Which language do you want to write in
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%English
\newcommand{\EN}[1]{#1}
%German
\newcommand{\DE}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% For print single or double page?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newcommand{\single}[1]{#1}
\newcommand{\double}[1]{}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now this is followed by a lot of page and command definitions. For the beginning you
% should be able to continue where you find the next comment section like this one.
% However, you might want to take a look a the definitions sometime to be able to use
% them. Of course you can also add the defintions you needed yourself.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\single{\documentclass[12pt,a4paper,oneside,english]{book}}
\double{\documentclass[12pt,a4paper,twoside,english]{book}}
\usepackage[english]{babel}
%\usepackage[draft,breaklinks=true,colorlinks=false,dvips,bookmarks,pdffitwindow,pdfcenterwindow=true,pdfstartview=Fit]{hyperref}
%\usepackage[breaklinks=true,colorlinks=false,dvips,bookmarks,pdffitwindow,pdfcenterwindow=true,pdfstartview=Fit]{hyperref}
\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{caption}
\usepackage{subcaption}
\usepackage{setspace}
\usepackage{cite}
\usepackage{float,times}
\usepackage[utf8x]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsthm,latexsym}
\usepackage[dvips]{epsfig}
%\usepackage{subfigure}
\usepackage{rotating}
\usepackage{afterpage}
\usepackage{multirow}
\usepackage{array}
\usepackage{minted}
\usepackage{newfloat}
\usepackage{xspace}
%! put the new-command after the inputenc package use, so 'ü' will not be shown as abomination ASCII -TF
\input{globalcommands.tex}
\newcommand{\DocuTitle}{Documentation of the LT16x32 System-on-Chip}
% format page layout.
\setlength{\topmargin}{0cm}
\setlength{\textwidth}{15cm}
\setlength{\textheight}{22cm}
\setlength{\oddsidemargin}{1cm}
\setlength{\evensidemargin}{0cm}
\setlength{\headheight}{15pt}
% \setlength{\voffset}{-0cm}
% \setlength{\topmargin}{0cm}
% \setlength{\headheight}{0.54cm}
% \setlength{\textheight}{23cm}
% % \setlength{\headsep}{1.5cm}
% %\setlength{\hoffset}{-2.54cm}
% \setlength{\hoffset}{0cm}
% \setlength{\oddsidemargin}{0.46cm}
% \setlength{\evensidemargin}{0.46cm}
% \setlength{\textwidth}{15cm}
% \setlength{\marginparsep}{0cm}
% \setlength{\marginparwidth}{1.54cm}
\setcounter{secnumdepth}{3}
% \setlength{\footskip}{1cm}
% \setlength{\parindent}{0cm}
% \setlength{\parskip}{1em}
\usepackage{fancyhdr}
\pagestyle{fancy}
\fancyhead{} % clear all header fields
%\fancyhead[LO, RE]{\slshape \nouppercase{\leftmark}} % chapter titles
%\fancyhead[LE, RO]{\slshape \nouppercase{\leftmark}\\\nouppercase{\rightmark}} % section titles
\double{\fancyhead[LE]{\slshape \nouppercase{\leftmark}}} % chapter titles
\fancyhead[RO]{\slshape \nouppercase{\rightmark}} % section titles
\fancyfoot{} % clear all footer fields
\fancyfoot[C]{\thepage}
\usepackage[%dvips,
colorlinks=false,
bookmarks,
pdffitwindow,
pdfcenterwindow=true,
pdfstartview=Fitpdftex,
pdfauthor={Lasse Schnepel, Thomas Fehmel},
pdftitle={\DocuTitle},
pdfsubject={LT16x32 Documentation}, % one sentence summery
pdfkeywords={Processor,Firmware-based Verification,Architecture design}, %comma-seperated keywords
pdfproducer={Latex with hyperref},
pdfcreator={}]{hyperref}
\begin{document}
% \EN{\selectlanguage{english}}
% \DE{\selectlanguage{german}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Here you have to start editing
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{\DocuTitle}
\author{Lasse Schnepel, Thomas Fehmel}
\date{2015}
\pagenumbering{arabic}
\hyphenation{Bit-ebenen Gateprop Bit-ebene Fanin Boole-sche
Partial-produkt-generator
Code-inspektion
Verifika-tions-ablauf
IPC-Verifika-tions-ablauf
Abhangig-keiten
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% title page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\frontmatter
\maketitle
\tableofcontents
\mainmatter
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Now this is followed by your chapters
% this usually starts with introduction and Fundamentals and then
% continues with whatever you need or did
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\input{socscope}
\input{socarch}
\input{architecture}
\input{instructionset}
\input{interrupts}
\input{memory}
\input{guides}
\backmatter
\listoffigures
\listoftables
%\listofcodefloat %triggers Errors for me, for whatever reason, but the pdf is generated nonetheless -TF
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\bibliographystyle{alphadin}
\bibliography{refs3}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\end{document}

134
documentation/socarch.tex Normal file
View File

@@ -0,0 +1,134 @@
\chapter{SoC Architecture}\label{chap:socarch}
The supplied ESyLab-SoC plattform is implemented by the \verb=top.vhd=,
which can be found in the \verb=<project root>/soc/top= directory.
Its structure is illustrated by Figure~\ref{fig:socoverview}.
\begin{figure}[htb]
\centering
\includegraphics[scale=0.55]{./figures/soc_overview.pdf}
\caption{Block diagram of the ESyLab-SoC}
\label{fig:socoverview}
\end{figure}
The interface of the minimal top level entity of the \procname system is shown in Listing~\ref{lst:top_interface}.
\begin{vhdl}[Top Level Entity]{lst:top_interface}
entity lt16soc_top is
generic(
programfilename : string := "programs/program.ram"
);
port(
clk : in std_logic;
rst : in std_logic;
led : out std_logic_vector(7 downto 0)
);
end entity lt16soc_top;
\end{vhdl}
The inputs \inlinevhdl{clk}, which denote the clock input, and \inlinevhdl{rst}, which is the active high reset, are system-wide signals.
The minimal system features only one output signal, which is \inlinevhdl{led}.
This signal should be connected to a set of leds and is connected to a generic I/O-controller on the bus.
The individual components of the minimal system are described in the following sections.
\section{Interconnect}
\label{chap:socarch:interconnect}
The system utilizes a synchronous Wishbone bus.
To ease integration of new bus components, a Wishbone bus interconnect component is provided.
The interconnect module currently implements only the synchronous Whisbone protocol.
Its interface is given in Listing~\ref{lst:wb_interconnect_interface}.
\begin{vhdl}[Top Level Entity]{lst:wb_interconnect_interface}
entity wb_intercon is
generic(
slv_mask_vector : std_logic_vector(0 to NWBSLV-1) := 0;
mst_mask_vector : std_logic_vector(0 to NWBMST-1) := 0
);
port(
clk : in std_logic;
rst : in std_logic;
msti : out wb_mst_in_vector;
msto : in wb_mst_out_vector;
slvi : out wb_slv_in_vector;
slvo : in wb_slv_out_vector
);
\end{vhdl}
The system is configured to a certain maximum number of slave and master modules as \inlinevhdl{NWBSLV} and \inlinevhdl{NWBMST} respectively.
The configuration can be found in \verb=config.vhd=.
These constants are used to define a the length of two generic parameters of the module,
the mask vectors \verb=slv_mask_vector= and \verb=mst_mask_vector=,
and also define how many elements the input and output arrays have.
As for the mask vectors, as indicated in the \verb=wishbone.vhd= file.
The mask vectors are used to indicate to the interconnect if a module should be connected to the input/output port indicated by the bit position in the mask vector.
A '1' at a position in the mask vector indicates that at the respective position in the the input/output arrays,
a module should be connected.
A '0' at a position in the mask vector will facilitate that the control logic for that position in the respective input/output array is omitted.
The inputs \inlinevhdl{clk} and \inlinevhdl{rst} are currently not used, but might be in the future when synchronous wishbone transfer is implemented.
The wishbone bus signals are separated in arrays of master and slave signals.
Array of master signals is in the output \inlinevhdl{msti}, which are the inputs to the connected masters, and the input \inlinevhdl{msto}, which are the outputs of the connected master.
Analogously, \inlinevhdl{slvi} and \inlinevhdl{slvo} follow the same principle for the connected slave modules.
\subsection{Integration of new components}
To instantiate a new component in the system,
a few steps must be undertaken.
\paragraph{The component declaration}%
should not be put in the top level module,
but in the appropriate package.
This makes the top level module more readable.
\paragraph{The component instantiation}%
in the top level module must be connected to the bus interconnect system.
To do this, the port map must connect its inputs and outputs of its bus interface to a free element of the \verb=slvi= and \verb=slvo= array signals in the top level architecture.
Any element in that vector must obviously only be assigned once.
To select to which of those signals you should connect,
consult the file \verb=soc/lib/config.vhd=.
A number of of slave index constants like shown in Listing~\ref{lst:config_constants} are defined there.
Add your own by adding one to the last defined constant,
then use the defined constant to select the element of the bus slave signal arrays, as illustrated in Listing.~\ref{lst:slave_port_assignment}.
\begin{vhdl}[Slave bus indexes]{lst:config_constants}
-- >> Slave index <<
constant CFG_MEM : integer := 0;
constant CFG_LED : integer := CFG_MEM+1;
constant CFG_DMEM : integer := CFG_LED+1;
...
\end{vhdl}
\begin{vhdl}[Slave bus connection]{lst:slave_port_assignment}
... port map( ...
wslvi => slvi(CFG_FOO),
wslvo => slvo(CFG_FOO)
...
\end{vhdl}
\paragraph{The slave masking vector}%
is a constant which configures the interconnect system to only consider certain slave bus interface elements.
A slave mask vector \verb=slv_mask_vector= is defined in the top level architecture, see Listing~\ref{lst:slave_mask}.
To enable any connection on the interconnect,
the bit in the slave mask vector must be set to '1' at the same position as the targeted elements in the slave connector arrays.
Setting any bit in the slave mask vector to '0' will disable the corresponding connection to the interconnection in the way that the logic to evaluate the inputs is not generated.
\begin{vhdl}[Slave bus indexes]{lst:slave_mask}
architecture RTL of lt16soc_top is
...
constant slv_mask_vector : std_logic_vector(0 to NWBSLV-1) := b"1110_0000_0000_0000";
...
\end{vhdl}
\section{Processor Core Wrapper}
The processor core has a data and instruction memory interface, as per standard Harvard architecture.
The instruction memory interface is unchanged, but the data memory interface is wrapped in a piece of control logic translating the processor interface to wishbone signals and takes care of timing.
\section{Instruction memory}
The instruction memory component is configurable to load a file into its memory during elaboration.
The loaded file needs to contain legal values of the type std\_logic\_vector with a length of 32 characters per line.
If the content of the file is illegal, an error in the elaboration tool will likely occur.
It has two interfaces, one for instruction read access by the processor, one for a read and write access by the Wishbone bus.
The Wishbone interface takes priority over the instruction read.
The whole range of the memory can be written, so care should be exercised when writing to the instruction memory,
so code or 'constants' are not unintentionally overwritten.

View File

@@ -0,0 +1,62 @@
\chapter{Scope of Delivery}
\section{Products}
Containing in the ESyLab-SoC are the the processor core \procname,
a configurable Wishbone bus interconnect module,
a minimal interrupt controller and peripheral devices.
An instruction memory is also supplied.
It reads a file with machine code during elaboration,
so the SoC can both be simulated and synthesized.
The assembler to produce that machine code is also supplied in source.
\section{HowTo: Build Products}
\label{sec:scope_build}
The products are delivered as HDL source code.
This allows adaptation to any platform, for which the needed tools are available (see sections below).
\subsection{Processor}
The processor is delivered as a set of VHDL files, including one top entity (processor in \filename{processor.vhd}) which can be used in any VHDL synthesis tool.
For simulation, the entity \inlinevhdl{core\_tb} (in \filename{core\_tb.vhd}) can be used. Both architectures instantiate the core, a memory controller and a interrupt controller.
The filename of the used program can be set in these files in the generic map of the memory controller instantiation (see Listing \ref{lst:memory_file}).
Here, also the memory size can be determined (as number of stored words). For details on the memory controller see Section \ref{sec:memoryctrl}.
\begin{vhdl}[Generic Map Extract of Memory Controller]{lst:memory_file}
memory_inst : component memory
generic map(filename => "../programs/test.ram",
size => 32,
[...]
)
\end{vhdl}
The processor is wrapped in another module,
which implements the Wishbone bus-interface for the data memory interface of the processor.
\subsection{Bus Interconnect}
The bus interconnect system is configureable to any number of slave and master modules,
the appropriate configuration values (see Listing~\ref{lst:wishbone_config}) can be found in the file \verb=lib/wishbone.vhd=.
\begin{vhdl}[Wishbone interconnect configuration]{lst:wishbone_config}
...
constant NWBMST: integer :=4;
--Number of Wishbone master connectors on the Interconnect
constant NWBSLV: integer :=16;
--Number of Wishbone slave connectors on the Interconnect
...
\end{vhdl}
All connections can be masked during its instantiation,
using the slave and master mask vectors (see Listing~\ref{lst:wishbone_mask_config}).
They are declared in the top level architecture and are used during instantiation of the interconnection component.
\begin{vhdl}[Wishbone interconnect configuration]{lst:wishbone_mask_config}
...
constant slv_mask_vector : std_logic_vector(0 to NWBSLV-1) := b"1110_0000_0000_0000";
constant mst_mask_vector : std_logic_vector(0 to NWBMST-1) := b"1000";
...
\end{vhdl}
The component handles synchronous Wishbone cycle termination.
\subsection{Assembler}
For building the assembler the GNU tools \filename{gcc}, \filename{make}, \filename{bison} and \filename{flex} are needed. With these tools installed, the \filename{make} script can be used to generate an executable called \filename{asm}:
\begin{verbatim}
($SOCROOT)/assembler/$ make all
\end{verbatim}
It is recommended to either copy or dynamically link the assembler executable in a directory in your \verb=$PATH= or directly referenced by in your build tool chain.

Binary file not shown.

22
programs/Makefile Normal file
View File

@@ -0,0 +1,22 @@
AS=../assembler/asm
RM= rm -f
SRCS= $(wildcard *.prog)
OBJS= $(SRCS:.prog=.ram)
MAPS= $(SRCS:.prog=.map)
all: $(OBJS)
maps: $(MAPS)
%.ram: %.prog
$(AS) $< -o $@
%.map: %.prog
$(AS) $< -m $@ -o $*.ram
clean:
$(RM) $(OBJS) $(MAPS)
.PHONY: all maps

64
programs/blinky.prog Normal file
View File

@@ -0,0 +1,64 @@
reset:
br always >main
nop
hardfault:
reti
nop
memfault:
reti
nop
.align
addr:
.word 0x000F0000
w_cnt_top: .word 0x1FC000
//w_cnt_top: .word 0x1 //for simulation only
main:
ldr r0,>addr //LED addr
addi r6,8 //outer counter top
clr r7 //wait counter
ldr r8,>w_cnt_top
out_loop:
clr r1
st08 r0,r1
call >wait
nop
fill:
lsh r1,r1,1
addi r1,1
st08 r0,r1
call >wait
nop
addi r5,1
cmp neq r5,r6
br true >fill
nop
clr r5
flush:
lsh r1,r1,1
st08 r0,r1
call >wait
nop
addi r5,1
cmp neq r5,r6
br true >flush
nop
clr r5
br always >out_loop
nop
//subroutine to iterate until counter overflow
wait:
clr r7 //inititalize inner counter
inc_i:
cmp neq r7,r8
br true >inc_i //if i=cnt_top
addi r7,1
ret //else
nop

165
programs/dmem_test.prog Normal file
View File

@@ -0,0 +1,165 @@
//big endian data memory test
//after the initialization, should the LED become a value differnt from 0, an error occured
reset:
br always >main
nop
hardfault:
reti
nop
memfault:
reti
nop
.align
pointer:
.word =constants
constants:
.word 256
.word 0x00010203
.word 0x04040404
.word 0x000000FF
main:
clr r10
call_1:
clr r0 //error msg / state
call always >echo_error
nop
ldr r11,>pointer
ld32 r1,r11 //DMEM addr
addi r11,4
ld32 r2,r11
addi r11,4
ld32 r3,r11 //increment
addi r11,4
ld32 r8,r11 //mask
addi r11,-12
//test 1: store 32 bit, load bytes
test1:
mov r4,r2
st32 r1,r4
addi r1,3 //check the LSB first
ld08 r6,r1 //r6: loaded value
and r5,r4,r8 //r5: masked constant
cmp neq r5,r6
call true >echo_error
addi r10,1
addi r1,-1
rsh r4,r4,8
ld08 r6,r1 //r6: loaded value
and r5,r4,r8 //r5: masked constant
cmp neq r5,r6
call true >echo_error
addi r10,1
addi r1,-1
rsh r4,r4,8
ld08 r6,r1 //r6: loaded value
and r5,r4,r8 //r5: masked constant
cmp neq r5,r6
call true >echo_error
addi r10,1
addi r1,-1
rsh r4,r4,8
ld08 r6,r1 //r6: loaded value
and r5,r4,r8 //r5: masked constant
cmp neq r5,r6
call true >echo_error
addi r10,1
//test 1 end
add r2,r2,r3
addi r1,4
//test 2: store bytes, load word
test2:
mov r4,r2
addi r1,3
st08 r1,r4
rsh r4,r4,8
addi r1,-1
st08 r1,r4
rsh r4,r4,8
addi r1,-1
st08 r1,r4
rsh r4,r4,8
addi r1,-1
st08 r1,r4
rsh r4,r4,8
ld32 r6,r1
cmp neq r6,r2
call true >echo_error
addi r10,1
ldr r9,>LEDaddr
st08 r9,r8
//test 3
// prewrite memory with value==baseaddress+offset,
// load 32 bit values and check if correct
test3:
ld32 r1,r11 //DMEM base address
add r8,r1,r1 //out-of-range address, incidentally equals baseaddress*2 since baseaddress==length
clr r2
test3_prewrite_mem_loop:
st08 r1,r2
addi r1,1
cmp neq r1,r8
br true >test3_prewrite_mem_loop
addi r2,1
ld32 r1,r11 //DMEM addr
addi r11,4
ld32 r2,r11 //CMP value
addi r11,4
ld32 r3,r11 //increment
addi r11,-8
add r8,r1,r1 //out-of-range address, incidentally equals baseaddress*2 since baseaddress==length
test3_loop:
ld32 r4,r1
cmp neq r4,r2
call true >echo_error
addi r0,1
addi r1,4
add r2,r2,r3
cmp neq r1,r8
br true >test3_loop
nop
//end test3
end:
nop
br >end
nop
.align
LEDaddr:
.word 0x000F0000
//expects an error code in r0
echo_error:
nop
ldr r9,>LEDaddr
st08 r9,r0
ret
nop

33
programs/example_irq.prog Normal file
View File

@@ -0,0 +1,33 @@
// Interrupt Table
reset: br >main
nop
hardfault: br >hardfault_handler
nop
memfault: br >memfault_handler
nop
irq3: br >irq3_handler
nop
// Main Function
main:
ldr sp, >sp_init
clr sr
// endless loop to stop program
final:
br >final
nop
// Interrupt Handler
hardfault_handler:
reti
memfault_handler:
reti
irq3_handler:
reti
// Constant Declaration
.align
sp_init: .word 0x400 // Stackpointer Initial Value

47
programs/example_led.prog Normal file
View File

@@ -0,0 +1,47 @@
//
// This program let's the connected LEDs flash
// with a duty cycle of 50% and
// a period of approx. 1s
//
// r0: counter top
// r1: counter
// r2: LED address
// r3: ones (0xFF)
// r4: LED values
irq0: br always >main
nop
// initialization constants
.align
sp_init: .word 0x200 // Stack pointer
top: .word 16000000 // Counter top
ptr: .word 0x0 // pointer to I/O device
// main procedure
main:
// init registers
ldr sp, >sp_init
ldr r0, >top
ldr r2, >ptr
clr r1
clr r3
clr r4
addi r3, -1
// loop
loop:
cmp neq r1, r0
br true >loop // loop if not equal (BDS!)
addi r1, 1 // increment counter
// counter top reached, set LEDs and clear counter
xor r4, r4, r3 // invert last byte of r4
st08 r2, r4 // write byte to I/O device
br always >loop // branch back to loop (BDS!)
clr r1 // reset counter
nop
nop

View File

@@ -0,0 +1,2 @@
reset: br always >reset
nop

19
programs/ld08test.prog Normal file
View File

@@ -0,0 +1,19 @@
addi r0,0x50
addi r1,7
st08 r0,r1
nop
nop
clr r1
ld08 r2,r0
nop
nop
st08 r3,r2
nop
end:
nop
br always >end
nop

21
programs/ld16test.prog Normal file
View File

@@ -0,0 +1,21 @@
addi r0,0x50
addi r1,-3
nop
nop
st16 r0,r1
nop
nop
clr r1
ld16 r2,r0
nop
nop
st16 r3,r2
nop
end:
nop
br always >end
nop

21
programs/ld32test.prog Normal file
View File

@@ -0,0 +1,21 @@
addi r0,0x50
addi r1,-3
nop
nop
st32 r0,r1
nop
nop
clr r1
ld32 r2,r0
nop
nop
st32 r3,r2
nop
end:
nop
br always >end
nop

10
programs/ldrtest.prog Normal file
View File

@@ -0,0 +1,10 @@
main:
ldr r0, >dmemaddr
clr r1
nop
st08 r1,r0
br always >main
nop
.align
dmemaddr: .word 0xFFFF

63
programs/ledtest.prog Normal file
View File

@@ -0,0 +1,63 @@
reset:
br always >main
nop
hardfault:
reti
nop
memfault:
reti
nop
.align
addr: .word 0x000F0000
//w_cnt_top: .word 0x717D7840 //250 ms @ 100MHz
w_cnt_top: .word 0x40 //for simulation only
main:
ldr r0,>addr //LED addr
addi r6,8 //outer counter top
clr r7 //wait counter
ldr r8,>w_cnt_top
out_loop:
clr r1
st08 r0,r1
call >wait
nop
fill:
lsh r1,r1,1
addi r1,1
st08 r0,r1
call >wait
nop
addi r5,1
cmp neq r5,r6
br true >fill
nop
clr r5
flush:
lsh r1,r1,1
st08 r0,r1
call >wait
nop
addi r5,1
cmp neq r5,r6
br true >flush
nop
clr r5
br always >out_loop
nop
//subroutine that iterates until counter overflow
wait:
clr r7 //inititalize inner counter
inc_i:
cmp neq r7,r8
br true >inc_i //if i=cnt_top
addi r7,1
reti //else
nop

30
programs/new.prog Normal file
View File

@@ -0,0 +1,30 @@
addi r0,0
addi r1,0
addi r2,127
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
add r2,r2,r2
addi r3,7
st08 r0,r3
clr r3
loopout:
loopin:
addi r1,1
cmp neq r2,r1
br true >loopin
nop
clr r1
addi r3,1
st08 r0,r3
br always >loopout
nop

35
programs/rawhztest.prog Normal file
View File

@@ -0,0 +1,35 @@
reset:
br >main
nop
hardfault:
reti
nop
memfault:
reti
nop
.align
adr_a: .word 0x3C0 // actual adr at mem 0xF0 (0x3C0>>2 bits)
adr_b: .word 0x3F0 // actual adr at mem 0xFC (0x3F0>>2 bits)
main:
ldr r5, >adr_a
//wait for one cycle after a load is necessary
nop
ldr r1, >adr_b
addi r6,-2
addi r8, 0x50
nop
st32 r5, r6
//waiting for one cycle when re-accessing a stored value is in accordance with design
nop
ld32 r7,r5
addi r9,0x50
ld32 r8,r5
addi r8,1
st32 r5,r8
end: br always >end
nop

29
programs/rdins.prog Normal file
View File

@@ -0,0 +1,29 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
.align
adr_a: .word 0x3C0 // (30b adr), actual adr at mem 0xF00 (0x3C0<<2 bits)
adr_b: .word 0x3F0 // (30b adr), actual adr at mem 0xFC0 (0x3F0<<2 bits)
main:
clr r0
clr r1
clr r2
clr r3
//------------------------------
// read only ins test
//------------------------------
addi r1, 0x01 //expected r1 = 0x01
addi r2, 0x02 //expected r1 = 0x02
add r0, r1, r2 // expected r0 = 0x03
add r3, r0, r1 // expected r3 = 3 + 1 = 0x4
end: br always >end
nop

31
programs/rdmem.prog Normal file
View File

@@ -0,0 +1,31 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
.align
adr_i0: .word 0x001 // (30b adr), actual adr at mem 0x004 (0x001<<2 bits)
adr_a: .word 0x3C0 // (30b adr), actual adr at mem 0xF00 (0x3C0<<2 bits)
adr_b: .word 0x3F0 // (30b adr), actual adr at mem 0xFC0 (0x3F0<<2 bits)
main:
clr r0
clr r1
clr r2
clr r3
//------------------------------
// read only mem from ins addr range
//------------------------------
addi r3, 0x10 //32 bit adr
ld32 r0, r3 // val at addr 0x04 (30 bits) = 0x000003C0 (b0 = x00, b1 = x00, b2 = x03, b3 = xC0)
add r1, r0, r0 //expected r1 = 0x3C0 + 0x3C0 = 780
addi r4, 0x12
ld08 r5, r4 // get Byte2, r5 = 0x03
end: br always >end
nop

33
programs/rdwrmem.prog Normal file
View File

@@ -0,0 +1,33 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
.align
adr_a: .word 0x3C0 // (30b adr), actual adr at mem 0xF00 (0x3C0<<2 bits)
adr_b: .word 0x3F0 // (30b adr), actual adr at mem 0xFC0 (0x3F0<<2 bits)
adr_c: .word 0x09
main:
//------------------------------
// read only mem from ins addr range
//------------------------------
addi r3, 0x10 //32 bit adr
ld32 r0, r3 // val at addr 0x04 (30 bits) = 0x000003C0 (b0 = x00, b1 = x00, b2 = x03, b3 = xC0)
add r1, r0, r0 //expected r1 = 0x3C0 + 0x3C0 = 780
addi r4, 0x12
ld08 r5, r4 // get Byte2, r5 = 0x03
//------------------------------
// write mem test
//------------------------------
addi r8, 0x77
addi r7, 0x51 //32 bit adr , write to Byte 1 > xx77_xxxx at mem[0x14]
st08 r7, r8
end: br always >end
nop

35
programs/simple.prog Normal file
View File

@@ -0,0 +1,35 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
main: // actual start of program
clr r0
clr r1
clr r2
clr r3
clr r4
//test move = or
addi r0, 0x55 // expected r0 = 0x55
mov r1, r0 // expected r1 = 0x55
//test shift
addi r2, 0x0A //expected r2 = 0x0A
lsh r3, r2, 16 //expected r3 = 0xA_0000
lsh r3, r3, 12 //expected r3 = 0xA000_0000
// test write
ldr r4, >adr_a //expected r4 = 0x3C0
st32 r4, r3 //expected value at addr 0xF00 = 0xA000_0000
end: br always >end
nop
.align
adr_a: .word 0x3C0 // actual adr at mem 0xF00 (0x3C0<<2 bits)
//adr_a: .word 0x3F8
//adr_a: .word 0x20C

43
programs/subseqtest.prog Normal file
View File

@@ -0,0 +1,43 @@
reset:
br always >main
nop
hardfault:
br always >main
reti
memfault:
br always >main
reti
.align
t1: .word 0xA0B0C0D0
t2: .word 0xF0AB2FB9
t3: .word 0xCCCCCCCC
adr1: .word 0x150
adr2: .word 0x144
adr3: .word 0x10F
main:
ldr r1, >adr1
ldr r2, >adr2
ldr r3, >adr3
addi r0,-1
ldr r4,>t1
st16 r1,r0 //mem() = 0x0000FFFF
st08 r2,r0 //mem() = 0x000000FF
st32 r3,r0 //mem() = 0xFFFFFFFF
ldr r11,>t1
ldr r10,>t2
ldr r9,>t3
ldr r7,>t1
ldr r6,>t2
ld16 r11,r1
ld08 r10,r2
ld32 r9,r3
end:
br always >end
nop

39
programs/test-trap.prog Normal file
View File

@@ -0,0 +1,39 @@
irq0:
br always >main
nop
irq1:
br always >irq
nop
irq2:
br always >irq
nop
main:
ldr sp, >sp_init
nop
clr sr
addi r2, 1
addi r2, 2
addi r2, 3
trap 1
addi r2, 4
addi r2, 5
loop:
addi r10, 1
foo: br always >loop
nop
end: br always >end
nop
irq: addi r0, 5
reti
nop
.address 100
.word 499
sp_init: .word 500
.word 501

46
programs/test.prog Normal file
View File

@@ -0,0 +1,46 @@
//
// This program let's the connected LEDs flash
// with a duty cycle of 50%.
//
// r0: counter top
// r1: counter
// r2: LED address
// r3: ones (0xFF)
// r4: LED values
irq0: br always >main
nop
// initialization constants
.align
sp_init: .word 0x200 // Stack pointer
top: .word 160000 // Counter top
ptr: .word 0x0 // pointer to I/O device
// main procedure
main:
// init registers
ldr sp, >sp_init
ldr r0, >top
ldr r2, >ptr
clr r1
clr r3
clr r4
addi r3, -1
// loop
loop:
cmp neq r1, r0
br true >loop // loop if not equal (BDS!)
addi r1, 1 // increment counter
// counter top reached, set LEDs and clear counter
xor r4, r4, r3 // invert last byte of r4
st08 r2, r4 // write byte to I/O device
br always >loop // branch back to loop (BDS!)
clr r1 // reset counter
nop
nop

50
programs/test2.prog Normal file
View File

@@ -0,0 +1,50 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
irq3: br >irq_handler
nop
main: // actual start of program
ldr sp, >sp_init
ldr r1, >startvalue
clr r2
clr sr
test: mov r1, pc
loop: addi r2, 1
cmp ll r2, r1
br true >loop
nop
cmp le r2, r1
call true >final
addi r3, 1
end: br >end
nop
final: addi r10, 1
cmp eq r10, r1
ret true
nop
br >final
nop
irq_handler: addi r4, 1
reti
nop
nop
nop
nop
.align
sp_init: .word 1020
startvalue: .word 15

View File

@@ -0,0 +1,44 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
main: // actual start of program
ldr sp, >sp_init
clr r5
clr r6
clr r7
clr r8
clr r9
ldr r0, >addr
addi r1, 0x01
st08 r0, r1
ld08 r5, r0
addi r0, 1
addi r1, 1
st08 r0, r1
ld08 r6, r0
addi r0, 1
addi r1, 1
st08 r0, r1
ld08 r7, r0
addi r0, 1
addi r1, 1
st08 r0, r1
ld08 r8, r0
addi r0, 1
addi r1, 1
st08 r0, r1
ld08 r9, r0
.align
sp_init: .word 1020 // 0x3FC
addr: .word 0x101

View File

@@ -0,0 +1,45 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
main: // actual start of program
ldr sp, >sp_init
clr r5
clr r6
clr r7
clr r8
clr r9
ldr r0, >addr
addi r1, 0x01
st32 r0, r1
ld32 r5, r0
addi r0, 1
addi r1, 1
st32 r0, r1
ld32 r6, r0
addi r0, 1
addi r1, 1
st32 r0, r1
ld32 r7, r0
addi r0, 1
addi r1, 1
st32 r0, r1
ld32 r8, r0
addi r0, 1
addi r1, 1
st32 r0, r1
ld32 r9, r0
.align
sp_init: .word 1020 // 0x3FC
addr: .word 0x101

52
programs/test_sync.prog Normal file
View File

@@ -0,0 +1,52 @@
reset: br >main
nop
hardfault: reti
nop
memfault: reti
nop
.align
sp_init: .word 0x400 // Stackpointer Initial Value
main:
ldr sp, >sp_init
clr sr
//base addr
add r0,r0,sp
//addi r0,0x40
addi r10,4
add r1,r0,r10
add r2,r1,r10
//values t.b. stored
addi r3,-1
addi r4,-2
addi r5,-3
//store values
st32 r0,r3
st32 r1,r4
st32 r2,r5
//retrieve values
ld32 r6,r0
ld32 r7,r1
ld32 r8,r2
nop
nop
nop
nop
ld32 r6,r0
st32 r1,r6
ld32 r7,r0
ld32 r7,r0
st32 r1,r6
st32 r1,r6
ld32 r7,r0
end:
br always >end
nop

BIN
project.pdf Normal file

Binary file not shown.

37
projects/lt16lab/.gitignore vendored Normal file
View File

@@ -0,0 +1,37 @@
### TEX Temps
*.out
*.toc
*.aux
*.log
*.pdf
*.synctex.gz
*.lof
*.lot
*.lol
*.dvi
*.bbl
*.ps
*.blg
*.loc
*.pyg
### Other Files
*~
*.kate-swp
*.patch
*.orig
### Assembler Eclipse Stuff
assembler/.cproject
assembler/.project
assembler/.settings/org.eclipse.cdt.managedbuilder.core.prefs
### Assembler Project Compiles
assembler/obj/*
assembler/asm
assembler/test.ram
assembler/test.map
### test program files
*.ram
*.map

124
soc/core/alu.vhd Normal file
View File

@@ -0,0 +1,124 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
-- the ALU offers various two-input arithmetic and logic operations and is fully combinatoric
entity alu is
port(
-- Data Input
in_a : in signed(reg_width - 1 downto 0);
in_b : in signed(reg_width - 1 downto 0);
-- Truth Flag
t_out : out std_logic;
-- Overflow Flag
ovf_out : out std_logic;
-- Mode of Operation
mode : in alu_mode_type;
-- Data Output
data_out : out signed(reg_width - 1 downto 0)
);
end entity alu;
architecture RTL of alu is
begin
-- calculate the result
calc_out : process(in_a, in_b, mode) is
-- used to store the result temporarily (e.g. if needed for flag calculation)
variable result : signed(reg_width - 1 downto 0);
begin
-- default outputs
data_out <= (others => '0');
ovf_out <= '0';
t_out <= '0';
-- different result for each mode
case mode is
-- arithmetic modes
when alu_add => -- addition
result := in_a + in_b;
data_out <= result;
ovf_out <= (in_a(reg_width - 1) AND in_b(reg_width - 1) AND not result(reg_width - 1)) OR (not in_a(reg_width - 1) AND not in_b(reg_width - 1) AND result(reg_width - 1));
when alu_sub => -- subtraction
result := in_a - in_b;
data_out <= result;
ovf_out <= (in_a(reg_width - 1) AND not in_b(reg_width - 1) AND not result(reg_width - 1)) OR (not in_a(reg_width - 1) AND in_b(reg_width - 1) AND result(reg_width - 1));
when alu_and => -- bitwise and
data_out <= in_a and in_b;
when alu_or => -- bitwise or
data_out <= in_a or in_b;
when alu_xor => -- bitwise xor
data_out <= in_a xor in_b;
when alu_lsh => -- logic left shift
data_out <= in_a sll (to_integer(unsigned(in_b(3 downto 0))) + 1);
when alu_rsh => -- logic right shift
data_out <= in_a srl (to_integer(unsigned(in_b(3 downto 0))) + 1);
-- compare modes
when alu_cmp_eq => -- compare for A = B
if (in_a = in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_neq => -- compare for not equal
if (in_a /= in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_ge => -- compare for greater than or equal
if (in_a >= in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_gg => -- compare for greater than
if (in_a > in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_le => -- compare for less than or equal
if (in_a <= in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_ll => -- compare for less than
if (in_a < in_b) then
t_out <= '1';
else
t_out <= '0';
end if;
when alu_cmp_true => -- always set truth-flag
t_out <= '1';
when alu_cmp_false => -- always reset truth-flag
t_out <= '0';
end case;
end process calc_out;
end architecture RTL;

130
soc/core/controlpath.vhd Normal file
View File

@@ -0,0 +1,130 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
-- the controlpath mostly covers the pipelining of control signals, but also includes some "glue"-logic
entity controlpath is
port(
-- clock signal
clk : in std_logic;
-- reset signal, active high, synchronous
rst : in std_logic;
-- stall signal, active high
stall : in std_logic;
-- signals from decoder
in_dec : in dec_cp;
-- signals to decoder
out_dec : out cp_dec;
-- signals to datapath
out_dp : out cp_dp;
-- signals to PC counter
out_pc : out cp_pc;
-- signals to data memory
out_dmem : out cp_dmem;
-- signals from datapath
in_dp : in dp_cp;
-- hardfault, active high
hardfault : out std_logic
);
end entity controlpath;
architecture RTL of controlpath is
-- pipelined signals
-- decoder information for dp-stage 2 in stage 2
signal in_dec_2_s2 : dec_cp_s2;
-- decoder information for dp-stage 3 in stage 2
signal in_dec_3_s2 : dec_cp_s3;
-- decoder information for dp-stage 3 in stage 3
signal in_dec_3_s3 : dec_cp_s3;
begin
-- forward internal signals to ports
hardfault <= in_dec.hardfault;
out_pc.instruction_width <= in_dec.s1.instruction_width;
out_dp.s1.register_read_number_a <= in_dec.s1.register_read_number_a;
out_dp.s1.register_read_number_b <= in_dec.s1.register_read_number_b;
out_dp.s2.alu_input_data_select <= in_dec_2_s2.alu_input_data_select;
out_dp.s2.alu_mode <= in_dec_2_s2.alu_mode;
out_dp.s2.immediate <= in_dec_2_s2.immediate;
out_dp.s2.memory_read_addr_select <= in_dec_2_s2.dmem_read_addr_select;
out_dmem.read_en <= in_dec_2_s2.dmem_read_en;
out_dmem.read_size <= in_dec_2_s2.dmem_read_size;
out_dmem.write_en <= in_dec_3_s3.dmem_write_en;
out_dmem.write_size <= in_dec_3_s3.dmem_write_size;
out_dp.s3.ovfflag_write_enable <= in_dec_3_s3.ovfflag_write_enable;
out_dp.s3.memory_write_data_select <= in_dec_3_s3.dmem_write_data_select;
out_dp.s3.register_write_data_select <= in_dec_3_s3.register_write_data_select;
out_dp.s3.register_write_enable <= in_dec_3_s3.register_write_enable;
out_dp.s3.register_write_number <= in_dec_3_s3.register_write_number;
out_dp.s3.register_write_size <= in_dec_3_s3.register_write_size;
out_dp.s3.tflag_write_data_select <= in_dec_3_s3.tflag_write_data_select;
out_dp.s3.tflag_write_enable <= in_dec_3_s3.tflag_write_enable;
-- pipeline register stage 1 -> 2
pipeline_s1_s2 : process(clk) is
begin
if (rising_edge(clk)) then
if (rst = '1') then
in_dec_2_s2 <= get_default_dec_cp_s2;
in_dec_3_s2 <= get_default_dec_cp_s3;
elsif (stall = '0') then
in_dec_2_s2 <= in_dec.s2;
in_dec_3_s2 <= in_dec.s3;
end if;
end if;
end process pipeline_s1_s2;
-- pipeline register stage 2 -> 3
pipeline_s2_s3 : process(clk) is
begin
if (rising_edge(clk)) then
if (rst = '1') then
in_dec_3_s3 <= get_default_dec_cp_s3;
elsif (stall = '0') then
in_dec_3_s3 <= in_dec_3_s2;
end if;
end if;
end process pipeline_s2_s3;
-- PC signal combinatorics and condition holds flag for decoder
pc_comb : process(in_dec_2_s2.pc_summand_select, in_dec_2_s2.pc_mode_select, in_dec_2_s2.pc_condition, in_dp.s2.tflag) is
begin
case in_dec_2_s2.pc_condition is
when sel_unconditional =>
-- without condition, always use proposed pc options
out_pc.summand_select <= in_dec_2_s2.pc_summand_select;
out_pc.mode_select <= in_dec_2_s2.pc_mode_select;
out_dec.condition_holds <= '1';
when sel_true =>
-- with condition = true
if (in_dp.s2.tflag = '1') then
-- if condition is true (as needed), use proposed pc options
out_pc.summand_select <= in_dec_2_s2.pc_summand_select;
out_pc.mode_select <= in_dec_2_s2.pc_mode_select;
out_dec.condition_holds <= '1';
else
-- if condition is false (opposed to what is needed) resume normal pc operation
out_pc.summand_select <= sel_run;
out_pc.mode_select <= sel_relative;
out_dec.condition_holds <= '0';
end if;
end case;
end process pc_comb;
end architecture RTL;

244
soc/core/core.vhd Normal file
View File

@@ -0,0 +1,244 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
use work.lt16x32_global.all;
-- the core bundles all entities inside the core itself
entity core is
port(
-- clock signal
clk : in std_logic;
-- reset signal, active high, synchronous
rst : in std_logic;
-- external stall signal, active high, synchronous
stall : in std_logic;
-- signals from data memory
in_dmem : in dmem_core;
-- signals to data memory
out_dmem : out core_dmem;
-- signals from instruction memory
in_imem : in imem_core;
-- signals to instruction memory
out_imem : out core_imem;
-- signals from interrupt controller
in_irq : in irq_core;
-- signals to interrupt controller
out_irq : out core_irq;
-- hardfault signal, active high
hardfault : out std_logic
);
end entity core;
architecture RTL of core is
component datapath
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
out_dec : out dp_dec;
in_cp : in cp_dp;
out_cp : out dp_cp;
in_pc : in pc_dp;
out_pc : out dp_pc;
in_dmem : in dmem_dp;
out_dmem : out dp_dmem;
hardfault : out std_logic);
end component datapath;
component controlpath
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_dec : in dec_cp;
out_dec : out cp_dec;
out_dp : out cp_dp;
out_pc : out cp_pc;
out_dmem : out cp_dmem;
in_dp : in dp_cp;
hardfault : out std_logic);
end component controlpath;
component decoder
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_imem : in imem_dec;
in_dp : in dp_dec;
in_cp : in cp_dec;
out_cp : out dec_cp;
out_pc : out dec_pc;
out_imem : out dec_imem;
in_irq : in irq_dec;
out_irq : out dec_irq);
end component decoder;
component programcounter
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_cp : in cp_pc;
in_dp : in dp_pc;
in_dec : in dec_pc;
out_dp : out pc_dp;
out_imem : out pc_imem);
end component programcounter;
-- signals between instances
signal dp_cp_signal : dp_cp;
signal dp_dmem_signal : dp_dmem;
signal dmem_dp_signal : dmem_dp;
signal imem_dec_signal : imem_dec;
signal dec_cp_signal : dec_cp;
signal dec_imem_signal : dec_imem;
signal cp_dp_signal : cp_dp;
signal cp_dmem_signal : cp_dmem;
signal cp_dec_signal : cp_dec;
signal pc_dp_signal : pc_dp;
signal dp_pc_signal : dp_pc;
signal dec_pc_signal : dec_pc;
signal pc_imem_signal : pc_imem;
signal cp_pc_signal : cp_pc;
signal irq_dec_signal : irq_dec;
signal dec_irq_signal : dec_irq;
signal dp_dec_signal : dp_dec;
signal hardfault_dp : std_logic;
signal hardfault_cp : std_logic;
-- general halt signal
signal stall_internal : std_logic;
begin
-- configuration tests
-- irq_num_width must be smaller than or equal to 6 to fit into first byte of SR
assert (irq_prio_width <= 6) report "irq_prio_width must be <= 6." severity failure;
-- irq_num_width must fit into immediate
assert (irq_num_width < dec_cp_signal.s2.immediate'high) report "irq_num_width must be <= " & integer'image(dec_cp_signal.s2.immediate'high - 1) & "." severity failure;
-- reg_width must be 8, 16 or 32bit
assert ((reg_width = 8) or (reg_width = 16) or (reg_width = 32)) report "selected reg_width is not allowed. allowed values are 8, 16, 32, 64." severity failure;
-- pc must fit into register
assert (pc_width <= reg_width) report "pc_width must be smaller than or equal to reg_width." severity failure;
-- component instantiation
datapath_inst : component datapath
port map(clk => clk,
rst => rst,
stall => stall_internal,
out_dec => dp_dec_signal,
in_cp => cp_dp_signal,
out_cp => dp_cp_signal,
in_pc => pc_dp_signal,
out_pc => dp_pc_signal,
in_dmem => dmem_dp_signal,
out_dmem => dp_dmem_signal,
hardfault => hardfault_dp);
controlpath_inst : component controlpath
port map(clk => clk,
rst => rst,
stall => stall_internal,
in_dec => dec_cp_signal,
out_dec => cp_dec_signal,
out_dp => cp_dp_signal,
out_pc => cp_pc_signal,
out_dmem => cp_dmem_signal,
in_dp => dp_cp_signal,
hardfault => hardfault_cp);
decoder_inst : component decoder
port map(clk => clk,
rst => rst,
stall => stall_internal,
in_imem => imem_dec_signal,
in_dp => dp_dec_signal,
in_cp => cp_dec_signal,
out_cp => dec_cp_signal,
out_pc => dec_pc_signal,
out_imem => dec_imem_signal,
in_irq => irq_dec_signal,
out_irq => dec_irq_signal);
programcounter_inst : component programcounter
port map(clk => clk,
rst => rst,
stall => stall_internal,
in_cp => cp_pc_signal,
in_dp => dp_pc_signal,
in_dec => dec_pc_signal,
out_dp => pc_dp_signal,
out_imem => pc_imem_signal);
-- signals from data memory
dmem_dp_signal.read_data <= in_dmem.read_data;
-- signals to data memory
out_dmem.read_addr <= dp_dmem_signal.read_addr;
out_dmem.read_size <= to_stdlogicvector(cp_dmem_signal.read_size);
out_dmem.write_addr <= dp_dmem_signal.write_addr;
out_dmem.write_data <= dp_dmem_signal.write_data;
out_dmem.write_size <= to_stdlogicvector(cp_dmem_signal.write_size);
-- dmem read enable is overwritten if stall is active
dmem_read_en : with stall select out_dmem.read_en <=
'0' when '1',
cp_dmem_signal.read_en when others;
-- dmem write enable is overwritten if stall is active
dmem_write_en : with stall select out_dmem.write_en <=
'0' when '1',
cp_dmem_signal.write_en when others;
-- signals from instruction memory
imem_dec_signal.read_data <= in_imem.read_data;
imem_dec_signal.ready <= in_imem.ready;
-- signals to instruction memory
-- fill imem address, if pc width is smaller than memory width
-- all warnings of the type "Null range" can be safely ignored for pc_width = mem_width
imem_addr_fill : if (pc_width < mem_width) generate
out_imem.read_addr(mem_width - 1 downto pc_width) <= (others => '0');
end generate imem_addr_fill;
out_imem.read_addr(pc_width - 1 downto 0) <= std_logic_vector(pc_imem_signal.value);
-- imem read enable is overwritten if stall is active
imem_read_en : with stall_internal select out_imem.read_en <=
'0' when '1',
dec_imem_signal.en when others;
-- the halfword flag needs a delay as it refers to last clock cycles imem address
-- (the corresponding data is read in this clock cycle)
halfword_delay : process(clk) is
begin
if (rising_edge(clk)) then
if (rst = '1') then
-- reset to zero
imem_dec_signal.instruction_halfword_select <= '0';
elsif (stall_internal = '0') then
-- set to pc_value(1)
imem_dec_signal.instruction_halfword_select <= pc_imem_signal.value(1);
--! else? --TF
end if;
end if;
end process halfword_delay;
-- signals from interrupt controller
irq_dec_signal.num <= in_irq.num;
irq_dec_signal.priority <= in_irq.priority;
irq_dec_signal.req <= in_irq.req;
irq_dec_signal.nmi <= in_irq.nmi;
-- signals to interrupt controller
out_irq.ack <= dec_irq_signal.ack;
out_irq.trap_num <= dec_irq_signal.trap_num;
out_irq.trap_req <= dec_irq_signal.trap_req;
-- stall if dmem not ready, imem not ready is handled in decoder_fsm
stall_internal <= (not in_dmem.ready) or stall;
-- hardfault logic
hardfault <= hardfault_cp or hardfault_dp;
end architecture RTL;

132
soc/core/core2wb.vhd Normal file
View File

@@ -0,0 +1,132 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
use work.lt16x32_global.all;
use work.wishbone.all;
use work.config.all;
entity core2wb is
port(
clk : in std_logic;
rst : in std_logic;
in_dmem : out dmem_core;
out_dmem : in core_dmem;
-- wb master port
wmsti : in wb_mst_in_type;
wmsto : out wb_mst_out_type
);
end core2wb;
architecture Behavioral of core2wb is
signal msto : wb_mst_out_type := wbm_out_none;
type STATE_TYPE IS (ONEACC, SIMACCWR, SIMACCRD);
signal state, nstate: STATE_TYPE;
begin
reg: process(clk)
begin
if rst = '1' then
state <= ONEACC;
in_dmem.read_data <= (others => '0');
elsif rising_edge(clk) then
state <= nstate;
if wmsti.ack = '1' then
in_dmem.read_data <= dec_wb_dat(msto.sel, wmsti.dat);
end if;
end if;
end process;
nscl: process(state, out_dmem, wmsti.ack)
begin
case state is
when ONEACC =>
if out_dmem.read_en = '1' and out_dmem.write_en = '1' then
nstate <= SIMACCWR;
else
nstate <= state;
end if;
when SIMACCWR =>
if wmsti.ack = '1' then
nstate <= SIMACCRD;
else
nstate <= state; -- wait til get ack from wr request
end if;
when SIMACCRD =>
if wmsti.ack = '1' then -- read_ack
nstate <= ONEACC;
else
nstate <= state; -- feed the old read value from previous sim request
end if;
end case;
end process;
ocl: process(state, out_dmem, wmsti.ack)
begin
msto.dat <= (others => '0');
case state is
when ONEACC =>
if(out_dmem.write_en = '1') then
msto.we <= '1';
msto.stb <= '1';
msto.cyc <= '1';
msto.adr <= out_dmem.write_addr(memory_width - 1 downto WB_ADR_BOUND);
msto.sel <= gen_select(out_dmem.write_addr(1 downto 0), out_dmem.write_size);
msto.dat <= enc_wb_dat(out_dmem.write_addr(1 downto 0), out_dmem.write_size, out_dmem.write_data);
elsif(out_dmem.read_en = '1' and out_dmem.write_en = '0') then
msto.we <= '0';
msto.stb <= '1';
msto.cyc <= '1';
msto.adr <= out_dmem.read_addr(memory_width - 1 downto WB_ADR_BOUND);
msto.sel <= gen_select(out_dmem.read_addr(1 downto 0), out_dmem.read_size);
else
msto <= wbm_out_none;
end if;
when SIMACCRD => -- using previous address from sim request, no need since core will keep holding the value
msto.we <= '0';
msto.stb <= '1';
msto.cyc <= '1';
msto.adr <= out_dmem.read_addr(memory_width - 1 downto WB_ADR_BOUND);
msto.sel <= gen_select(out_dmem.read_addr(1 downto 0), out_dmem.read_size);
when SIMACCWR =>
msto.we <= '1';
msto.stb <= '1';
msto.cyc <= '1';
msto.adr <= out_dmem.write_addr(memory_width - 1 downto WB_ADR_BOUND);
msto.sel <= gen_select(out_dmem.write_addr(1 downto 0), out_dmem.write_size);
msto.dat <= enc_wb_dat(out_dmem.write_addr(1 downto 0), out_dmem.write_size, out_dmem.write_data);
end case;
end process;
wmsto <= msto;
-----------------------------
-- wbmi 2 core
-----------------------------
wb2core_reg: process(wmsti, state, out_dmem)
begin
in_dmem.ready <= '0';
if state = SIMACCWR then
in_dmem.ready <= '0';
elsif state = SIMACCRD then
in_dmem.ready <= wmsti.ack;
elsif state = ONEACC then
if (out_dmem.write_en xor out_dmem.read_en)='1' then
in_dmem.ready <= wmsti.ack;
--elsif out_dmem.write_en='0' and out_dmem.read_en='0' then
-- indmem.ready <= '1';
--elsif out_dmem.write_en='1' and out_dmem.read_en='1' then
-- indmem.ready <= '0';
else --instead of the fancy stuff above:
in_dmem.ready <= out_dmem.write_en nand out_dmem.read_en;
end if;
end if;
end process;
end Behavioral;

141
soc/core/core_tb.vhd Normal file
View File

@@ -0,0 +1,141 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_global.all;
-- this testbench testes the core in total
entity core_tb is
end entity core_tb;
architecture RTL of core_tb is
-- clock period, f = 1/period
constant period : time := 10 ns;
component core
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_dmem : in dmem_core;
out_dmem : out core_dmem;
in_imem : in imem_core;
out_imem : out core_imem;
in_irq : in irq_core;
out_irq : out core_irq;
hardfault : out std_logic);
end component core;
component memory
generic(filename : string := "program.ram";
size : integer := 256;
imem_latency : time := 5 ns;
dmem_latency : time := 5 ns);
port(clk : in std_logic;
rst : in std_logic;
in_dmem : in core_dmem;
out_dmem : out dmem_core;
in_imem : in core_imem;
out_imem : out imem_core;
fault : out std_logic;
out_byte : out std_logic_vector(7 downto 0));
end component memory;
component irq_controller
port(clk : in std_logic;
rst : in std_logic;
in_proc : in core_irq;
out_proc : out irq_core;
irq_lines : in std_logic_vector((2 ** irq_num_width) - 1 downto 0));
end component irq_controller;
-- clock signal
signal clk : std_logic := '0';
-- reset signal, active high
signal rst : std_logic := '1';
-- outbyte signal
signal out_byte : std_logic_vector(7 downto 0);
-- signals between instances
signal dmem_proc_signal : dmem_core;
signal proc_dmem_signal : core_dmem;
signal imem_proc_signal : imem_core;
signal proc_imem_signal : core_imem;
signal irq_proc_signal : irq_core;
signal proc_irq_signal : core_irq;
signal irq_lines : std_logic_vector((2 ** irq_num_width) - 1 downto 0);
begin
core_inst : component core
port map(clk => clk,
rst => rst,
stall => '0',
in_dmem => dmem_proc_signal,
out_dmem => proc_dmem_signal,
in_imem => imem_proc_signal,
out_imem => proc_imem_signal,
in_irq => irq_proc_signal,
out_irq => proc_irq_signal,
hardfault => irq_lines(1));
memory_inst : component memory
generic map(--filename => "sample-programs\test_endianess2.ram",
--filename => "sample-programs\rawhztest.ram",
filename => "sample-programs\rdmem.ram",
size => 256,
imem_latency => 0 ns,
dmem_latency => 0 ns)
port map(clk => clk,
rst => rst,
in_dmem => proc_dmem_signal,
out_dmem => dmem_proc_signal,
in_imem => proc_imem_signal,
out_imem => imem_proc_signal,
fault => irq_lines(2),
out_byte => out_byte);
irq_controller_inst : component irq_controller
port map(clk => clk,
rst => rst,
in_proc => proc_irq_signal,
out_proc => irq_proc_signal,
irq_lines => irq_lines);
-- irq line stimuli
irq_stimuli : process is
begin
irq_lines(irq_lines'high downto 3) <= (others => '0');
irq_lines(0) <= '0';
-- irq0 is reset
-- irq1 is hardfault
-- irq2 is memfault
-- wait for 600 ns;
-- wait until rising_edge(clk);
-- irq_lines(3) <= '1';
-- irq_lines(4) <= '1';
-- wait until rising_edge(clk);
-- irq_lines(3) <= '0';
-- irq_lines(4) <= '0';
wait;
end process irq_stimuli;
-- clock stimuli
clock : process is
begin
clk <= not clk;
wait for period / 2;
end process clock;
-- reset stimuli
reset : process is
begin
rst <= '1';
wait for 3.5 * period;
rst <= '0';
wait;
end process reset;
end architecture RTL;

128
soc/core/core_wave.wcfg Normal file
View File

@@ -0,0 +1,128 @@
<?xml version="1.0" encoding="UTF-8"?>
<wave_config>
<wave_state>
</wave_state>
<db_ref_list>
<db_ref path="C:/msys/1.0/home/Ben/hiwi/esysoc/core_tb_isim_beh.wdb" id="1" type="auto">
<top_modules>
<top_module name="core_tb" />
<top_module name="lt16x32_global" />
<top_module name="lt16x32_internal" />
<top_module name="numeric_std" />
<top_module name="std_logic_1164" />
<top_module name="textio" />
</top_modules>
</db_ref>
</db_ref_list>
<WVObjectSize size="6" />
<wvobject fp_name="/core_tb/clk" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">clk</obj_property>
<obj_property name="ObjectShortName">clk</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/rst" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">rst</obj_property>
<obj_property name="ObjectShortName">rst</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/out_byte" type="array" db_ref_id="1">
<obj_property name="ElementShortName">out_byte[7:0]</obj_property>
<obj_property name="ObjectShortName">out_byte[7:0]</obj_property>
</wvobject>
<wvobject fp_name="group35" type="group">
<obj_property name="label">D mem</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/core_tb/dmem_proc_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">dmem_proc_signal</obj_property>
<obj_property name="ObjectShortName">dmem_proc_signal</obj_property>
<wvobject fp_name="/core_tb/dmem_proc_signal.read_data" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.read_data</obj_property>
<obj_property name="ObjectShortName">dmem_proc_signal.read_data</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/dmem_proc_signal.ready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">.ready</obj_property>
<obj_property name="ObjectShortName">dmem_proc_signal.ready</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">proc_dmem_signal</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal</obj_property>
<wvobject fp_name="/core_tb/proc_dmem_signal.write_data" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.write_data</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.write_data</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.write_addr" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.write_addr</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.write_addr</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.write_size" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.write_size</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.write_size</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.write_en" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">.write_en</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.write_en</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.read_addr" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.read_addr</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.read_addr</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.read_size" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.read_size</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.read_size</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_dmem_signal.read_en" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">.read_en</obj_property>
<obj_property name="ObjectShortName">proc_dmem_signal.read_en</obj_property>
</wvobject>
</wvobject>
</wvobject>
<wvobject fp_name="group34" type="group">
<obj_property name="label">I mem</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/core_tb/imem_proc_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">imem_proc_signal</obj_property>
<obj_property name="ObjectShortName">imem_proc_signal</obj_property>
<wvobject fp_name="/core_tb/imem_proc_signal.read_data" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.read_data</obj_property>
<obj_property name="ObjectShortName">imem_proc_signal.read_data</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/imem_proc_signal.ready" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">.ready</obj_property>
<obj_property name="ObjectShortName">imem_proc_signal.ready</obj_property>
</wvobject>
</wvobject>
<wvobject fp_name="/core_tb/proc_imem_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">proc_imem_signal</obj_property>
<obj_property name="ObjectShortName">proc_imem_signal</obj_property>
<wvobject fp_name="/core_tb/proc_imem_signal.read_addr" type="array" db_ref_id="1">
<obj_property name="ElementShortName">.read_addr</obj_property>
<obj_property name="ObjectShortName">proc_imem_signal.read_addr</obj_property>
<obj_property name="Radix">HEXRADIX</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_imem_signal.read_en" type="logic" db_ref_id="1">
<obj_property name="ElementShortName">.read_en</obj_property>
<obj_property name="ObjectShortName">proc_imem_signal.read_en</obj_property>
</wvobject>
</wvobject>
</wvobject>
<wvobject fp_name="group33" type="group">
<obj_property name="label">IRQ</obj_property>
<obj_property name="DisplayName">label</obj_property>
<wvobject fp_name="/core_tb/irq_proc_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">irq_proc_signal</obj_property>
<obj_property name="ObjectShortName">irq_proc_signal</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/proc_irq_signal" type="array" db_ref_id="1">
<obj_property name="ElementShortName">proc_irq_signal</obj_property>
<obj_property name="ObjectShortName">proc_irq_signal</obj_property>
</wvobject>
<wvobject fp_name="/core_tb/irq_lines" type="array" db_ref_id="1">
<obj_property name="ElementShortName">irq_lines[15:0]</obj_property>
<obj_property name="ObjectShortName">irq_lines[15:0]</obj_property>
</wvobject>
</wvobject>
</wave_config>

142
soc/core/corewrapper.vhd Normal file
View File

@@ -0,0 +1,142 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
use work.lt16x32_global.all;
use work.wishbone.all;
use work.config.all;
-- TODO: check core(big/little endian) -> assume as little !!
entity corewrapper is
port(
clk : in std_logic;
rst : in std_logic;
in_imem : in imem_core;
out_imem : out core_imem;
in_proc : in irq_core;
out_proc : out core_irq;
hardfault : out std_logic;
-- wb master port
wmsti : in wb_mst_in_type;
wmsto : out wb_mst_out_type
);
end entity corewrapper;
architecture RTL of corewrapper is
signal wbmo : wb_mst_out_type := wbm_out_none;
--signal indmem : dmem_core;
signal in_dmem : dmem_core;
signal out_dmem : core_dmem;
-- signal inimem : imem_core;
-- signal outimem : core_imem;
--//////////////////////////////////////////////////////
-- component
--//////////////////////////////////////////////////////
component core
port(
clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_dmem : in dmem_core;
out_dmem : out core_dmem;
in_imem : in imem_core;
out_imem : out core_imem;
in_irq : in irq_core;
out_irq : out core_irq;
hardfault : out std_logic
);
end component;
component core2wb
port(
clk : in std_logic;
rst : in std_logic;
in_dmem : out dmem_core;
out_dmem : in core_dmem;
-- wb master port
wmsti : in wb_mst_in_type;
wmsto : out wb_mst_out_type
);
end component;
begin
--//////////////////////////////////////////////////////
-- Instantiate
--//////////////////////////////////////////////////////
--
core_inst: core
port map(
clk => clk,
rst => rst,
stall => '0', -- no stall for now -- wmsti.stall
in_dmem => in_dmem,
out_dmem => out_dmem,
in_imem => in_imem, -- inimem,
out_imem => out_imem, -- outimem,
in_irq => in_proc,
out_irq => out_proc,
hardfault => hardfault
);
core2wb_inst: core2wb
port map(
clk => clk,
rst => rst,
in_dmem => in_dmem,
out_dmem => out_dmem,
-- wb master port
wmsti => wmsti,
wmsto => wmsto
);
--//////////////////////////////////////////////////////
-- I - mem
--//////////////////////////////////////////////////////
-- core connect directly to the mem
-- imem: process(clk)
-- begin
-- if rising_edge(clk) then
-- if rst = '1' then
-- -- to core
-- inimem.read_data <= (others=>'-');
-- inimem.ready <= '0';
-- -- out from core
-- outimem.read_addr <= (others=>'0');
-- outimem.read_en <= '0';
--
-- out_imem.read_addr <= (others=>'0');
-- out_imem.read_en <= '0';
-- else
-- -- to core
-- inimem <= in_imem;
-- -- out from core
-- out_imem <= outimem;
-- end if;
-- end if;
-- end process;
end architecture RTL;

332
soc/core/datapath.vhd Normal file
View File

@@ -0,0 +1,332 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
use work.lt16x32_global.all;
-- the datapath handles all data interactions, including the registerfile and the ALU
entity datapath is
port(
-- clock signal
clk : in std_logic;
-- reset signal, active high, synchronous
rst : in std_logic;
-- stall signal (halts pipelines and all flipflops), active high, synchronous
stall : in std_logic;
-- signals to decoder
out_dec : out dp_dec;
-- signals from control path
in_cp : in cp_dp;
-- signals to control path
out_cp : out dp_cp;
-- signals from PC counter
in_pc : in pc_dp;
-- signals to PC counter
out_pc : out dp_pc;
-- signals from data memory
in_dmem : in dmem_dp;
-- signals to data memory
out_dmem : out dp_dmem;
-- hardfault signal
hardfault : out std_logic
);
end entity datapath;
architecture RTL of datapath is
component alu
port(in_a : in signed(reg_width - 1 downto 0);
in_b : in signed(reg_width - 1 downto 0);
t_out : out std_logic;
ovf_out : out std_logic;
mode : in alu_mode_type;
data_out : out signed(reg_width - 1 downto 0));
end component alu;
component registerfile
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
a_num : in reg_number;
a_out : out signed(reg_width - 1 downto 0);
b_num : in reg_number;
b_out : out signed(reg_width - 1 downto 0);
pc_in : in unsigned(pc_width - 1 downto 0);
write_data : in signed(reg_width - 1 downto 0);
write_num : in reg_number;
write_en : in std_logic;
true_writeenable : in std_logic;
true_in : in std_logic;
true_out : out std_logic;
ovf_writeenable : in std_logic;
ovf_in : in std_logic;
runtime_priority : out unsigned(irq_prio_width - 1 downto 0));
end component registerfile;
-- signals from register file
signal regfile_reg_a : signed(reg_width - 1 downto 0);
signal regfile_reg_b : signed(reg_width - 1 downto 0);
signal regfile_tflag : std_logic;
-- signals from ALU
signal alu_result : signed(reg_width - 1 downto 0);
signal alu_tflag : std_logic;
signal alu_ovfflag : std_logic;
-- mux output signals
-- data written to register file (if registerfile.we = '1')
signal reg_write_data : signed(reg_width - 1 downto 0);
-- second alu input data
signal alu_input_b : signed(reg_width - 1 downto 0);
-- bit saved as truth-flag (if registerfile.tflag_we = '1')
signal tflag_write_data : std_logic;
-- forwarded register values
-- register a value after forwarding unit
signal regfile_reg_a_fwd : signed(reg_width - 1 downto 0);
-- register b value after forwarding unit
signal regfile_reg_b_fwd : signed(reg_width - 1 downto 0);
-- truth-flag after forwarding
signal regfile_tflag_fwd : std_logic;
-- pipelined signals
signal register_number_a_s2 : reg_number;
signal register_number_b_s2 : reg_number;
signal regfile_reg_a_s3 : signed(reg_width - 1 downto 0);
signal regfile_reg_b_s3 : signed(reg_width - 1 downto 0);
signal alu_result_s3 : signed(reg_width - 1 downto 0);
signal alu_tflag_s3 : std_logic;
signal alu_ovfflag_s3 : std_logic;
signal pc_value_s2 : unsigned(pc_width - 1 downto 0);
signal immediate_signext_s3 : signed(reg_width - 1 downto 0);
-- signals calculated internally in datapath
-- LDR address
signal ldr_address : signed(reg_width - 1 downto 0);
-- immediate value with signextension for use as alu input
signal immediate_signext : signed(reg_width - 1 downto 0);
-- write data to register file including masking for size
signal reg_write_data_sized : signed(reg_width - 1 downto 0);
-- dmem read data or'ed with 0xF0
signal dmemORx80 : std_logic_vector(reg_width - 1 downto 0);
-- hardfault signals
signal regwrite_size_error : std_logic;
-- returns minimum of (a, b). needed, since XILINX does not support constant conditional syntax
function minval(a : integer; b : integer) return integer is
begin
if (a <= b) then
return a;
else
return b;
end if;
end function minval;
begin
registerfile_inst : component registerfile
port map(clk => clk,
rst => rst,
stall => stall,
a_num => in_cp.s1.register_read_number_a,
a_out => regfile_reg_a,
b_num => in_cp.s1.register_read_number_b,
b_out => regfile_reg_b,
pc_in => pc_value_s2,
write_data => reg_write_data_sized,
write_num => in_cp.s3.register_write_number,
write_en => in_cp.s3.register_write_enable,
true_writeenable => in_cp.s3.tflag_write_enable,
true_in => tflag_write_data,
true_out => regfile_tflag,
ovf_writeenable => in_cp.s3.ovfflag_write_enable,
ovf_in => alu_ovfflag_s3,
runtime_priority => out_dec.runtime_priority);
alu_inst : component alu
port map(in_a => regfile_reg_a_fwd,
in_b => alu_input_b,
t_out => alu_tflag,
ovf_out => alu_ovfflag,
mode => in_cp.s2.alu_mode,
data_out => alu_result);
-- simple output assignments
out_pc.register_value <= regfile_reg_a_fwd(regfile_reg_a_fwd'high downto 1); -- last bit ignored for PC
hardfault <= regwrite_size_error;
out_dmem.write_addr(reg_width - 1 downto 0) <= std_logic_vector(regfile_reg_a_s3);
out_cp.s2.tflag <= regfile_tflag_fwd;
-- create signextended immediate
-- sign extension
immediate_signext(immediate_signext'left downto (in_cp.s2.immediate'left + 1)) <= (others => in_cp.s2.immediate(7));
-- actual data
immediate_signext(in_cp.s2.immediate'range) <= in_cp.s2.immediate;
-- ldr address calculation
-- ldr_address = PC + (immediate << 1)
ldr_address <= signed(pc_value_s2) + signed(immediate_signext(reg_width - 2 downto 0) & "0");
-- create immediate value for pc block
-- sign extension
pc_imm_fill : if (reg_width > 8) generate
out_pc.immediate_value(out_pc.immediate_value'left downto (in_cp.s2.immediate'left + 1)) <= (others => in_cp.s2.immediate(7));
end generate;
-- actual data, (left shift by one is performed by PC)
out_pc.immediate_value(minval(out_pc.immediate_value'high, in_cp.s2.immediate'left) downto 0) <= in_cp.s2.immediate(minval(out_pc.immediate_value'high, in_cp.s2.immediate'left) downto 0);
-- fill dmem read/write address and dmem write data, if reg width is smaller than memory width
-- all warnings of the type "Null range" can be safely ignored for reg_width = mem_width
dmem_fill : if (reg_width < mem_width) generate
out_dmem.write_addr(mem_width - 1 downto reg_width) <= (others => '0');
out_dmem.write_data(mem_width - 1 downto reg_width) <= (others => '0');
out_dmem.read_addr(mem_width - 1 downto reg_width) <= (others => '0');
end generate dmem_fill;
-- dmem data or'ing (dmemORx80 = dmem.read_data or 0x80)
dmemORx80_calc : process(in_dmem.read_data) is
begin
dmemORx80 <= in_dmem.read_data(reg_width - 1 downto 0);
dmemORx80(7) <= '1';
end process dmemORx80_calc;
-- multiplexer
regfile_write_data_mux : with in_cp.s3.register_write_data_select select reg_write_data <=
signed(in_dmem.read_data(reg_width - 1 downto 0)) when sel_memory,
alu_result_s3 when sel_alu_result,
immediate_signext_s3 when sel_immediate;
alu_in_b_mux : with in_cp.s2.alu_input_data_select select alu_input_b <=
regfile_reg_b_fwd when sel_register_b,
immediate_signext when sel_imm;
dmem_write_data_mux : with in_cp.s3.memory_write_data_select select out_dmem.write_data(reg_width - 1 downto 0) <=
std_logic_vector(regfile_reg_b_s3) when sel_register_value,
dmemORx80 when sel_dmemORx80;
dmem_read_addr_mux : with in_cp.s2.memory_read_addr_select select out_dmem.read_addr(reg_width - 1 downto 0) <=
std_logic_vector(regfile_reg_a_fwd) when sel_register_a,
std_logic_vector(regfile_reg_b_fwd) when sel_register_b,
std_logic_vector(ldr_address) when sel_ldr_address;
tflag_write_data_mux : with in_cp.s3.tflag_write_data_select select tflag_write_data <=
(not in_dmem.read_data(7)) when sel_dmem7,
alu_tflag_s3 when sel_alu;
-- forwarding units
forward_register_a : process(in_cp.s3.register_write_number, register_number_a_s2, reg_write_data_sized, regfile_reg_a, in_cp.s3.register_write_enable) is
begin
if ((in_cp.s3.register_write_enable = '1') and (in_cp.s3.register_write_number = register_number_a_s2)) then
-- next cycle, there's a write to register number a, forward new value
regfile_reg_a_fwd <= reg_write_data_sized;
else
-- next cycle is no write to register number a, no forwarding
regfile_reg_a_fwd <= regfile_reg_a;
end if;
end process forward_register_a;
forward_register_b : process(in_cp.s3.register_write_number, register_number_b_s2, reg_write_data_sized, regfile_reg_b, in_cp.s3.register_write_enable) is
begin
if ((in_cp.s3.register_write_enable = '1') and (in_cp.s3.register_write_number = register_number_b_s2)) then
-- next cycle, there's a write to register number b, forward new value
regfile_reg_b_fwd <= reg_write_data_sized;
else
-- next cycle is no write to register number b, no forwarding
regfile_reg_b_fwd <= regfile_reg_b;
end if;
end process forward_register_b;
forward_tflag : process(tflag_write_data, regfile_tflag, in_cp.s3.tflag_write_enable) is
begin
if (in_cp.s3.tflag_write_enable = '1') then
-- next cycle, there's a write to the truth flag, forward new value
regfile_tflag_fwd <= tflag_write_data;
else
-- next cycle is no write to the truth flag
regfile_tflag_fwd <= regfile_tflag;
end if;
end process forward_tflag;
-- generate size-matched data for the register file and forwarding units from the full-word write data
reg_write_data_sized_calc : process(reg_write_data, in_cp.s3.register_write_size) is
variable error : boolean;
begin
error := false;
reg_write_data_sized <= (others => '0');
case in_cp.s3.register_write_size is
when size_byte =>
reg_write_data_sized(7 downto 0) <= reg_write_data(7 downto 0);
when size_halfword =>
if (reg_width >= 16) then
reg_write_data_sized(minval(reg_width - 1, 15) downto 0) <= reg_write_data(minval(reg_width - 1, 15) downto 0);
else
error := true;
end if;
when size_word =>
if (reg_width >= 32) then
reg_write_data_sized(minval(reg_width - 1, 31) downto 0) <= reg_write_data(minval(reg_width - 1, 31) downto 0);
else
error := true;
end if;
end case;
if (error) then
-- synthesis translate_off
assert false report "size not supported" severity warning;
-- synthesis translate_on
regwrite_size_error <= '1';
else
regwrite_size_error <= '0';
end if;
end process reg_write_data_sized_calc;
-- pipelining
pipeline : process(clk) is
begin
if (rising_edge(clk)) then
if (rst = '1') then
-- default values in reset state
pc_value_s2 <= (others => '0');
alu_result_s3 <= (others => '0');
alu_tflag_s3 <= '0';
alu_ovfflag_s3 <= '0';
register_number_a_s2 <= (others => '0');
register_number_b_s2 <= (others => '0');
regfile_reg_a_s3 <= (others => '0');
regfile_reg_b_s3 <= (others => '0');
immediate_signext_s3 <= (others => '0');
elsif (stall = '0') then
-- if stall is not active, pipeline values
pc_value_s2 <= in_pc.value;
alu_result_s3 <= alu_result;
alu_tflag_s3 <= alu_tflag;
alu_ovfflag_s3 <= alu_ovfflag;
register_number_a_s2 <= in_cp.s1.register_read_number_a;
register_number_b_s2 <= in_cp.s1.register_read_number_b;
regfile_reg_a_s3 <= regfile_reg_a_fwd;
regfile_reg_b_s3 <= regfile_reg_b_fwd;
immediate_signext_s3 <= immediate_signext;
end if;
end if;
end process pipeline;
end architecture RTL;

125
soc/core/decoder.vhd Normal file
View File

@@ -0,0 +1,125 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use work.lt16x32_internal.all;
-- the decoder translates instructions from the memory into control signals.
-- it bundles pre-stage, finite stage machine and multiple instruction decoder (16bit, 32bit, shadow)
entity decoder is
port(
-- clock signal
clk : in std_logic;
-- reset signal, active high, synchronous
rst : in std_logic;
-- stall signal, active high, synchronous
stall : in std_logic;
-- signals from instruction memory
in_imem : in imem_dec;
-- signals to instruction memory
out_imem : out dec_imem;
-- signals from datapath
in_dp : in dp_dec;
-- signals from controlpath
in_cp : in cp_dec;
-- signals to controlpath
out_cp : out dec_cp;
-- signals to PC
out_pc : out dec_pc;
-- signals from interrupt controller
in_irq : in irq_dec;
-- signals to interrupt controller
out_irq : out dec_irq
);
end entity decoder;
architecture RTL of decoder is
component decoder_pre
port(input : in imem_dec;
output : out pre_fsm);
end component decoder_pre;
component decoder_16bit
port(input : in fsm_dec16;
output : out dec_cp);
end component decoder_16bit;
component decoder_32bit
port(input : in fsm_dec32;
output : out dec_cp);
end component decoder_32bit;
component decoder_shadow
port(input : in fsm_decshd;
output : out dec_cp);
end component decoder_shadow;
component decoder_fsm
port(clk : in std_logic;
rst : in std_logic;
stall : in std_logic;
in_pre : in pre_fsm;
in_cp : in cp_dec;
in_dp : in dp_dec;
out_16 : out fsm_dec16;
out_32 : out fsm_dec32;
out_shd : out fsm_decshd;
out_mux : out fsm_decmux;
out_pc : out dec_pc;
out_imem : out dec_imem;
in_irq : in irq_dec;
out_irq : out dec_irq);
end component decoder_fsm;
-- signals between instances
signal pre_fsm_signal : pre_fsm;
signal fsm_dec16_signal : fsm_dec16;
signal fsm_dec32_signal : fsm_dec32;
signal fsm_decshd_signal : fsm_decshd;
signal fsm_mux_signal : fsm_decmux;
signal fsm_pc_signal : dec_pc;
signal fsm_imem_signal : dec_imem;
signal dec16_mux_signal : dec_cp;
signal dec32_mux_signal : dec_cp;
signal decshd_mux_signal : dec_cp;
begin
decoder_pre_inst : component decoder_pre
port map(input => in_imem,
output => pre_fsm_signal);
decoder_fsm_inst : component decoder_fsm
port map(clk => clk,
rst => rst,
stall => stall,
in_pre => pre_fsm_signal,
in_cp => in_cp,
in_dp => in_dp,
in_irq => in_irq,
out_irq => out_irq,
out_16 => fsm_dec16_signal,
out_32 => fsm_dec32_signal,
out_shd => fsm_decshd_signal,
out_mux => fsm_mux_signal,
out_pc => fsm_pc_signal,
out_imem => fsm_imem_signal);
decoder_16_inst : component decoder_16bit
port map(input => fsm_dec16_signal,
output => dec16_mux_signal);
decoder_32_inst : component decoder_32bit
port map(input => fsm_dec32_signal,
output => dec32_mux_signal);
decoder_shd_inst : component decoder_shadow
port map(input => fsm_decshd_signal,
output => decshd_mux_signal);
-- multiplexer
mux_output : with fsm_mux_signal.mode select out_cp <=
dec16_mux_signal when sel_ir16,
dec32_mux_signal when sel_ir32,
decshd_mux_signal when sel_irshadow;
-- simple signal assignments
out_pc <= fsm_pc_signal;
out_imem <= fsm_imem_signal;
end architecture RTL;

229
soc/core/decoder_16bit.vhd Normal file
View File

@@ -0,0 +1,229 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
-- the decoder_16bit decodes all 16bit instructions and is fully combinatoric
entity decoder_16bit is
port(
-- input signals from decoder_fsm
input : in fsm_dec16;
-- output signals to controlpath (or decoder mux)
output : out dec_cp
);
end entity decoder_16bit;
architecture RTL of decoder_16bit is
begin
-- decode instruction
decode : process(input) is
begin
-- set defaults to prevent taking values from previous operations
output.s1 <= get_default_dec_cp_s1;
output.s2 <= get_default_dec_cp_s2;
output.s3 <= get_default_dec_cp_s3;
output.hardfault <= '0';
-- directly forwarded instruction parts
output.s1.register_read_number_a <= reg_number(input.instruction(7 downto 4));
output.s1.register_read_number_b <= reg_number(input.instruction(3 downto 0));
output.s3.register_write_number <= reg_number(input.instruction(11 downto 8));
-- set opcode specific signals
case input.instruction(15 downto 12) is
when op_add => -- add instruction
output.s2.alu_mode <= alu_add;
output.s3.register_write_enable <= '1';
output.s3.ovfflag_write_enable <= '1';
when op_sub => -- subtract instruction
output.s2.alu_mode <= alu_sub;
output.s3.register_write_enable <= '1';
output.s3.ovfflag_write_enable <= '1';
when op_or => -- bitwise or instruction
output.s2.alu_mode <= alu_or;
output.s3.register_write_enable <= '1';
when op_and => -- bitwise and instruction
output.s2.alu_mode <= alu_and;
output.s3.register_write_enable <= '1';
when op_xor => -- bitwise xor instruction
output.s2.alu_mode <= alu_xor;
output.s3.register_write_enable <= '1';
when op_lsh => -- logic left shift instruction
output.s2.alu_mode <= alu_lsh;
output.s2.alu_input_data_select <= sel_imm;
output.s2.immediate <= signed("0000" & input.instruction(3 downto 0));
output.s3.register_write_enable <= '1';
when op_rsh => -- logic right shift instruction
output.s2.alu_mode <= alu_rsh;
output.s2.alu_input_data_select <= sel_imm;
output.s2.immediate <= signed("0000" & input.instruction(3 downto 0));
output.s3.register_write_enable <= '1';
when op_addi => -- add immediate instruction
output.s1.register_read_number_a <= reg_number(input.instruction(11 downto 8));
output.s2.alu_mode <= alu_add;
output.s2.alu_input_data_select <= sel_imm;
output.s2.immediate <= signed(input.instruction(7 downto 0));
output.s3.register_write_enable <= '1';
output.s3.ovfflag_write_enable <= '1';
when op_cmp => -- compare instruction
output.s3.tflag_write_enable <= '1';
case input.instruction(11 downto 8) is
when op_cmp_eq => -- compare for equal
output.s2.alu_mode <= alu_cmp_eq;
when op_cmp_neq => -- compare for not equal
output.s2.alu_mode <= alu_cmp_neq;
when op_cmp_ge => -- compare for greater than or equal
output.s2.alu_mode <= alu_cmp_ge;
when op_cmp_ll => -- compare for less than
output.s2.alu_mode <= alu_cmp_ll;
when op_cmp_gg => -- compare for greater than
output.s2.alu_mode <= alu_cmp_gg;
when op_cmp_le => -- compare for less than or equal
output.s2.alu_mode <= alu_cmp_le;
when op_cmp_true => -- set truth flag
output.s2.alu_mode <= alu_cmp_true;
when op_cmp_false => -- reset truth flag
output.s2.alu_mode <= alu_cmp_false;
when others =>
-- unknown compare mode, throw hardfault
output.hardfault <= '1';
-- synthesis translate_off
assert false report "cmp mode not supported" severity error;
-- synthesis translate_on
end case;
when op_bct => -- branch, call, trap, reti instruction
if (input.instruction(11 downto 9) = op_bct_reti) then
-- it's reti instruction, which is not allowed here (as it is handled earlier in decoder)
output.hardfault <= '1';
-- synthesis translate_off
assert false report "reti operation not allowed in 16 bit decoder stage" severity error;
-- synthesis translate_on
else -- table / branch / (call) / trap
-- decode source bit
if (input.instruction(9) = '0') then -- bct to immediate
if (input.instruction(11 downto 10) = op_bct_trap) then
-- trap is absolute to immediate
output.s2.pc_mode_select <= sel_absolute;
else
-- all other branches to immediate are relative
output.s2.pc_mode_select <= sel_relative;
end if;
-- immediate parameters
output.s2.pc_summand_select <= sel_immediate;
output.s2.immediate <= signed(input.instruction(7 downto 0));
else -- bct to register
if (input.instruction(11 downto 10) = op_bct_table) then
-- branch to table is pc relative
output.s2.pc_mode_select <= sel_relative;
else
-- all other branches to register are absolute
output.s2.pc_mode_select <= sel_absolute;
end if;
-- register parameters
output.s2.pc_summand_select <= sel_register_a;
end if;
-- decode conditional bit
if (input.instruction(8) = '1') then
output.s2.pc_condition <= sel_true;
else
output.s2.pc_condition <= sel_unconditional;
end if;
end if;
when op_mem => -- memory instructions
case input.instruction(11 downto 8) is
when op_mem_ld08 => -- load byte
output.s2.dmem_read_addr_select <= sel_register_b;
output.s2.dmem_read_en <= '1';
output.s2.dmem_read_size <= size_byte;
output.s3.register_write_data_select <= sel_memory;
output.s3.register_write_enable <= '1';
output.s3.register_write_size <= size_byte;
output.s3.register_write_number <= reg_number(input.instruction(7 downto 4));
when op_mem_ld16 => -- load halfword
output.s2.dmem_read_addr_select <= sel_register_b;
output.s2.dmem_read_en <= '1';
output.s2.dmem_read_size <= size_halfword;
output.s3.register_write_data_select <= sel_memory;
output.s3.register_write_enable <= '1';
output.s3.register_write_size <= size_halfword;
output.s3.register_write_number <= reg_number(input.instruction(7 downto 4));
when op_mem_ld32 => -- load word
output.s2.dmem_read_addr_select <= sel_register_b;
output.s2.dmem_read_en <= '1';
output.s2.dmem_read_size <= size_word;
output.s3.register_write_data_select <= sel_memory;
output.s3.register_write_enable <= '1';
output.s3.register_write_size <= size_word;
output.s3.register_write_number <= reg_number(input.instruction(7 downto 4));
when op_mem_st08 => -- store byte
output.s3.dmem_write_en <= '1';
output.s3.dmem_write_size <= size_byte;
output.s3.dmem_write_data_select <= sel_register_value;
when op_mem_st16 => -- store halfword
output.s3.dmem_write_en <= '1';
output.s3.dmem_write_size <= size_halfword;
output.s3.dmem_write_data_select <= sel_register_value;
when op_mem_st32 => -- store word
output.s3.dmem_write_en <= '1';
output.s3.dmem_write_size <= size_word;
output.s3.dmem_write_data_select <= sel_register_value;
when others =>
-- unknown memory mode, throw hardfault
output.hardfault <= '1';
-- synthesis translate_off
assert false report "memory mode not supported" severity error;
-- synthesis translate_on
end case;
when op_ldr => -- load pc relative (full register width)
output.s2.immediate <= signed(input.instruction(7 downto 0));
output.s2.dmem_read_addr_select <= sel_ldr_address;
output.s2.dmem_read_en <= '1';
output.s2.dmem_read_size <= reg_size;
output.s3.register_write_data_select <= sel_memory;
output.s3.register_write_enable <= '1';
output.s3.register_write_size <= reg_size;
when op_tst => -- test and set
output.s2.dmem_read_addr_select <= sel_register_a;
output.s2.dmem_read_en <= '1';
output.s2.dmem_read_size <= size_byte;
output.s3.register_write_data_select <= sel_memory;
output.s3.register_write_enable <= '1';
output.s3.register_write_size <= size_byte;
output.s3.dmem_write_en <= '1';
output.s3.dmem_write_size <= size_byte;
output.s3.dmem_write_data_select <= sel_dmemORx80;
output.s3.tflag_write_data_select <= sel_dmem7;
output.s3.tflag_write_enable <= '1';
-- synthesis translate_off
when "UUUU" =>
null; -- ignore startup
when "XXXX" =>
null; -- ignore IM delay
-- synthesis translate_on
when others =>
-- unkwown operation, throw hardfault
output.hardfault <= '1';
-- synthesis translate_off
assert false report "unknown operation not implemented" severity error;
-- synthesis translate_on
end case;
end process decode;
end architecture RTL;

View File

@@ -0,0 +1,28 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
-- the decoder_32bit decodes all 32bit instructions and is fully combinatoric
entity decoder_32bit is
port(
-- input signals from decoder finite state machine
input : in fsm_dec32;
-- output signals to control path (or decoder mux)
output : out dec_cp
);
end entity decoder_32bit;
architecture RTL of decoder_32bit is
begin
-- currently, there are no 32bit instructions, so output is
-- always nop and hardfault
output.s1 <= get_default_dec_cp_s1;
output.s2 <= get_default_dec_cp_s2;
output.s3 <= get_default_dec_cp_s3;
output.hardfault <= '1';
end architecture RTL;

319
soc/core/decoder_fsm.vhd Normal file
View File

@@ -0,0 +1,319 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.lt16x32_internal.all;
use work.lt16x32_global.all;
-- the decoder_fsm is the finite state machine handling multi-cycle operation and interrupt acknowledgement
entity decoder_fsm is
port(
-- clock signal
clk : in std_logic;
-- reset signal, active high, synchronous
rst : in std_logic;
-- stall signal, active high
stall : in std_logic;
-- signals from pre-decoder
in_pre : in pre_fsm;
-- signals from control path
in_cp : in cp_dec;
-- signals from datapath
in_dp : in dp_dec;
-- signals to 16bit decoder
out_16 : out fsm_dec16;
-- signals to 32bit decoder
out_32 : out fsm_dec32;
-- signals to shadow decoder
out_shd : out fsm_decshd;
-- signals to decoder mux
out_mux : out fsm_decmux;
-- signals to pc counter
out_pc : out dec_pc;
-- signals to instruction memory
out_imem : out dec_imem;
-- signals from interrupt controller
in_irq : in irq_dec;
-- signals to interrupt controller
out_irq : out dec_irq
);
end entity decoder_fsm;
architecture RTL of decoder_fsm is
-- possible states of fsm
type state_type is (normal, reset, reset2, copyPCtoLR, branchdelay, irq_decSP1, irq_pushSR, irq_pushLR, irq_setSR, irq_setPC, reti_popLR, reti_incSP1, reti_popSR, reti_incSP2); --add irq_decSP2 for 4 instruction irq stack solution
-- current state
signal state : state_type := normal;
-- temporary storage for multicycle operations
signal multicycleinstruction : std_logic_vector(31 downto 0);
begin
-- the finite state machine is modelled as mealy-machine
-- generate output (combinatoric part)
output : process(in_pre, state, multicycleinstruction, in_cp.condition_holds) is
variable state_variable : state_type;
begin
-- standard output
out_16.instruction <= nop16;
out_32.instruction <= in_pre.instruction;
out_shd.instruction(31 downto 28) <= op_shd_push;
out_shd.instruction(27 downto 0) <= (others => '0');
out_mux.mode <= sel_ir16;
out_pc.stall <= '0';
out_imem.en <= '1';
out_irq.ack <= '0';
out_irq.trap_req <= '0';
out_irq.trap_num <= (others => '0');
-- copy state to variable for further processing
state_variable := state;
-- don't insert nop in branch delay if no branch taken
-- happens only, if execute_branch_delay_slot is false
if ((state = branchdelay) and (in_cp.condition_holds = '0')) then
state_variable := normal;
end if;
-- don't write LR if no call happens
if ((state = copyPCtoLR) and (in_cp.condition_holds = '0')) then
state_variable := normal;
end if;
-- generate state dependend output
case state_variable is
when reset => -- first cycle in reset
out_pc.stall <= '1';
out_shd.instruction(31 downto 28) <= op_shd_reset;
out_mux.mode <= sel_irshadow;
when reset2 => -- second cycle in reset
out_pc.stall <= '0';
out_16.instruction <= nop16;
out_mux.mode <= sel_ir16;
when normal => -- standard mode
out_pc.stall <= '0';
case in_pre.mode is -- check decoder_pre mode output
when sel_normal16 => -- normal 16 bit instruction
out_mux.mode <= sel_ir16;
out_16.instruction <= in_pre.instruction(15 downto 0);
when sel_normal32 => -- normal 32 bit instruction
out_mux.mode <= sel_ir32;
out_32.instruction <= in_pre.instruction;
when sel_branch => -- branch instruction
out_mux.mode <= sel_ir16;
out_16.instruction <= in_pre.instruction(15 downto 0);
when sel_call => -- call instruction
out_mux.mode <= sel_ir16;
out_16.instruction <= op_bct & "01" & in_pre.instruction(9 downto 0);
--out_imem.en <= '0'; -- imem must be read in case that condition does not hold and next instruction should be executed
when sel_trap => -- trap instruction
out_mux.mode <= sel_ir16;
out_16.instruction <= nop16;
out_irq.trap_num <= unsigned(in_pre.instruction(irq_num_width - 1 downto 0));
out_irq.trap_req <= '1';
when sel_reti => -- reti instruction
out_mux.mode <= sel_ir16;
out_16.instruction <= op_bct & "0110" & std_logic_vector(lr_num) & "0000";
out_imem.en <= '0';
when sel_stall => -- stall (i.e. imem not ready)
out_mux.mode <= sel_ir16;
out_16.instruction <= in_pre.instruction(15 downto 0);
out_pc.stall <= '1';
end case;
when copyPCtoLR => -- LR = PC, used in call and irq
-- only if condition true, else normal instruction (this check is done in state transition)
out_mux.mode <= sel_ir16;
out_16.instruction <= op_or & std_logic_vector(lr_num) & std_logic_vector(pc_num) & std_logic_vector(pc_num);
out_imem.en <= '1';
when branchdelay => -- insert NOP to branch delay slot if enabled in configuration
out_pc.stall <= '0';
out_mux.mode <= sel_ir16;
out_imem.en <= '1';
--when irq_pushLR => -- irq: push LR
-- out_pc.stall <= '1';
-- out_mux.mode <= sel_irshadow;
-- out_shd.instruction(31 downto 28) <= op_shd_push;
-- out_shd.instruction(3 downto 0) <= std_logic_vector(lr_num);
-- out_imem.en <= '0';
when irq_pushLR =>
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_mem & op_mem_st32 & std_logic_vector(sp_num) & std_logic_vector(lr_num);
out_imem.en <= '1';
when irq_setSR => -- irq: push SR and set new SR value
out_pc.stall <= '1';
out_mux.mode <= sel_irshadow;
out_shd.instruction(31 downto 28) <= op_shd_setsr;
-- new runtime priority, other SR flags all zero
out_shd.instruction(7 downto (8 - irq_prio_width)) <= multicycleinstruction(16 + irq_prio_width - 1 downto 16);
out_imem.en <= '0';
when irq_setPC => -- irq: branch to irq address
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_bct & "11" & multicycleinstruction(9 downto 0);
out_imem.en <= '0';
when reti_popLR => -- reti: load LR from stack
out_pc.stall <= '0'; --former 1
out_mux.mode <= sel_ir16;
out_16.instruction <= op_mem & op_mem_ld32 & std_logic_vector(lr_num) & std_logic_vector(sp_num);
out_imem.en <= '0';
when reti_popSR => -- reti: load SR from stack
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_mem & op_mem_ld32 & std_logic_vector(sr_num) & std_logic_vector(sp_num);
out_imem.en <= '1';
when reti_incSP1 => -- reti: increment SP
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_addi & std_logic_vector(sp_num) & std_logic_vector(to_signed(4, 8));
out_imem.en <= '0';
when reti_incSP2 => -- reti increment SP
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_addi & std_logic_vector(sp_num) & std_logic_vector(to_signed(4, 8));
out_imem.en <= '0';
when irq_pushSR => -- irq: push SR (store and decrement SP afterwards)
out_mux.mode <= sel_irshadow;
out_shd.instruction(31 downto 28) <= op_shd_push;
out_shd.instruction(3 downto 0) <= std_logic_vector(sr_num);
out_irq.ack <= '1';
out_pc.stall <= '1';
--when irq_pushSR =>
-- out_pc.stall <= '1';
-- out_mux.mode <= sel_ir16;
-- out_16.instruction <= op_mem & op_mem_st32 & std_logic_vector(sp_num) & std_logic_vector(sr_num);
-- out_imem.en <= '1';
-- out_irq.ack <= '1';
when irq_decSP1 =>
out_pc.stall <= '1';
out_mux.mode <= sel_ir16;
out_16.instruction <= op_addi & std_logic_vector(sp_num) & std_logic_vector(to_signed(-4, 8));
out_imem.en <= '0';
--when irq_decSP2 =>
-- out_pc.stall <= '1';
-- out_mux.mode <= sel_ir16;
--out_16.instruction <= op_addi & std_logic_vector(sp_num) & std_logic_vector(to_signed(-4, 8));
--out_imem.en <= '0';
end case;
end process output;
-- state transition (clocked part)
state_transition : process(clk) is
begin
if (rising_edge(clk)) then
if (rst = '1') then
state <= reset;
elsif (stall = '0') then
state <= state; -- in default: keep state
-- check for interrupt request
if (
-- not near branch and not in multicycle operation
(in_pre.mode /= sel_branch) and (state = normal)
-- interrupt request
and (in_irq.req = '1')
-- priority higher than runtime priority or non maskable interrupt
and ((unsigned(in_irq.priority) > in_dp.runtime_priority) or (in_irq.nmi = '1'))
) then
-- in normal mode and irq request
--state <= irq_pushSR;
state <= irq_decSP1;
multicycleinstruction <= (others => '0');
multicycleinstruction(16 + irq_prio_width - 1 downto 16) <= std_logic_vector(in_irq.priority);
multicycleinstruction(irq_num_width downto 0) <= std_logic_vector(in_irq.num) & "0";
-- synthesis translate_off
assert false report "current runtime priority is " & integer'image(to_integer(in_dp.runtime_priority)) & ". IRQ priority is " & integer'image(to_integer(unsigned(in_irq.priority))) & "." severity note;
assert false report "handle irq request #" & integer'image(to_integer(unsigned(in_irq.num))) severity note;
-- synthesis translate_on
else
-- no irq request valid
-- for state transition diagram see documentation
case state is
when normal =>
case in_pre.mode is
when sel_normal16 =>
state <= normal;
when sel_normal32 =>
state <= normal;
when sel_call =>
state <= copyPCtoLR;
when sel_branch =>
if (execute_branch_delay_slot) then
state <= normal;
else
state <= branchdelay;
end if;
when sel_trap =>
state <= normal;
when sel_reti =>
--state <= reti_incSP1;
state <= reti_popLR;
when sel_stall =>
state <= normal;
end case;
when copyPCtoLR =>
state <= normal;
when branchdelay =>
state <= normal;
--! group by multicycle opertation/pseudo-instruction -TF
-- i.e. IRQ entry (multicycle)
when irq_decSP1 =>
state <= irq_pushSR;
when irq_pushSR =>
--state <= irq_decSP2;
state <= irq_pushLR;
--when irq_decSP2 =>
-- state <= irq_pushLR;
when irq_pushLR =>
state <= irq_setSR;
when irq_setSR =>
state <= irq_setPC;
when irq_setPC =>
state <= copyPCtoLR;
when reti_popLR =>
state <= reti_incSP1;
when reti_incSP1 =>
state <= reti_popSR;
when reti_popSR =>
state <= reti_incSP2;
when reti_incSP2 =>
state <= normal;
when reset =>
state <= reset2;
when reset2 =>
state <= normal;
end case;
end if;
end if;
end if;
end process state_transition;
end architecture RTL;

103
soc/core/decoder_pre.vhd Normal file
View File

@@ -0,0 +1,103 @@
-- See the file "LICENSE" for the full license governing this code. --
library ieee;
use ieee.std_logic_1164.all;
use work.lt16x32_internal.all;
-- the decoder_pre checks the new instruction for basic data, which is needed in the finite state machine as input.
-- it is fully combinatoric
entity decoder_pre is
port(
-- signals from instruction memory
input : in imem_dec;
-- signals to decoder finite state machine
output : out pre_fsm
);
end entity decoder_pre;
architecture RTL of decoder_pre is
begin
-- decodes instruction memory input and outputs signals to finite state machine
decode : process(input) is
-- fetched instruction, 16 bit instructions stored in (15 downto 0) bits
variable instruction : std_logic_vector(31 downto 0);
-- width of fetched instruction
variable instruction_width : instruction_width_type;
-- instruction mode, temporary storage for clean logic/output seperation
variable instruction_mode : instruction_mode_type;
begin
-- needed to avoid latch generation for upper half word
instruction := (others => '0');
if (input.ready = '1') then
-- instruction memory is ready
-- get relevant instruction from instruction word and extract instruction width
case input.instruction_halfword_select is
when '0' => -- 32bit aligned, might be 32bit instruction
if (input.read_data(31 downto 28) = "1111") then
-- is 32 bit instruction
instruction_width := sel_32bit;
instruction(31 downto 0) := std_logic_vector(input.read_data(31 downto 0));
else
-- is 16 bit instruction
instruction_width := sel_16bit;
instruction(15 downto 0) := std_logic_vector(input.read_data(31 downto 16));
end if;
when '1' => -- lower 16bit, always 16 bit instruction
instruction_width := sel_16bit;
instruction(15 downto 0) := std_logic_vector(input.read_data(15 downto 0));
when others =>
instruction_width := sel_16bit;
instruction(15 downto 0) := op_or & "0000" & "0000" & "0000";
assert false report "instruction halfword select must be either 0 or 1" severity warning;
end case;
-- check for special, multicycle or normal instructions
if (instruction_width = sel_16bit) then
-- 16 bit instructions
if (instruction(15 downto 10) = op_bct & op_bct_call) then
-- instruction is call
instruction_mode := sel_call;
elsif (instruction(15 downto 10) = op_bct & op_bct_trap) then
-- instruction is trap
instruction_mode := sel_trap;
elsif (instruction(15 downto 9) = op_bct & op_bct_reti) then
-- instruction is reti
instruction_mode := sel_reti;
elsif (instruction(15 downto 10) = op_bct & op_bct_branch) then
-- instruction is branch
instruction_mode := sel_branch;
elsif (instruction(15 downto 10) = op_bct & op_bct_table) then
-- instruction is branch to table
instruction_mode := sel_branch;
else
-- no special instruction
instruction_mode := sel_normal16;
end if;
else
-- 32bit instructions
instruction_mode := sel_normal32;
end if;
else
-- imem not ready
instruction(15 downto 0) := nop16;
instruction_mode := sel_stall;
end if;
-- output
output.instruction <= instruction;
output.mode <= instruction_mode;
end process decode;
end architecture RTL;

Some files were not shown because too many files have changed in this diff Show More