From 2984cd65e18697e145d6fca94a7feaadc5c2ddef Mon Sep 17 00:00:00 2001 From: Eric Kooistra <kooistra@astron.nl> Date: Mon, 29 Jun 2020 19:43:31 +0200 Subject: [PATCH] Copied from https://svn.astron.nl/UniBoard_FP7/RadioHDL/trunk/tools/oneclick/doc/ --- .../doc/prestudy/desp_firmware_dag_erko.txt | 309 ++++++++++++++++++ .../doc/prestudy/desp_firmware_overview.txt | 177 ++++++++++ 2 files changed, 486 insertions(+) create mode 100755 applications/lofar2/doc/prestudy/desp_firmware_dag_erko.txt create mode 100755 applications/lofar2/doc/prestudy/desp_firmware_overview.txt diff --git a/applications/lofar2/doc/prestudy/desp_firmware_dag_erko.txt b/applications/lofar2/doc/prestudy/desp_firmware_dag_erko.txt new file mode 100755 index 0000000000..6eb5b39805 --- /dev/null +++ b/applications/lofar2/doc/prestudy/desp_firmware_dag_erko.txt @@ -0,0 +1,309 @@ +Author: Eric Kooistra, jan 2018 +Title: Status of FPGA firmware devlopment at DESP + +Purpose: +- Explain how we currently develop FPGA firmware at DESP + +1) Develop FPGA hardware boards + - Review board design document and schematic, so that the board will not contain major bugs and + so that firmware engineers can already learn about the board and get familiar with it + - Pinning design to verify schematic + - Vendor reference designs to verify the IO + - Heater design to verify the cooling and the power supplies + + - Board architecture: + . RSP ring with 4 AP (with ADC) and 1 BP + . UniBoard1 mesh with 4 BN (with ADC) and 4 FN, 4 transceivers per 10GbE, DDR3 + . UniBoard2 4 PN, 1 transceiver per 10GbE, DDR4 + . Gemini 1 FPGA, 25 Gb transceivers, DDR4, HBM + +2) Technology independent FPGA: + - Wrap IP (IO, DSP, memory, PLL) --> needed for board_heater design, board_minimal, board_test + - Use to support: + * different vendors: + . Xilinx (LOFAR, SKA CSP Low) + . Altera (Aartfaac, Apertif, Arts) + * FPGA type and sample versions + * synthesis tool versions + +3) Board firmware + - board_minimal design that provides control access to the FPGA board and the board control functions. + uses the monitoring and control protocol via the MM bus (UniBoard using Nios and UCP, Gemini using hard + coded Gemini protocol) + - board_test design that contain the minimal design plus interfaces to use the board IO (gigabit transceivers + , DDR) + - board library back, mesh models + - pinning files + + +4) Oneclick + - OneClick is our umbrella name for new ideas and design methods ('ideeen vijver'), focus on firmware specifcation and design. + New tools that are created within OneClick may end up as part of the RadioHDL envirionment. This has happened for example + with ARGS. Oneclick is about 'what' we could do, RadioHDL is about 'how' we do it. + - The name OneClick relates to our 'goal at the horizon' to get in rone click from design to realisation. + - Automate design flow + - Array notation (can be used in document and in code --> aims for simulatable specification) + - Modelling in python of data move, DSP and control + - We now work with data move libraries, but could we not better program these adhoc in 1 process? + + +5) RadioHDL + - Board toolset (unb1, unb2a, rsp, gmi, etc) to manage combinations of board version, FPGA version, tool version + - RadioHDL is our umbrella name for set of tool scripts that we use for firmware development, focus on implementation. + - The name RadioHDL covers HDL code for RadioAstronomy as a link to what we do at Astron. However by using only the word Radio we keep + the name a bit more general, because in fact the RadioHDL tool scripts can be used for any (FPGA) HDL development. + - Automate implementation flow (source --> config file --> tool script --> product, a product can be the source of a next product) + - Organize code in libraries using hdllib.cfg + - Manage tool versions using hdltool_<toolset name>.cfg + - Create project files for sim and synth + - ARGS (Automatic Register Generation System using MM bus and MM register config files in yaml) + . add more configuration levels: + peripheral configuration yaml + fpga configuration yaml + board yaml (board with 1 or more FPGA) + application (application image on one or more FPGA) + system (one or more application images that together form the entire FPGA system) + . add constants configuration yaml --> to define terminology and parameter section in specification document and to use + these also in firmware and software. + - Create FPGA info (used to be called system info) address map stored in FPGA to allow dynamic definition of address maps. The definition + of the MM register fields is kept in files because it typically remains fixed. + - Easily enroll the environment on a new PC and introduce a new employee (to be done) + + +6) VHDL design: + - Clean coding + - Reuse through HDL libraries + - Standard interfaces: MM & ST, support Avalon, AXI using VHDL records mosi/miso, sosi/siso + - Build FPGA appliciation design upon a board minimal design and the relevant IO from the board test design + - dp_sosi : + . data, re/im : real or complex data + . valid : strobe to indicate clock cycles that carries valid data samples, not needed for ADC input + . sop, eop : strobes to indicate start of packet and end of packet for blocks of data + . sync and bsn : timing strobe, block sequence number is timestamp, alignment of parallel streams + . channel : valid at sop to multiplex multiple channels in one stream + . empty : valid at eop + . error : valid at eop + - dp_siso: + . ready : backpressure flow control per data valid, only used for components that realy need it to avoid complexity and + to ease timing closure. The ready can be pipelined with dp_pipeline_ready.vhd. The ready flow control is e.g. + used to insert a header in front of data blocks to create a packet. + . xon : backpressure flow control per block of data. The xon flow control is used to stop the input source to avoid + overflow internal FIFOs. Together these FIFOs must at least be capable to store the current blocks. Our + applications are data driven, so making xon low will cause data to be dropped. For an application that read + data from a disk like in the all data storage systems, the xon can be used read the disk as fast as possible + by applciation, so DSP driven !!!. + + - Synthesis tool ensures that the logic per clock cycle is reliable, we have to ensure at functional level that only + complete blocks of data are being passed on !!!: + . Incomplete blocks must be dropped at the input + . FIFOs should never overflow and should not be reset. Avoid overflow by using xon. Clear a FIFO by reading it empty + + - Streaming data versus store and forward !!! + . dp_bsn_aligner.vhd, aligns input streams using the BSN + - The resource usage of the dp_bsn_aligner in Apertif Correlator (14 dec 2018) is: + nof ALM FF + streams align MM align MM + input 3 502 213 657 319 + mesh 8 1162 544 1346 784 + - Fill level of dp_bsn_aligner input FIFOs in Apertif Correlator (18 dec 2018) measured with util_dp_fifo_fill.py is: + fifo size max (min/max) used (min/max) + 1st time 2nd time + input (3+5)*176 (or 180) = 1408 178/762 178/504 139/428 + mesh (4+3)*88 (or 120) = 618 159/516 150/262 64/255 + + . dp_sync_checker.vhd, detect incomplete sync intervals, these are recoved using data from the next sync interval, so + the next sync interval will get lost. To avoid this would require to store and forward the data of a sync interval + because then it is possible to fill in missing blocks with dummy data. With store and forward it is also possible + to recover block order if necessary. The disadvantage of store and forward is latency and memory. Store and forward + is the general concept for how software operates (on CPU and GPU). + This scheme of sync interval recovery is only acceptable if dropped packets occur very rarely, because if one + stream has a dropped packet then the output of the BSN aligner and sync checker will drop a sync interval. E.g. + apertif X needs to aligne N_dish * N_pol = 12*2 = input streams and sync interval = 1.024 s. These input streams + come from 10GbE links. A bit error rate of 1e-10 means 1 bit error per s per link. A bit error will cause CRC error + and assume that then the packet gets dropped, this then causes that the BSN aligner cannot align that block and + that will cause that one sync interval gets corrupted and the next will get lost. After that the BSN aligner will + have recovered. Suppose this should only occur once per 8 hour observation = 28800 s. So with 24 links the BER + per link should then be less than 1e-10 / 28800 / 24 ~= 1e-16 or 1e-17, so only 1 per month. + + . dp_packet_rx.vhd, ensure that only complete packets enter the FPGA + . FIFO overflow is a bug, as serious as a FPGA logic error + + - Pass on sosi.info fields along a function that only needs data and valid + . dp_fifo_fill --> use FIFOs to delay sop info and eop info with variable latency + . dp_paged_sop_eop_reg --> use array pf of register pages to delay sop info and eop info by fixed latency. If + the latency is many sops or if only sync and BSN need to be passed on, then consider + using dp_block_gen_valid_arr + . dp_block_gen_valid_arr --> recreate sync, local BSN, sop, eop based on valid and pass on global BSN at sync or at + all sop. Usefull if the latency is >= 1 sync intervals or many sops. + + - Component improvements: + . Verify flow control in tb of dp_offload_rx and dp_offload_tx_dev (wrapper of dp_concat_field_blk.vhd) + . reorder_matrix.vhd with timestamp accurate page swap + . dp_fifo_fill_eop.vhd : fill FIFO with one block instead of some number of words to avoid that FIFO cannot be read empty + . dp_bsn_aligner.vhd: + - A dp_bsn_aligner without flow control would make it much simpler. + - A further simplification is to make a dp_sync_aligner that only can recover alignement at a sync, instead of at + every sop (via the BSN). + - Instead of xoff_timeout it is also possible to wait until the FIFO has been read empty for all inputs. + + + - Timing and sync intervals + . At the ADC input the BSN timestamps are attached to the block data. The block size for the BSN depends on the length of + the FFT. This BSN relates the data to UTC. MAC initializes the BSN relative to 1 jan 1970. + . With ADC clock of 800MHz and FFT size of 1024 this yields 800M/1024 = 781250 subbands per sec. We process the data at + 200MHz so we have 4 streams in parallel, each with 781250/4 = 195312.5 blocks per sec. In LOFAR we has also such + a situation and there we define odd and even second sync intervals. The even interval then has 195313 blocks and the + odd interval than has 195312 intervals. This was awkward for control. In Apertif a similar fractional block issue + occured in the correlator with 781250 / 64 = 12207.03125 channels per second. Therefore for Apertif we increased the sync + to 1.024 s, such that we have 800000 / 64 = 12500 channels per sync interval. Now we do not have + even and odd seconds anymore but still this 1.024 s sync interval is also akward because it does not align with the + 1 s grid that human use and that also other parts of the telescope use. + Possible solutions for future systems would be to use a sampling frequency that is a multiple of the FFT size, so + e.g. 809.6MHz with FFT size = 1024, or 800MHz with FFT size = 800. These schemes have the additional advantage that + then the subband bandwidth is 1 MHz which fits the typical band width grid in VLBI and it also fits the fact that the + Apertif LO can be tuned in steps of 10MHz. With subband bandwidth of 781250 Hz only once every 50 MHz the subbands + align with the 10MHz grid, because 64*781250 = 50M. + . Using an oversampled filterbank introduces yet another block grid. For example with 32/27 and an FFT block size + of 1024 the oversampled block size becomes 1024 * 27/32 = 864. This oversampled 864 block grid only aligns with + the 1024 block grid once every 27 blocks of size 1024. For Apertif the 781250 blocks of 1024 align with the 1 + sec grid, but the 32/27 oversampled blocks will only align every 27 sec. Hence with oversampling it is necessary to + accept that it becomes impossible to main block alignment within a 1 second grid. + . In APERTIF the misalignment between the channel period and the one second grid was avoided by defining a sync + interval of 1.024 s and use that sync interval as integration period. A sync interval of 1.024 s for LOFAR would mean + that a sync interval contains 160000 blocks at f_adc = 160M and 200000 blocks at f_adc = 200 MHz. However if other + parts of the system rely on a one second or e.g. ten second grid, then using a 1.024 second grid does not fit well + with those parts. Using an oversampled filterbank introduces yet another block grid. For example with r_os = 32/27 + and an FFT block size N_fft = 1024 the oversampled block size becomes M_blk = 1024 * 27/32 = 864. This oversampled + M_blk = 864 block grid only integer aligns with the one second grid once every 27 seconds, because 200M / 864 * 27 + = 6250000 and 160M / 864 * 27 = 5000000 yield an integer. The alternative would be to define a sync interval that is + an integer multiple of M_blk and close to 1 s. Preferably T_int is the same for f_adc = 200M and 160MHz. The ratio + 160M / 200M = 4 / 5, so choose the sync interval to be a multiple of 4 * 5 * 864 = 17280 blocks. This then yields + e.g. ceil(200M / 17280) * 17280 = 200016000 and ceil(160M / 17280) * 17280 = 160012800, which both correspond to + T_int = 1.00008 s exact. However LOFAR 2.0 needs to be compatible with LOFAR 1.0, so the fact that 1.00008 != 1 + will cause misalignment regarding the statistics like SST, BST, XST from a LOFAR 1.0 station and a LOFAR 2.0 + station. Furthermore to read the statistics and update the BF weights the LCU needs to keep track of the 1.00008 s + grid. Therefore it is best to keep the one second grid and accept that some sync intervals contain 1 block more than + the other sync intervals. For the critically sampled filterbank as in LOFAR 1.0 with r_os = 1 this yields + 200M / 1024 = 195312.5 blocks per second on average, so the number of blocks per sync interval then repeats with + period 2 s as: 195312 + 0,1. For the oversampled filterbank with e.g. r_os = 32/27 and M_blk = 864 this would yield + 200M / 864 = 231481.481 blocks per second on average, so the number of blocks per sync interval then repeats with + period 27 s as: 231481 + 0,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1,0,1 because 13 / 27 = 0.481. The + variation in number of blocks per sync interval is sufficiently small, 1/231481 = 4.3e-6, such that it does not + significantly affect the accuracy of the statistics values per sync interval. + + + - Flow control + + . dp_siso : ready and xon + + - Useful libraries and packages: + . base: common, dp, mm, diag, reorder, uth + . dsp: wpfb, bf, correlator, st + . io: eth, io_ddr, i2c + +7) Applications: + - Build upon reused libraries. + - New functions are first added as libraries and then used in the application + - Qsys only used for the MM bus generation + + +8) VHDL testing: + - detailed unit tests per HDL library using entity IO + . verify corner cases + . often use stimuli --> DUT --> inverse DUT --> expected results + e.g. + rx - tx + encode - decode + mux - demux + . sometimes the same component can suppot both directions: + dp_repack + dp_deinterleave + + - integration top level or multi FPGA tests using MM file IO + . MM file IO for testbenches at design level, 'breaking the hierarchy' in VHDL or providing access to Modelsim simulation with Python + . do not test the details those must be covered in the unit tests + - regard the firmware as a data computer, so independent of its functional (astronomical) use we need to verify and validate that for a + known stream of input data it outputs the expected output data. + - detailed unit tests per HDL library using entity IO + - integration top level or multi FPGA tests using MM file IO + . MM file IO for testbenches at design level, 'breaking the hierarchy' in VHDL or providing access to Modelsim simulation with Python + - regard the firmware as a data computer, so independent of its functional (astronomical) use we need to verify and validate that for a + known stream of input data it outputs the expected output data. + - Verification via simulation: + . use of g_sim, g_sim_record to differentiate between simulation and hardware + . use g_design_name to differentiate between revisions, e.g. to speed up simulation or synthesis + . behavoral models of external IO (DDR, Transceivers, ADC, I2C) + . break up data path using WG, BG, DB, data force + . optional use of transparant DSP models to pass on indices. + . verify data move by transporting meta data (indices) via the sosi data fields + . profiler to know time consuming parts + - VHDL regression test (if not there, then it is not used) + - Validation on hardware + . using Python peripherals for MM control using --cmd options per peripheral + . construct more complicated control scripts using sequence of peripheral scripts and --cmd + . we need proper data capture machines, to validata 10G, 40 GbE data output (e.g. using wireshark and some Python code) + + +9) Documentation + - Documentation is needed to specify what we have to make + . Detailed design document uses array notation to cleary describe all internal and external interfaces + . Detailed design document also identifies test logic that is needed for the integration top level tests + - No need to document what we have made, except for readme file and manuals + - The code is self explanatory (with comment in docstring style using purpose and description) + - The project scripts identify what is relevant for a product + - The regression tests identify what is relevant code (if it is not tested it is not important and should not have been made) + - It would be nice to have YouTube movies that show our workflow and boards + + +10) Project planning + - Wild ass guess based on time logs of previous projects + - System engineering design approach for total product life cycle + - Agile style with scrum and sprints + . If it is not an allocated epic/story/task in Redmine then it will not be done + - Roles within the team + . System architects remain actively involved during entire project to ensure that design ideas are preserved or + correctly adjusted + - Whiteboard meetings to steer detailed design + . with wide team to get common understanding and focus + - Definition of done + - What maintenance support do we provide after a project has finished + . firmware tends to become hardware in time, ' het verstaft' + . using virtual machines (dockers) to bundle a complete set of operating system, tools and code for the future or to + export as a starting point to an external party (e.g. for outsourcing) + +11) Ethernet networks + - 1GbE, 10GbE, 40GbE, 100GbE IP + - Knowledege of switches + - Knowledege of UDP, IP, VLAN + - Monitoring and Control protocol (UniBoard, Gemini) + - Streaming data offload + +12) Outreach, papers, collaborations, recruiting + - Oliscience opencores + - NWO digital special interest group + - student assignments + - Write paper on ARGS (done by Mia @ CSIRO) + - Write paper on RadioHDL (= also intro paper / user guide for RadioHDL on OpenCores) + - Write paper on RL = 0 coding style with state reg and pipeline reg clearly separated. The design should also work + without pipeline. Possibly the pipelining should be added automatically and only where needed. + +13) DESP pillars + - All data storage + + +14) Externe info + * Technolotion in B&C 2019/2 + - own IP libraries + - self-checking testbenches made by developer + - own HDL implementation of opensource Risc-V-Processor (instruction set architecture) can run Linux + - generic build server for simulation and synthesis (with all tool versions) + - regression test using nightly build + - version control using GIT (merge request --> review by collegue --> discussion via GIT server) + - HW regression test using a stimuli generator (e.g. video) + * High Tech Institute: System Configuration Management + - start with a model of the company processes + - first organize then automate + - baselinen is create timestamp versions numbers of components (HW, SW) + * Dutch system architecting conference 20 june 2019 Den Bosch + + diff --git a/applications/lofar2/doc/prestudy/desp_firmware_overview.txt b/applications/lofar2/doc/prestudy/desp_firmware_overview.txt new file mode 100755 index 0000000000..a730491ee9 --- /dev/null +++ b/applications/lofar2/doc/prestudy/desp_firmware_overview.txt @@ -0,0 +1,177 @@ +Author: Eric Kooistra, jan 2018 +Title: Key aspects of FPGA firmware devlopment at DESP + +Purpose: +- Provide a list of key aspects of FPGA firmware devlopment at DESP +- Identify libraries or toolscript that we could isolate and make public via e.g. OpenCores or GitHub +- Identify topics that we need to focus on in the future + + +1) Develop FPGA hardware boards + - Review board design document and schematic and layout, so that the board will not contain major bugs and + so that firmware engineers can already learn about the board and get familiar with it + - Pinning design to verify schematic + - Vendor reference designs to verify the IO + - Heater design to verify the cooling and the power supplies + +2) Technology independent FPGA: + - Wrap IP (IO, DSP, memory, PLL) + - Xilinx (LOFAR, SKA CSP Low) + - Altera (Aartfaac, Apertif, Arts) + +3) VHDL design: + - Clean coding + - Reuse through HDL libraries + - Standard interfaces: MM & ST, support Avalon, AXI using VHDL records mosi/miso, sosi/siso + - Use records not only for signals but also for generics, because adding a record field does not change the + component interface. + - Distinguish beteen state registers and pipeline registers. + . For example: dp_block_resize.vhd, dp_counter.vhd. + - Board minimal design that provides control access to the FPGA board and the board control functions + - Board test design that contain the minimal design plus interfaces to use the board IO (transceivers, DDR) + - Build FPGA application design upon a board minimal design and the relevant IO from the board test design + - Useful libraries and packages: + . base: common, dp, mm, diag, reorder, uth + . dsp: wpfb, bf, correlator, st + . io: eth, io_ddr, i2c + - Design for scaleability with generics that can be scaled over the logical range, e.g. >= 0, even if the + application only requires a certain fixed value. The reasons are: + . During development the application typically starts small (e.g. a BF with 4 inputs) while the final + application is much larger (e.g. a BF with 64 input). With generics both can be supported through a + parameter change. + . For simulation it is often necessary to reduce the size of the design to be able to simulate it in a + reasonable time. By scaling it down via generics the design preserves its structure but becomes much + smaller. + +3) VHDL testing: + * Levels of application verification + - use refrence designs to verify the vendor phy IO IP, in the application these are replaced by models. + For example: tranceiver, DDR3, MM interface via MM file IO, ... + - detailed unit tests per HDL library using entity IO to proved that the unit is correct in all relevant + use cases and corner cases, usch that application tests can focus on integration tests. + - integration top level or multi FPGA tests using MM file IO + . MM file IO for testbenches at design level, 'breaking the hierarchy' in VHDL or providing access to Modelsim simulation with Python + . preferrably use MM file IO and revisions of the top level design to verify parts in the top level design, rather then making + a testbench for only that part using the IO of that part. The control interface should be enough to test the part, therefore + using MM file IO is enough and avoids testbenches that make use of other entity IO signals. Typically the revision can contain BG + and DB (with MM interface) to also have direct streaming access to the part in the top level. + * regard the firmware as a data computer, so independent of its functional (astronomical) use we need to verify and validate that for a + known stream of input data it outputs the expected output data. + * Verification via simulation: + . use of g_sim, g_sim_record to differentiate between simulation and hardware + speed up MM clk, I2C clk, skip PHY startup time, reduce size while keeping the structure, + skip or bypass functions + . use g_design_name to differentiate between revisions, e.g. to speed up simulation or synthesis + . behavoral models of external IO (DDR, Transceivers, ADC, I2C) + . break up data path using WG, BG, DB, data force + . optional use of transparant DSP models to pass on indices. + . verify data move by transporting meta data (indices) via the sosi data fields + . profiler to know time consuming parts + * VHDL regression test (if not there, then it is not used) + * Validation on hardware + . using Python peripherals for MM control using --cmd options per peripheral + . construct more complicated control scripts using sequence of peripheral scripts and --cmd + . we need proper data capture machines, to validata 10G, 40 GbE data output (e.g. using wireshark and some Python code) + +4) RadioHDL + - RadioHDL is our umbrella name for set of tool scripts that we use for firmware development, focus on implementation. RadioHDL makes + it easier for developers to organize different versions and combinations of their firmware, tools and boards. RadioHDL is a platform? + - The name RadioHDL covers HDL code for RadioAstronomy as a link to what we do at Astron. However by using only the word Radio we keep + the name a bit more general, because in fact the RadioHDL tool scripts can be used for any (FPGA) HDL development. Outside Astron + the word RadioHDL can be advertised as an HDL radio station that one likes to listen to, ie. to use, so a feel good name with a + strong link to HDL but otherwise not explicitely telling what it is. The word RadioHDL also has no hits in Google search, so no + conflict or confusion with others. + - Automate implementation flow (source --> config file --> tool script --> product, a product can be the source of a next product) + - Organize code in libraries using hdllib.cfg + - Manage tool versions using hdltool_<toolset name>.cfg + - Create project files for sim and synth + - ARGS (Automatic Register Generation System using MM bus and MM register config files in yaml) + - Create FPGA info (used to be called system info) address map stored in FPGA to allow dynamic definition of address maps. The definition + of the MM register fields is kept in files because it typically remains fixed. + - Easily enroll the environment on a new PC and introduce a new employee (to be done --> OpenCores, Ruud Overeem) + +5) Oneclick + - OneClick is our umbrella name for new ideas and design methods, focus on firmware specifcation and design. New tools that are + created within OneClick may end up as part of the RadioHDL envirionment. This has happened for example with ARGS. + - The name OneClick relates to our 'goal at the horizon' to get in one click from design to realisation. + - Automate design flow + - Array notation (can be used in document and in code --> aims for simulatable specification) + - Modelling in python of data move, DSP and control + +6) New hardware, tools and languages + - FPGA, GPU, DSP, ASIC + - OpenCL + - HLS + - Compaan, Clash, Wavecore + +7) Documentation + - Documentation is needed to specify what we have to make + . Detailed design document uses array notation to cleary describe all internal and external interfaces + . Detailed design document also identifies test logic that is needed for the integration top level tests + - No need to document what we have made, except for readme file and manuals + - The code is self explanatory (with comment in docstring style using purpose and description) + - The project scripts identify what is relevant for a product + - The regression tests identify what is relevant code (if it is not tested it is not important and should not have been made) + - It would be nice to have YouTube movies that show our workflow and boards + +8) Project planning + - Wild ass guess based on time logs of previous projects + - Agile style with backlog, scrum and 3 week sprints (If it is not an allocated epic/story/task in Redmine then it will not be done). + - Review process: + . purpose is to ensure value and quality and to spread knowledge and awareness + . coder works based on a ticket in Rdemine, all production code must be reviewed by another team member + . coder delivers code according to coding style, with purpose-description/docstring and with regression test + . reviewer reviews code and function, reports via redmine ticket + . reviewer only reports + . coder does corrections and merges branch to trunk + - Roles within the team + - Definition of done + - Outsourcing + - Hiring temporary consultants + - What maintenance support do we provide after a project has finished + . firmware tends to become hardware in time, ' het verstaft' + . using virtual machines (dockers) to bundle a complete set of operating system, tools and code for the future or to + export as a starting point to an external party (e.g. for outsourcing) + - What if we would be with 10 - 15 digital/firmware engineers instead of about 5 as now (Gijs, Leon, Pieter, Jonathan, Eric, Daniel) + +9) Ethernet networks + - 1GbE, 10GbE, 40GbE, 100GbE IP + - Knowledege of switches + - Knowledege of UDP, IP, VLAN + - Monitoring and Control protocol (UniBoard, Gemini) + - Streaming data offload + +10) Outreach, collaborations. recruiting + - Oliscience opencores + - NWO digital special interest group + - student assignments + +11) DESP pillars + - All data storage + + +12) Version control + - We use SVN and work on the trunk. This is feasible because we are a small team and has the advantage that issues are noted + in an early stage + - Common practice in larger software development teams is that code is developed on branches and merged to the trunk after + it has been verified + - In future use GIT? + + +13) FPGA - GPU + - ASTRON_MEM_193_Comparison_FPGA_GPU_switch + - FPGA are good at: + . can interface to ADC (not possible with GPU, so always need for a glue logic FPGA, but such an FPGA with gigabit + transceivers is also capable of quite some processing) + . can support many external IO ports via upto ~100 transceivers (GPU only a few fast external IO ports) + . reorder blocks of data, e.g. in a packet payload + . low latency applications (e.g. low latency trading), fixed latency (e.g. fast control loops, absolute timing) + . embedded, standalone applications + . have life time/ support time of > 10 years (GPU < 5 years) + - GPU are good at: + . more general to program + . fast compile times (< minutes, versus > hours for FPGA) + . uses floating point arithmetic by default (versus fixed point by default for FPGA) + . matrix operations + + \ No newline at end of file -- GitLab