
<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>use</b></font> ieee<font color="#6a5acd">.</font>std_logic_arith<font color="#6a5acd">.</font><font color="#804040"><b>all</b></font> <font color="#6a5acd">;</font>
<font color="#804040"><b>use</b></font> ieee<font color="#6a5acd">.</font>std_logic_unsigned<font color="#6a5acd">.</font><font color="#804040"><b>all</b></font><font color="#6a5acd">;</font>

<font color="#804040"><b>entity</b></font> rx <font color="#804040"><b>is</b></font>
<font color="#804040"><b>port</b></font><font color="#6a5acd">(</font>mr         <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>
     clk_8      <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> <font color="#0000ff">--8 x oversample clock</font>
     man_in     <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>
     cd         <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>out</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
     data_clk   <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>out</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
     data_out   <font color="#2e8b57"><b>:</b></font><font color="#804040"><b>out</b></font> <font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">);</font>
<font color="#804040"><b>end</b></font> rx<font color="#6a5acd">;</font>


<font color="#804040"><b>architecture</b></font> rtl <font color="#804040"><b>of</b></font> rx <font color="#804040"><b>is</b></font>
<font color="#804040"><b>signal</b></font> clk_1               <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> net_in_hi2lo_shift  <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">1</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">);</font>
<font color="#804040"><b>signal</b></font> in_trans            <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> net_in_hi2lo        <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> net_in_lo2hi        <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> filter              <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> filter_lo2hi        <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> filter_hi2lo        <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> filter_hi2lo_shift  <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">1</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;00&quot;</font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> mr_and_filter_hi2lo <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> mr_and_filter       <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> cd_sys              <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> data_clk_out        <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> cd_shift            <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">5</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;000000&quot;</font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> mux_sel_ck          <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> count_8             <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">2</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> count_6             <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">2</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> count_5             <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">2</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
<font color="#804040"><b>signal</b></font> count_4             <font color="#2e8b57"><b>:</b></font><font color="#2e8b57"><b>std_logic_vector</b></font><font color="#6a5acd">(</font><font color="#ff00ff">1</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font><font color="#2e8b57"><b>:=</b></font><font color="#ff00ff">&quot;00&quot;</font><font color="#6a5acd">;</font>


<font color="#804040"><b>begin</b></font>
<font color="#0000ff">--generate main clock from oversample clk</font>

clk_8_divider <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
<font color="#804040"><b>if</b></font> mr<font color="#2e8b57"><b>=</b></font><font color="#ff00ff">'0'</font> <font color="#804040"><b>then</b></font>
count_8<font color="#2e8b57"><b>&lt;=</b></font><font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
  <font color="#804040"><b>elsif</b></font> rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
       count_8 <font color="#2e8b57"><b>&lt;=</b></font> count_8 <font color="#2e8b57"><b>+</b></font> <font color="#ff00ff">&quot;001&quot;</font> <font color="#6a5acd">;</font>
       clk_1 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#2e8b57"><b>not</b></font> <font color="#6a5acd">(</font>count_8<font color="#6a5acd">(</font><font color="#ff00ff">2</font><font color="#6a5acd">))</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> clk_8_divider<font color="#6a5acd">;</font>

<font color="#0000ff">-- shift register</font>

shift_reg <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> mr <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font> <font color="#804040"><b>then</b></font>
      net_in_hi2lo_shift <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;00&quot;</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font>   rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      net_in_hi2lo_shift <font color="#2e8b57"><b>&lt;=</b></font> net_in_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>&amp;</b></font> man_in<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> shift_reg<font color="#6a5acd">;</font>

<font color="#0000ff">-- transition detector</font>
<font color="#0000ff">-- detects change in input state                </font>
net_in_hi2lo <font color="#2e8b57"><b>&lt;=</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> net_in_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">))</font> <font color="#2e8b57"><b>and</b></font> net_in_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">1</font><font color="#6a5acd">);</font>
net_in_lo2hi <font color="#2e8b57"><b>&lt;=</b></font> net_in_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>and</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> net_in_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">1</font><font color="#6a5acd">));</font>
in_trans <font color="#2e8b57"><b>&lt;=</b></font> net_in_hi2lo <font color="#2e8b57"><b>or</b></font> net_in_lo2hi <font color="#6a5acd">;</font>


 <font color="#0000ff">---syncronise samples to middle of main clock</font>

sample_filter<font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> mr <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font> <font color="#804040"><b>then</b></font>
      count_6 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
      filter <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_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      <font color="#804040"><b>if</b></font> <font color="#6a5acd">(</font>filter <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
           <font color="#804040"><b>if</b></font> count_6 <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">&quot;101&quot;</font> <font color="#804040"><b>then</b></font>
             count_6 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
             filter <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">;</font>
           <font color="#804040"><b>else</b></font>
             count_6 <font color="#2e8b57"><b>&lt;=</b></font> count_6 <font color="#2e8b57"><b>+</b></font> <font color="#ff00ff">&quot;001&quot;</font><font color="#6a5acd">;</font>
             filter <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>if</b></font><font color="#6a5acd">;</font>
      <font color="#804040"><b>else</b></font>
           <font color="#804040"><b>if</b></font> <font color="#6a5acd">(</font>in_trans <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
             filter <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">;</font>
             count_6 <font color="#2e8b57"><b>&lt;=</b></font> count_6 <font color="#2e8b57"><b>+</b></font> <font color="#ff00ff">&quot;001&quot;</font><font color="#6a5acd">;</font>
           <font color="#804040"><b>else</b></font>
             filter <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">;</font>
             count_6 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;000&quot;</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>if</b></font><font color="#6a5acd">;</font>
<font color="#804040"><b>end</b></font> <font color="#804040"><b>process</b></font> sample_filter<font color="#6a5acd">;</font>

transition_filter <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> mr <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font>  <font color="#804040"><b>then</b></font>
      filter_hi2lo_shift <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;00&quot;</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font> mr<font color="#2e8b57"><b>=</b></font><font color="#ff00ff">'1'</font> <font color="#2e8b57"><b>and</b></font> rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      filter_hi2lo_shift <font color="#2e8b57"><b>&lt;=</b></font> filter_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>&amp;</b></font> filter<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> transition_filter<font color="#6a5acd">;</font>
filter_lo2hi <font color="#2e8b57"><b>&lt;=</b></font> filter_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>and</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> filter_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">1</font><font color="#6a5acd">));</font>

data_out_gen<font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> mr <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font> <font color="#804040"><b>then</b></font>
      data_out <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font>   rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      <font color="#804040"><b>if</b></font>  <font color="#6a5acd">(</font>filter_lo2hi <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">)</font>  <font color="#804040"><b>then</b></font>
         data_out <font color="#2e8b57"><b>&lt;=</b></font> man_in<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> data_out_gen<font color="#6a5acd">;</font>

filter_hi2lo <font color="#2e8b57"><b>&lt;=</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> filter_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">0</font><font color="#6a5acd">))</font> <font color="#2e8b57"><b>and</b></font> filter_hi2lo_shift<font color="#6a5acd">(</font><font color="#ff00ff">1</font><font color="#6a5acd">);</font>
mr_and_filter_hi2lo <font color="#2e8b57"><b>&lt;=</b></font> mr <font color="#2e8b57"><b>and</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> filter_hi2lo<font color="#6a5acd">);</font>
<font color="#0000ff">--extract data clock</font>
data_clock<font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr_and_filter_hi2lo<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font><font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> <font color="#6a5acd">(</font>mr_and_filter_hi2lo <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      data_clk_out <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">;</font>
      count_4 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;00&quot;</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font>  rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      <font color="#804040"><b>if</b></font>  <font color="#6a5acd">(</font>count_4 <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">&quot;10&quot;</font><font color="#6a5acd">)</font>  <font color="#804040"><b>then</b></font>
         data_clk_out <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">;</font>
      <font color="#804040"><b>else</b></font>
         count_4 <font color="#2e8b57"><b>&lt;=</b></font> count_4 <font color="#2e8b57"><b>+</b></font> <font color="#ff00ff">&quot;01&quot;</font><font color="#6a5acd">;</font>
         data_clk_out <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>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> data_clock<font color="#6a5acd">;</font>

mr_and_filter <font color="#2e8b57"><b>&lt;=</b></font> mr <font color="#2e8b57"><b>and</b></font> <font color="#2e8b57"><b>not</b></font> <font color="#6a5acd">(</font>filter<font color="#6a5acd">);</font>

carrier_detect<font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr_and_filter<font color="#6a5acd">,</font>clk_8<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> <font color="#6a5acd">(</font>mr_and_filter <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      count_5 <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;000&quot;</font><font color="#6a5acd">;</font>
      cd_sys <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'1'</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font> rising_edge<font color="#6a5acd">(</font>clk_8<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      <font color="#804040"><b>if</b></font>  <font color="#6a5acd">(</font>count_5 <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">&quot;110&quot;</font><font color="#6a5acd">)</font>  <font color="#804040"><b>then</b></font>
         cd_sys <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">'0'</font><font color="#6a5acd">;</font>
      <font color="#804040"><b>else</b></font>
         count_5 <font color="#2e8b57"><b>&lt;=</b></font> count_5 <font color="#2e8b57"><b>+</b></font> <font color="#ff00ff">&quot;001&quot;</font><font color="#6a5acd">;</font>
         cd_sys <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>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> carrier_detect<font color="#6a5acd">;</font>

cd <font color="#2e8b57"><b>&lt;=</b></font> cd_sys<font color="#6a5acd">;</font>

carrier_detect_shift <font color="#2e8b57"><b>:</b></font> <font color="#804040"><b>process</b></font> <font color="#6a5acd">(</font>mr<font color="#6a5acd">,</font>clk_1<font color="#6a5acd">)</font>
<font color="#804040"><b>begin</b></font>
   <font color="#804040"><b>if</b></font> mr <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'0'</font>  <font color="#804040"><b>then</b></font>
      cd_shift <font color="#2e8b57"><b>&lt;=</b></font> <font color="#ff00ff">&quot;000000&quot;</font><font color="#6a5acd">;</font>
   <font color="#804040"><b>elsif</b></font> mr<font color="#2e8b57"><b>=</b></font><font color="#ff00ff">'1'</font> <font color="#2e8b57"><b>and</b></font> rising_edge<font color="#6a5acd">(</font>clk_1<font color="#6a5acd">)</font> <font color="#804040"><b>then</b></font>
      cd_shift <font color="#2e8b57"><b>&lt;=</b></font> cd_shift<font color="#6a5acd">(</font><font color="#ff00ff">4</font> <font color="#804040"><b>downto</b></font> <font color="#ff00ff">0</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>&amp;</b></font> cd_sys<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> carrier_detect_shift<font color="#6a5acd">;</font>
mux_sel_ck  <font color="#2e8b57"><b>&lt;=</b></font> cd_shift<font color="#6a5acd">(</font><font color="#ff00ff">5</font><font color="#6a5acd">)</font> <font color="#2e8b57"><b>and</b></font> <font color="#6a5acd">(</font><font color="#2e8b57"><b>not</b></font> cd_sys<font color="#6a5acd">);</font>
data_clk <font color="#2e8b57"><b>&lt;=</b></font> clk_1 <font color="#804040"><b>when</b></font> mux_sel_ck <font color="#2e8b57"><b>=</b></font> <font color="#ff00ff">'1'</font> <font color="#804040"><b>else</b></font>  data_clk_out<font color="#6a5acd">;</font>

<font color="#804040"><b>end</b></font> rtl<font color="#6a5acd">;</font>





