VHDL将字符串文字扩展为std_logic_vector

时间:2015-11-11 12:24:53

标签: vhdl

我正在尝试将字符串文字转换为B“101”到C_NO_OF_CHANNELS位std_logic_vector。

这样做的:

library ieee, std, switch_core;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

std_logic_vector(resize(unsigned(B"101"), C_NO_OF_CHANNELS))

提出:

Type conversion (to UNSIGNED) can not have string literal operand.

2 个答案:

答案 0 :(得分:0)

试试这个:

std_logic_vector(resize(unsigned(std_logic_vector'(B"101")), C_NO_OF_CHANNELS))

答案 1 :(得分:0)

在Paebbels评论和wahab的回答之间,有几种工作方式将位字符串文字转换为调整大小的std_logic_vector。两种方法都可以纠正。

Paebbels(已更正)方法需要先将位串转换为整数值,然后使用to_unsigned将(自然)值转换为无符号,然后键入转换为std_logic_vector:

std_logic_vector(to_unsigned (to_integer(unsigned'(B"101")), C_NO_OF_CHANNELS)); -- works

wahab的纠正和简化方法(使用合格的表达式):

std_logic_vector(resize(unsigned'(B"101"), C_NO_OF_CHANNELS)); -- works

可以用来证明两者的Minimal, Complete, and Verifiable example

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity extend is
end entity;

architecture foo of extend is
constant  C_NO_OF_CHANNELS:     natural := 42;
signal target: std_logic_vector (C_NO_OF_CHANNELS - 1 downto 0) := 
        -- std_logic_vector(resize(unsigned(std_logic_vector'(B"101")), C_NO_OF_CHANNELS)); -- original - doesn't work
        -- std_logic_vector(to_unsigned (to_integer(unsigned'(B"101")), C_NO_OF_CHANNELS)); -- works
        std_logic_vector(resize(unsigned'(B"101"), C_NO_OF_CHANNELS)); -- works
begin
end architecture;

请注意,已提供C_NO_OF_CHANNELS的常量值。

更正后的wahab表达式使用限定表达式来消除两个可能的resize函数(有符号和无符号)之间的歧义,这两个函数的结果是能够被类型转换为std_logic_vector。