Changeset 8229
- Timestamp:
- 08/28/08 20:50:09 (5 years ago)
- Files:
-
- 1 modified
-
ossiedev/branches/mcarrick/VHDL/delay/delay.vhd (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ossiedev/branches/mcarrick/VHDL/delay/delay.vhd
r8213 r8229 3 3 -- This component is a delay block which will hold the sample value for 4 4 -- 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 delay5 -- of bit length numBits. When the reset goes high, it will set the 6 6 -- register to zeros. The circuit is designed to have a positive, 7 7 -- non-zero value for numDelay. Having numDelay<=0 is an invalid setting … … 9 9 -- 10 10 -- This component requires the 'reg' component. The logic behind the circuit 11 -- is to instantiate a minimum of an input and output register, which gives12 -- a delay of 1, then generate any intermediate registers to further13 -- 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. 15 15 16 16 library ieee; … … 46 46 47 47 -- type declaration 48 type data_vec is array(numDelay- 1downto 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); 49 49 50 50 -- signal declarations … … 56 56 build_delays : if (numDelay > 0) generate 57 57 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 70 60 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 ); 76 74 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 79 97 generic map ( 80 98 numBits => numBits 81 99 ) 82 100 port map ( 83 dataIn => passData(i -1),101 dataIn => passData(i), 84 102 chipEnable => chipEnable, 85 103 reset => reset, 86 104 clock => clock, 87 dataOut => passData(i )105 dataOut => passData(i+1) 88 106 ); 89 end generate middle_delay;90 end generate more_regs;91 107 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; 104 124 105 125 end generate build_delays; … … 112 132 113 133 114 115 116 117