
<font color="#0000ff">---vhdl code to generate the simplest and therefore the fastest practical binary up </font>
<font color="#0000ff">---counter structure in a cpld/fpga.In most synthesis tools the generic counter</font>
<font color="#0000ff">--- macro is a trade off between size and speed and will not generate wide/fast counters easily</font>
<font color="#0000ff">--- </font>

<font color="#0000ff">---The counter consists of an array of T-type flip flops and AND gates.</font>
<font color="#0000ff">---Most modern cplds can implement an AND gate upto 48 bits wide therefore counters upto </font>
<font color="#0000ff">---48 bits long need only one layer of decode logic.Clock rates of 250 Mhz for a 32 bit</font>
<font color="#0000ff">--- counter are achievable in a xilinx 95xl series cpld.</font>

<font color="#0000ff">---Inputs</font>
<font color="#0000ff">---clk clock in</font>
<font color="#0000ff">---reset_n active low asyncronous reset</font>

<font color="#0000ff">---Outputs</font>
<font color="#0000ff">---q N bit wide counter output</font>


<font color="#804040"><b>library</b></font> ieee<font color="#6a5acd">;</font>
<font color="#804040"><b>use</b></font> ieee<font color="#6a5acd">.</font>std_logic_1164<font color="#6a5acd">.</font><font color="#804040"><b>all</b></font><font color="#6a5acd">;</font>

<font color="#804040"><b>entity</b></font> tff <font color="#804040"><b>is</b></font>
   <font color="#804040"><b>port</b></font><font color="#6a5acd">(</font>clk      <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         t       <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         clear   <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         q       <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>inout</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">);</font>
<font color="#804040"><b>end</b></font> tff<font color="#6a5acd">;</font>

<font color="#804040"><b>architecture</b></font> rtl <font color="#804040"><b>of</b></font> tff <font color="#804040"><b>is</b></font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>process</b></font><font color="#6a5acd">(</font>clear<font color="#6a5acd">,</font> clk<font color="#6a5acd">)</font>
   <font color="#804040"><b>begin</b></font>
      <font color="#804040"><b>if</b></font> clear <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font> <font color="#804040"><b>then</b></font>
         q <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">;</font>
      <font color="#804040"><b>elsif</b></font> rising_edge<font color="#6a5acd">(</font>clk<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
         <font color="#804040"><b>if</b></font> t <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'1'</font> <font color="#804040"><b>then</b></font>
            q <font color="#2e8b57"><b>&lt;=</b></font> <font color="#2e8b57"><b>not</b></font> q<font color="#6a5acd">;</font>
         <font color="#804040"><b>else</b></font>
            <font color="#804040"><b>null</b></font><font color="#6a5acd">;</font>
         <font color="#804040"><b>end</b></font> <font color="#804040"><b>if</b></font><font color="#6a5acd">;</font>
      <font color="#804040"><b>end</b></font> <font color="#804040"><b>if</b></font><font color="#6a5acd">;</font>
   <font color="#804040"><b>end</b></font> <font color="#804040"><b>process</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>end</b></font> rtl<font color="#6a5acd">;</font>



<font color="#804040"><b>library</b></font> ieee<font color="#6a5acd">;</font>
<font color="#804040"><b>use</b></font> ieee<font color="#6a5acd">.</font>std_logic_1164<font color="#6a5acd">.</font><font color="#804040"><b>all</b></font><font color="#6a5acd">;</font>

<font color="#804040"><b>entity</b></font> fastcntr <font color="#804040"><b>is</b></font>
   <font color="#804040"><b>generic</b></font><font color="#6a5acd">(</font>size  <font color="#2e8b57"><b>:</b></font> <font color="#2e8b57"><b>positive</b></font> <font color="#2e8b57"><b>:=</b></font> <font color="#ff00ff">32</font><font color="#6a5acd">);</font>     <font color="#0000ff">---counter width</font>
   <font color="#804040"><b>port</b></font><font color="#6a5acd">(</font>clk      <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>in</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
        reset_n <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>in</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
        q        <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>inout</b></font> <font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">((</font>size<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">)</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">));</font>
<font color="#804040"><b>end</b></font> fastcntr<font color="#6a5acd">;</font>

<font color="#804040"><b>architecture</b></font> rtl <font color="#804040"><b>of</b></font> fastcntr <font color="#804040"><b>is</b></font>

   <font color="#804040"><b>component</b></font> tff <font color="#804040"><b>is</b></font>
      <font color="#804040"><b>port</b></font><font color="#6a5acd">(</font>clk   <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         t       <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         clear   <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>in</b></font>    <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
         q       <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>inout</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">);</font>
   <font color="#804040"><b>end</b></font> <font color="#804040"><b>component</b></font><font color="#6a5acd">;</font>

   <font color="#804040"><b>signal</b></font> tin <font color="#2e8b57"><b>:</b></font> <font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">((</font>size<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">)</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">);</font>

<font color="#804040"><b>begin</b></font>

   genttf <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>for</b></font> i <font color="#804040"><b>in</b></font> <font color="#6a5acd">(</font>size<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">)</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font> <font color="#804040"><b>generate</b></font>
      ttype <font color="#2e8b57"><b>:</b></font> tff <font color="#804040"><b>port</b></font> <font color="#804040"><b>map</b></font> <font color="#6a5acd">(</font>clk<font color="#6a5acd">,</font> tin<font color="#6a5acd">(</font>i<font color="#6a5acd">),</font> reset_n<font color="#6a5acd">,</font> q<font color="#6a5acd">(</font>i<font color="#6a5acd">));</font>
   <font color="#804040"><b>end</b></font> <font color="#804040"><b>generate</b></font><font color="#6a5acd">;</font>

   genand <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>for</b></font> i <font color="#804040"><b>in</b></font> <font color="#ff00ff">0</font> <font color="#804040"><b>to</b></font> <font color="#6a5acd">(</font>size<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">)</font> <font color="#804040"><b>generate</b></font>
      t0 <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>if</b></font> i <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">0</font> <font color="#804040"><b>generate</b></font>
         tin<font color="#6a5acd">(</font>i<font color="#6a5acd">)</font> <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">;</font>
      <font color="#804040"><b>end</b></font> <font color="#804040"><b>generate</b></font><font color="#6a5acd">;</font>
      t1_size <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>if</b></font> i <font color="#2e8b57"><b>&gt;</b></font> <font color="#ff00ff">0</font> <font color="#804040"><b>generate</b></font>
         tin<font color="#6a5acd">(</font>i<font color="#6a5acd">)</font> <font color="#2e8b57"><b>&lt;=</b></font> q<font color="#6a5acd">(</font>i<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>and</b></font> tin<font color="#6a5acd">(</font>i<font color="#2e8b57"><b>-</b></font><font color="#ff00ff">1</font><font color="#6a5acd">);</font>
      <font color="#804040"><b>end</b></font> <font color="#804040"><b>generate</b></font><font color="#6a5acd">;</font>
   <font color="#804040"><b>end</b></font> <font color="#804040"><b>generate</b></font><font color="#6a5acd">;</font>

<font color="#804040"><b>end</b></font> rtl<font color="#6a5acd">;</font>



