• source file for the Image Package image_pkg


      1 -----------------------------------------------------------------
      2 -- Copyright (c) 1997 Ben Cohen.   All rights reserved.
      3 -- This model can be used in conjunction with the Kluwer Academic books
      4 -- "VHDL Coding Styles and Methodologies", ISBN: 0-7923-9598-0
      5 -- "VHDL Amswers to Frequently Asked Questions", Kluwer Academic
      6 --    by Ben Cohen.                       email: vhdlcohen@aol.com
      7 --   
      8 -- This source file for the Image Package
      9 -- may be used and distributed without restriction provided
     10 -- that this copyright statement is not removed from the file
     11 -- and that any derivative work contains this copyright notice.
     12 ---------------------------------------------------------------
     13 library IEEE; 
     14   use IEEE.Std_Logic_1164.all;
     15   use IEEE.Std_Logic_TextIO.all;  
     16   use IEEE.Std_Logic_Arith.all;
     17 
     18 library Std;
     19   use STD.TextIO.all;
     20 
     21 package image_pkg is
     22   function Image(In_Image : Time) return String;
     23   function Image(In_Image : Bit) return String;
     24   function Image(In_Image : Bit_Vector) return String;
     25   function Image(In_Image : Integer) return String;
     26   function Image(In_Image : Real) return String;
     27   function Image(In_Image : Std_uLogic) return String;
     28   function Image(In_Image : Std_uLogic_Vector) return String;
     29   function Image(In_Image : Std_Logic_Vector) return String;
     30   function Image(In_Image : Signed) return String;
     31   function Image(In_Image : UnSigned) return String;
     32 
     33   function HexImage(InStrg  : String) return String;
     34   function HexImage(In_Image : Bit_Vector) return String;
     35   function HexImage(In_Image : Std_uLogic_Vector) return String;
     36   function HexImage(In_Image : Std_Logic_Vector) return String;
     37   function HexImage(In_Image : Signed) return String;
     38   function HexImage(In_Image : UnSigned) return String;
     39 
     40   function DecImage(In_Image : Bit_Vector) return String;
     41   function DecImage(In_Image : Std_uLogic_Vector) return String;
     42   function DecImage(In_Image : Std_Logic_Vector) return String;
     43   function DecImage(In_Image : Signed) return String;
     44   function DecImage(In_Image : UnSigned) return String;
     45 end image_pkg;
     46 
     47 package body image_pkg is
     48   function Image(In_Image : Time) return String is
     49     variable L : Line;  -- access type
     50     variable W : String(1 to 25) := (others => ' '); 
     51        -- Long enough to hold a time string
     52   begin
     53     -- the WRITE procedure creates an object with "NEW".
     54     -- L is passed as an output of the procedure.
     55     Std.TextIO.WRITE(L, in_image);
     56     -- Copy L.all onto W
     57     W(L.all'range) := L.all;
     58     Deallocate(L);
     59     return W;
     60   end Image;
     61 
     62   function Image(In_Image : Bit) return String is
     63     variable L : Line;  -- access type
     64     variable W : String(1 to 3) := (others => ' ');  
     65   begin
     66     Std.TextIO.WRITE(L, in_image);
     67     W(L.all'range) := L.all;
     68     Deallocate(L);
     69     return W;
     70   end Image;
     71 
     72   function Image(In_Image : Bit_Vector) return String is
     73     variable L : Line;  -- access type
     74     variable W : String(1 to In_Image'length) := (others => ' ');  
     75   begin
     76     Std.TextIO.WRITE(L, in_image);
     77     W(L.all'range) := L.all;
     78     Deallocate(L);
     79     return W;
     80   end Image;
     81 
     82   function Image(In_Image : Integer) return String is
     83     variable L : Line;  -- access type
     84     variable W : String(1 to 32) := (others => ' ');  
     85      -- Long enough to hold a time string
     86   begin
     87     Std.TextIO.WRITE(L, in_image);
     88     W(L.all'range) := L.all;
     89     Deallocate(L);
     90     return W;
     91   end Image;
     92 
     93   function Image(In_Image : Real) return String is
     94     variable L : Line;  -- access type
     95     variable W : String(1 to 32) := (others => ' ');  
     96       -- Long enough to hold a time string
     97   begin
     98     Std.TextIO.WRITE(L, in_image);
     99     W(L.all'range) := L.all;
    100     Deallocate(L);
    101     return W;
    102   end Image;
    103 
    104   function Image(In_Image : Std_uLogic) return String is
    105     variable L : Line;  -- access type
    106     variable W : String(1 to 3) := (others => ' ');  
    107   begin
    108     IEEE.Std_Logic_Textio.WRITE(L, in_image);
    109     W(L.all'range) := L.all;
    110     Deallocate(L);
    111     return W;
    112   end Image;
    113 
    114   function Image(In_Image : Std_uLogic_Vector) return String is
    115     variable L : Line;  -- access type
    116     variable W : String(1 to In_Image'length) := (others => ' ');  
    117   begin
    118     IEEE.Std_Logic_Textio.WRITE(L, in_image);
    119     W(L.all'range) := L.all;
    120     Deallocate(L);
    121     return W;
    122   end Image;
    123 
    124   function Image(In_Image : Std_Logic_Vector) return String is
    125     variable L : Line;  -- access type
    126     variable W : String(1 to In_Image'length) := (others => ' ');  
    127   begin
    128      IEEE.Std_Logic_TextIO.WRITE(L, In_Image);
    129      W(L.all'range) := L.all;
    130      Deallocate(L);
    131      return W;
    132   end Image;
    133 
    134   function Image(In_Image : Signed) return String is 
    135   begin 
    136     return Image(Std_Logic_Vector(In_Image));
    137   end Image;
    138 
    139   function Image(In_Image : UnSigned) return String is
    140   begin 
    141     return Image(Std_Logic_Vector(In_Image));
    142   end Image;
    143 
    144   function HexImage(InStrg  : String) return String is
    145     subtype Int03_Typ is Integer range 0 to 3;
    146     variable Result : string(1 to ((InStrg'length - 1)/4)+1) :=
    147         (others => '0');
    148     variable StrTo4 : string(1 to Result'length * 4) := 
    149         (others => '0');
    150     variable MTspace : Int03_Typ;  --  Empty space to fill in
    151     variable Str4    : String(1 to 4);
    152     variable Group_v   : Natural := 0; 
    153   begin
    154     MTspace := Result'length * 4  - InStrg'length; 
    155     StrTo4(MTspace + 1 to StrTo4'length) := InStrg; -- padded with '0'
    156     Cnvrt_Lbl : for I in Result'range loop
    157       Group_v := Group_v + 4;  -- identifies end of bit # in a group of 4 
    158       Str4 := StrTo4(Group_v - 3 to Group_v); -- get next 4 characters 
    159       case Str4 is
    160         when "0000"  => Result(I) := '0'; 
    161         when "0001"  => Result(I) := '1'; 
    162         when "0010"  => Result(I) := '2'; 
    163         when "0011"  => Result(I) := '3'; 
    164         when "0100"  => Result(I) := '4'; 
    165         when "0101"  => Result(I) := '5'; 
    166         when "0110"  => Result(I) := '6'; 
    167         when "0111"  => Result(I) := '7'; 
    168         when "1000"  => Result(I) := '8'; 
    169         when "1001"  => Result(I) := '9'; 
    170         when "1010"  => Result(I) := 'A'; 
    171         when "1011"  => Result(I) := 'B'; 
    172         when "1100"  => Result(I) := 'C'; 
    173         when "1101"  => Result(I) := 'D'; 
    174         when "1110"  => Result(I) := 'E'; 
    175         when "1111"  => Result(I) := 'F';
    176         when others  => Result(I) := 'X'; 
    177       end case;                          --  Str4
    178     end loop Cnvrt_Lbl;
    179 
    180     return Result; 
    181   end HexImage;
    182 
    183 
    184   function HexImage(In_Image : Bit_Vector) return String is
    185   begin
    186     return HexImage(Image(In_Image));
    187   end HexImage;
    188 
    189   function HexImage(In_Image : Std_uLogic_Vector) return String is
    190   begin
    191     return HexImage(Image(In_Image));
    192   end HexImage;
    193     
    194   function HexImage(In_Image : Std_Logic_Vector) return String is
    195   begin
    196     return HexImage(Image(In_Image));
    197   end HexImage;
    198     
    199   function HexImage(In_Image : Signed) return String is
    200   begin
    201     return HexImage(Image(In_Image));
    202   end HexImage;
    203     
    204   function HexImage(In_Image : UnSigned) return String is
    205   begin
    206     return HexImage(Image(In_Image));
    207   end HexImage;
    208 
    209   function DecImage(In_Image : Bit_Vector) return String is
    210     variable In_Image_v : Bit_Vector(In_Image'length downto 1) := In_Image;
    211   begin
    212     if In_Image'length > 31 then
    213       assert False
    214         report "Number too large for Integer, clipping to 31 bits"
    215         severity Warning;
    216       return Image(Conv_Integer
    217                     (Unsigned(To_StdLogicVector
    218                         (In_Image_v(31 downto 1)))));
    219     else             
    220       return Image(Conv_Integer(Unsigned(To_StdLogicVector(In_Image))));
    221     end if; 
    222   end DecImage;
    223   
    224   function DecImage(In_Image : Std_uLogic_Vector) return String is
    225     variable In_Image_v : Std_uLogic_Vector(In_Image'length downto 1)
    226                               := In_Image;
    227   begin
    228     if In_Image'length > 31 then
    229       assert False
    230         report "Number too large for Integer, clipping to 31 bits"
    231         severity Warning;
    232        return Image(Conv_Integer(Unsigned(In_Image_v(31 downto 1))));
    233     else
    234         return Image(Conv_Integer(Unsigned(In_Image)));
    235     end if; 
    236   end DecImage;
    237   
    238   function DecImage(In_Image : Std_Logic_Vector) return String is
    239     variable In_Image_v : Std_Logic_Vector(In_Image'length downto 1)
    240                               := In_Image;
    241   begin
    242     if In_Image'length > 31 then
    243       assert False
    244         report "Number too large for Integer, clipping to 31 bits"
    245         severity Warning;
    246        return Image(Conv_Integer(Unsigned(In_Image_v(31 downto 1))));
    247     else
    248         return Image(Conv_Integer(Unsigned(In_Image)));
    249     end if; 
    250   end DecImage;
    251     
    252   function DecImage(In_Image : Signed) return String is
    253     variable In_Image_v : Signed(In_Image'length downto 1) := In_Image;
    254   begin
    255     if In_Image'length > 31 then
    256       assert False
    257         report "Number too large for Integer, clipping to 31 bits"
    258         severity Warning;
    259        return Image(Conv_Integer(In_Image_v(31 downto 1)));
    260     else
    261         return Image(Conv_Integer(In_Image));
    262     end if; 
    263   end DecImage;
    264     
    265   function DecImage(In_Image : UnSigned) return String is
    266     variable In_Image_v : UnSigned(In_Image'length downto 1) := In_Image;
    267   begin
    268     if In_Image'length > 31 then
    269       assert False
    270         report "Number too large for Integer, clipping to 31 bits"
    271         severity Warning;
    272        return Image(Conv_Integer(In_Image_v(31 downto 1)));
    273     else
    274         return Image(Conv_Integer(In_Image));
    275     end if; 
    276   end DecImage;
    277     
    278 end image_pkg;

  • 相关阅读:
    Linux ansible的group模块
    ansible copy 模块详解
    Linux centos yum仓库 自制
    ansible 的playbook脚本
    Linux centos 监控备份
    Linux centos nginx下载安装初步
    周总结5
    周总结4
    爬取
    结对开发
  • 原文地址:https://www.cnblogs.com/shangdawei/p/2494859.html
Copyright © 2020-2023  润新知