VHDL:有没有方便的方法将ascii值分配给std_logic_vector?
发布时间:2020-05-24 09:10:01 所属栏目:Java 来源:互联网
导读:在verilog中,我可以为一个向量分配一个字符串,如: wire [39:0] hello;assign hello = hello; 在VHDL中,我很难找到这样的方法: SIGNAL hello : OUT std_logic_vector (39 DOWNTO 0);...hello = hello; 我一直在用: hello = X65_68_6c_6c_6f;
|
>在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"; 这对于大字符串来说是不清楚和耗时的. 我看过 是否有一种简单的方法可以在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;
您可以添加一个参数,其默认值为返回值指定升序/降序索引范围.您只需要为非默认值提供参数. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读
