2015-11-11 41 views
0

我想將字符串文字像B「101」轉換爲C_NO_OF_CHANNELS位std_logic_vector。VHDL將字符串文字擴展到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. 
+0

「B」101「'是一個字符串文字還是一個std_logic_vector文字?對於後者:'std_logic_vector(to_unsigned(「101」,C_NO_OF_CHANNELS))'。對於第一個,你必須寫一個字符串到'STD_LOGIC_VECTOR'解析器。 – Paebbels

+0

'std_logic_vector(to_unsigned(to_integer(unsigned'(B「101」)),C_NO_OF_CHANNELS));'函數'to_unsigned'(numeric_std,第一個參數是自然被轉換的,第二個參數是無符號結果的自然大小)將整數(自然)值轉換爲無符號,並填充指定大小左'0'。字符串文字是一個數組值,與位串字符串的等效字符串文字一樣,而整數是標量值。 – user1155120

回答

0

試試這個:

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

+0

這應該是'std_logic_vector(resize(unsigned(std_logic_vector'(B「101」)),C_NO_OF_CHANNELS))''不使用'std_logic_vector'和'(B「101」)'之間的撇號('''實施合格的表達。 'std_logic_vector(resize(unsigned'(B「101」),C_NO_OF_CHANNELS));'也可以工作,在有符號和無符號調整大小之間進行區分。 – user1155120

+0

這不應該注意 - '請注意使用撇號' – user1155120

+0

感謝您指出。 – wahab

0

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的結果消除。