Changeset 8229

Show
Ignore:
Timestamp:
08/28/08 20:50:09 (5 years ago)
Author:
mcarrick
Message:

removing extraneous delay generated interally by component

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • ossiedev/branches/mcarrick/VHDL/delay/delay.vhd

    r8213 r8229  
    33-- This component is a delay block which will hold the sample value for 
    44-- the specified (numDelay) clock cycles. It will hold a std_logic_vector 
    5 -- of bit length numBits. When the reset goes high, it will set the delay 
     5-- of bit length numBits. When the reset goes high, it will set the 
    66-- register to zeros. The circuit is designed to have a positive,  
    77-- non-zero value for numDelay. Having numDelay<=0 is an invalid setting 
     
    99-- 
    1010-- This component requires the 'reg' component. The logic behind the circuit 
    11 -- is to instantiate a minimum of an input and output register, which gives 
    12 -- a delay of 1, then generate any intermediate registers to further 
    13 -- increase the amount of delay to the specified numDelay. 
    14  
     11-- is for a single delay to simply add in a single register. For more than 
     12-- one delay, the circuit connects a minimum of an input and output register, 
     13-- which gives a delay of 1, then generate any intermediate registers to 
     14-- further increase the amount of delay to the specified numDelay. 
    1515 
    1616library ieee; 
     
    4646 
    4747        -- type declaration 
    48         type data_vec is array(numDelay-1 downto 0) of std_logic_vector(numBits-1 downto 0); 
     48        type data_vec is array(numDelay-2 downto 0) of std_logic_vector(numBits-1 downto 0); 
    4949         
    5050        -- signal declarations 
     
    5656                build_delays : if (numDelay > 0) generate 
    5757                 
    58                         -- input register, first in delay line 
    59                         input_reg : reg 
    60                                 generic map ( 
    61                                         numBits => numBits 
    62                                 ) 
    63                                 port map ( 
    64                                         dataIn          => dataIn, 
    65                                         chipEnable      => chipEnable, 
    66                                         reset           => reset, 
    67                                         clock           => clock, 
    68                                         dataOut         => passData(0) 
    69                                 ); 
     58                        -- case for a single delay 
     59                        single_delay : if (numDelay = 1) generate 
    7060 
    71                         -- generate middle registers in the delay line 
    72                         more_regs : if (numDelay > 1) generate 
    73                          
    74                                 -- case for middle registers 
    75                                 middle_delay : for i in 1 to numDelay-1 generate 
     61                                -- for a single delay, simply instantiate 
     62                                -- a register 
     63                                single_delay_reg : reg 
     64                                        generic map ( 
     65                                                numBits => numBits 
     66                                        ) 
     67                                        port map ( 
     68                                                dataIn          => dataIn, 
     69                                                chipEnable      => chipEnable, 
     70                                                reset           => reset, 
     71                                                clock           => clock, 
     72                                                dataOut         => dataOut 
     73                                        ); 
    7674 
    77                                         -- instantiate middle registers 
    78                                         middle_regs : reg 
     75                        end generate single_delay; 
     76 
     77                        -- case for a delays greater than 1 
     78                        multiple_delays : if (numDelay > 1) generate 
     79 
     80                                -- push data to first register 
     81                                first_reg : reg 
     82                                        generic map ( 
     83                                                numBits => numBits 
     84                                        ) 
     85                                        port map ( 
     86                                                dataIn          => dataIn, 
     87                                                chipEnable      => chipEnable, 
     88                                                reset           => reset, 
     89                                                clock           => clock, 
     90                                                dataOut         => passData(0) 
     91                                        ); 
     92 
     93                                -- middle registers 
     94                                connect_middle_regs : for i in 0 to numDelay-3 generate 
     95 
     96                                        middle_reg : reg 
    7997                                                generic map ( 
    8098                                                        numBits => numBits 
    8199                                                ) 
    82100                                                port map ( 
    83                                                         dataIn          => passData(i-1), 
     101                                                        dataIn          => passData(i), 
    84102                                                        chipEnable      => chipEnable, 
    85103                                                        reset           => reset, 
    86104                                                        clock           => clock, 
    87                                                         dataOut         => passData(i) 
     105                                                        dataOut         => passData(i+1) 
    88106                                                ); 
    89                                 end generate middle_delay; 
    90                         end generate more_regs; 
    91107 
    92                         -- output register, last in delay line 
    93                         output_reg : reg 
    94                                 generic map ( 
    95                                         numBits => numBits 
    96                                 ) 
    97                                 port map ( 
    98                                         dataIn          => passData(numDelay-1), 
    99                                         chipEnable      => chipEnable, 
    100                                         reset           => reset, 
    101                                         clock           => clock, 
    102                                         dataOut         => dataOut 
    103                                 ); 
     108                                end generate connect_middle_regs; 
     109 
     110                                -- push data from last reg to output 
     111                                last_reg : reg 
     112                                        generic map ( 
     113                                                numBits => numBits 
     114                                        ) 
     115                                        port map ( 
     116                                                dataIn          => passData(numDelay-2), 
     117                                                chipEnable      => chipEnable, 
     118                                                reset           => reset, 
     119                                                clock           => clock, 
     120                                                dataOut         => dataOut 
     121                                        ); 
     122 
     123                        end generate multiple_delays; 
    104124                 
    105125                end generate build_delays; 
     
    112132 
    113133 
    114  
    115  
    116  
    117