File indexing completed on 2024-05-12 04:02:08

0001 <!DOCTYPE html>
0002 <html><head>
0003 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
0004 <title>light52_muldiv.vhdl</title>
0005 <meta name="generator" content="KF5::SyntaxHighlighting - Definition (VHDL) - Theme (Breeze Light)"/>
0006 </head><body style="background-color:#ffffff;color:#1f1c1b"><pre>
0007 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0008 <span style="color:#898887">-- light52_muldiv.vhdl -- Simple multiplier/divider module.</span>
0009 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0010 <span style="color:#898887">-- The 8051 mul and div instructions are both unsigned and operands are 8 bit.</span>
0011 <span style="color:#898887">--</span>
0012 <span style="color:#898887">-- This module implements the division as a sequential state machine which takes</span>
0013 <span style="color:#898887">-- 8 cycles to complete. </span>
0014 <span style="color:#898887">-- The multiplier can be implemented as sequential or as combinational, in which</span>
0015 <span style="color:#898887">-- case it will use a DSP block in those architectures that support it.</span>
0016 <span style="color:#898887">-- No attempt has been made to make this module generic or reusable.</span>
0017 <span style="color:#898887">--</span>
0018 <span style="color:#898887">-- If you want a combinational multiplier but don't want to waste a DSP block </span>
0019 <span style="color:#898887">-- in this module, you need to modify this file adding whatever synthesis </span>
0020 <span style="color:#898887">-- pragmas your tool of choice needs.</span>
0021 <span style="color:#898887">--</span>
0022 <span style="color:#898887">-- Note that unlike the division state machine, the combinational product logic</span>
0023 <span style="color:#898887">-- is always operating: when SEQUENTIAL_MULTIPLIER=true, prod_out equals </span>
0024 <span style="color:#898887">-- data_a * data_b with a latency of 1 clock cycle, and mul_ready is hardwired</span>
0025 <span style="color:#898887">-- to '1'.</span>
0026 <span style="color:#898887">--</span>
0027 <span style="color:#898887">-- </span><span style="color:#ca9219;background-color:#451e1a;font-weight:bold">FIXME</span><span style="color:#898887"> explain division algorithm.</span>
0028 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0029 <span style="color:#898887">-- GENERICS:</span>
0030 <span style="color:#898887">-- </span>
0031 <span style="color:#898887">-- SEQUENTIAL_MULTIPLIER        -- Sequential vs. combinational multiplier.</span>
0032 <span style="color:#898887">--  When true, a sequential implementation will be used for the multiplier, </span>
0033 <span style="color:#898887">--  which will usually save a lot of logic or a dedicated multiplier.</span>
0034 <span style="color:#898887">--  When false, a combinational registered multiplier will be used.</span>
0035 <span style="color:#898887">--</span>
0036 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0037 <span style="color:#898887">-- INTERFACE SIGNALS:</span>
0038 <span style="color:#898887">--</span>
0039 <span style="color:#898887">-- clk :            Clock, active rising edge.</span>
0040 <span style="color:#898887">-- reset :          Synchronous reset. Clears only the control registers not</span>
0041 <span style="color:#898887">--                  visible to the programmer -- not the output registers.</span>
0042 <span style="color:#898887">-- </span>
0043 <span style="color:#898887">-- data_a :         Numerator input, should be connected to the ACC register.</span>
0044 <span style="color:#898887">-- data_b :         Denominator input, should be connected to the B register.</span>
0045 <span style="color:#898887">-- start :          Assert for 1 cycle to start the division state machine</span>
0046 <span style="color:#898887">--                  (and the product if SEQUENTIAL_MULTIPLIER=true);</span>
0047 <span style="color:#898887">-- </span>
0048 <span style="color:#898887">-- prod_out :       Product output, valid only when mul_ready='1'.</span>
0049 <span style="color:#898887">-- quot_out :       Quotient output, valid only when div_ready='1'.</span>
0050 <span style="color:#898887">-- rem_out :        Remainder output, valid only when div_ready='1'.</span>
0051 <span style="color:#898887">-- div_ov_out :     Division overflow flag, valid only when div_ready='1'.</span>
0052 <span style="color:#898887">-- mul_ov_out :     Product overflow flag, valid only when mul_ready='1'.</span>
0053 <span style="color:#898887">-- </span>
0054 <span style="color:#898887">-- mul_ready :      Asserted permanently if SEQUENTIAL_MULTIPLIER=false.</span>
0055 <span style="color:#898887">-- div_ready :      Deasserted the cycle after start is asserted.</span>
0056 <span style="color:#898887">--                  Asserted when the division has completed.</span>
0057 <span style="color:#898887">--</span>
0058 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0059 <span style="color:#898887">-- Copyright (C) 2012 Jose A. Ruiz</span>
0060 <span style="color:#898887">--                                                              </span>
0061 <span style="color:#898887">-- This source file may be used and distributed without         </span>
0062 <span style="color:#898887">-- restriction provided that this copyright statement is not    </span>
0063 <span style="color:#898887">-- removed from the file and that any derivative work contains  </span>
0064 <span style="color:#898887">-- the original copyright notice and the associated disclaimer. </span>
0065 <span style="color:#898887">--                                                              </span>
0066 <span style="color:#898887">-- This source file is free software; you can redistribute it   </span>
0067 <span style="color:#898887">-- and/or modify it under the terms of the GNU Lesser General   </span>
0068 <span style="color:#898887">-- Public License as published by the Free Software Foundation; </span>
0069 <span style="color:#898887">-- either version 2.1 of the License, or (at your option) any   </span>
0070 <span style="color:#898887">-- later version.                                               </span>
0071 <span style="color:#898887">--                                                              </span>
0072 <span style="color:#898887">-- This source is distributed in the hope that it will be       </span>
0073 <span style="color:#898887">-- useful, but WITHOUT ANY WARRANTY; without even the implied   </span>
0074 <span style="color:#898887">-- warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      </span>
0075 <span style="color:#898887">-- PURPOSE.  See the GNU Lesser General Public License for more </span>
0076 <span style="color:#898887">-- details.                                                     </span>
0077 <span style="color:#898887">--                                                              </span>
0078 <span style="color:#898887">-- You should have received a copy of the GNU Lesser General    </span>
0079 <span style="color:#898887">-- Public License along with this source; if not, download it   </span>
0080 <span style="color:#898887">-- from http://www.opencores.org/lgpl.shtml</span>
0081 <span style="color:#898887">--------------------------------------------------------------------------------</span>
0082 
0083 <span style="font-weight:bold">library</span> ieee;
0084 <span style="font-weight:bold">use</span> ieee<span style="color:#006e28">.</span>std_logic_1164<span style="color:#006e28">.</span><span style="font-weight:bold">all</span>;
0085 <span style="font-weight:bold">use</span> ieee<span style="color:#006e28">.</span>numeric_std<span style="color:#006e28">.</span><span style="font-weight:bold">all</span>;
0086 
0087 <span style="font-weight:bold">use</span> work<span style="color:#006e28">.</span>light52_pkg<span style="color:#006e28">.</span><span style="font-weight:bold">all</span>;
0088 <span style="font-weight:bold">use</span> work<span style="color:#006e28">.</span>light52_ucode_pkg<span style="color:#006e28">.</span><span style="font-weight:bold">all</span>;
0089 
0090 <span style="font-weight:bold">entity</span> <span style="color:#b08000;font-weight:bold">light52_muldiv</span> <span style="font-weight:bold">is</span>
0091     <span style="font-weight:bold">generic</span> (
0092         SEQUENTIAL_MULTIPLIER <span style="color:#006e28">:</span> <span style="color:#0057ae">boolean</span> <span style="color:#006e28">:=</span> <span style="font-weight:bold">false</span>
0093     );
0094     <span style="font-weight:bold">port</span>(
0095         clk <span style="color:#006e28">:</span>                   <span style="font-weight:bold">in</span> <span style="color:#0057ae">std_logic</span>;
0096         reset <span style="color:#006e28">:</span>                 <span style="font-weight:bold">in</span> <span style="color:#0057ae">std_logic</span>;
0097 
0098         data_a <span style="color:#006e28">:</span>                <span style="font-weight:bold">in</span> t_byte;
0099         data_b <span style="color:#006e28">:</span>                <span style="font-weight:bold">in</span> t_byte;
0100         start <span style="color:#006e28">:</span>                 <span style="font-weight:bold">in</span> <span style="color:#0057ae">std_logic</span>;
0101 
0102         prod_out <span style="color:#006e28">:</span>              <span style="font-weight:bold">out</span> t_word;
0103         quot_out <span style="color:#006e28">:</span>              <span style="font-weight:bold">out</span> t_byte;
0104         rem_out <span style="color:#006e28">:</span>               <span style="font-weight:bold">out</span> t_byte;
0105         div_ov_out <span style="color:#006e28">:</span>            <span style="font-weight:bold">out</span> <span style="color:#0057ae">std_logic</span>;
0106         mul_ov_out <span style="color:#006e28">:</span>            <span style="font-weight:bold">out</span> <span style="color:#0057ae">std_logic</span>;
0107 
0108         mul_ready <span style="color:#006e28">:</span>             <span style="font-weight:bold">out</span> <span style="color:#0057ae">std_logic</span>;
0109         div_ready <span style="color:#006e28">:</span>             <span style="font-weight:bold">out</span> <span style="color:#0057ae">std_logic</span>
0110     );
0111 <span style="font-weight:bold">end entity light52_muldiv;</span>
0112 
0113 <span style="font-weight:bold">architecture</span> <span style="color:#b08000;font-weight:bold">sequential</span> <span style="font-weight:bold">of</span> <span style="color:#644a9b">light52_muldiv</span> <span style="font-weight:bold">is</span>
0114 
0115 <span style="color:#006e28">signal</span> bit_ctr <span style="color:#006e28">:</span>            <span style="color:#0057ae">integer</span> <span style="font-weight:bold">range</span> <span style="color:#b08000">0</span> <span style="color:#006e28">to</span> <span style="color:#b08000">8</span>;
0116 
0117 <span style="color:#006e28">signal</span> b_shift_reg <span style="color:#006e28">:</span>        t_word;
0118 
0119 <span style="color:#006e28">signal</span> den_ge_256 <span style="color:#006e28">:</span>         <span style="color:#0057ae">std_logic</span>;
0120 <span style="color:#006e28">signal</span> num_ge_den <span style="color:#006e28">:</span>         <span style="color:#0057ae">std_logic</span>;
0121 <span style="color:#006e28">signal</span> sub_num <span style="color:#006e28">:</span>            <span style="color:#0057ae">std_logic</span>;
0122 
0123 <span style="color:#006e28">signal</span> denominator <span style="color:#006e28">:</span>        t_byte;
0124 <span style="color:#006e28">signal</span> rem_reg <span style="color:#006e28">:</span>            t_byte;
0125 <span style="color:#006e28">signal</span> quot_reg <span style="color:#006e28">:</span>           t_byte;
0126 <span style="color:#006e28">signal</span> prod_reg <span style="color:#006e28">:</span>           t_word;
0127 <span style="color:#006e28">signal</span> ready <span style="color:#006e28">:</span>              <span style="color:#0057ae">std_logic</span>;
0128 
0129 <span style="color:#006e28">signal</span> load_regs <span style="color:#006e28">:</span>          <span style="color:#0057ae">std_logic</span>;
0130 
0131 <span style="font-weight:bold">begin</span>
0132 
0133 <span style="color:#898887">-- Control logic ---------------------------------------------------------------</span>
0134 
0135 <span style="color:#b08000;font-weight:bold">control_counter</span><span style="color:#006e28">:</span> <span style="color:#3daee9;font-weight:bold">process</span>(clk)
0136     <span style="font-weight:bold">alias</span> sig <span style="font-weight:bold">is</span> <span style="color:#006e28">&lt;&lt;</span><span style="color:#006e28">signal</span> g_test(<span style="color:#b08000">0</span>)<span style="color:#006e28">.</span>i_test<span style="color:#006e28">.</span>sig <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic</span><span style="color:#006e28">>></span>;
0137 <span style="color:#3daee9;font-weight:bold">begin</span>
0138     <span style="font-weight:bold">if</span> clk<span style="color:#b08000">'event</span> <span style="font-weight:bold">and</span> clk<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0139         <span style="font-weight:bold">if</span> reset<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0140             bit_ctr <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">8</span>;
0141         <span style="font-weight:bold">else</span>
0142             <span style="font-weight:bold">if</span> load_regs<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0143                 bit_ctr <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">0</span>;
0144             <span style="font-weight:bold">elsif</span> bit_ctr <span style="color:#006e28">/=</span> <span style="color:#b08000">8</span> <span style="font-weight:bold">then</span>
0145                 bit_ctr <span style="color:#006e28">&lt;=</span> bit_ctr <span style="color:#006e28">+</span> <span style="color:#b08000">1</span>;
0146             <span style="font-weight:bold">end if;</span>
0147         <span style="font-weight:bold">end if;</span>
0148     <span style="font-weight:bold">end if;</span>
0149 <span style="color:#3daee9;font-weight:bold">end process control_counter;</span>
0150 
0151 <span style="color:#898887">-- Internal signal ready is asserted after 8 cycles.</span>
0152 <span style="color:#898887">-- The sequential multiplier will use this signal too, IF it takes 8 cycles.</span>
0153 
0154 ready <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span> <span style="font-weight:bold">when</span> bit_ctr <span style="color:#006e28">>=</span> <span style="color:#b08000">8</span> <span style="font-weight:bold">else</span> <span style="color:#b08000">'0'</span>;
0155 
0156 
0157 <span style="color:#898887">---- Divider logic -------------------------------------------------------------</span>
0158 
0159 <span style="color:#898887">-- What we do is a simple base-2 'shift-and-subtract' algorithm that takes</span>
0160 <span style="color:#898887">-- 8 cycles to complete. We can get away with this because we deal with unsigned</span>
0161 <span style="color:#898887">-- numbers only.</span>
0162 
0163 <span style="color:#b08000;font-weight:bold">divider_registers</span><span style="color:#006e28">:</span> <span style="color:#3daee9;font-weight:bold">process</span>(clk)
0164 <span style="color:#3daee9;font-weight:bold">begin</span>
0165     <span style="font-weight:bold">if</span> clk<span style="color:#b08000">'event</span> <span style="font-weight:bold">and</span> clk<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0166         <span style="color:#898887">-- denominator shift register</span>
0167         <span style="font-weight:bold">if</span> load_regs<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0168             b_shift_reg <span style="color:#006e28">&lt;=</span> <span style="color:#bf0303">"0"</span> <span style="color:#006e28">&amp;</span> data_b <span style="color:#006e28">&amp;</span> <span style="color:#bf0303">"0000000"</span>;
0169             <span style="color:#898887">-- Division overflow can be determined upon loading B reg data.</span>
0170             <span style="color:#898887">-- OV will be raised only on div-by-zero.</span>
0171             <span style="font-weight:bold">if</span> data_b<span style="color:#006e28">=</span>X<span style="color:#bf0303">"00"</span> <span style="font-weight:bold">then</span>
0172                 div_ov_out <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span>;
0173             <span style="font-weight:bold">else</span>
0174                 div_ov_out <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'0'</span>;
0175             <span style="font-weight:bold">end if;</span>
0176         <span style="font-weight:bold">else</span>
0177             b_shift_reg <span style="color:#006e28">&lt;=</span> <span style="color:#bf0303">"0"</span> <span style="color:#006e28">&amp;</span> b_shift_reg(b_shift_reg<span style="color:#b08000">'high</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">1</span>);
0178         <span style="font-weight:bold">end if;</span>
0179         
0180         <span style="color:#898887">-- numerator register</span>
0181         <span style="font-weight:bold">if</span> load_regs<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span> 
0182             rem_reg <span style="color:#006e28">&lt;=</span> data_a;
0183         <span style="font-weight:bold">elsif</span> bit_ctr<span style="color:#006e28">/=</span><span style="color:#b08000">8</span> <span style="font-weight:bold">and</span> sub_num<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span> 
0184             rem_reg <span style="color:#006e28">&lt;=</span> rem_reg <span style="color:#006e28">-</span> denominator;
0185         <span style="font-weight:bold">end if;</span>
0186 
0187         <span style="color:#898887">--- quotient register</span>
0188         <span style="font-weight:bold">if</span> load_regs<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0189             quot_reg <span style="color:#006e28">&lt;=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>);
0190         <span style="font-weight:bold">elsif</span> bit_ctr<span style="color:#006e28">/=</span><span style="color:#b08000">8</span> <span style="font-weight:bold">then</span>
0191             quot_reg <span style="color:#006e28">&lt;=</span> quot_reg(quot_reg<span style="color:#b08000">'high-1</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>) <span style="color:#006e28">&amp;</span> sub_num;
0192         <span style="font-weight:bold">end if;</span>
0193         
0194         load_regs <span style="color:#006e28">&lt;=</span> start;
0195     <span style="font-weight:bold">end if;</span>
0196 <span style="color:#3daee9;font-weight:bold">end process divider_registers;</span>
0197 
0198 denominator <span style="color:#006e28">&lt;=</span> b_shift_reg(<span style="color:#b08000">7</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>);
0199 
0200 <span style="color:#898887">-- The 16-bit comparison between b_shift_reg (denominator) and the zero-extended </span>
0201 <span style="color:#898887">-- rem_reg (numerator) can be simplified by splitting it in 2: </span>
0202 <span style="color:#898887">-- If the shifted denominator high byte is not zero, it is >=256...</span>
0203 den_ge_256 <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span> <span style="font-weight:bold">when</span> b_shift_reg(<span style="color:#b08000">15</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">8</span>) <span style="color:#006e28">/=</span> X<span style="color:#bf0303">"00"</span> <span style="font-weight:bold">else</span> <span style="color:#b08000">'0'</span>;
0204 <span style="color:#898887">-- ...otherwise we need to compare the low bytes.</span>
0205 num_ge_den <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span> <span style="font-weight:bold">when</span> rem_reg <span style="color:#006e28">>=</span> denominator <span style="font-weight:bold">else</span> <span style="color:#b08000">'0'</span>;
0206 sub_num <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span> <span style="font-weight:bold">when</span> den_ge_256<span style="color:#006e28">=</span><span style="color:#b08000">'0'</span> <span style="font-weight:bold">and</span> num_ge_den<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">else</span> <span style="color:#b08000">'0'</span>;
0207 
0208 
0209 quot_out <span style="color:#006e28">&lt;=</span> quot_reg;
0210 prod_out <span style="color:#006e28">&lt;=</span> prod_reg;
0211 rem_out <span style="color:#006e28">&lt;=</span> rem_reg;
0212 
0213 div_ready <span style="color:#006e28">&lt;=</span> ready;
0214 
0215 <span style="color:#898887">---- Multiplier logic ----------------------------------------------------------</span>
0216 
0217 <span style="color:#898887">---- Combinational multiplier -----------------------------</span>
0218 <span style="color:#b08000;font-weight:bold">multiplier_combinational</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> <span style="font-weight:bold">not</span> SEQUENTIAL_MULTIPLIER <span style="font-weight:bold">generate</span>
0219 
0220 <span style="color:#b08000;font-weight:bold">registered_combinational_multiplier</span><span style="color:#006e28">:</span><span style="color:#3daee9;font-weight:bold">process</span>(clk)
0221 <span style="color:#3daee9;font-weight:bold">begin</span>
0222     <span style="font-weight:bold">if</span> clk<span style="color:#b08000">'event</span> <span style="font-weight:bold">and</span> clk<span style="color:#006e28">=</span><span style="color:#b08000">'1'</span> <span style="font-weight:bold">then</span>
0223         prod_reg <span style="color:#006e28">&lt;=</span> data_a <span style="color:#006e28">*</span> data_b; <span style="color:#898887">-- t_byte is unsigned</span>
0224     <span style="font-weight:bold">end if;</span>
0225 <span style="color:#3daee9;font-weight:bold">end process registered_combinational_multiplier;</span>
0226 
0227 <span style="color:#898887">-- The multiplier output is valid in the cycle after the operands are loaded,</span>
0228 <span style="color:#898887">-- so by the time MUL is executed it's already done.</span>
0229 mul_ready <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span>;
0230 
0231 mul_ov_out <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span> <span style="font-weight:bold">when</span> prod_reg(<span style="color:#b08000">15</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">8</span>)<span style="color:#006e28">/=</span>X<span style="color:#bf0303">"00"</span> <span style="font-weight:bold">else</span> <span style="color:#b08000">'0'</span>;
0232 prod_out <span style="color:#006e28">&lt;=</span> prod_reg;
0233 
0234 <span style="font-weight:bold">end generate multiplier_combinational;</span>
0235 
0236 <span style="color:#898887">---- Sequential multiplier --------------------------------</span>
0237 <span style="color:#b08000;font-weight:bold">multiplier_sequential</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> SEQUENTIAL_MULTIPLIER <span style="font-weight:bold">generate</span>
0238 
0239 <span style="font-weight:bold">assert</span> <span style="font-weight:bold">false</span>
0240 <span style="font-weight:bold">report</span> <span style="color:#bf0303">"Sequential multiplier implementation not done yet."</span><span style="color:#006e28">&amp;</span>
0241        <span style="color:#bf0303">" Use combinational implementation."</span>
0242 <span style="font-weight:bold">severity</span> <span style="font-weight:bold">failure</span>;
0243 
0244 <span style="font-weight:bold">end generate multiplier_sequential;</span>
0245 
0246 <span style="font-weight:bold">end sequential;</span>
0247 
0248 
0249 <span style="font-weight:bold">with</span> Types; <span style="font-weight:bold">use</span> Types;
0250 <span style="font-weight:bold">with</span> Files_Map;
0251 
0252 <span style="font-weight:bold">package</span> <span style="color:#b08000;font-weight:bold">fixed_pkg</span> <span style="font-weight:bold">is</span> <span style="font-weight:bold">new</span> <span style="color:#b08000;font-weight:bold">IEEE</span><span style="color:#006e28">.</span>fixed_generic_pkg
0253   <span style="font-weight:bold">generic map </span>(
0254     fixed_overflow_style <span style="color:#006e28">=></span> IEEE<span style="color:#006e28">.</span>fixed_float_types<span style="color:#006e28">.</span>fixed_saturate<span style="color:#006e28">,</span>
0255     fixed_guard_bits     <span style="color:#006e28">=></span> <span style="color:#b08000">3</span><span style="color:#006e28">,</span>
0256     no_warning           <span style="color:#006e28">=></span> <span style="font-weight:bold">false</span>
0257     );
0258 
0259 <span style="font-weight:bold">package</span> <span style="color:#b08000;font-weight:bold">p</span> <span style="font-weight:bold">is</span>
0260     <span style="color:#006e28">type</span> int_ptr <span style="color:#006e28">is</span> <span style="font-weight:bold">access</span> <span style="color:#0057ae">integer</span>;
0261     <span style="color:#006e28">type</span> rec <span style="color:#006e28">is</span> <span style="font-weight:bold">record</span>
0262         data  <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic_vector</span>(<span style="color:#b08000">31</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>);
0263         ack   <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic</span>;
0264         value <span style="color:#006e28">:</span> <span style="color:#0057ae">integer</span>;
0265         link  <span style="color:#006e28">:</span> rec_ptr;
0266     <span style="font-weight:bold">end record;</span>
0267     <span style="color:#006e28">type</span> int_vec <span style="color:#006e28">is</span> <span style="font-weight:bold">array</span> (<span style="color:#0057ae">integer</span> <span style="font-weight:bold">range</span> <span style="color:#006e28">&lt;></span>) <span style="font-weight:bold">of</span> <span style="color:#0057ae">integer</span>;
0268     <span style="color:#006e28">type</span> int_vec_ptr <span style="color:#006e28">is</span> <span style="font-weight:bold">access</span> int_vec;
0269     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">UNIFORM</span>(<span style="color:#006e28">variable</span> SEED1<span style="color:#006e28">,</span> SEED2 <span style="color:#006e28">:</span> <span style="font-weight:bold">inout</span> <span style="color:#0057ae">POSITIVE</span>; <span style="color:#006e28">variable</span> X <span style="color:#006e28">:</span> <span style="font-weight:bold">out</span> <span style="color:#0057ae">REAL</span>);
0270     <span style="color:#006e28">constant</span> def_arr <span style="color:#006e28">:</span> t_int_array <span style="color:#006e28">:=</span> (<span style="color:#b08000">0</span> <span style="color:#006e28">to</span> <span style="color:#b08000">2</span> <span style="color:#006e28">=></span> <span style="color:#b08000">10</span>);
0271 
0272     <span style="color:#898887">-- type range</span>
0273     <span style="color:#006e28">type</span> newInt <span style="color:#006e28">is</span> <span style="font-weight:bold">range</span> <span style="color:#006e28">-</span><span style="color:#b08000">4</span> <span style="color:#006e28">to</span> <span style="color:#b08000">3</span>;
0274     <span style="color:#006e28">type</span> CAPACITY <span style="color:#006e28">is</span> <span style="font-weight:bold">range</span> <span style="color:#b08000">0</span> <span style="color:#006e28">to</span> <span style="color:#b08000">1</span><span style="color:#b08000">E5</span> <span style="font-weight:bold">units</span>
0275         pF;
0276         nF <span style="color:#006e28">=</span> <span style="color:#b08000">1000</span> pF;
0277     <span style="font-weight:bold">end units;</span>
0278 
0279     <span style="color:#898887">-- type protected</span>
0280     <span style="color:#006e28">type</span> prot <span style="color:#006e28">is</span> <span style="font-weight:bold">protected</span>
0281         <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">meth</span>(a <span style="color:#006e28">:</span> int) <span style="font-weight:bold">return</span> <span style="color:#0057ae">bit</span>;
0282     <span style="font-weight:bold">end protected;</span>
0283 
0284     <span style="color:#898887">-- type protected body</span>
0285     <span style="color:#006e28">type</span> prot <span style="color:#006e28">is</span> <span style="font-weight:bold">protected</span> <span style="font-weight:bold">body</span>
0286         <span style="color:#006e28">variable</span> var <span style="color:#006e28">:</span> <span style="color:#0057ae">positive</span>;
0287         <span style="color:#006e28">constant</span> const <span style="color:#006e28">:</span> <span style="color:#0057ae">boolean</span>;
0288 
0289         <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">meth</span>(a <span style="color:#006e28">:</span> int) <span style="font-weight:bold">return</span> <span style="color:#0057ae">bit</span> <span style="font-weight:bold">is</span>
0290         <span style="color:#0057ae;font-weight:bold">begin</span>
0291         <span style="color:#0057ae;font-weight:bold">end function;</span>
0292     <span style="font-weight:bold">end protected body;</span>
0293 
0294     <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">\?=\</span> (L<span style="color:#006e28">,</span> R  <span style="color:#006e28">:</span> <span style="color:#0057ae">BOOLEAN</span>) <span style="font-weight:bold">return</span> <span style="color:#0057ae">BOOLEAN</span>;
0295 
0296 <span style="font-weight:bold">end package;</span>
0297 
0298 <span style="font-weight:bold">package</span> <span style="font-weight:bold">body</span> <span style="color:#b08000;font-weight:bold">p</span> <span style="font-weight:bold">is</span>
0299     <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">\?=\</span> (L<span style="color:#006e28">,</span> R <span style="color:#006e28">:</span> <span style="color:#0057ae">BOOLEAN</span>) <span style="font-weight:bold">return</span> <span style="color:#0057ae">BOOLEAN</span> <span style="font-weight:bold">is</span>
0300     <span style="color:#0057ae;font-weight:bold">begin</span>
0301         <span style="font-weight:bold">if</span> <span style="font-weight:bold">not</span> (format(format<span style="color:#b08000">'left</span>) <span style="color:#006e28">=</span> <span style="color:#b08000">'%'</span>) <span style="font-weight:bold">then</span>
0302             <span style="font-weight:bold">report</span> <span style="color:#bf0303">"to_string: Illegal format string """</span> <span style="color:#006e28">&amp;</span> format <span style="color:#006e28">&amp;</span> <span style="color:#b08000">'"'</span>
0303                 <span style="font-weight:bold">severity</span> <span style="font-weight:bold">error</span>;
0304             <span style="font-weight:bold">return</span> <span style="color:#bf0303">""</span>;
0305         <span style="font-weight:bold">end if;</span>
0306         <span style="font-weight:bold">return</span> L <span style="color:#006e28">=</span> R;
0307     <span style="color:#0057ae;font-weight:bold">end function \?=\;</span>
0308 
0309     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">test</span> <span style="font-weight:bold">is</span>
0310         <span style="color:#006e28">variable</span> v <span style="color:#006e28">:</span> int_ptr;
0311         <span style="color:#006e28">variable</span> i <span style="color:#006e28">:</span> <span style="color:#0057ae">integer</span>;
0312     <span style="font-weight:bold">begin</span>
0313         v <span style="color:#006e28">:=</span> <span style="font-weight:bold">null</span>;
0314         deallocate(v);
0315         v <span style="color:#006e28">:=</span> <span style="font-weight:bold">new</span> <span style="color:#0057ae">integer</span>;
0316         v <span style="color:#006e28">:=</span> <span style="font-weight:bold">new</span> integer<span style="color:#b08000">'(5)</span>;
0317         v<span style="color:#006e28">.</span><span style="font-weight:bold">all</span> <span style="color:#006e28">:=</span> <span style="color:#b08000">5</span>;
0318         r<span style="color:#006e28">.</span><span style="font-weight:bold">all</span><span style="color:#006e28">.</span>value <span style="color:#006e28">:=</span> <span style="color:#b08000">1</span>;
0319         a <span style="color:#006e28">:=</span> <span style="font-weight:bold">new</span> int_vec(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">3</span>);
0320         a<span style="color:#006e28">.</span><span style="font-weight:bold">all</span>(<span style="color:#b08000">5</span>) <span style="color:#006e28">:=</span> <span style="color:#b08000">2</span>;
0321         a(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">2</span>) <span style="color:#006e28">:=</span> (<span style="color:#b08000">1</span><span style="color:#006e28">,</span> <span style="color:#b08000">2</span>);
0322         s <span style="color:#006e28">:=</span> <span style="font-weight:bold">new</span> string<span style="color:#b08000">'("")</span>;
0323     <span style="font-weight:bold">end procedure;</span>
0324 
0325     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">test2</span>(x <span style="color:#006e28">:</span> <span style="font-weight:bold">inout</span> rec_ptr) <span style="font-weight:bold">is</span>
0326     <span style="font-weight:bold">begin</span>
0327         x<span style="color:#006e28">.</span>value <span style="color:#006e28">:=</span> x<span style="color:#006e28">.</span>value <span style="color:#006e28">+</span> <span style="color:#b08000">1</span>;
0328     <span style="font-weight:bold">end procedure;</span>
0329 
0330     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">test3</span> <span style="font-weight:bold">is</span>
0331         <span style="color:#006e28">type</span> a;
0332         <span style="color:#006e28">type</span> a <span style="color:#006e28">is</span> <span style="font-weight:bold">access</span> <span style="color:#0057ae">integer</span>;
0333         <span style="color:#006e28">variable</span> v <span style="color:#006e28">:</span> a;
0334     <span style="font-weight:bold">begin</span>
0335     <span style="font-weight:bold">end procedure;</span>
0336 
0337     <span style="color:#006e28">type</span> int_ptr_array <span style="color:#006e28">is</span> <span style="font-weight:bold">array</span> (<span style="color:#0057ae">integer</span> <span style="font-weight:bold">range</span> <span style="color:#006e28">&lt;></span>) <span style="font-weight:bold">of</span> int_ptr;
0338 
0339     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">tets4</span> <span style="font-weight:bold">is</span>
0340         <span style="color:#006e28">type</span> bvp <span style="color:#006e28">is</span> <span style="font-weight:bold">access</span> <span style="color:#0057ae">bit_vector</span>;
0341         <span style="color:#006e28">variable</span> y <span style="color:#006e28">:</span> int_ptr(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">3</span>) <span style="color:#006e28">:=</span> int_ptr<span style="color:#b08000">'(null)</span>;
0342     <span style="font-weight:bold">begin</span>
0343     <span style="font-weight:bold">end procedure;</span>
0344 
0345     <span style="font-weight:bold">procedure</span> <span style="color:#b08000;font-weight:bold">Restore_Origin</span> (Mark <span style="color:#006e28">:</span> Instance_Index_Type) <span style="font-weight:bold">is</span>
0346     <span style="font-weight:bold">begin</span>
0347         <span style="font-weight:bold">for</span> I <span style="font-weight:bold">in</span> reverse Mark <span style="color:#006e28">+</span> <span style="color:#b08000">1</span> <span style="color:#006e28">..</span> Prev_Instance_Table<span style="color:#006e28">.</span>Last <span style="font-weight:bold">loop</span>
0348             <span style="font-weight:bold">declare</span>
0349                 El <span style="color:#006e28">:</span> Instance_Entry_Type renames Prev_Instance_Table<span style="color:#006e28">.</span>Table (I);
0350             <span style="font-weight:bold">begin</span>
0351                 Origin_Table<span style="color:#006e28">.</span>Table (El<span style="color:#006e28">.</span>N) <span style="color:#006e28">:=</span> El<span style="color:#006e28">.</span>Old_Origin;
0352             <span style="font-weight:bold">end;</span>
0353         <span style="font-weight:bold">end loop;</span>
0354         Prev_Instance_Table<span style="color:#006e28">.</span>Set_Last (Mark);
0355     <span style="font-weight:bold">end Restore_Origin;</span>
0356 
0357     <span style="color:#898887">--  Instantiate a list.  Simply create a new list and instantiate nodes of</span>
0358     <span style="color:#898887">--  that list.</span>
0359     <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">Instantiate_Iir_List</span> (L <span style="color:#006e28">:</span> Iir_List; Is_Ref <span style="color:#006e28">:</span> <span style="color:#0057ae">Boolean</span>)
0360                                     <span style="font-weight:bold">return</span> Iir_List
0361     <span style="font-weight:bold">is</span>
0362         Res <span style="color:#006e28">:</span> Iir_List;
0363         El <span style="color:#006e28">:</span> Iir;
0364     <span style="color:#0057ae;font-weight:bold">begin</span>
0365         <span style="font-weight:bold">case</span> to_integer(<span style="color:#0057ae">unsigned</span>(CTRL_REF(x<span style="color:#006e28">*</span><span style="color:#b08000">4</span><span style="color:#006e28">+</span><span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> x<span style="color:#006e28">*</span><span style="color:#b08000">4</span>))) <span style="font-weight:bold">is</span>
0366             <span style="font-weight:bold">when</span> <span style="color:#b08000;font-weight:bold">Null_Iir_List</span>
0367             <span style="color:#006e28">|</span> <span style="color:#b08000;font-weight:bold">Iir_List_All</span> <span style="color:#006e28">=></span>
0368                 <span style="font-weight:bold">return</span> L;
0369             <span style="font-weight:bold">when</span> <span style="font-weight:bold">others</span> <span style="color:#006e28">=></span>
0370                 It <span style="color:#006e28">:=</span> List_Iterate (L);
0371                 <span style="font-weight:bold">while</span> Is_Valid (It) <span style="font-weight:bold">loop</span>
0372                     El <span style="color:#006e28">:=</span> Get_Element (It);
0373                     Append_Element (Res<span style="color:#006e28">,</span> Instantiate_Iir (El<span style="color:#006e28">,</span> Is_Ref));
0374                 <span style="font-weight:bold">end loop;</span>
0375                 <span style="font-weight:bold">for</span> I <span style="font-weight:bold">in</span> Flist_First <span style="color:#006e28">..</span> Flist_Last (L) <span style="font-weight:bold">loop</span>
0376                     Set_Nth_Element (Res<span style="color:#006e28">,</span> I<span style="color:#006e28">,</span> Instantiate_Iir (El<span style="color:#006e28">,</span> Is_Ref));
0377                 <span style="font-weight:bold">end loop;</span>
0378                 <span style="font-weight:bold">return</span> Res;
0379         <span style="font-weight:bold">end case;</span>
0380     <span style="color:#0057ae;font-weight:bold">end Instantiate_Iir_List;</span>
0381 <span style="font-weight:bold">end package body;</span>
0382 
0383 <span style="color:#898887">-- Library bar</span>
0384 <span style="font-weight:bold">context</span> foo<span style="color:#006e28">.</span>test_context;
0385 
0386 <span style="font-weight:bold">context</span> <span style="color:#b08000;font-weight:bold">foo</span> <span style="font-weight:bold">is</span>
0387     <span style="font-weight:bold">context</span> foo<span style="color:#006e28">.</span>test_context;
0388 <span style="font-weight:bold">end context foo;</span>
0389 
0390 <span style="font-weight:bold">entity</span> <span style="color:#b08000;font-weight:bold">concat</span> <span style="font-weight:bold">is</span>
0391 <span style="font-weight:bold">end entity;</span>
0392 
0393 <span style="font-weight:bold">entity</span> <span style="color:#b08000;font-weight:bold">foo</span> <span style="font-weight:bold">is</span>
0394     <span style="font-weight:bold">port</span> (
0395         x <span style="color:#006e28">:</span> <span style="font-weight:bold">in</span> my_int );
0396 <span style="font-weight:bold">end entity;</span>
0397 
0398 <span style="font-weight:bold">architecture</span> <span style="color:#b08000;font-weight:bold">t</span> <span style="font-weight:bold">of</span> <span style="color:#644a9b">concat</span> <span style="font-weight:bold">is</span>
0399     <span style="color:#006e28">type</span> int_array <span style="color:#006e28">is</span> <span style="font-weight:bold">array</span> (<span style="color:#0057ae">integer</span> <span style="font-weight:bold">range</span> <span style="color:#006e28">&lt;></span>) <span style="font-weight:bold">of</span> <span style="color:#0057ae">integer</span>;
0400     <span style="color:#006e28">type</span> small <span style="color:#006e28">is</span> <span style="font-weight:bold">range</span> <span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">3</span>;
0401 
0402     <span style="font-weight:bold">component</span> <span style="color:#b08000;font-weight:bold">or_entity</span> <span style="font-weight:bold">is</span>
0403     <span style="font-weight:bold">port</span>(
0404         input_1<span style="color:#006e28">:</span> <span style="font-weight:bold">in</span> <span style="color:#0057ae">std_logic</span>;
0405         output<span style="color:#006e28">:</span> <span style="font-weight:bold">out</span> <span style="color:#0057ae">std_logic</span>
0406         );
0407     <span style="font-weight:bold">end component;</span>
0408 <span style="font-weight:bold">begin</span>
0409     <span style="color:#3daee9;font-weight:bold">process</span>
0410         <span style="color:#006e28">variable</span> s <span style="color:#006e28">:</span> <span style="color:#0057ae">string</span>(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">5</span>);
0411         <span style="color:#006e28">variable</span> t <span style="color:#006e28">:</span> int_array(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">2</span>);
0412         <span style="color:#006e28">variable</span> c <span style="color:#006e28">:</span> <span style="color:#0057ae">bit_vector</span>(<span style="color:#b08000">1</span> <span style="color:#006e28">to</span> <span style="color:#b08000">4</span>);
0413     <span style="color:#3daee9;font-weight:bold">begin</span>
0414         x <span style="color:#006e28">:=</span> ( <span style="color:#b08000">1</span><span style="color:#006e28">,</span> <span style="color:#b08000">2</span><span style="color:#006e28">,</span> <span style="color:#b08000">3</span> );
0415         z <span style="color:#006e28">:=</span> x <span style="color:#006e28">&amp;</span> y;
0416         w <span style="color:#006e28">:=</span> <span style="color:#b08000">1</span> <span style="color:#006e28">&amp;</span> x;
0417         s <span style="color:#006e28">:=</span> <span style="color:#b08000">'h'</span> <span style="color:#006e28">&amp;</span> string<span style="color:#b08000">'("ello")</span>;
0418         <span style="font-weight:bold">assert</span> <span style="color:#bf0303">"10"</span> <span style="color:#006e28">=</span> (b(<span style="color:#b08000">1</span>) <span style="color:#006e28">&amp;</span> <span style="color:#bf0303">"0"</span>);
0419         <span style="font-weight:bold">wait</span>;
0420     <span style="color:#3daee9;font-weight:bold">end process;</span>
0421 
0422     <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#b08000;font-weight:bold">CounterVal</span>(Seconds <span style="color:#006e28">:</span> <span style="color:#0057ae">integer</span> <span style="color:#006e28">:=</span> <span style="color:#b08000">0</span>) <span style="font-weight:bold">return</span> <span style="color:#0057ae">integer</span> <span style="font-weight:bold">is</span>
0423         <span style="color:#006e28">variable</span> TotalSeconds <span style="color:#006e28">:</span> interger;
0424     <span style="color:#0057ae;font-weight:bold">begin</span>
0425         TotalSeconds <span style="color:#006e28">:=</span> Seconds <span style="color:#006e28">+</span> Minutes <span style="color:#006e28">*</span> <span style="color:#b08000">60</span>;
0426         <span style="font-weight:bold">return</span> TotalSeconds <span style="color:#006e28">*</span> ClockFrequencyHz <span style="color:#006e28">-</span><span style="color:#b08000">1</span>;
0427     <span style="color:#0057ae;font-weight:bold">end function;</span>
0428 
0429     <span style="color:#006e28">type</span> enum_type <span style="color:#006e28">is</span> (a<span style="color:#006e28">,</span> b<span style="color:#006e28">,</span> c<span style="color:#006e28">,</span> <span style="color:#006e28">...,</span> z);
0430     <span style="color:#006e28">type</span> int_array <span style="color:#006e28">is</span> <span style="font-weight:bold">array</span>(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>) <span style="font-weight:bold">of</span> <span style="color:#0057ae">integer</span>;
0431 
0432     <span style="font-weight:bold">subtype</span> addr_int <span style="font-weight:bold">is</span> <span style="color:#0057ae">integer</span> <span style="font-weight:bold">range</span> <span style="color:#b08000">0</span> <span style="color:#006e28">to</span> <span style="color:#b08000">65535</span>;
0433     <span style="font-weight:bold">subtype</span> sub_enum_type <span style="font-weight:bold">is</span> enum_type <span style="font-weight:bold">range</span> a <span style="color:#006e28">to</span> m;
0434 
0435     <span style="color:#b08000;font-weight:bold">inst1</span><span style="color:#006e28">:</span> <span style="font-weight:bold">entity</span> <span style="color:#644a9b">work.counter1</span>(rtl)
0436         <span style="font-weight:bold">generic map </span>(BITS1 <span style="color:#006e28">=></span> <span style="color:#b08000">8</span>)
0437         <span style="font-weight:bold">port map </span>(
0438             clk1 <span style="color:#006e28">=></span> Clock<span style="color:#006e28">,</span>
0439             DATA_OUT   <span style="color:#006e28">=></span> pwm_data_o(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">5</span>)<span style="color:#006e28">,</span>
0440             COMP_IN(<span style="color:#b08000">1</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>)  <span style="color:#006e28">=></span> compensate_i<span style="color:#006e28">,</span>
0441             WRITE_IN   <span style="color:#006e28">=></span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>)
0442         );
0443 
0444     <span style="color:#b08000;font-weight:bold">inst2</span><span style="color:#006e28">:</span> <span style="font-weight:bold">component</span> <span style="color:#644a9b">counter2</span>
0445         <span style="font-weight:bold">generic map </span>(BITS1 <span style="color:#006e28">=></span> <span style="color:#b08000">8</span>)
0446         <span style="font-weight:bold">port map </span>(clk1 <span style="color:#006e28">=></span> Clock);
0447 
0448     <span style="color:#b08000;font-weight:bold">inst3</span><span style="color:#006e28">:</span> <span style="font-weight:bold">configuration</span> <span style="color:#644a9b">counter3</span>
0449         <span style="font-weight:bold">generic map </span>(BITS1 <span style="color:#006e28">=></span> <span style="color:#b08000">8</span>)
0450         <span style="font-weight:bold">port map </span>(clk1 <span style="color:#006e28">=></span> Clock);
0451 
0452     <span style="color:#b08000;font-weight:bold">THE_PWM_GEN</span> <span style="color:#006e28">:</span> <span style="color:#644a9b">pwm_generator</span>
0453         <span style="font-weight:bold">generic map</span>(
0454             dsfds <span style="color:#006e28">=></span> ds
0455         )
0456         <span style="font-weight:bold">port map</span>(
0457             CLK        <span style="color:#006e28">=></span> clk_i<span style="color:#006e28">,</span>
0458             DATA_IN    <span style="color:#006e28">=></span> pwm_data_i<span style="color:#006e28">,</span>
0459             DATA_OUT   <span style="color:#006e28">=></span> pwm_data_o(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">5</span>)<span style="color:#006e28">,</span>
0460             COMP_IN(<span style="color:#b08000">1</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>)  <span style="color:#006e28">=></span> compensate_i<span style="color:#006e28">,</span>
0461             WRITE_IN   <span style="color:#006e28">=></span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>)
0462         );
0463 
0464 <span style="font-weight:bold">end architecture;</span>
0465 
0466 <span style="font-weight:bold">architecture</span> <span style="color:#b08000;font-weight:bold">a2</span> <span style="font-weight:bold">of</span> <span style="color:#644a9b">e</span> <span style="font-weight:bold">is</span>
0467     <span style="color:#0057ae;font-weight:bold">function</span> <span style="color:#bf0303">">"</span>(a<span style="color:#006e28">,</span> b<span style="color:#006e28">:</span> my_int) <span style="font-weight:bold">return</span> <span style="color:#0057ae">boolean</span>;
0468 <span style="font-weight:bold">begin</span>
0469     <span style="color:#3daee9;font-weight:bold">process</span> <span style="font-weight:bold">is</span>
0470         <span style="color:#006e28">variable</span> x<span style="color:#006e28">,</span> y <span style="color:#006e28">:</span> my_int;
0471     <span style="color:#3daee9;font-weight:bold">begin</span>
0472         <span style="font-weight:bold">assert</span> x <span style="color:#006e28">></span> y;
0473         <span style="font-weight:bold">assert</span> x <span style="color:#006e28">&lt;</span> y;                   <span style="color:#898887">-- Error</span>
0474     <span style="color:#3daee9;font-weight:bold">end process;</span>
0475 
0476     <span style="color:#b08000;font-weight:bold">billowitch_tc586</span><span style="color:#006e28">:</span> <span style="font-weight:bold">block</span> <span style="font-weight:bold">is</span>
0477         <span style="color:#006e28">type</span> real_cons_vector  <span style="color:#006e28">is</span> <span style="font-weight:bold">array</span> (<span style="color:#b08000">15</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>) <span style="font-weight:bold">of</span> <span style="color:#0057ae">real</span>;
0478         <span style="color:#006e28">type</span> real_cons_vector_file <span style="color:#006e28">is</span> <span style="font-weight:bold">file</span> <span style="font-weight:bold">of</span> real_cons_vector;
0479         <span style="color:#006e28">constant</span> C19 <span style="color:#006e28">:</span> real_cons_vector <span style="color:#006e28">:=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">3</span><span style="color:#006e28">.</span><span style="color:#b08000">0</span>);
0480     <span style="font-weight:bold">begin</span>
0481     <span style="font-weight:bold">end block;</span>
0482 <span style="font-weight:bold">end architecture;</span>
0483 
0484 <span style="font-weight:bold">architecture</span> <span style="color:#b08000;font-weight:bold">arch</span> <span style="font-weight:bold">of</span> <span style="color:#644a9b">ent</span> <span style="font-weight:bold">is</span>
0485 <span style="font-weight:bold">begin</span>
0486   <span style="color:#b08000;font-weight:bold">LL</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> test<span style="color:#006e28">=</span><span style="color:#b08000">10</span> <span style="font-weight:bold">generate</span>
0487    <span style="font-weight:bold">begin</span>
0488    <span style="font-weight:bold">end;</span>
0489   <span style="font-weight:bold">elsif</span> test<span style="color:#006e28">=</span><span style="color:#b08000">5</span> <span style="font-weight:bold">generate</span>
0490    <span style="font-weight:bold">begin</span>
0491    <span style="font-weight:bold">end;</span>
0492   <span style="font-weight:bold">end generate;</span>
0493 
0494   <span style="color:#b08000;font-weight:bold">LL</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> <span style="color:#b08000;font-weight:bold">l1</span><span style="color:#006e28">:</span> SPEED <span style="color:#006e28">=</span> <span style="color:#bf0303">"fast"</span> <span style="font-weight:bold">generate</span>
0495   <span style="font-weight:bold">elsif</span> test<span style="color:#006e28">=</span><span style="color:#b08000">5</span> <span style="font-weight:bold">generate</span>
0496   <span style="font-weight:bold">end generate;</span>
0497 <span style="font-weight:bold">end architecture arch;</span>
0498 
0499 
0500 <span style="font-weight:bold">architecture</span> <span style="color:#b08000;font-weight:bold">thing_arch</span> <span style="font-weight:bold">of</span> <span style="color:#644a9b">designthing</span> <span style="font-weight:bold">is</span>
0501 
0502 <span style="font-weight:bold">component</span> <span style="color:#b08000;font-weight:bold">pwm_generator</span>
0503   <span style="font-weight:bold">port</span>(
0504     CLK        <span style="color:#006e28">:</span> <span style="font-weight:bold">in</span> <span style="color:#0057ae">std_logic</span>;
0505     DATA_IN    <span style="color:#006e28">:</span> <span style="font-weight:bold">in</span>  <span style="color:#0057ae">std_logic_vector</span>(<span style="color:#b08000">15</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>);
0506     );
0507 <span style="font-weight:bold">end component pwm_generator;</span>
0508 
0509 <span style="color:#006e28">attribute</span> NOM_FREQ <span style="color:#006e28">:</span> <span style="color:#0057ae">string</span>;
0510 <span style="color:#006e28">attribute</span> NOM_FREQ <span style="font-weight:bold">of</span> clk_source <span style="color:#006e28">:</span> <span style="font-weight:bold">label</span> <span style="font-weight:bold">is</span> <span style="color:#bf0303">"133.00"</span>;
0511 <span style="color:#006e28">signal</span> clk_i  <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic</span>;
0512 
0513 <span style="font-weight:bold">begin</span>
0514 
0515 <span style="color:#b08000;font-weight:bold">gen_no_comp</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> TEMP <span style="color:#006e28">=</span> <span style="color:#b08000">0</span> <span style="font-weight:bold">generate</span>
0516   compensate_i <span style="color:#006e28">&lt;=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>);
0517 <span style="font-weight:bold">end generate;</span>
0518 
0519 <span style="color:#b08000;font-weight:bold">gen_no_comp</span><span style="color:#006e28">:</span> <span style="font-weight:bold">for</span> i <span style="font-weight:bold">in</span> <span style="color:#b08000">0</span> <span style="color:#006e28">to</span> TEMP <span style="font-weight:bold">generate</span>
0520   compensate_i <span style="color:#006e28">&lt;=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>) <span style="font-weight:bold">after</span> <span style="color:#b08000">10</span> <span style="color:#0057ae">ns</span>;
0521   compensate_i <span style="color:#006e28">&lt;=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>) ;
0522 <span style="font-weight:bold">end generate;</span>
0523 
0524 <span style="color:#898887">---------------------------------------------------------------------------</span>
0525 <span style="color:#898887">-- LED blinking when activity on inputs</span>
0526 <span style="color:#898887">---------------------------------------------------------------------------</span>
0527 <span style="color:#b08000;font-weight:bold">PROC_TIMER</span> <span style="color:#006e28">:</span> <span style="color:#3daee9;font-weight:bold">process</span> <span style="color:#3daee9;font-weight:bold">begin</span>
0528   <span style="font-weight:bold">wait</span> <span style="font-weight:bold">until</span> <span style="font-weight:bold">rising_edge</span>(clk_i);
0529   timer <span style="color:#006e28">&lt;=</span> timer <span style="color:#006e28">+</span> <span style="color:#b08000">1</span>;
0530   <span style="font-weight:bold">wait</span> <span style="font-weight:bold">for</span> <span style="color:#b08000">10</span> <span style="color:#0057ae">ns</span>;
0531   leds <span style="color:#006e28">&lt;=</span> (last_inp <span style="font-weight:bold">xor</span> inp_status(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>)) <span style="font-weight:bold">or</span> leds <span style="font-weight:bold">or</span> last_leds;
0532   <span style="font-weight:bold">if</span> timer <span style="color:#006e28">=</span> <span style="color:#b08000">0</span> <span style="font-weight:bold">then</span>
0533     leds <span style="color:#006e28">&lt;=</span> <span style="font-weight:bold">not</span> inp_status(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>);
0534     last_leds <span style="color:#006e28">&lt;=</span> x<span style="color:#bf0303">"0"</span>;
0535   <span style="font-weight:bold">elsif</span> gf <span style="font-weight:bold">then</span>
0536     fdsa <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span>;
0537   <span style="font-weight:bold">end if;</span>
0538 
0539   <span style="color:#b08000;font-weight:bold">xz</span><span style="color:#006e28">:</span> <span style="font-weight:bold">for</span> x <span style="font-weight:bold">in</span> <span style="color:#b08000">0</span> <span style="color:#006e28">to</span> <span style="color:#b08000">7</span> <span style="font-weight:bold">loop</span>
0540     dsadf;
0541   <span style="font-weight:bold">end loop;</span>
0542 
0543   <span style="font-weight:bold">case</span> c <span style="font-weight:bold">is</span>
0544     <span style="font-weight:bold">when</span> <span style="color:#b08000;font-weight:bold">XXX</span> <span style="color:#006e28">=></span>
0545       c <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">1</span>;
0546       d <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">21321</span>;
0547     <span style="font-weight:bold">when</span> <span style="color:#b08000;font-weight:bold">YYYY</span> <span style="color:#006e28">=></span>
0548       c <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">2</span>;
0549   <span style="font-weight:bold">end case;</span> 
0550 <span style="color:#3daee9;font-weight:bold">end process;</span>
0551 
0552 
0553 <span style="color:#b08000;font-weight:bold">generate_with_begin</span><span style="color:#006e28">:</span> <span style="font-weight:bold">if</span> TEMP <span style="color:#006e28">=</span> <span style="color:#b08000">0</span> <span style="font-weight:bold">generate</span>
0554   <span style="color:#006e28">signal</span> <span style="color:#006e28">:</span> test <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic</span>;
0555 <span style="font-weight:bold">begin</span>
0556   compensate_i <span style="color:#006e28">&lt;=</span> (<span style="color:#006e28">others</span> <span style="color:#006e28">=></span> <span style="color:#b08000">'0'</span>);
0557   <span style="font-weight:bold">if</span> timer <span style="color:#006e28">=</span> <span style="color:#b08000">0</span> <span style="font-weight:bold">then</span>
0558     leds <span style="color:#006e28">&lt;=</span> <span style="font-weight:bold">not</span> inp_status(<span style="color:#b08000">3</span> <span style="color:#006e28">downto</span> <span style="color:#b08000">0</span>);
0559     last_leds <span style="color:#006e28">&lt;=</span> x<span style="color:#bf0303">"0"</span>;
0560   <span style="font-weight:bold">elsif</span> gf <span style="font-weight:bold">then</span>
0561     fdsa <span style="color:#006e28">&lt;=</span> <span style="color:#b08000">'1'</span>;
0562   <span style="font-weight:bold">end if;</span>  
0563 <span style="font-weight:bold">end generate generate_with_begin;</span>
0564 
0565 <span style="color:#b08000;font-weight:bold">PROC_TIMER</span> <span style="color:#006e28">:</span> <span style="color:#3daee9;font-weight:bold">process</span>
0566   <span style="color:#006e28">variable</span> x <span style="color:#006e28">:</span> <span style="color:#0057ae">std_logic</span>;
0567 <span style="color:#3daee9;font-weight:bold">begin</span>
0568   x <span style="color:#006e28">:=</span> <span style="color:#b08000">'0'</span>;
0569 <span style="color:#3daee9;font-weight:bold">end process PROC_TIMER;</span>
0570 
0571 <span style="color:#bf0303;font-weight:bold;text-decoration:underline">end architecture thing_arc;</span>   <span style="color:#898887">--this is not correct (wrong name)</span>
0572 
0573 <span style="color:#b08000">1</span><span style="color:#006e28">+</span><span style="color:#b08000">1</span>
0574 <span style="color:#b08000">2</span><span style="color:#0057ae">ns</span>
0575 
0576 <span style="color:#b08000">1_2_3</span>
0577 <span style="color:#b08000">12_3</span>
0578 <span style="color:#b08000">1</span><span style="color:#006e28">.</span><span style="color:#b08000">2</span>
0579 <span style="color:#b08000">1</span><span style="color:#006e28">.</span><span style="color:#b08000">2_3</span>
0580 <span style="color:#b08000">1_3</span><span style="color:#006e28">.</span><span style="color:#b08000">2_3</span>
0581 <span style="color:#b08000">12_3</span><span style="color:#b08000">e+1</span>
0582 <span style="color:#b08000">12_3</span><span style="color:#b08000">e-1</span>
0583 <span style="color:#b08000">12_3</span><span style="color:#b08000">e1_1</span>
0584 <span style="color:#b08000">12_3</span><span style="color:#006e28">.</span><span style="color:#b08000">4</span><span style="color:#b08000">e1_1</span>
0585 <span style="color:#b08000">12_3</span><span style="color:#b08000">e1</span>_
0586 <span style="color:#b08000">12_3</span><span style="color:#bf0303;font-weight:bold;text-decoration:underline">e</span>
0587 
0588 <span style="color:#b08000">2</span><span style="color:#006e28">#</span><span style="color:#b08000">1_2_3</span><span style="color:#006e28">#</span><span style="color:#b08000">E+8</span>
0589 <span style="color:#b08000">2</span><span style="color:#006e28">#</span><span style="color:#b08000">1_2</span><span style="color:#006e28">.</span><span style="color:#b08000">3</span><span style="color:#006e28">#</span><span style="color:#b08000">E+8</span>
0590 <span style="color:#b08000">2</span><span style="color:#006e28">#</span><span style="color:#b08000">1_f2</span><span style="color:#006e28">.</span><span style="color:#b08000">3</span><span style="color:#006e28">#</span>
0591 
0592 <span style="color:#b08000">3</span><span style="color:#006e28">.</span><span style="color:#b08000">14159_26536</span> <span style="color:#898887">-- A literal of type universal_real.</span>
0593 <span style="color:#b08000">5280</span>          <span style="color:#898887">-- A literal of type universal_integer.</span>
0594 <span style="color:#b08000">10</span><span style="color:#006e28">.</span><span style="color:#b08000">7</span> <span style="color:#0057ae">ns</span>       <span style="color:#898887">-- A literal of a physical type.</span>
0595 O<span style="color:#bf0303">"4777"</span>       <span style="color:#898887">-- A bit string literal.</span>
0596 <span style="color:#bf0303">"54LS281"</span>     <span style="color:#898887">-- A string literal.</span>
0597 <span style="color:#bf0303">""</span>            <span style="color:#898887">-- A string literal representing a null array.</span>
0598 B<span style="color:#bf0303">"1111_1111_1111"</span> <span style="color:#898887">-- Equivalent to the string literal "111111111111".</span>
0599 X<span style="color:#bf0303">"FFF"</span>            <span style="color:#898887">-- Equivalent to B"1111_1111_1111".</span>
0600 O<span style="color:#bf0303">"777"</span>            <span style="color:#898887">-- Equivalent to B"111_111_111".</span>
0601 X<span style="color:#bf0303">"777"</span>            <span style="color:#898887">-- Equivalent to B"0111_0111_0111".</span>
0602 B<span style="color:#bf0303">"XXXX_01LH"</span> <span style="color:#898887">-- Equivalent to the string literal "XXXX01LH"</span>
0603 UO<span style="color:#bf0303">"27"</span>       <span style="color:#898887">-- Equivalent to B"010_111"</span>
0604 UO<span style="color:#bf0303">"2C"</span>       <span style="color:#898887">-- Equivalent to B"011_CCC"</span>
0605 SX<span style="color:#bf0303">"3W"</span>       <span style="color:#898887">-- Equivalent to B"0011_WWWW"</span>
0606 D<span style="color:#bf0303">"35"</span>        <span style="color:#898887">-- Equivalent to B"100011"</span>
0607 <span style="color:#b08000">12</span>UB<span style="color:#bf0303">"X1"</span> <span style="color:#898887">-- Equivalent to B"0000_0000_00X1"</span>
0608 <span style="color:#b08000">12</span>SB<span style="color:#bf0303">"X1"</span> <span style="color:#898887">-- Equivalent to B"XXXX_XXXX_XXX1"</span>
0609 <span style="color:#b08000">12</span>UX<span style="color:#bf0303">"F-"</span> <span style="color:#898887">-- Equivalent to B"0000_1111_----"</span>
0610 <span style="color:#b08000">12</span>SX<span style="color:#bf0303">"F-"</span> <span style="color:#898887">-- Equivalent to B"1111_1111_----"</span>
0611 <span style="color:#b08000">12</span>D<span style="color:#bf0303">"13"</span>  <span style="color:#898887">-- Equivalent to B"0000_0000_1101"</span>
0612 <span style="color:#b08000">12</span>UX<span style="color:#bf0303">"000WWW"</span> <span style="color:#898887">-- Equivalent to B"WWWW_WWWW_WWWW"</span>
0613 <span style="color:#b08000">12</span>SX<span style="color:#bf0303">"FFFC00"</span> <span style="color:#898887">-- Equivalent to B"1100_0000_0000"</span>
0614 <span style="color:#b08000">12</span>SX<span style="color:#bf0303">"XXXX00"</span> <span style="color:#898887">-- Equivalent to B"XXXX_0000_0000"</span>
0615 <span style="color:#b08000">8</span>D<span style="color:#bf0303">"511"</span>  <span style="color:#898887">-- Error</span>
0616 <span style="color:#b08000">8</span>UO<span style="color:#bf0303">"477"</span> <span style="color:#898887">-- Error</span>
0617 <span style="color:#b08000">8</span>SX<span style="color:#bf0303">"0FF"</span> <span style="color:#898887">-- Error</span>
0618 <span style="color:#b08000">8</span>SX<span style="color:#bf0303">"FXX"</span> <span style="color:#898887">-- Error</span>
0619 </pre></body></html>