Initial Commit
37
.gitignore
vendored
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
74
assembler/src/handle_omi.c
Normal 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
@@ -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;
|
||||
}
|
||||
}
|
||||
64
assembler/src/handle_omr2.c
Normal 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
@@ -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
@@ -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;
|
||||
}
|
||||
}
|
||||
63
assembler/src/handle_or2i.c
Normal 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;
|
||||
}
|
||||
}
|
||||
74
assembler/src/handle_or3.c
Normal 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;
|
||||
}
|
||||
}
|
||||
50
assembler/src/handle_ori.c
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
164
documentation/architecture.tex
Normal 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.
|
||||
212
documentation/documentation.tex
Normal 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}
|
||||
11
documentation/figures/Makefile
Normal file
@@ -0,0 +1,11 @@
|
||||
SVGS= $(wildcard *.svg)
|
||||
IMGS= $(SVGS:.svg=.pdf)
|
||||
|
||||
|
||||
all: $(IMGS)
|
||||
|
||||
%.pdf: %.svg
|
||||
inkscape -z -T -A $@ $<
|
||||
|
||||
clean:
|
||||
rm -f *.pdf
|
||||
714
documentation/figures/block_core.svg
Normal 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 |
460
documentation/figures/block_cp.svg
Normal 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 |
1438
documentation/figures/block_dp.svg
Normal file
|
After Width: | Height: | Size: 58 KiB |
369
documentation/figures/block_pc.svg
Normal 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 |
877
documentation/figures/decoder_fsm_states.svg
Normal 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 |
337
documentation/figures/decoder_schematic.svg
Normal 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 |
527
documentation/figures/fpga_sc_slices.svg
Normal 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 |
527
documentation/figures/fpga_sc_speed.svg
Normal 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 |
315
documentation/figures/fundamentals_generalsystemarch.svg
Normal 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 |
295
documentation/figures/memory_hierarchy.svg
Normal 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 |
617
documentation/figures/signal_dmem_read.svg
Normal 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 |
503
documentation/figures/signal_dmem_write.svg
Normal 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 |
617
documentation/figures/signal_imem.svg
Normal 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 |
511
documentation/figures/signal_irq_req.svg
Normal 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 |
503
documentation/figures/signal_irq_trap.svg
Normal 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 |
619
documentation/figures/signal_mem_interlacing.svg
Normal 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 |
390
documentation/figures/signal_template.svg
Normal 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 |
557
documentation/figures/soc_overview.svg
Normal 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 |
516
documentation/figures/soc_overview2.svg
Normal 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 |
130
documentation/globalcommands.tex
Normal 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
@@ -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}
|
||||
359
documentation/instructionset.tex
Normal 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.
|
||||
|
||||
70
documentation/interrupts.tex
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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.
|
||||
62
documentation/socscope.tex
Normal 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.
|
||||
BIN
documentation/testcase/Testcase.xlsx
Normal file
22
programs/Makefile
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
2
programs/example_minimal.prog
Normal file
@@ -0,0 +1,2 @@
|
||||
reset: br always >reset
|
||||
nop
|
||||
19
programs/ld08test.prog
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||
|
||||
44
programs/test_endianess.prog
Normal 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
|
||||
|
||||
45
programs/test_endianess2.prog
Normal 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
@@ -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
37
projects/lt16lab/.gitignore
vendored
Normal 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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||
28
soc/core/decoder_32bit.vhd
Normal 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
@@ -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
@@ -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;
|
||||