VHDL:有没有方便的方法将ascii值分配给std_logic_vector?

前端之家收集整理的这篇文章主要介绍了VHDL:有没有方便的方法将ascii值分配给std_logic_vector?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
>在verilog中,我可以为一个向量分配一个字符串,如:
wire [39:0] hello;
assign hello = "hello";

>在VHDL中,我很难找到这样的方法

SIGNAL hello : OUT std_logic_vector (39 DOWNTO 0);
...
hello <= "hello";

我一直在用:

hello <= X"65_68_6c_6c_6f";

这对于大字符串来说是不清楚和耗时的.

我看过textio packagetxt_util package,但似乎都不清楚如何解释字符串并将其转换为std_logic.

是否有一种简单的方法可以在VHDL中将ascii代码分配给std_logic?

这是一个最小的例子:

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;

ENTITY test IS
PORT(
   ctrl : IN std_logic;
   stdout : OUT std_logic_vector (39 DOWNTO 0)
);
END ENTITY;

ARCHITECTURE rtl OF test IS
   SIGNAL temp : std_logic_vector (39 DOWNTO 0);
BEGIN
   stdout <= temp;
   PROCESS(ctrl)
   BEGIN
      IF (ctrl = '0') THEN
         temp <= "hello"; -- X"68_65_6C_6C_6F";
      ELSE
         temp <= "world";
      END IF;
   END PROCESS;

END rtl;

解决方法

对于Morten的答案,这个变化很小 – 它只使用一个乘法,它复制字符串而不是创建别名,它使用一个额外的变量,它返回一个具有升序索引范围的标准逻辑向量.

从名为string_utils的包中:

library ieee; 
use ieee.numeric_std.all;
-- ...
    function to_slv(s: string) return std_logic_vector is 
        constant ss: string(1 to s'length) := s; 
        variable answer: std_logic_vector(1 to 8 * s'length); 
        variable p: integer; 
        variable c: integer; 
    begin 
        for i in ss'range loop
            p := 8 * i;
            c := character'pos(ss(i));
            answer(p - 7 to p) := std_logic_vector(to_unsigned(c,8)); 
        end loop; 
        return answer; 
    end function;

您可以添加一个参数,其默认值为返回值指定升序/降序索引范围.您只需要为非默认值提供参数.

猜你在找的Java相关文章