Warning, file /frameworks/syntax-highlighting/autotests/html/light52_muldiv.vhdl.html was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

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;">&gt;&gt;</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;">&gt;=</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;">&quot;0&quot;</span> <span style="color:#006e28;">&amp;</span> data_b <span style="color:#006e28;">&amp;</span> <span style="color:#bf0303;">&quot;0000000&quot;</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;">&quot;00&quot;</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;">&quot;0&quot;</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;">=&gt;</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 &gt;=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;">&quot;00&quot;</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;">&gt;=</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;">&quot;00&quot;</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;">&quot;Sequential multiplier implementation not done yet.&quot;</span><span style="color:#006e28;">&amp;</span>
0241        <span style="color:#bf0303;">&quot; Use combinational implementation.&quot;</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;">=&gt;</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;">=&gt;</span> <span style="color:#b08000;">3</span><span style="color:#006e28;">,</span>
0256     no_warning           <span style="color:#006e28;">=&gt;</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;&gt;</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;">=&gt;</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;">&quot;to_string: Illegal format string &quot;&quot;&quot;</span> <span style="color:#006e28;">&amp;</span> format <span style="color:#006e28;">&amp;</span> <span style="color:#b08000;">'&quot;'</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;">&quot;&quot;</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;">'(&quot;&quot;)</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;&gt;</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;">=&gt;</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;">=&gt;</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;&gt;</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;">'(&quot;ello&quot;)</span>;
0418         <span style="font-weight:bold;">assert</span> <span style="color:#bf0303;">&quot;10&quot;</span> <span style="color:#006e28;">=</span> (b(<span style="color:#b08000;">1</span>) <span style="color:#006e28;">&amp;</span> <span style="color:#bf0303;">&quot;0&quot;</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;">=&gt;</span> <span style="color:#b08000;">8</span>)
0437         <span style="font-weight:bold;">port map </span>(
0438             clk1 <span style="color:#006e28;">=&gt;</span> Clock<span style="color:#006e28;">,</span>
0439             DATA_OUT   <span style="color:#006e28;">=&gt;</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;">=&gt;</span> compensate_i<span style="color:#006e28;">,</span>
0441             WRITE_IN   <span style="color:#006e28;">=&gt;</span> (<span style="color:#006e28;">others</span> <span style="color:#006e28;">=&gt;</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;">=&gt;</span> <span style="color:#b08000;">8</span>)
0446         <span style="font-weight:bold;">port map </span>(clk1 <span style="color:#006e28;">=&gt;</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;">=&gt;</span> <span style="color:#b08000;">8</span>)
0450         <span style="font-weight:bold;">port map </span>(clk1 <span style="color:#006e28;">=&gt;</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;">=&gt;</span> ds
0455         )
0456         <span style="font-weight:bold;">port map</span>(
0457             CLK        <span style="color:#006e28;">=&gt;</span> clk_i<span style="color:#006e28;">,</span>
0458             DATA_IN    <span style="color:#006e28;">=&gt;</span> pwm_data_i<span style="color:#006e28;">,</span>
0459             DATA_OUT   <span style="color:#006e28;">=&gt;</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;">=&gt;</span> compensate_i<span style="color:#006e28;">,</span>
0461             WRITE_IN   <span style="color:#006e28;">=&gt;</span> (<span style="color:#006e28;">others</span> <span style="color:#006e28;">=&gt;</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;">&quot;&gt;&quot;</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;">&gt;</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;">=&gt;</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;">&quot;fast&quot;</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;">&quot;133.00&quot;</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;">=&gt;</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;">=&gt;</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;">=&gt;</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;">&quot;0&quot;</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;">=&gt;</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;">=&gt;</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;">=&gt;</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;">&quot;0&quot;</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;">&quot;4777&quot;</span>       <span style="color:#898887;">-- A bit string literal.</span>
0596 <span style="color:#bf0303;">&quot;54LS281&quot;</span>     <span style="color:#898887;">-- A string literal.</span>
0597 <span style="color:#bf0303;">&quot;&quot;</span>            <span style="color:#898887;">-- A string literal representing a null array.</span>
0598 B<span style="color:#bf0303;">&quot;1111_1111_1111&quot;</span> <span style="color:#898887;">-- Equivalent to the string literal &quot;111111111111&quot;.</span>
0599 X<span style="color:#bf0303;">&quot;FFF&quot;</span>            <span style="color:#898887;">-- Equivalent to B&quot;1111_1111_1111&quot;.</span>
0600 O<span style="color:#bf0303;">&quot;777&quot;</span>            <span style="color:#898887;">-- Equivalent to B&quot;111_111_111&quot;.</span>
0601 X<span style="color:#bf0303;">&quot;777&quot;</span>            <span style="color:#898887;">-- Equivalent to B&quot;0111_0111_0111&quot;.</span>
0602 B<span style="color:#bf0303;">&quot;XXXX_01LH&quot;</span> <span style="color:#898887;">-- Equivalent to the string literal &quot;XXXX01LH&quot;</span>
0603 UO<span style="color:#bf0303;">&quot;27&quot;</span>       <span style="color:#898887;">-- Equivalent to B&quot;010_111&quot;</span>
0604 UO<span style="color:#bf0303;">&quot;2C&quot;</span>       <span style="color:#898887;">-- Equivalent to B&quot;011_CCC&quot;</span>
0605 SX<span style="color:#bf0303;">&quot;3W&quot;</span>       <span style="color:#898887;">-- Equivalent to B&quot;0011_WWWW&quot;</span>
0606 D<span style="color:#bf0303;">&quot;35&quot;</span>        <span style="color:#898887;">-- Equivalent to B&quot;100011&quot;</span>
0607 <span style="color:#b08000;">12</span>UB<span style="color:#bf0303;">&quot;X1&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;0000_0000_00X1&quot;</span>
0608 <span style="color:#b08000;">12</span>SB<span style="color:#bf0303;">&quot;X1&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;XXXX_XXXX_XXX1&quot;</span>
0609 <span style="color:#b08000;">12</span>UX<span style="color:#bf0303;">&quot;F-&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;0000_1111_----&quot;</span>
0610 <span style="color:#b08000;">12</span>SX<span style="color:#bf0303;">&quot;F-&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;1111_1111_----&quot;</span>
0611 <span style="color:#b08000;">12</span>D<span style="color:#bf0303;">&quot;13&quot;</span>  <span style="color:#898887;">-- Equivalent to B&quot;0000_0000_1101&quot;</span>
0612 <span style="color:#b08000;">12</span>UX<span style="color:#bf0303;">&quot;000WWW&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;WWWW_WWWW_WWWW&quot;</span>
0613 <span style="color:#b08000;">12</span>SX<span style="color:#bf0303;">&quot;FFFC00&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;1100_0000_0000&quot;</span>
0614 <span style="color:#b08000;">12</span>SX<span style="color:#bf0303;">&quot;XXXX00&quot;</span> <span style="color:#898887;">-- Equivalent to B&quot;XXXX_0000_0000&quot;</span>
0615 <span style="color:#b08000;">8</span>D<span style="color:#bf0303;">&quot;511&quot;</span>  <span style="color:#898887;">-- Error</span>
0616 <span style="color:#b08000;">8</span>UO<span style="color:#bf0303;">&quot;477&quot;</span> <span style="color:#898887;">-- Error</span>
0617 <span style="color:#b08000;">8</span>SX<span style="color:#bf0303;">&quot;0FF&quot;</span> <span style="color:#898887;">-- Error</span>
0618 <span style="color:#b08000;">8</span>SX<span style="color:#bf0303;">&quot;FXX&quot;</span> <span style="color:#898887;">-- Error</span>
0619 </pre></body></html>