Commit 6c41bb6f authored by Jens Korinth's avatar Jens Korinth

Rebranding ThreadPoolComposer -> TaPaSCo

parent 7be62ffb
This diff is collapsed.
ThreadPoolComposer -- Getting Started
Tapasco -- Getting Started
=====================================
This document will walk you through an example bitstream creation with TPC.
But first we will discuss some basic terminology and explain how TPC works
......@@ -98,7 +98,7 @@ description files:
of desired instances. Can be provided inline in the _Configuration_.
5. _Configuration Descriptions_ (any name)
Can be provided as command line arguments to `tpc`, or (more conveniently)
Can be provided as command line arguments to `tapasco`, or (more conveniently)
in a separate file. Contains all parameters for the current _Configuration_;
the _Configuration_ determines for which _Platforms_, _Architectures_ and
_Compositions_ bitstreams shall be generated, and configures optional
......@@ -113,7 +113,7 @@ description file.
Directory Structure
-------------------
All paths in TPC can be reconfigured using _Configuration_ parameters, but when
nothing else is specified, the default directory structure below `$TPC_HOME` is
nothing else is specified, the default directory structure below `$TAPASCO_HOME` is
used:
* `arch`
......@@ -135,7 +135,7 @@ used:
Base directory for _Architectures_; will be searched for
`architecture.description`s.
There are some more directories in `$TPC_HOME`, but only TPC developers need to
There are some more directories in `$TAPASCO_HOME`, but only TPC developers need to
concern themselves with them. As a TPC user it is sufficient to understand the
directory structure above. Each base path can be reconfigured in the
_Configuration_, which is most useful for _Kernels_, e.g., to switch between
......@@ -150,12 +150,12 @@ letters of the latin alphabet by an offset of 13 (with wrap-around). There are
documented uses of this "encryption" in the Roman Empire, where it was
(presumably) used to keep people from reading messages "over the shoulder".
We will use `itpc` to create a configuration file for us, so start it:
We will use `itapasco` to create a configuration file for us, so start it:
1. `itpc`
1. `itapasco`
TPC should greet you with a menu similar to this:
Welcome to interactive ThreadPoolComposer
Welcome to interactive Tapasco
*****************************************
What would you like to do?
......@@ -203,7 +203,7 @@ We will use `itpc` to create a configuration file for us, so start it:
l: rot13
Your choice:
6. Next step is to build the composition, `itpc` lists the available _Kernels_
6. Next step is to build the composition, `itapasco` lists the available _Kernels_
and _Cores_, choose `rot13` via the corresponding key.
Number of instances[> 0]:
......@@ -215,7 +215,7 @@ We will use `itpc` to create a configuration file for us, so start it:
b: false
Your choice:
8. `itpc` will keep asking whether you want to add more kernels. Finish the
8. `itapasco` will keep asking whether you want to add more kernels. Finish the
composition by `b<RETURN>`.
LED: Enabled[]:
......@@ -223,7 +223,7 @@ We will use `itpc` to create a configuration file for us, so start it:
b: false
Your choice:
9. Next, `itpc` will query all currently implemented feature of the _Platform_:
9. Next, `itapasco` will query all currently implemented feature of the _Platform_:
`LED` means that there\`s a simple controller for the on-board LEDs to
to show the internal state (available on Zynq, VC709).
`OLED` is only available on zedboard, shows the number of interrupts that
......@@ -237,10 +237,10 @@ We will use `itpc` to create a configuration file for us, so start it:
Enter filename for configuration[]:
10. Finally, `itpc` asks for a file name for your configuration file. Choose
10. Finally, `itapasco` asks for a file name for your configuration file. Choose
anything you like, e.g., `test.cfg`.
Run ThreadPoolComposer with this configuration now?[]:
Run Tapasco with this configuration now?[]:
a: true
b: false
Your choice:
......@@ -253,7 +253,7 @@ logfiles, you can watch them via `tail --follow <FILE>` on a separate shell,
if you like.
If everything went well, there should be a `.bit` file in
`$TPC_HOME/bd/<YOUR BD>/baseline/zedboard` afterwards (refer to the logging
`$TAPASCO_HOME/bd/<YOUR BD>/baseline/zedboard` afterwards (refer to the logging
output for the value of `<YOUR BD>` - if you had used an external _Composition_
description file, it would use that name instead of the hash).
......
ThreadPoolComposer (TPC)!
Tapasco (TPC)!
=========================
<img src="icon/threadpoolcomposer_bw.png" alt="ThreadPoolComposer logo" width="300px"/>
<img src="icon/tapasco_icon.png" alt="Tapasco logo"/>
System Requirements
-------------------
......
......@@ -3,48 +3,48 @@ project(arch-baseline)
set(CMAKE_INSTALL_PREFIX "..")
set(CMAKE_SKIP_RPATH true)
if (NOT EXISTS "$ENV{TPC_HOME}")
message(FATAL_ERROR "Please set TPC_HOME environment variable to root directory of ThreadPoolComposer")
endif (NOT EXISTS "$ENV{TPC_HOME}")
if (NOT EXISTS "$ENV{TAPASCO_HOME}")
message(FATAL_ERROR "Please set TAPASCO_HOME environment variable to root directory of Tapasco")
endif (NOT EXISTS "$ENV{TAPASCO_HOME}")
include ("$ENV{TPC_HOME}/cmake/ThreadPoolComposer.cmake")
include ("$ENV{TAPASCO_HOME}/cmake/Tapasco.cmake")
set(SRCDIR "src")
set(CMNDIR "../common/src")
set(GCMNDIR "${TPC_HOME}/common")
set(PLATFORMDIR "${TPC_HOME}/platform")
set(LIBPLATFORM_STATIC "${TPC_HOME}/platform/lib/${TPC_TARGET}/static/libplatform.a")
set(BASELINE_SOURCES "${SRCDIR}/tpc_init.c"
"${SRCDIR}/tpc_device.c"
"${SRCDIR}/tpc_address_map.c")
set(COMMON_SOURCES "${CMNDIR}/tpc_logging.c"
"${CMNDIR}/tpc_errors.c"
"${CMNDIR}/tpc_functions.c"
"${CMNDIR}/tpc_scheduler.c"
"${CMNDIR}/tpc_jobs.c"
"${CMNDIR}/tpc_status.c"
"${CMNDIR}/tpc_version.c"
set(GCMNDIR "${TAPASCO_HOME}/common")
set(PLATFORMDIR "${TAPASCO_HOME}/platform")
set(LIBPLATFORM_STATIC "${TAPASCO_HOME}/platform/lib/${TAPASCO_TARGET}/static/libplatform.a")
set(BASELINE_SOURCES "${SRCDIR}/tapasco_init.c"
"${SRCDIR}/tapasco_device.c"
"${SRCDIR}/tapasco_address_map.c")
set(COMMON_SOURCES "${CMNDIR}/tapasco_logging.c"
"${CMNDIR}/tapasco_errors.c"
"${CMNDIR}/tapasco_functions.c"
"${CMNDIR}/tapasco_scheduler.c"
"${CMNDIR}/tapasco_jobs.c"
"${CMNDIR}/tapasco_status.c"
"${CMNDIR}/tapasco_version.c"
"${GCMNDIR}/src/gen_queue.c")
set(TPC_LIBS_DIR "${TPC_HOME}/arch/lib")
set(TAPASCO_LIBS_DIR "${TAPASCO_HOME}/arch/lib")
include_directories("include" "../common/include" "${PLATFORMDIR}/common/include" "${GCMNDIR}/include")
link_directories("${PLATFORMDIR}/lib/${TPC_TARGET}")
link_directories("${PLATFORMDIR}/lib/${TAPASCO_TARGET}")
add_definitions(-DUSE_ASSERTIONS)
set_source_files_properties(${BASELINE_SOURCES} ${COMMON_SOURCES} PROPERTIES COMPILE_FLAGS "-g -O3 -Wall -Werror -std=gnu11")
add_library(tpc SHARED ${BASELINE_SOURCES} ${COMMON_SOURCES})
add_library(libtpc-static STATIC ${BASELINE_SOURCES} ${COMMON_SOURCES} ${LIBPLATFORM_STATIC})
add_library(tapasco SHARED ${BASELINE_SOURCES} ${COMMON_SOURCES})
add_library(libtapasco-static STATIC ${BASELINE_SOURCES} ${COMMON_SOURCES} ${LIBPLATFORM_STATIC})
target_link_libraries(tpc platform atomic pthread)
set_target_properties(libtpc-static PROPERTIES OUTPUT_NAME tpc)
target_link_libraries(tapasco platform atomic pthread)
set_target_properties(libtapasco-static PROPERTIES OUTPUT_NAME tapasco)
install(TARGETS tpc libtpc-static
LIBRARY DESTINATION "lib/${TPC_TARGET}"
ARCHIVE DESTINATION "lib/${TPC_TARGET}/static")
install(TARGETS tapasco libtapasco-static
LIBRARY DESTINATION "lib/${TAPASCO_TARGET}"
ARCHIVE DESTINATION "lib/${TAPASCO_TARGET}/static")
get_filename_component(LIBSDIR "lib" REALPATH)
add_custom_command(OUTPUT ${TPC_LIBS_DIR}
COMMAND ln;-fs;${LIBSDIR};${TPC_LIBS_DIR})
add_custom_target(install_libs ALL DEPENDS tpc libtpc-static ${TPC_LIBS_DIR})
add_custom_command(OUTPUT ${TAPASCO_LIBS_DIR}
COMMAND ln;-fs;${LIBSDIR};${TAPASCO_LIBS_DIR})
add_custom_target(install_libs ALL DEPENDS tapasco libtapasco-static ${TAPASCO_LIBS_DIR})
......@@ -2,7 +2,7 @@
Proof-of-concept implementation of the most simple conceivable hardware
threadpool implementation based on the AXI4-bus. Useful as baseline for future,
optimized architectures as well as for demonstration of the basic implementation
of an Architecture for *ThreadpoolComposer*.
of an Architecture for *Tapasco*.
## Building the TPC API library
Simply type `make` in this directory, and a directory `lib` should be created
......
#
# Copyright (C) 2014 Jens Korinth, TU Darmstadt
#
# This file is part of ThreadPoolComposer (TPC).
# This file is part of Tapasco (TPC).
#
# ThreadPoolComposer is free software: you can redistribute it and/or modify
# Tapasco is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ThreadPoolComposer is distributed in the hope that it will be useful,
# Tapasco is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ThreadPoolComposer. If not, see <http://www.gnu.org/licenses/>.
# along with Tapasco. If not, see <http://www.gnu.org/licenses/>.
#
# @file baseline.tcl
# @brief Baseline architecture implementation: Connects up to 64 cores
......@@ -37,7 +37,7 @@ namespace eval arch {
set arch_irq_concats [list]
# scan plugin directory
foreach f [glob -nocomplain -directory "$::env(TPC_HOME)/arch/baseline/plugins" "*.tcl"] {
foreach f [glob -nocomplain -directory "$::env(TAPASCO_HOME)/arch/baseline/plugins" "*.tcl"] {
source -notrace $f
}
......@@ -113,7 +113,7 @@ namespace eval arch {
puts " VLNV: $vlnv"
for {set j 0} {$j < $no_inst} {incr j} {
set name [format "target_ip_%02d_%03d" $i $j]
set inst [lindex [tpc::call_plugins "post-pe-create" [create_bd_cell -type ip -vlnv "$vlnv" $name]] 0]
set inst [lindex [tapasco::call_plugins "post-pe-create" [create_bd_cell -type ip -vlnv "$vlnv" $name]] 0]
lappend insts $inst
}
}
......@@ -133,7 +133,7 @@ namespace eval arch {
for {set i 0} {$i < $no_kinds} {incr i} {
set no_inst [dict get $composition $i count]
set example [get_bd_cells [format "target_ip_%02d_000" $i]]
set masters [tpc::get_aximm_interfaces $example]
set masters [tapasco::get_aximm_interfaces $example]
set ic_m [expr "$ic_m + [llength $masters] * $no_inst"]
set masters_32b [get_bd_intf_pins -of_objects $example -filter { MODE == "Master" && VLNV == "xilinx.com:interface:aximm_rtl:1.0" && CONFIG.DATA_WIDTH == 32 }]
......@@ -184,7 +184,7 @@ namespace eval arch {
# generate output trees
for {set i 0} {$i < [llength $mdist]} {incr i} {
puts " mdist[$i] = [lindex $mdist $i]"
set out [tpc::create_interconnect_tree "out_$i" [lindex $mdist $i]]
set out [tapasco::create_interconnect_tree "out_$i" [lindex $mdist $i]]
connect_bd_intf_net [get_bd_intf_pins -filter {MODE == Master && VLNV == "xilinx.com:interface:aximm_rtl:1.0"} -of_objects $out] [lindex $ic_ports $i]
}
......@@ -202,7 +202,7 @@ namespace eval arch {
set slaves [get_bd_intf_pins -of $example -filter { MODE == "Slave" && VLNV == "xilinx.com:interface:aximm_rtl:1.0" }]
set ic_s [expr "$ic_s + [llength $slaves] * $no_inst"]
}
set in1 [tpc::create_interconnect_tree "in1" $ic_s false]
set in1 [tapasco::create_interconnect_tree "in1" $ic_s false]
puts "Creating interconnects toward peripherals ..."
puts " $ic_s slaves to connect to host"
......@@ -253,12 +253,12 @@ namespace eval arch {
# Connects the threadpool to memory interconnects.
proc arch_connect_mem {mem_ics ips} {
# get PE masters
set masters [lsort -dictionary [tpc::get_aximm_interfaces $ips]]
set masters [lsort -dictionary [tapasco::get_aximm_interfaces $ips]]
# interleave slaves of out ic trees
set outs [get_bd_cells -filter {NAME =~ "out_*"}]
set sc [llength [tpc::get_aximm_interfaces $outs "Slave"]]
set sc [llength [tapasco::get_aximm_interfaces $outs "Slave"]]
set tmp [list]
foreach out $outs { lappend tmp [tpc::get_aximm_interfaces $out "Slave"] }
foreach out $outs { lappend tmp [tapasco::get_aximm_interfaces $out "Slave"] }
set outs $tmp
set slaves [list]
set j 0
......@@ -301,7 +301,7 @@ namespace eval arch {
set i 0
set j 0
set left [llength $ips]
set cc [tpc::createConcat "xlconcat_$j" [expr "[llength $ips] > 32 ? 32 : [llength $ips]"]]
set cc [tapasco::createConcat "xlconcat_$j" [expr "[llength $ips] > 32 ? 32 : [llength $ips]"]]
lappend arch_irq_concats $cc
foreach ip [lsort $ips] {
foreach pin [get_bd_pins -of $ip -filter { TYPE == intr }] {
......@@ -312,7 +312,7 @@ namespace eval arch {
set i 0
incr j
if { $left > 0 } {
set cc [tpc::createConcat "xlconcat_$j" [expr "$left > 32 ? 32 : $left"]]
set cc [tapasco::createConcat "xlconcat_$j" [expr "$left > 32 ? 32 : $left"]]
lappend arch_irq_concats $cc
}
}
......@@ -385,7 +385,7 @@ namespace eval arch {
current_bd_instance $group
# create instances of target IP
set kernels [tpc::get_composition]
set kernels [tapasco::get_composition]
set insts [arch_create_instances $kernels]
arch_check_instance_count $kernels
set arch_mem_ics [arch_create_mem_interconnects $kernels $mgroups]
......
#
# Copyright (C) 2014 Jens Korinth, TU Darmstadt
#
# This file is part of ThreadPoolComposer (TPC).
# This file is part of Tapasco (TPC).
#
# ThreadPoolComposer is free software: you can redistribute it and/or modify
# Tapasco is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ThreadPoolComposer is distributed in the hope that it will be useful,
# Tapasco is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ThreadPoolComposer. If not, see <http://www.gnu.org/licenses/>.
# along with Tapasco. If not, see <http://www.gnu.org/licenses/>.
#
# @file full_axi_slave_wrapper.tcl
# @brief PE-wrapper plugin that checks for full AXI3/4 slave protocols and
......@@ -42,7 +42,7 @@ namespace eval full_axi_wrapper {
# create slave ports
set saxi_port [create_bd_intf_pin -vlnv "xilinx.com:interface:aximm_rtl:1.0" -mode Slave "S_AXI_LITE"]
set conv [tpc::createProtocolConverter "conv" "AXI4LITE" [get_property CONFIG.PROTOCOL $full_slave_ifs]]
set conv [tapasco::createProtocolConverter "conv" "AXI4LITE" [get_property CONFIG.PROTOCOL $full_slave_ifs]]
connect_bd_intf_net $saxi_port [get_bd_intf_pins -of_objects $conv -filter {MODE == Slave}]
connect_bd_intf_net [get_bd_intf_pins -filter {MODE == Master} -of_objects $conv] $full_slave_ifs
......@@ -74,4 +74,4 @@ namespace eval full_axi_wrapper {
}
}
tpc::register_plugin "arch::full_axi_wrapper::wrap_full_axi_interfaces" "post-pe-create"
tapasco::register_plugin "arch::full_axi_wrapper::wrap_full_axi_interfaces" "post-pe-create"
#
# Copyright (C) 2014 Jens Korinth, TU Darmstadt
#
# This file is part of ThreadPoolComposer (TPC).
# This file is part of Tapasco (TPC).
#
# ThreadPoolComposer is free software: you can redistribute it and/or modify
# Tapasco is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ThreadPoolComposer is distributed in the hope that it will be useful,
# Tapasco is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ThreadPoolComposer. If not, see <http://www.gnu.org/licenses/>.
# along with Tapasco. If not, see <http://www.gnu.org/licenses/>.
#
set_directive_data_pack @@TOP@@ @@ARG@@
set_directive_interface -mode m_axi -offset slave @@TOP@@ @@ARG@@
......
#
# Copyright (C) 2014 Jens Korinth, TU Darmstadt
#
# This file is part of ThreadPoolComposer (TPC).
# This file is part of Tapasco (TPC).
#
# ThreadPoolComposer is free software: you can redistribute it and/or modify
# Tapasco is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# ThreadPoolComposer is distributed in the hope that it will be useful,
# Tapasco is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with ThreadPoolComposer. If not, see <http://www.gnu.org/licenses/>.
# along with Tapasco. If not, see <http://www.gnu.org/licenses/>.
#
# source common procs
@HEADER@
......