Paebbels評論和瓦哈卜的答案之間有轉換位的近兩年的工作方式字符串文字到調整大小的std_logic_vector。這兩種方法都可以糾正。
Paebbels'(校正)方法要求第一比特串轉換爲一個整數值,然後使用to_unsigned到(自然)值,以無符號的轉換,那麼類型轉換爲std_logic_vector:
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
甲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表達式使用限定的表達式來消除兩種可能的調整大小函數(有符號和無符號)之間的歧義,以便將類型轉換爲std_logic_vector的結果消除。
「B」101「'是一個字符串文字還是一個std_logic_vector文字?對於後者:'std_logic_vector(to_unsigned(「101」,C_NO_OF_CHANNELS))'。對於第一個,你必須寫一個字符串到'STD_LOGIC_VECTOR'解析器。 – Paebbels
'std_logic_vector(to_unsigned(to_integer(unsigned'(B「101」)),C_NO_OF_CHANNELS));'函數'to_unsigned'(numeric_std,第一個參數是自然被轉換的,第二個參數是無符號結果的自然大小)將整數(自然)值轉換爲無符號,並填充指定大小左'0'。字符串文字是一個數組值,與位串字符串的等效字符串文字一樣,而整數是標量值。 – user1155120