From: stephane Domas Date: Wed, 2 May 2018 20:20:39 +0000 (+0200) Subject: changed ref/impls xsd and xml X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/blast.git/commitdiff_plain/3bcfe4df6fdde086eb1b59f7a0173358170174a1 changed ref/impls xsd and xml --- diff --git a/FunctionalBlock.cpp b/FunctionalBlock.cpp index ab9611d..ccaa7b2 100644 --- a/FunctionalBlock.cpp +++ b/FunctionalBlock.cpp @@ -1424,23 +1424,22 @@ void FunctionalBlock::generateComments(QTextStream& out, QDomElement &elt, QStri QString mail = eltAuthor.attribute("mail",""); out << "-- Author(s) : "<getDescription() << endl; out << "--" << endl; - QDomElement eltNote = eltDesc.nextSiblingElement("description"); + QDomElement eltNote = eltLog.nextSiblingElement("notes"); QDomElement note = eltNote.firstChildElement(); QString noteTxt = note.text(); - out << "-- Note :\n"<>(QDataStream &in, ReferenceBlock &b) { in >> b.name; in >> b.xmlFile; - in >> b.descriptionBrief; - in >> b.descriptionDetail; + in >> b.description; in >> b.categories; in >> b.hashMd5; b.params.clear(); diff --git a/ReferenceBlock.h b/ReferenceBlock.h index 83f38c5..2aca879 100644 --- a/ReferenceBlock.h +++ b/ReferenceBlock.h @@ -26,25 +26,26 @@ public: ReferenceBlock(const QString _xmlFile); + // getters int getType(); inline QString getXmlFile() { return xmlFile; } - inline QString getBriefDescription() { return descriptionBrief; } - inline QString getDetailedDescription() { return descriptionDetail; } + inline QString getDescription() { return description; } inline QList getCategories() { return categories; } inline QList getImplementations() { return implementations; } - inline QString getHashMd5() { return hashMd5; } - + inline QString getHashMd5() { return hashMd5; } inline AbstractBlock* getParent() { return NULL; } + QList getExternalResources(); - void addCategory(int id); - void setBriefDescription(const QString& str); - void setDetailedDescription(const QString& str); + // setters + void setDescription(const QString& str); + + // others void addImplementation(BlockImplementation* impl); + void addCategory(int id); void load(QDomElement &elt) throw(Exception); void setHashMd5(); - QList getExternalResources(); void generateVHDL(const QString& path) throw(Exception); // main entry to generate the VHDL code void parametersValidation(QList* checkedBlocks, QList* blocksToConfigure); @@ -52,8 +53,7 @@ public: private: QString xmlFile; // the xml file from which attributes are initialized. QString hashMd5; - QString descriptionBrief; - QString descriptionDetail; + QString description; QList categories; QList implementations; // set when implementations are read diff --git a/SpecialBlock.cpp b/SpecialBlock.cpp index 8edff6f..2d225e2 100644 --- a/SpecialBlock.cpp +++ b/SpecialBlock.cpp @@ -12,10 +12,7 @@ void SpecialBlock::checkInputPatternCompatibility() throw(Exception) { switch(type) { case ClockConvert : checkInputPatternCompatibilityClockConvert(); - break; - case ClkRstGen: - checkInputPatternCompatibilityClkRstGen(); - break; + break; } } catch(Exception e) { @@ -28,10 +25,7 @@ void SpecialBlock::computeOutputPattern(int nbExec) throw(Exception) { switch(type) { case ClockConvert : computeOutputPatternClockConvert(nbExec); - break; - case ClkRstGen: - computeOutputPatternClkRstGen(nbExec); - break; + break; } } catch(Exception e) { @@ -45,7 +39,3 @@ void SpecialBlock::computeOutputPatternClockConvert(int nbExec) throw(Exception) } -void SpecialBlock::checkInputPatternCompatibilityClkRstGen() throw(Exception) { -} -void SpecialBlock::computeOutputPatternClkRstGen(int nbExec) throw(Exception) { -} diff --git a/SpecialBlock.h b/SpecialBlock.h index 06c6459..574803d 100644 --- a/SpecialBlock.h +++ b/SpecialBlock.h @@ -16,7 +16,7 @@ using namespace Qt; class SpecialBlock : public FunctionalBlock { public: - enum SpecialType { ClockConvert = 0, ClkRstGen = 1 }; + enum SpecialType { ClockConvert = 1 }; SpecialBlock(SpecialType _type, GroupBlock* _parent, ReferenceBlock* _reference, bool createIfaces = true) throw(Exception); ~SpecialBlock(); @@ -37,8 +37,7 @@ private: void checkInputPatternCompatibilityClockConvert() throw(Exception); void computeOutputPatternClockConvert(int nbExec = -1) throw(Exception); - void checkInputPatternCompatibilityClkRstGen() throw(Exception); - void computeOutputPatternClkRstGen(int nbExec = -1) throw(Exception); + }; diff --git a/blast.creator.user b/blast.creator.user index abc9d49..ee6eead 100644 --- a/blast.creator.user +++ b/blast.creator.user @@ -1,10 +1,10 @@ - + EnvironmentId - {3701e197-5b6c-48ea-9e98-a6cf6de18672} + {c8006d66-d34f-42be-ad10-d0207752286d} ProjectExplorer.Project.ActiveTarget @@ -61,7 +61,7 @@ Desktop Desktop - {ed04208c-8774-456b-99b9-4a02094ca7a4} + {2c9bf876-3476-44eb-8065-1f0844704dda} 0 0 0 diff --git a/block-1I1O.xml b/block-1I1O.xml index 1e05fa5..3d36ceb 100644 --- a/block-1I1O.xml +++ b/block-1I1O.xml @@ -6,12 +6,7 @@ - - A testing block with 1 input, 1 output - - - A testing block with 1 input, 1 output - + A testing block with 1 input, 1 output diff --git a/block-2I2O.xml b/block-2I2O.xml index c8bfdc5..a712c2f 100644 --- a/block-2I2O.xml +++ b/block-2I2O.xml @@ -6,12 +6,7 @@ - - A testing block with 2 inputs, 2 outputs - - - A testing block with 2 inputs, 2 outputs - + A testing block with 2 inputs, 2 outputs diff --git a/block-2INO.xml b/block-2INO.xml index af3e0df..c1aaa04 100644 --- a/block-2INO.xml +++ b/block-2INO.xml @@ -6,12 +6,7 @@ - A testing block with 2 inputs, N outputs - - - A testing block with 2 inputs, N outputs - diff --git a/implementation.xsd b/implementation.xsd index a42059f..d69fe73 100644 --- a/implementation.xsd +++ b/implementation.xsd @@ -32,10 +32,8 @@ - - - - + + @@ -63,22 +61,26 @@ - - - - + + + + + + + - - - - + + + + + + + + + - - - - diff --git a/lib/implementations/apf27-wb-master_impl.xml b/lib/implementations/apf27-wb-master_impl.xml index 2b2548b..3775e07 100644 --- a/lib/implementations/apf27-wb-master_impl.xml +++ b/lib/implementations/apf27-wb-master_impl.xml @@ -2,21 +2,19 @@ - - - - This component is an interface between i.MX signals - and the interconnector component. - + + + changed to comply with new structure + + - On i.MX<->FPGA connection : the WEIM part of i.MX has a 16 bits bus address - but only [1:12] bits are connected to FPGA pins. From the i.MX point of view - it means that reading in memory mapped address 0x0002 or 0x0003 gives the same - result since the LSB bit of the address is not transmited. - - These 12 bits are forwarded to the interconnector which is responsible to - determine for what IP the data and addr signals must be routed. - + On i.MX<->FPGA connection : the WEIM part of i.MX has a 16 bits bus address + but only [1:12] bits are connected to FPGA pins. From the i.MX point of view + it means that reading in memory mapped address 0x0002 or 0x0003 gives the same + result since the LSB bit of the address is not transmited. + + These 12 bits are forwarded to the interconnector which is responsible to + determine for what IP the data and addr signals must be routed. diff --git a/lib/implementations/average-Nx3_impl.xml b/lib/implementations/average-Nx3_impl.xml index a19842c..2181965 100644 --- a/lib/implementations/average-Nx3_impl.xml +++ b/lib/implementations/average-Nx3_impl.xml @@ -2,13 +2,10 @@ - - - - This component is a average filter on 3 succesives inputs, over N samples - + + - No notes + This component is a average filter on 3 succesives inputs, over N samples diff --git a/lib/implementations/boxfilter_3x3_impl.xml b/lib/implementations/boxfilter_3x3_impl.xml index 40f260f..3eb2b90 100644 --- a/lib/implementations/boxfilter_3x3_impl.xml +++ b/lib/implementations/boxfilter_3x3_impl.xml @@ -2,10 +2,10 @@ - - - frdfgdr - gregre + + + + diff --git a/lib/implementations/checker_impl.xml b/lib/implementations/checker_impl.xml index a9d780d..fb0dab5 100644 --- a/lib/implementations/checker_impl.xml +++ b/lib/implementations/checker_impl.xml @@ -2,10 +2,10 @@ - - - frdfgdr - gre + + + + diff --git a/lib/implementations/clkdomain_convert_1024x8_impl.xml b/lib/implementations/clkdomain_convert_1024x8_impl.xml index cdab60b..f5c5ead 100644 --- a/lib/implementations/clkdomain_convert_1024x8_impl.xml +++ b/lib/implementations/clkdomain_convert_1024x8_impl.xml @@ -2,11 +2,10 @@ - - - This IP allows to pass 8 bits values from a clock domain to another. It uses a FIFO of 1024 entries. - - This IP allows to pass 8 bits values from a clock domain to another. It uses a FIFO of 1024 entries. + + + + diff --git a/lib/implementations/clkrstgen_impl.xml b/lib/implementations/clkrstgen_impl.xml index 7e9d15a..192b142 100644 --- a/lib/implementations/clkrstgen_impl.xml +++ b/lib/implementations/clkrstgen_impl.xml @@ -2,11 +2,10 @@ - - - implementation of cljrstgen that does the connection between - external and internal clock and reset - none + + + + diff --git a/lib/implementations/csvreader_impl.xml b/lib/implementations/csvreader_impl.xml index 2ea85fe..6c39f20 100644 --- a/lib/implementations/csvreader_impl.xml +++ b/lib/implementations/csvreader_impl.xml @@ -2,14 +2,11 @@ - - - - This component read data in a CSV file - + + - No notes + diff --git a/lib/implementations/decimator-N_impl.xml b/lib/implementations/decimator-N_impl.xml index f68c396..65e8cbc 100644 --- a/lib/implementations/decimator-N_impl.xml +++ b/lib/implementations/decimator-N_impl.xml @@ -2,14 +2,10 @@ - - - - This component is a decimator of N-1 values out of N - + + - No notes - + diff --git a/lib/implementations/demux_impl.xml b/lib/implementations/demux_impl.xml index a61d4e3..6d1355f 100644 --- a/lib/implementations/demux_impl.xml +++ b/lib/implementations/demux_impl.xml @@ -2,13 +2,9 @@ - - - - This component is a synchronous demultiplixer with variable number of outputs - + + - No notes diff --git a/lib/implementations/deserializer_3x1_impl.xml b/lib/implementations/deserializer_3x1_impl.xml index 9b48470..71431a1 100644 --- a/lib/implementations/deserializer_3x1_impl.xml +++ b/lib/implementations/deserializer_3x1_impl.xml @@ -2,10 +2,11 @@ - - - gre - gre + + + + + diff --git a/lib/implementations/generator-cst_impl.xml b/lib/implementations/generator-cst_impl.xml index 9768641..69094c0 100644 --- a/lib/implementations/generator-cst_impl.xml +++ b/lib/implementations/generator-cst_impl.xml @@ -2,14 +2,11 @@ - - - - This component is a generator of a sequence of V fixed values, followed by Z idle cycles. - + + - No notes + diff --git a/lib/implementations/generator-img_impl.xml b/lib/implementations/generator-img_impl.xml index d5f66f3..b4952a1 100644 --- a/lib/implementations/generator-img_impl.xml +++ b/lib/implementations/generator-img_impl.xml @@ -2,14 +2,11 @@ - - - - This component is a generator of a RGB image, read in a CSV file - + + - No notes + diff --git a/lib/implementations/impls.bmf b/lib/implementations/impls.bmf deleted file mode 100644 index 0a2f0e6..0000000 Binary files a/lib/implementations/impls.bmf and /dev/null differ diff --git a/lib/implementations/logical_AND_3_impl.xml b/lib/implementations/logical_AND_3_impl.xml index 8d6e479..4ca5aa5 100644 --- a/lib/implementations/logical_AND_3_impl.xml +++ b/lib/implementations/logical_AND_3_impl.xml @@ -2,10 +2,10 @@ - - - yt - hyjt + + + + diff --git a/lib/implementations/multadd_impl.xml b/lib/implementations/multadd_impl.xml index 74a022a..23d60d2 100644 --- a/lib/implementations/multadd_impl.xml +++ b/lib/implementations/multadd_impl.xml @@ -2,14 +2,10 @@ - - - - This component is a multadd - + + - No notes - + diff --git a/lib/implementations/read_csv_impl.xml b/lib/implementations/read_csv_impl.xml index 8010600..aa5e00f 100644 --- a/lib/implementations/read_csv_impl.xml +++ b/lib/implementations/read_csv_impl.xml @@ -2,10 +2,10 @@ - - - read a csv file - read a csv file + + + + diff --git a/lib/implementations/rgb3sx8_to_gs_impl.xml b/lib/implementations/rgb3sx8_to_gs_impl.xml index 26e171a..fc4540b 100644 --- a/lib/implementations/rgb3sx8_to_gs_impl.xml +++ b/lib/implementations/rgb3sx8_to_gs_impl.xml @@ -2,10 +2,10 @@ - - - fez - fez + + + + diff --git a/lib/implementations/rgb3sx8_to_ycbcr_3DSP_impl.xml b/lib/implementations/rgb3sx8_to_ycbcr_3DSP_impl.xml index 055ec26..5ce24a6 100644 --- a/lib/implementations/rgb3sx8_to_ycbcr_3DSP_impl.xml +++ b/lib/implementations/rgb3sx8_to_ycbcr_3DSP_impl.xml @@ -2,10 +2,10 @@ - - - fez - fez + + + + diff --git a/lib/implementations/scatter_impl.xml b/lib/implementations/scatter_impl.xml index e214f6a..c5e86ea 100644 --- a/lib/implementations/scatter_impl.xml +++ b/lib/implementations/scatter_impl.xml @@ -2,14 +2,10 @@ - - - - This component scatters an input over X outputs - + + - No notes - + diff --git a/lib/implementations/threshold_extctl_impl.xml b/lib/implementations/threshold_extctl_impl.xml index e417446..37abf77 100644 --- a/lib/implementations/threshold_extctl_impl.xml +++ b/lib/implementations/threshold_extctl_impl.xml @@ -2,10 +2,10 @@ - - - fez - fez + + + + diff --git a/lib/references/apf27-wb-master.xml b/lib/references/apf27-wb-master.xml index 293b847..83a8a04 100644 --- a/lib/references/apf27-wb-master.xml +++ b/lib/references/apf27-wb-master.xml @@ -6,12 +6,7 @@ - This block is the wishbone master of the design, connected to the i.MX of APF27 - - - This block is the wishbone master of the design, connected to the i.MX of APF27 - diff --git a/lib/references/average-Nx3.xml b/lib/references/average-Nx3.xml index 24e96a3..eded9d4 100644 --- a/lib/references/average-Nx3.xml +++ b/lib/references/average-Nx3.xml @@ -6,12 +6,7 @@ - - This block does an average on 3 successives units, over a sequence of N inputs - - - This block does an average on 3 successives units, over a sequence of N inputs - + This block does an average on 3 successives units, over a sequence of N inputs diff --git a/lib/references/boxfilter_3x3.xml b/lib/references/boxfilter_3x3.xml index e604bbd..7e42175 100644 --- a/lib/references/boxfilter_3x3.xml +++ b/lib/references/boxfilter_3x3.xml @@ -4,8 +4,7 @@ boxfilter_3x3 - frdfgdr - gregre + average filter with a 3x3 mask on grayscale (8 bits) images diff --git a/lib/references/checker.xml b/lib/references/checker.xml index 6934164..3b3734c 100644 --- a/lib/references/checker.xml +++ b/lib/references/checker.xml @@ -4,8 +4,7 @@ checker - gre - gre + checks if an input is lower/greater a value, or within an interval. diff --git a/lib/references/clkdomain_convert_1024x8.xml b/lib/references/clkdomain_convert_1024x8.xml index 1df9cf1..9247fb2 100644 --- a/lib/references/clkdomain_convert_1024x8.xml +++ b/lib/references/clkdomain_convert_1024x8.xml @@ -1,12 +1,10 @@ - + clkdomain_convert_1024x8 - This IP allows to pass 8 bits values from a clock domain to another. It uses a FIFO of 1024 entries. - - This IP allows to pass 8 bits values from a clock domain to another. It uses a FIFO of 1024 entries. + This IP allows to pass 8 bits values from a clock domain to another. It uses a FIFO of 1024 entries. diff --git a/lib/references/clkrstgen.xml b/lib/references/clkrstgen.xml index 5f06f17..bd1ac7d 100644 --- a/lib/references/clkrstgen.xml +++ b/lib/references/clkrstgen.xml @@ -6,13 +6,8 @@ - - This block generates a reset signal synchronous to an external clock - - - This block generates a reset signal synchronous to clock. The block is automatically - connected to the external clock and asynchronous reset. - + This block generates a reset signal synchronous to an external clock + and relays the external clock. diff --git a/lib/references/csvreader.xml b/lib/references/csvreader.xml index 00f92d7..7da5240 100644 --- a/lib/references/csvreader.xml +++ b/lib/references/csvreader.xml @@ -6,12 +6,7 @@ - - generates data from a csv file - - - generates data from a csv file - + generates data from a csv file diff --git a/lib/references/decimator-N.xml b/lib/references/decimator-N.xml index b008aa2..b07b683 100644 --- a/lib/references/decimator-N.xml +++ b/lib/references/decimator-N.xml @@ -6,12 +6,7 @@ - - This block does a decimation of N-1 inputs overs N - - - This block does a decimation of N-1 inputs overs N - + This block does a decimation of N-1 inputs overs N diff --git a/lib/references/demux.xml b/lib/references/demux.xml index 88d0772..272ee95 100644 --- a/lib/references/demux.xml +++ b/lib/references/demux.xml @@ -6,12 +6,7 @@ - - This block demux an entry presented on FPGA pins over a variable number of outputs - - - This block demux an entry presented on FPGA pins over a variable number of outputs - + This block demux an entry presented on FPGA pins over a variable number of outputs diff --git a/lib/references/deserializer_3x1.xml b/lib/references/deserializer_3x1.xml index 874ecad..45af723 100644 --- a/lib/references/deserializer_3x1.xml +++ b/lib/references/deserializer_3x1.xml @@ -4,8 +4,7 @@ deserializer_3x1 - gre - gre + deserializes 3 parallel inputs into a sequence of 3 outputs diff --git a/lib/references/generator-cst.xml b/lib/references/generator-cst.xml index 8522dd1..76e4d39 100644 --- a/lib/references/generator-cst.xml +++ b/lib/references/generator-cst.xml @@ -6,12 +6,7 @@ - - generates V consecutives constant values, followed by Z idle cycles - - - generates V consecutives constant values, followed by Z idle cycles - + generates V consecutives constant values, followed by Z idle cycles diff --git a/lib/references/generator-img.xml b/lib/references/generator-img.xml index 55a5cee..a3905a0 100644 --- a/lib/references/generator-img.xml +++ b/lib/references/generator-img.xml @@ -6,12 +6,7 @@ - - generates a RGB image, reading if from a csv file - - - generates a RGB image, reading if from a csv file - + generates a RGB image, reading if from a csv file diff --git a/lib/references/logical_AND_3.xml b/lib/references/logical_AND_3.xml index 99b4aea..2edceea 100644 --- a/lib/references/logical_AND_3.xml +++ b/lib/references/logical_AND_3.xml @@ -4,8 +4,7 @@ logical_AND_3 - yt - hyjt + produces data1_in AND data2_in AND data3_in diff --git a/lib/references/multadd.xml b/lib/references/multadd.xml index 5ba1037..af16efe 100644 --- a/lib/references/multadd.xml +++ b/lib/references/multadd.xml @@ -6,15 +6,10 @@ - - This block multiplies 2 input values, adding the result to a third one. - - This block does d=a*b+c. a/b are provided by input port. c is set via the wishbone interconnector d is forwarded to an output port and can be retrieved via the wishbone interconnector - diff --git a/lib/references/read_csv.xml b/lib/references/read_csv.xml index 02aa93c..7cebc17 100644 --- a/lib/references/read_csv.xml +++ b/lib/references/read_csv.xml @@ -4,8 +4,7 @@ read_csv - read a csv file - read a csv file + read a csv file diff --git a/lib/references/references.bmf b/lib/references/references.bmf index 633acf9..3c19438 100644 Binary files a/lib/references/references.bmf and b/lib/references/references.bmf differ diff --git a/lib/references/rgb216bits.xml b/lib/references/rgb216bits.xml deleted file mode 100644 index 6898880..0000000 --- a/lib/references/rgb216bits.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - RGB to 16 bits - - - - - This block does a conversion of an RGB pixel into a 16 bits value - - - This block does a conversion of an RGB pixel into a 16 bits value - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/references/rgb32-to-gs.xml b/lib/references/rgb32-to-gs.xml deleted file mode 100644 index dc98d7e..0000000 --- a/lib/references/rgb32-to-gs.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - RGB32 (8 bits/serial) to grayscale - - - - - This block does a conversion of an RGB32 pixel (8 bits/serial) into a grayscale value (8 bits). - - - This block does a conversion of an RGB32 pixel into a grayscale value. - A RGB32 pixel is composed of 4 components: red, green, blue, transparency, each on 8 bits. - They are stored as in little-endian arch. which means that components must enter in the block - in the following order : transparency, blue, green, red. - The block does a simple average over the three values to obtain a grayscale pixel. - It also outputs the transparency component, in case of it should be used after. - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/references/rgb3sx8_to_gs.xml b/lib/references/rgb3sx8_to_gs.xml index 10cea03..5421108 100644 --- a/lib/references/rgb3sx8_to_gs.xml +++ b/lib/references/rgb3sx8_to_gs.xml @@ -4,8 +4,8 @@ rgb3sx8_to_gs - fez - fez + converts a RGB 24 bits pixel into grayscale. R, G and B + are consumed sequentially on rgb_in. diff --git a/lib/references/rgb3sx8_to_ycbcr_3DSP.xml b/lib/references/rgb3sx8_to_ycbcr_3DSP.xml index 17d1870..4d72166 100644 --- a/lib/references/rgb3sx8_to_ycbcr_3DSP.xml +++ b/lib/references/rgb3sx8_to_ycbcr_3DSP.xml @@ -4,8 +4,9 @@ rgb3sx8_to_ycbcr_3DSP - fez - fez + convert an RGB pixel 24 bits, into a Y/Cb/Cr. R, G and B components + are consumed sequentially, and Y, Cb, Cr are produced sequentially. + diff --git a/lib/references/scatter.xml b/lib/references/scatter.xml index ce9e2ef..45a1902 100644 --- a/lib/references/scatter.xml +++ b/lib/references/scatter.xml @@ -6,12 +6,7 @@ - - This block replicates the input over X outputs, the outputs being created at will. - - - This block replicates the input over X outputs, the outputs being created at will. - + This block replicates the input over X outputs, the outputs being created at will. diff --git a/lib/references/threshold_extctl.xml b/lib/references/threshold_extctl.xml index 136226f..d0c2d2d 100644 --- a/lib/references/threshold_extctl.xml +++ b/lib/references/threshold_extctl.xml @@ -4,8 +4,8 @@ threshold_extctl - fez - fez + if keep_in is true, data_in is reported on data_out. + Otherwise, the dfault_value is reported on data_out. diff --git a/reference.xsd b/reference.xsd index bf87cb8..9442528 100644 --- a/reference.xsd +++ b/reference.xsd @@ -99,14 +99,7 @@ - - - - - - - - + @@ -135,16 +128,6 @@ - - - - - - - - - - @@ -236,6 +219,7 @@ + diff --git a/source-2O.xml b/source-2O.xml index 3c94d75..812e815 100644 --- a/source-2O.xml +++ b/source-2O.xml @@ -6,12 +6,7 @@ - - A testing source block, with 2 outputs - - A testing source block, with 2 outputs -