⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xhdl_std_ulogic.vhdl

📁 VHDL和Verilog转换软件
💻 VHDL
📖 第 1 页 / 共 2 页
字号:
   FUNCTION "SLL" (      l        : std_ulogic_vector;      r        : integer) RETURN std_ulogic_vector IS   BEGIN      RETURN(ShiftLeft(l, r));   END "SLL";      FUNCTION ShiftLeft (      val      : std_ulogic_vector;      shft     : integer) RETURN std_ulogic_vector IS            VARIABLE int      : std_ulogic_vector(val'LENGTH+shft-1 DOWNTO 0);      VARIABLE rtn      : std_ulogic_vector(val'RANGE);      VARIABLE fill     : std_ulogic_vector(shft-1 DOWNTO 0) := (others => '0');   BEGIN      int := val & fill;      rtn := int(val'LENGTH-1 DOWNTO 0);      RETURN(rtn);   END ShiftLeft;                  FUNCTION "+" (      l        : std_ulogic;      r        : std_ulogic) RETURN std_ulogic_vector IS            VARIABLE rtn      : std_ulogic_vector(1 downto 0);      VARIABLE tmp      : std_ulogic_vector(1 downto 0);   BEGIN      tmp := l & r;      CASE tmp IS         WHEN "00"   => rtn := "00";         WHEN "01"   => rtn := "01";         WHEN "10"   => rtn := "01";         WHEN "11"   => rtn := "10";         WHEN OTHERS => rtn := "XX";      END CASE;      RETURN(rtn);   END "+";         --      FUNCTION or_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '0';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn OR val(index);      END LOOP;      RETURN(rtn);   END or_br;   --      FUNCTION and_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '1';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn AND val(index);      END LOOP;      RETURN(rtn);   END and_br;   --      FUNCTION xor_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '0';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn XOR val(index);      END LOOP;      RETURN(rtn);   END xor_br;   --      FUNCTION xnor_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '0';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn XOR val(index);      END LOOP;      RETURN(NOT rtn);   END xnor_br;   --   FUNCTION nor_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '0';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn OR val(index);      END LOOP;      RETURN(NOT rtn);   END nor_br;   --   FUNCTION nand_br (      val : std_ulogic_vector) RETURN std_ulogic IS      VARIABLE rtn : std_ulogic := '0';   BEGIN      FOR index IN val'RANGE LOOP         rtn := rtn AND val(index);      END LOOP;      RETURN(NOT rtn);   END nand_br;   --   FUNCTION select_expr (      sel : boolean;      op1 : std_ulogic_vector;      op2 : std_ulogic_vector) RETURN std_ulogic_vector IS      VARIABLE rtn      : std_ulogic_vector(op1'RANGE);   BEGIN      IF(sel) THEN         rtn := op1;      ELSE         rtn := op2;      END IF;            RETURN (rtn);   END select_expr;   --   FUNCTION select_expr (      sel : boolean;      op1 : std_ulogic;      op2 : std_ulogic) RETURN std_ulogic IS      VARIABLE rtn      : std_ulogic;   BEGIN      IF(sel) THEN         rtn := op1;      ELSE         rtn := op2;      END IF;            RETURN (rtn);   END select_expr;   --   FUNCTION to_time (      val : std_ulogic_vector) RETURN time IS         VARIABLE rtn : time;   BEGIN      rtn := to_integer(val) * 1 ns;      RETURN(rtn);   END to_time;      --   FUNCTION to_string (      val : std_ulogic_vector) RETURN string IS      VARIABLE rtn   : string(1 TO val'LENGTH);      ALIAS normal    : std_ulogic_vector(1 to val'LENGTH) IS val;   BEGIN       FOR index IN normal'RANGE LOOP        CASE normal(index) IS           WHEN '0' => rtn(index) := '0';            WHEN 'L' => rtn(index) := 'L';            WHEN '1' => rtn(index) := '1';            WHEN 'H' => rtn(index) := 'H';            WHEN 'U' => rtn(index) := 'U';            WHEN 'Z' => rtn(index) := 'Z';            WHEN 'W' => rtn(index) := 'W';            WHEN OTHERS => rtn(index) := 'X';         END CASE;      END LOOP;      RETURN rtn;   END to_string;    --       FUNCTION to_string (      val : std_ulogic) RETURN character IS      VARIABLE rtn      : character;   BEGIN     CASE val IS         WHEN '0' => rtn := '0';         WHEN 'L' => rtn := 'L';         WHEN '1' => rtn := '1';         WHEN 'H' => rtn := 'H';         WHEN 'U' => rtn := 'U';         WHEN 'Z' => rtn := 'Z';         WHEN 'W' => rtn := 'W';         WHEN OTHERS => rtn := 'X';      END CASE;      RETURN rtn;     END to_string;     FUNCTION to_octstring (      val      : IN std_ulogic_vector) RETURN string IS         constant extra : integer := val'length rem 3;      constant len    : integer := ((val'length-1)/3)+1;      variable rtn  : string(1 to len);      variable vec   : std_ulogic_vector((extra + val'length-1) downto 0);         BEGIN      case extra is         when 0      => vec := val;         when 1      => vec := '0' & val;         when 2      => vec := "00" & val;         when others => vec := val;      end case;      for x in len downto 1 loop         case vec(2 downto 0) is            when "000"     => rtn(x) := '0';            when "001"     => rtn(x) := '1';            when "010"     => rtn(x) := '2';            when "011"     => rtn(x) := '3';            when "100"     => rtn(x) := '4';            when "101"     => rtn(x) := '5';            when "110"     => rtn(x) := '6';            when "111"     => rtn(x) := '7';            when "UUU"     => rtn(x) := 'U';            when "ZZZ"     => rtn(x) := 'Z';            when "XXX"     => rtn(x) := 'X';            when others      => rtn(x) := '?';         end case;         vec := "000" & vec(val'length-1 downto 3);      end loop;      return(rtn);   END to_octstring;    FUNCTION to_decstring (      val      : IN std_ulogic_vector) RETURN string IS         variable int   : integer;   BEGIN      int := to_integer(val);      return(to_string(val));   END to_decstring;      FUNCTION to_hexstring (      val      : IN std_ulogic_vector) RETURN string IS         constant extra : integer := val'length rem 4;      constant len    : integer := ((val'length-1)/4)+1;      variable rtn  : string(1 to len);      variable vec   : std_ulogic_vector((extra + val'length-1) downto 0);         BEGIN      case extra is         when 0      => vec := val;         when 1      => vec := '0' & val;         when 2      => vec := "00" & val;         when 3      => vec := "000" & val;         when others => vec := val;      end case;      for x in len downto 1 loop         case vec(3 downto 0) is            when "0000"    => rtn(x) := '0';            when "0001"     => rtn(x) := '1';            when "0010"      => rtn(x) := '2';            when "0011"    => rtn(x) := '3';            when "0100"     => rtn(x) := '4';            when "0101"      => rtn(x) := '5';            when "0110"    => rtn(x) := '6';            when "0111"     => rtn(x) := '7';            when "1000"      => rtn(x) := '8';            when "1001"    => rtn(x) := '9';            when "1010"     => rtn(x) := 'A';            when "1011"      => rtn(x) := 'B';            when "1100"    => rtn(x) := 'C';            when "1101"     => rtn(x) := 'D';            when "1110"      => rtn(x) := 'E';            when "1111"    => rtn(x) := 'F';            when "UUUU"     => rtn(x) := 'U';            when "ZZZZ"      => rtn(x) := 'Z';            when "XXXX"    => rtn(x) := 'X';            when others     => rtn(x) := '?';         end case;         vec := "0000" & vec(val'length-1 downto 4);      end loop;      return(rtn);   END to_hexstring;   END;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -