Bugs reported in October 2007 (applicable to PTME v0.8e and earlier): 1. vcm.vhd, line 355: IdleSecHeader_int <= IdleSecHeader when gIdleFrameVC > gNumberOfVCs else SecHeader(gIdleFrameVC mod gNumberOfVCs); should be IdleSecHeader_int <= IdleSecHeader when gIdleFrameVC >= gNumberOfVCs else SecHeader(gIdleFrameVC mod gNumberOfVCs); ( The "greater than" sign '>' in the statement should be replaced by "greater or equal to" '>=' ) This change is required since the FrameVc numbering starts at zero. 2. vcm.vhd, line 363: IdleSegmentLen_int <= IdleSegmentLen when gIdleFrameVC > gNumberOfVCs else SegmentLen(gIdleFrameVC mod gNumberOfVCs); should be IdleSegmentLen_int <= IdleSegmentLen when gIdleFrameVC >= gNumberOfVCs else SegmentLen(gIdleFrameVC mod gNumberOfVCs); ( The "greater than" sign '>' in the statement should be replaced by "greater or equal to" '>=' ) This change is required since the FrameVc numbering starts at zero. ================================================================================ Documentation Error reported in September 2005: In the PP interface, the PPData signal is sampled on the RISING EDGE of the strobe signal PPWr_N, and not on the falling edge as it was reported erroneously in earlier versions of the VHDL model Datasheet in sections 8.9.2 and 8.9.3. The Datasheet has been corrected with Version 0.7 Revision 2 (file name ptme_001_01-0-7-r2.pdf), which is now posted to the website and will be delivered with the IP core. ================================================================================ The 'scoc' version is a specific configuration of the ptme core, all the modules of ptme are instantiated in ptme_lib.vhd. Note that the ptme test bench sends packets in a continuous manner so it doesn't stop until the user breaks the simulation. However if it is run for a long time (1 day), the user might get a message like the following: ### ** Fatal: (vsim-3421) Value -2147483648 is out of range 0 to 2147483647. ### Time: 26843545588 ns Iteration: 0 Process: /ptme_testbench/line__664 due to the overflow of an internal counter. SCOC/PTME/DOC Release Date ==================================================================== nTE0.5/nTE0.8c/0.7 Sep 2004 (version 0.5/0.8c without Turbo Encoder) 0.5/0.8c/0.7 Feb 2004 (scoc-ptme-0.5.zip contains PTME 0.8c) 0.4a/0.8a/0.6 Nov 2003 (scoc-ptme-0.4a.zip contains PTME 0.8a) 0.4/0.8/0.5 May 2003 (now separate archives) 0.3/0.7/0.4 Jul 2002 0.1/0.6 Mar 2002 ----------------------------------------------- Notes to version 0.5nTE/0.8cnTE/0.7 Sep 2004: ----------------------------------------------- Same as version 0.5/0.8c/0.7 but without Turbo Encoder. The Turbo Encoder has been removed from the original Gaisler Research version due to patent issues The file te.vhd was replaced by te_dummy.vhd and the constant bturbo was set to 0. All the Turbo encoder declarations were removed from ptme_lib.vhd for the SCOC configuration. ------------------------------------------ Notes to version 0.5/0.8c/0.7 Feb 2004: ------------------------------------------ Added VCA empty flag in ptme.vhd ------------------------------------------ Notes to version 0.4/0.8/0.5, May 2003: ------------------------------------------ In version 0.5 the packet abort function is fully integrated, but the packet length check function has been removed completely. The CLCW interface functionality has been extended. The latency requirements for the Turbo encoder has been reduced. The relation between telemetry bit rate and system clock has been improved. Synthesis results of SCOC-PTME version 0.4a (without I/O insertion): ===================================================================== Xilinx Virtex-II 1000, -6 | Actel AX2000, -3 ------------------------------+------------------------------- LUT | FF | MHz | COMB | SEQ | MHz -----------+------------+-----+------------+------------+----- 6385 (62%) | 4006 (39%) | 37 | 6944 (32%) | 4167 (39%) | 29 ================================================================================ -------------------------------------------------------------------------------- -- Release notes: Packet Telemetry Encoder (PTME) VHDL Model -------------------------------------------------------------------------------- -- 20 Feb 2004, version 0.8c -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- 13 December 1999 release of PTME version 0.1, ReedSolomonEncoder -- library 0.1, TE entity 0.1 to SES. -------------------------------------------------------------------------------- -- 21 December 1999 release of PTME version 0.1a to SES: -- CD, PTME_D, PTME, PTME_TB, VCA and VCM. -------------------------------------------------------------------------------- -- 31 January 2000 release of PTME version 0.2, RSE -- library 0.2, TE entity 0.2 to SES, CE 0.5. -------------------------------------------------------------------------------- -- 3 February 2000 release of PTME_D version 0.2a to SES. -------------------------------------------------------------------------------- -- 14 July 2000 release of PTME version 0.4. -------------------------------------------------------------------------------- 1 Efficient memory utilisation: done Implement a more efficient memory mapping scheme than the one based on blocks sizes corresponding to powers of two. Current scheme: 223 octets => 256 bytes 446 octets => 512 bytes 892 octets => 1024 bytes 1115 octets => 2048 bytes New scheme: 223 octets => 256-32 = 224 bytes 446 octets => 512-64 = 448 bytes 892 octets => 1024-128 = 896 bytes 1115 octets => 1024+128 = 1152 bytes Approach: allow the two memory mapping schemes to be selected by a generic/constant. Impact on address adjust function and on number of frames per VC function. Supports dynamic memory area allocation, by pre-calculating the number of frames that can fit a given area block. 2 Idle TM Packet generation: done Generate and insert Idle TM Packets as done for the classical VCA, including polling scheme and thresholds. 3 Idle TM Packet pseudo-random generator: done The polynomial for pseudo-random filler pattern used in the Idle TM Packets should be the same as for the classical VCA. One per VCA. 4 Idle TM Frame pseudo-random generator: done The polynomial for pseudo-random filler pattern used in the Idle TM Frames should be the same as for the classical VCA. The difference should be that the randomiser is only shifted when the data field of an Idle TM Frame is output, and that it is systematically reset at specific VC frame counter values. 5 Idle TM Frames on VC7: done Option to have the Idle TM Frames generated on a VC for which a VCA is not implemented. This requires that an additional VC Frame Counter and potentially an additional Extended VC Frame Counter. 6 Demand driven memory interface in VCM: done The VCM memory interfacing should be compatible with a demand driven arbiter implemented by SES. 7 Separate clocks for VCA/VCM: done It should be possible to clock the VCA and VCM by different clocks, the VCM clock normally being the bit clock. It should also be possible to clock the units using the same clock, or using a lower frequency clock for the VCM derived from the system clock used for the VCA part. 8 Static EDAC enable/disable: done It should be possible to disable the EDAC by a configuration signal, which should double the address space when using a byte-serialised EDAC scheme. Approach: If the EDAC is in use, then the most significant address bit will not be used (logical 0) and can be used for addressing EDAC data/check bits. The EDAC enable signal affects the address adjust and frames per VC functions only. 9 EDAC status signals: done Provide a signal for 1 error corrected, 2 error corrected and non-correctable errors. Non-sticky flags. 10 Programmable CLCW interface: done It should be possible to determine when the CLCW report should be read-out from the TC decoder. It should be possible to suppress the two idle waiting times in the TTC-B-01 protocol. The TTC-B-01 clock should be possible to generate from the bit clock or system clock and the division rate should be controlled by a constant. 11 Parallel Convolutional output: done The GE1 and GE2 outputs of the CE are output in parallel and there is no multiplexed CEOut output, not requiring a symbol clock with twice the input bit clock frequency. Approach: this is already supported by setting BitTick and BitTick2 permanent logical one and using the CEG1 and CEG2 outputs 12 Demand driven memory interface and arbiter: done New arbiter developed, including Turbo encoder support 13 Demand driven memory interface in VCA: done The VCA memory interfacing should be compatible with a demand driven arbiter implemented by SES. 14 SEU error containment: done, more to analyse Copy write frame pointer to FHP frame pointer after a FHP has been written to the memory, instead of having the FHP frame pointer being incremented and potentially out of synchronisation with the write frame pointer. 15 Programmable encoder chain: done It should be possible to engage the pseudo-randomiser when not using RS encoding. 16 Separate PWRdy threshold setting: done 17 Classical VCA generation of PWRdy: done Approach: allow an optimised/simplified PWRdy generation to be selected by a generic/constant to reduce area when targeting FPGAs. 18 Synchronous PW/VC interface: done 19 Buffer full indicator for VC: done 20 Streamlined CLCW interface: done All TCID bits are programmable, all bits in the CLCW report are used. 21 TM Packet abort function: done When using the abort function, if a packet is larger than the memory buffer and is potentially creating a dead-lock, the packet is released for read-out by the vcm. This special case is not flagged to the user. 22 TM Packet length check function: done Allow Telemetry Packet Length Field check with respect to actual packet length. This should only be done in conjunction with packets that are held in buffer memory using the abort signal. If a packet is too long or too short it is rejected. 23 Improved BAT handling: done Adapt data width of BAT to number of VCs used. Derive automatically a BAT initialisation pattern corresponding to the number of VCs used and the number of BAT entries. 24 PacketParallel: done Implement 8 bit input interface to VCA. 25 PacketAsynchronous: done Implement bit asynchronous input interface to VCA. Supporting baud rate 9600, 19200, 38400 and 57600, with 1 or 2 two stop bits, optionally ignoring any parity bit. Baud rates derived from generic stating the system clock frequency. Busy function unchanged to support byte level handshaking. 26 Correct PTME to work with only ONE memory area: done Approach: there must be at least two memory areas as well as at least two areas to be grouped. Also, there must be at least two bat entries. 27 Parallel/serial EDAC selection: done Allow serial or parallel EDAC approach. 28 Reed-Solomon memory selection: done in RSE, but not in PTME Allow internal or external memory to be used, or use flip-flops. 29 Clock divider to handle both output clock and system clock: done Using an input selection signal, a PTME implementing an output clock based design can also be run as a common clock based encoder. 30 Time strobe function not to use mod-operator for Synplify: done -------------------------------------------------------------------------------- -- Saab meeting 27 December 1999 -- (new release end January 2000, version 0.2) -------------------------------------------------------------------------------- 31 PacketParallel renaming: done 32 Additional BAT interface options: done BAT w/o external i/f, w/ external registers, or w/ constant table. (using bit clock for synchronisation, remove read enable since synchronous) 33 Two TCId/VCId inputs selectable with CLCWSel: done 34 Constant insertion timing for Idle TM Packet octets: done The insertion timing for idle header and data should be equalised to allow easier calculation of input bandwidth requirements for the Idle Telemetry Packet insertion. 35 Memory test mode: done Additional port in VCB using generic. 36 Modify VCE functions to work with Synopsys: done 37 Physical addressing: done Use base / offset address in VCA/VCM/VCB. One base address per VC input. New adjust address function. 38 Synchronous outputs: done Clock outputs from PTME: CADU data and clock. 39 Test signals: done Enable and data input to CADU output, to bypass all encoders. Enable, sync/frame markers and data to test RSE and TE. VCM data, sync marker and clock output. 40 Wait state generation: done Separate wait state for read and write accesses 41 Beautify RSE: done Correct indentation/comments in code. 42 Default value for all signals/variables: done (might be some left) Add default value for signals/variables that are not assigned when generics are used for disabling part of code by means of if-statements (to avoid latch insertion in Synopsys). 43 Individual SecHeader selection per VC: done Each VC to have an individual selection option for the Secondary Header. This is not allowed in PSS standard, but is in the CCSDS recommendation. If a dedicated idle frame channel is used, it will also have an individual selection input for the secondary header. 44 OddFrame introduced correctly: done 45 Separate Segment Length Identifier for each VC: done 46 Synchronous/Asynchronous reset: done Selection of sync/async reset using a global constant. Only one reset input is needed per clock domain. 47 Poll Counter Threshold extremes inversed: done The same definition of PollThreshold should be the same as for classic VCA. -------------------------------------------------------------------------------- -- Delivery to SES 3 February 2000 covering the above -------------------------------------------------------------------------------- 48 Demand driven interface on TE: done Modify Turbo to work with VCB (also when using physical addressing). 49 Reset of Synchronous/Asynchronous process in subprogram: done Place the code resetting a process in a local subprogram to avoid code duplication. 50 VCRdy to be deasserted during reset: done 51 Correct PollThreshold comparison in VCA: done 52 Turbo delimiters added to VCM: done Support for frame/ASM delimiters added to VCM to simplify TE. 53 Simultaneous Grant and Ready handling: done VCM corrected to handle simultaneous Grant and Ready (previously wrong). TE/VCM option introduced to optimise design if Grant and Ready is guaranteed to occur simultaneously. 54 Support for flexible VCId in VCM when only one VC used: done If only one VC is used in a design (e.g. FPGA) then the VCId can be made configurable by means of an input bus. Correct handling of VCId for Idle TM Frame is taken care of, defaulting to zero if set to the same value. Time strobe generation is taken care of. 55 Pseudo-Randomiser for idle data in VCA/VCM clarification: done The randomiser for idle tm pkt data and idle tm frames is to be clarified. The polynomial is r(x)=x^9 + x^4 + 1 according to Bardell etc. which is compatible with the classical VCA, and is the Fibonacci version of LFSR. 56 Pseudo-randomiser zero handling for idle data in VCA/VCM: done To be compatible with classical VCA, the randomiser LFSR is loaded with a single logical one in the feedback path if all bits in the LFSR are zero. In the previous code, all bits in the LFSR were loaded with a logical one. 57 Minimum time between extra accesses due to idle packets: done Insert a delay (8 clock periods) at end of a idle tm packet to maintain minimum distance between extra accesses due to idle tm packet insertion in VCA. 58 Uncontiguous CADUs made optional for RSE: done Remove counter that disables the built-in pseudo-randomiser in RSE after the RS check symbols have been transmitted, allowing space after RS symbols and ASM data to be un coded. This disallows the usage of RSE without SyncMark. 59 Optionally reduced performance for VCA accesses: done Add generic constants for reducing bus access performance of the VCA nominal and extra accesses to minimise gate count. 60 Optimised OPCF when derived from BitClk: done The CLCW interface is optionally optimised when it is known at compilation time that BitClk is used instead of CLCWClk to generate TTCClk. Re-synchronisation is removed where possible. 61 Correct FECW to output in the right time slot w/o. OPCF: done The time slot for FECW did not take care the case when OPCF is not in use. Also, first CRC output bit is taken before the CRC is shifted for the last time during a frame, this is necessary since the CRC implemented as a separate process. CRC register is shifted out rather than addressed during check sum output. 62 Reduce inferred registers due to use of variables: done VCA: read and write pointers, and input data buffer VCM: OddFrame and OctetTable/buffer 63 Improve communication between VCM memory i/f and data output: done Removed data resynchronisation between ReadBuffer and OutputFrame processes and added local data latch in OutputFrame to relax timing requirements between the two processes. This is done for dual clock domains but is also supported for common clock domain by constant change in VCM code. 64 Correct Secondary Header usage in Idle TM Frame: done Previous release incorrectly implemented Secondary Header usage in VCM for Idle TM Frames. In the new implementation the Secondary Header is always controlled by the IdleSecHeader input to the VCM. Note that VCM IdleSecHeader is derived from the equivalent input on the VCA of the VC on which Idle TM Frames are sent or taken from the external IdleSecHeader input on the PTME/VCE when a separate VC is used for Idle TM Frames. 65 Remove Master Channel Frame Counter when only one VC: done MC frame counter is replaced with VC(0) frame counter when only one VC is implemented, since both have always the same value. OddFrame case taken care of. 66 Remove unused register in offset address for VCA/VCM and TE: done The upper offset address registers are constant logical zero in VCA, VCM and TE, which could be removed by code optimisation. 68 Time strobe prolonged to 128 BitClk periods: done Constant added for controlling time strobe length. 67 Remove extra access optimisation for logical addressing: done Extra access handling was previously optimised to reduce logic if no Idle TM Packets nor physical addressing was used but led to undesired behaviour. The optimisation has now been removed. 68 VC selection optimised: done When an Idle TM Frame is to be generated, only the SelIdle signal is used in some places, reducing decoding logic, especially for single VC systems. 69 Optimise ReadFramePtr etc. for single VC implementations: done If only one VC is implemented, then the frame and area ptrs are taken directly from the VCA and routed to the VCB for read accesses since no multiplexing is necessary. 70 Removed PWFull/PAFull/PPFull/VCFull signals: done 71 Busy signals on PW/PA/PP asserted during reset: done -------------------------------------------------------------------------------- -- Delivery to SES 7 March 2000 covering the above, PTME version 0.3 -------------------------------------------------------------------------------- 72 BufferAvailable frame calculation correction: done The case when there write pointer is ahead of the read pointer resulted in one frame to few in the BufferAvailable function when calculating the number of available frames. 73 Reordered gWaitState check to avoid assertions: done 74 Corrected turbo rate 1/6 clock generation in CD: done 75 Corrections in TE: done Correction of read access suppression SyncOut and FrameOut output of first BitTick3 BitPtr count prolonged during frame output Rate 1/6 ASM pattern corrected Removal of unused code in constituent encoders Simplified interleaver 76 BufferAvailable frame comparison correction: done Comparison between required and available octets needed to add a constant 1 to the WriteOctetPointer, since the comparison is done in absolute values (1 to n) rather than the default pointer index (0 to n-1). 77 CodingSpace memory outside VC memory area allocation: done The MaxFramePtrTable function modified not to reduce the number of frames if coding space is outside the allocated VC memory areas, due to under allocation for VCs, assuming the base area is at least 4096 octets (i.e. the amount required for Turbo). 78 SelShow incorrectly asserted twice in VCM during Turbo coding: done SelShow modified to take Turbo encoding into account, only asserted once at the end of the frame, not to increment the wrong VC counter. 79 Start of VCID selection modified for single VC: done The start of the VC selection for single VC implementation now take the parameter BatSel223 instead of zero. 80 Optional check FrameAvailable at FrameRdy/Gnt: done When a FrameRdy or FrameGnt is received in the VCA, the corresponding check of FrameAvailable or FrameReading signals is made optional using the gCheckFrameAvailable constant. 81 Abort variables initated to ones at reset: done To avoid that VCHold is asserted permanently if PWValid is tied to one at reset, inevitebly preventing frames from being released, the Abort_* variables are inititated to ones at reset in PW/PA/PP. 82 Use SYNC to disable Idle TM Packet insertion: done The PTME did not use the SYNC input for disabling the Idle TM Packet insertion as the classic VCA. 83 PTME reset scheme for BitClk: done Use Reset_bit_N with in all BitClk clock domains by correcting connectivity in PDFE module. 84 Tesa matrix row order incorrectly inversed in documenation: open fix in new doc. 85 General EDAC improvements: done Hamming EDAC improved to remove the all zero codeword. Hamming EDAC improved to report errors also in check bits. Hamming EDAC code moved to PTME_D package. Hamming EDAC improved with additional parity generator Cyclic EDAC added to PTME_D package. Option introduced in PTME_C to select Hamming or Cyclic EDAC codec in VCB. 86 Premature disabling of Idle Packet insertion: done fix Idle Packet bug in VCA 87 How to reduce illegal encoder combinations in PTME: done No modification done. Only limitation is that TE cannot be fed to CE. 88 TestBitTick on PTME interface: done Additional signal added on PTME interface to simplify debugging. 89 Separate Idle VC counter generate/driver conflict in VCM: done The Counter process and generate statement drove the IdleVCCntr and IdleExtVCCntr although it should be dissolved by generate statements. Additional signals and generate statement added to solve problem. 90 Physical base address and EDAC addressing: done Corrected base address for Turbo Cleaned up AdjustAddress functions Corrected AdjustTurboAddress EDAC handling Added EDAC handling to AdjustPhysicalAddress Initialise EDAC bits in AdjustAddress functions 91 Improved and corrected EDAC buffering and memory access scheme in VCB: done access granted asap, not relying on the multiplexed data/address since user address and data latched in VCB before giving a grant separate paths for EDAC generation and check of parity data read/written before check bits less registers when both seq. and parallel EDAC is implemented corrected test configuration handling in address and data paths, etc. 92 Special case for FHP insertion in VCA corrected: done VCA input buffer and pending FHP handling modified to take into account simulteneus arrival of: vccomplete & writegnt or vccomplete, writegnt & vcavailable 93 Turbo encoder usage with not a common clock: done PreStop level instead of edge detect to avoid event masking in memory interface resulting in no odd/even flip-flopging of memory buffer when dual clock domains are used. 94 CADUClk glitches when gated with BitClk: done CADUClk gated with negative phase of BitClk instead to avoid glitches. 95 Calculation of MaxOctetPtr for each VCA not dependent on VCM: done The MaxOctetPtr was calculated in the VCM and used in each VCA, but since the SecHeader signal in the VCM changed dynamically for each VC access, the MaxOctetPtr singal would also change for each VCA, resulting in incorrect data sizes. The MaxOctetPtr is now calculated individually for each VCA in the VCE. This error was introduced in the VCM when individual SecHead settings were introduced to support PSS/CCSDS difference. -------------------------------------------------------------------------------- -- Delivery to SES 14 July 2000 covering the above, PTME version 0.4 -------------------------------------------------------------------------------- 96 Further improvement of SecHeader/FDFS handling: done (KATME) Since the FDFS field is not in a fixed position, it is not possible for the VCM to know beforehand were to read the FDFS data since the SecHeader information in the FSDF determines the FDFS position in the memory. Since VCM needs to know the SecHeader selection for the VC that is selected for Idle TM Frames, the VCM will get the SecHeader/OneMatrixType information directly from the same inputs as the VCAs, no need to read the related bit in the FSDF. The sec head bit in the FDFS is thus not used anymore in the VCM. 97 BAT interface array size mismatch: done If BatIF=2 and BatDetpth=5, size error will occur assigning the address Incorrect array size specified in integer/vector conversion. 98 Incorrect commenting of logical/physical addressing: done In PTME_c.vhd there is a comment that says that when physical addressing is used area and grouping concepts are not supported, but the gGroupDepth, gAreaDepth and gGroupSize constants are used for physical addressing as well. New comments will reflect the following, The generics above are used for physical addressing on the PTME/VCE level, but not for the individual VCA/VCM/VCB modules. If one chooses physical addressing and use the VCx blocks individually in a design, then one is not be dependent on the above generics 99 Incorrect commenting of the BAT interface: done Bat configuration is defined as: 0=no/1=internal/2=external where internal Bat means using external register connected to the BatRegister bus for the Bat entries and external means using the internal registers in the PTME. New comments will reflect the following: 0=no I/F look up table only 1=asynchronous I/F classical VCM BAT interface 2=synchronous I/F external register synchronous to BITCLK An AMBA APB slave interface will be developed for the BAT, using the external synchronous I/F. BatWrite asserted when allowed to change BAT inputs. 100 CtrlTTC clock domain and reset issue: done For synchronous reset the 'Reset' procedure is never called. The CtrlTTC process relies on the CLCWClkDiv signal to issue a synchronous reset, however as long as the Reset_N signal is asserted CLCWClkDiv will be in its reset state, i.e CLCWClkDiv = '1'. The CLCWClkDiv'event will therefore never occur while Reset_N = 0. The design will be modified to have a fully synchronous implementation of the CtrlTTC process, using the CLCWClkDiv signal as a clock enable signal. This is not as it is done in the classical VCM, but it is cleaner. 101 Comparison problems using 8 VCs: done {KATME} In vcm.vhd there are several comparisons between, for example, gNumberOfVCs(positive) and FrameVCId(VCPtrType(subtype of unsigned)). For FrameVCId = "000" and gNumberOfVCs = 8, the simulation showed that FrameVCId < gNumberOfVCs = false, which is incorrect. When converting the unsigned types to integers the problem disappears since comparison is done on 3 bits and value 8 is truncated to 0! By using the experssion gNumberOfVCs-1 in all comparisons, the problem is solved. 102 Improvement of input buffer in VCA: closed No modification will be done. {Add tag bit for first packet byte in VCA input fifo.} 103 Incorrect Idle Packet process start or enabling: done When filling a transfer frame with data which length is exactly one 'transfer frame data field' long the poll counter is increased or the idle packet process is started, although it shouldn't. if (PollEnable='1' and -- enabled PollCounter >= PollCondition(PollThreshold)) or -- above threshold (VCActive='0' and -- no pkt input FrameAvailable='0' and -- no frame available PollThreshold=PollIdAlways and -- always enabled WrtOctetPtr > 0 and -- contains data IdleSpillOver='0') then -- contains normal data IdleActive := '1'; -- begin insertion end if; FrameAvailable (and WrtOctetPtr and ..) is delayed one clock cycle compared to VCActive which means the comparison isn't using the current values. I.e. after VCActive goes low FrameAvailable doesn't go high at the same time as is should since the whole transfer frame has been filled with data. Possible solution: delay VCActive one clock cycle. It should be done local to this comparison only. 104 No overrun checks in VCM buffer readout: done {KATME} When reading out data from the read buffer the vcm doesn't check whether data is available. During simulation this results in a fatal error if the read buffer is empty when reading. Checkers have been added on both increment and decrement of counter. The counter is also initialised on start of frame readout. Assertions added. 105 VHDL'93 compatibility: done {KATME} Impure functions need be corrected for VHDL'93. Affected only ptme_d.vhd. 106 Packet Telemetry Encoder with additional packet types: done Protocols to be supported according to PINK SHEETs: CCSDS Network Protocol (NP) Datagram Internet Protocol Datagram (IPV4) Encapsulation Packet No modification is foreseen, since the FHP stays the same and Idle Packets can be used as usual because different packet types can be mixed on the same virtual channel. 107 Parallel CLCW interface: done CLCW can be fetched via serial TTC-B-01 interface, where the clock is either derived from the CLCWClk or BitClk, or via a parallel interface where all inputs are assumed to be synchronous with BitClk. New generic will reflect the following (gOPCFInterface: 0=serial I/F TTC-B-01 using either CLCWClk or BitClk 1=parallel I/F external register synchronous with BitClk An AMBA APB slave interface will be developed for CLCW, using the synchronous parallel I/F. OPCFWrite asserted when allowed to change CLCW inputs. 108 Dynamic memory allocation interface: done Added input ports to PTME, VCE and VCB to allow dynamic memory allocation: MaxOctetPtrs, MaxFramePtrs, BaseAreaPtrs, BaseAddresses, TurboBase and TurboFill. AdjustTurboAddress modified not to use constant value, instead the TurboFill input is used as octet. The dynamic allocation is enabled with the gGroupInterface generic. 109 Reed-Solomon Encoder with E=8 and E=16 codes: done E=8 code to be added, new selection input, new CADU lengths to be supported in VCM {RS(255,239) is shortened to RS (239,223)} {PINK SHEET} PTME: ReedSolomon E=8/16 introduced Convolute with puncturing introduced VCE: ReedSolomon E=8 interface added VCM: ReedSolomon E=8 interface added Number of RS check octets selectable 31/16, {RS(255,239) is shortened to RS (239,223) using virtual fill} RSE Added support for E=8 encoder (supporting virtual fill) GIotaE8 matrixes added for E=8 Added E8 output on Multiplier, with generic Added Rate and generic to Ctrl (Uncontiguous counter dependent on Rate) Adder input take E=8/16 rate into account Note: No support added in VCA/VCM/VCE to support non-shortened RS(255,239) coding, since not requested in Appendix E of PINK SHEET. Potential improvement: add support in VCA/VCM/VCE for 32-bit compatibility according to PINK SHEET. 110 Convolutional Encoder with punctured codes: done gConvolute extended to support no,1/2,puncture,all code rates. {PINK SHEET} CovoluteRate added (1/2 no punct, 1/2 no punct, 1/2, 1/2, 2/3, 3/4, 5/6, 7/8) CE: Encoder updated to support puncturing, with rate selection and generics CD: Interface for convolution with puncturing added, including generics Clocking for puncturing added (BitTick skipping) BitTick3 disabled when input clock implemented (no Turbo supported {bug}) CCSDSDecoder: No support for punctured codes provided. -------------------------------------------------------------------------------- -- Delivery to SES 6 December 2000 covering the above, PTME version 0.5 -------------------------------------------------------------------------------- 111 Turbo MemoryInterface to wait for interleaver update: done The MemoryInterface process uses a WaitRan state between accesses in order to wait for the interleaver to update its addresses. However in the case where TurboGnt and TurboRdy are asserted simultaneously this state is never reached. {The provisions are already in the code but incorrectly not used in the above case}. Effect on KaTME: both RDY and GNT are asserted simultaneously, but there is always at least 6 cycles between to turbo read accesses in the fixed slot memory access scheme, masking the one clock delay for the random address generation. 112 BAT interface array size mismatch: done If BatIF=1 and BatDetpth=3, size error will occur assigning the address Incorrect array size specified in integer/vector conversion. 113 AMBA AHB master interfaces added to VCB: done The VCB has been enhanced with an AMBA AHB master interface that can be used instead of the memory interface. A VirtualMemoryController (VMC) is provided as an example of how the above AMBA AHB interface can be used with an memory controller outside the PTME: The AMBA/memory interface option is selectable as part of PTME_C. 114 AMBA APB slave interfaces added as input: done The PTME has been enchanced with an AMBA APB slave interface that can can be connected to the VCI interface on the VCA. Update: The DataSize generic is used in octet sequencing, added to PTME netlist as well. 115 VCI added as direct connection to VCA from PTME boundary: done It is not necessary to add a new Packet interface inside the PTME since it can now be connected via the VCI interface to the VCA via the new PTME boundary interface. 116 Reed-Solomon 50/50% style introduced: done A style option has been added for the Reed-Solomon enocder, supporting a 50% flip-flop and a 50% latches implementation. Latch enable generated from clock. 117 BatDataRange introduced: done New sub type added to correct data width problems in BAT interface. 118 Dignostics default disabled: done Some of the diagnostic reporting functions have been made possible to disable, which is also the case by default, see PTME_D. 119 Segment Length Identifier set to "11" for Idle Transfer Frames: done To be compliant with CCSDS, the Segment Length Identifier has been set to "11" in the PTME_D, which is used for Idle Transfer Frames. Note that this could be in confilict with the ESA standards that states that the values should be fixed for a part of a mission and should not change. This could happen if the Idle Transfer Frames are generated on a VC that is also used for user data and which has a different value than "11". This is not a problem for CCSDS, since it must be set to "11". 120 Random shift during trellis termination removed The pseudo-randomiser was incorretly shifted during trellis termination in the VCM. The pseudo-randomiser data is used for the Idle Transfer Frames Data Field. By only shifting it during acutal data output, a deterministic output can be generated, which can be used on ground for link performance measurements. The PTME does not support external fill values for the Idle Transfer Frames. 121 Random output moved from bit 8 to 0 The pseudo-randomiser output in the VCM has been changed from bi 8 to bit 0, since this is the most common way of using such a randomiser. 122 VCM can accept multiple grants before ready The VCM can accept receiving multiple grants before a ready. This was introduce to support AMBA AHB protocol where this can be the case due to pipelining of the interface protocol. 123 Reed-Solomon and Turbo encoders moved to PTME_Lib: done To simplify model distribution the RSE and TE have been moved to the PTME_Lib library and some of the subcomponents have been renamed to avoid any naming conflicts. 124 Short packets might upset the FHP calculation in VCA: work around If a short packet is the first packet in a frame and which also spills over into the next frame, could cause a problem if the packet is shorter than the VCA internal buffer, since only the first end-of-packet would be taken into account and the First Header Pointer for the second Frame would not be correct. One solution is to use a buffer with a status bit indicating end of packet on each octet, which should be able to handle an arbitrary number of packets in the internal buffer. A workaround is not to have a buffer larger than the smallest possible packet, which is 7 octets for CCSDS. 125 Reed-Solomon E=8 frame size non-compliance: work around The latest updatet of the CCSDS Channel Coding recommendation states that the RS (255, 239) E=8 code should be used with Transfer Frames have a Length in multiples of 239. The PTME only supports lengths in multiples of 223. The E=8 code can still be used whith a shortened E=8 code, but this is not endorsed by CCSDS for cross-support. A future modification of the PTME will be required to support the new transfer frame lengths. 126 Reset value not pointing to Idle Transfer Frame Virtual Channel: done In the VCM, the reset value for SelVCId and NextVCId were not pointing to the dedicated Virtual Channel for Idle Transfer Frame generation although the SelIdle and NextIdle were asserted at reset. 127 Write strobe in PacketParallel moved to rising edge: done The write strobe falling edge was incorrectly used to capture the data. -------------------------------------------------------------------------------- -- Delivery to ESA 15 March 2002 covering the above, PTME version 0.6 -------------------------------------------------------------------------------- 128 Modified BAT type to use 3 bit Std_Logic_Vector: done The integer based BAT types have caused simulation problems and have been replaced with a fixed width 3 bit Std_Logic_Vector. No optimisation of the width is done anymore. 129 Idle Packet process does not stop when packet just fills a frame: done The Idle Packet insertion process was not correctly stopped when an Idle Packet just completed a frame. Added IdleFHPPending packet insertion stop expression to cover this case. 130 Segment Length Identifier input for Idle Frames: done To avoid any compatibility issues as described in point 119, a separet input has been added for dynamically setting the Segment Length Identifier for Idle Transfer Frames. 131 ClockDivider improvement: done The clock divider has been simplified, only operating on the BitClk input, since using Clk input for generating clock enable signals could lead to clock skew wrt VCM etc. since the encoders would always be clocked on the BiClk input. The clock divider and the encoders would thus be located in two different clock trees. The modification now also allows any external clock source to be divided. 132 Incorrect FHP when packet aborted: done If a packet occupies all available frame slots in memory is aborted, the packet will still be transmitted to avoid a deadlock, however the FHP of the last frame, in which the abort occured, is incorrectly all zero. The automatic release function removed, FHP handling corrected. Random generator moved for optimisation. 133 PacketParallel interface receives octet when aborted: done If a packet is aborted on the PP interface, close to the packet delimieter de-assertion, one octet will be stored at the location in memory where the abort pointers are pointing. Data available indicator is now blocked during complete abort. This fault has been corrected in all packet interfaces. 134 Frame length support for 239 based frames: done Both the telemetry and reed-solomon encoders have been modified to fully support the 239 based frames. ReedSoloRate has been removed. FrameLen has been extended. The ReedSolomon generics definition has been changed. RSE gRate/Rate modified to be coherent with PTME. TE FrameLen modified to be coherent with PTME. 135 Flexible VC Id configuration for all VCs: done It is now possible to configure the VCId for all VCs. Only the corresponding output bits in the Transfer Frame header and the time strobe generation are affected. BAT is not affected! Default initialisation function provided. 136 CLCW length option 16, 32 or both added: done Support for non-standard 32 bit CLCW transfer added for parallel and TTC-B-01 interfaces. TTC-B-01 clock generation modified and contrained to support 32 bit transfers. Input signal added select between 16 or 32 bit transfer when both supported. 137 Clean up of logic: done Deferred constants introduced in PTME_Configuration package. Case-statements in VCB changed to if-statements to support deferred constants. Turbo base address calculation has been placed in a function in a package. Turbo offset address calculation modified in TE to support Synplify. Local IdleSecHeader/IdleSegmentLen handling moved from VCE to VCM. gPAPBDataSize option made individual for each VC. 138 PTME Testbench improvements: done IdleSegmentLen added, OutputClock simplified. FrameLen exteded, ReedSoloRate removed. FlexVCId extended to all Virtual Channels, IdleFlexVCId added. CLCWLength added, TTC transmitter modified. TxTTC_B_01 client moved to external package. Memory allocation interface support added. 139 PacketAPB synchronisation: done Added extra flip-flop for synchronisation between clock domains to avoid problems with Xilinx and Synplicity. -------------------------------------------------------------------------------- -- Delivery to ESA 7 Jul 2002 covering the above, PTME version 0.7 -------------------------------------------------------------------------------- 140 Improved BitClk / Clk frequency relation: done Relationship between BitClk and Clk modified to allow Fbitclk <= 2*Fclk. Modifications done to VCM only. Turbo does not require any modifications due to low data rates w.r.t. the system clock frequency required to handle all memory accesses required by the encoder. VCM BAT search takes now 32*2*8 BitClk periods (at BitTick rate). The start of the search relative the Frame generation beginning has been moved closer to the front for some frame lengths. -------------------------------------------------------------------------------- -- Delivery to Saab 30 Aug 2002 covering the above, PTME version 0.7a -------------------------------------------------------------------------------- 141 Optional No RF Avail and No Bit Lock added: done Optional inputs for No RF Available and No Bit Lock have been added to the VCM CLCW interface, which can be enabled by means of a selection signal to overwrite bit 16 and 17 in the CLCW. 142 Minor compilation problem in VCM corrected: done -------------------------------------------------------------------------------- -- Delivery to Saab 4 Oct 2002 covering the above, PTME version 0.7b -------------------------------------------------------------------------------- 143 Separate read and write introduced for Turbo Encoder bus interface: done The Turbo encoder has now separate read and write ports to the bus interface. The modification affects also the VCB, VCE and PTME. The current version does NOT IMPLEMENT any other optimisation than the split of the interfaces. Turbo encoder has also two new options: - buffer prefetch/write length - optimisation for relaxed latency requirements The options have NOT been IMPLEMENTED, only the constants have been added. -------------------------------------------------------------------------------- -- Delivery to Saab 22 Oct 2002 covering the above, PTME version 0.7c -------------------------------------------------------------------------------- 144 Turbo bus interface with low latency requirement: done Low-latency requirement version of bus interface added. The following was changed in rest of the encoder: sequential address width increased, and address end indicator added. It is possible to select the general depth of the data read and write buffers and the depth of the address prefetch buffer. 145 VCA/VCM: FDFSOffSet adjustment for halfword alignment: done The FDFS addresses have been modified to be halfword aligned. 146 VC selection timing modified: done In the VCM, the SelShow is generated earlier and used with BitTick to ensure correct VC/MC cntr update and time strobe generation. 147 VCM: Comment on LatchData improved: done 148 Idle Packet Generation improved: done Improved idle packet generation in conjuction with point 149: IncIdle replaced with IncAck, IdleOctPtr incremented directly after bus access with IncAck FDFS insertion triggered at IdleFrameTrans, Idle ptr/data initialised at reset 149 Latency requirement between VCA and VCM bus accesses removed: done Frames are not released for transfer from VCA until all idle packet data and FDFS data are written to the bus. There is a small residue for last FDFS access, but should not pose a problem. FramesAvailable function increased with the NonAvailable input to ensure no frame is prematurly released. 150 Modifed address mapping for Physical Addressing: done Wider data busses for physical addressing allows all bits of the FramePtr + OctetPtr addition in optimised mode to be output on the OffesetAddress. 151 Typing error in MaxFramePointer function: done Typing error in MaxFramePointer function corrected AGAIN in the OctetsForCoding calculation part. Result from MaxFramePointer function truncated not to exceed FramePtr type width. 152 Several unnecessary nnnMax constants removed: done Several files affected -------------------------------------------------------------------------------- -- Delivery to Saab 9 Dec 2002 covering the above, PTME version 0.7d -------------------------------------------------------------------------------- 153 Latency aspects further improved, no residue: done The remaining residue left in latency dependence between VCA and VCM has been removed in VCA except for one clock period glitch. FramesAvailable function improved for latency aspects. 154 FDFS handling during abort: done The FDFS could be lost if the abort occured simulataneusly with the frame completion. To ensure that correct FDFS is always written after an abort, the FHPData is copied back to the FHPOctetPtr. In this way it is permissable to have the FDFS access cancelled due to an abort, since no FDFS data is lost, and which will be written later to memory on the re-completion of the frame. 155 There must be minimum 3 frames in memory per VC: done Assertion added to VCA to warn if too few frames are allocated to a VC. -------------------------------------------------------------------------------- -- Delivery to Saab 10 Dec 2002 covering the above, PTME version 0.7e -------------------------------------------------------------------------------- 156 Punctured Convolutional Encoder output order corrected: done 157 Turbo encoder buffer size configuration split for read/write: done 158 VCM buffer prefetch start moved earlier to improve latency: done -------------------------------------------------------------------------------- -- Delivery to Saab 19 Dec 2002 covering the above, PTME version 0.7f -------------------------------------------------------------------------------- 159 Idle Packet insertion prevented in async mode: done -------------------------------------------------------------------------------- -- Delivery to Saab 22 Jan 2003 covering the above, PTME version 0.7g -------------------------------------------------------------------------------- 160 ExtraState handling in VCA corrected: done IdleAck and FDFSAck could be incorrectly asserted simultaneously. 161 VCM buffer handling: done The prefetch buffer handler is reset for each frame, to avoid error propagation if the bus bandwidth is not met for a frame. -------------------------------------------------------------------------------- -- Delivery to Saab 28 Feb 2003 covering the above, PTME version 0.7h -------------------------------------------------------------------------------- 162 Abort/Idle Packet/FHP conflict: done FHP handling during abort and idle packet insertion and nominal data input revised and improved to avoid conflicts. 163 Further improvement to avoid a frame being released before FDFS is written to memory: done Residual window of one clock cycle in which a frame could be prematurely released has been removed. 164 VCComplete blocked by VCAbort when applicable: done VCComplete masked by VCAbort to avoid side effects (should normally be done in the PW/PP etc. interfaces as well). 165 Diagnostic support added to avoid Saab patching the code: done -------------------------------------------------------------------------------- -- Delivery to Saab 20 Mar 2003 covering the above, PTME version 0.7i -------------------------------------------------------------------------------- 166 Idle Packet insertion process to be stopped immediately: done The Idle Packet insertion process was only stopped after the potential start of a new idle packet when the frame was completed. The check of the frame completion is now performed before the potential start of a new idle packet. 167 FramesAvailable function corrected for latency aspects: done The expression (X-1-1)> 0 does not work for a result of -1 (unsigned), which lead to a restructuring of the function in two places. 168 Further correction to avoid a frame being released: done NonAvailable is only asserted when the frame has not been marked previously as available, not to cancel out a request to the VCM that can have already been accepted by a grant. -------------------------------------------------------------------------------- -- Delivery to Saab 21 Mar 2003 covering the above, PTME version 0.7j -------------------------------------------------------------------------------- 169 Idle Packet process start delayed: done Due to the blocking of FramesAvailable in order to remove latency aspects for the SAAB PI-bus implementation, the Idle Packet insertion process could start simultaneously with the last octet being stored to memory, which lead to the FHP being corrupted by the Idle Packet. This could not happen before, since FramesAvailable was not blocked in the old implemenation which prevented the Idle Packet insertion. -------------------------------------------------------------------------------- -- Delivery to Saab 23 Mar 2003 covering the above, PTME version 0.7k -------------------------------------------------------------------------------- 170 Idle Packet process start further delayed: done VCActive also taken into account when to start idle packet insertion process. Idle packet insertion made less aggressive in this way. 171 Abort pointer copying moved to end of process: done This was done to ensure that the idle packet insertion process correctly updated the abort pointers before a new packet begins in the next clock cycle. -------------------------------------------------------------------------------- -- Delivery to Saab 24 Mar 2003 covering the above, PTME version 0.7l -------------------------------------------------------------------------------- 172 Abort when WrPtr=RdPtr=AbrtPtr+Catching: done There are two possibilities for the above: - packet that spills over in to RdPtr => FHP retention - packet that completes the previous frame => no FHP retention 173 Abort when AckReady is asserted: done An abort should not distrube the FHP process when occuring simultanesously with an AckReady, since this signal indicates a completion of a packet wrt to memory. -------------------------------------------------------------------------------- -- Delivery to Saab 28 Mar 2003 covering the above, PTME version 0.7m -------------------------------------------------------------------------------- 174 Latency improved for last Turbo write access: done The latency for the last Turbo write access has been improved from one to twenty bit clock periods. The address is reset and the msb is toggled at the start of each new synchronisation marker. -------------------------------------------------------------------------------- -- Delivery to Saab 8 Apr 2003 covering the above, PTME version 0.7n -------------------------------------------------------------------------------- 175 Packet lenght check options removed: done -------------------------------------------------------------------------------- -- Delivery to ESA 20 May 2003 covering the above, PTME version 0.8 -------------------------------------------------------------------------------- 176 ptme_d.vhd: Function return from Conv_UnSigned: done Two functions returned values directly from Conv_UnSigned function, which caused array index mix-matches. The return is now made from explicitly defined temporary variable. 177 Generics introduced for PSR, SP, CE and NRZ: done To avoid dependency on ptme_c.vhd. -------------------------------------------------------------------------------- -- Delivery to Verhaert 1 July 2003 covering the above, PTME version 0.8a -------------------------------------------------------------------------------- 178 VCEmpty signal added: done -------------------------------------------------------------------------------- -- Delivery to Verhaert 25 Jan 2004 covering the above, PTME version 0.8b -------------------------------------------------------------------------------- 179 VCEmpty introduced for PAPB interface: done -------------------------------------------------------------------------------- -- Delivery to Verhaert 20 Feb 2004 covering the above, PTME version 0.8c -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- Mr Sandi Alexander Habinc, Gaisler Research -- Stora Nygatan 13, SE-41108 G?teborg, Sweden -- Work +46 31 802405 Mobile +46 707 950381 -- Fax +46 31 802407 Alt fax +1 240 2200280 -- sandi@gaisler.com http://www.gaisler.com --------------------------------------------------------------------------------