Anda mencoba menetapkan o
nilai nama yang diindeks dari hasil ekspresi.
Awalan nama yang diindeks dapat berupa nama atau pemanggilan fungsi.
indexed_name ::= prefix ( expression { , expression } )
prefix ::=
name
| function_call
Fungsi adalah ekspresi seperti sebagian besar atribut yang telah ditentukan sebelumnya, mis. i'length
atau i'left
.
Namun pemanggilan fungsi memiliki format tertentu:
function_call ::=
function_name [ ( actual_parameter_part ) ]
actual_parameter_part ::= parameter_association_list
Mengingat semua itu serta menggunakan paket numerik_std (dalam hal ini tanpa numerik_std_unsigned) memberikan:
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity indexing is
constant parameter: natural :=7;
end entity;
architecture foo of indexing is
signal o : std_logic;
signal i : signed(parameter downto 0);
constant c : integer := 5;
begin
o <= "-"(i,to_signed(c,i'length)) (i'left);
end architecture;
Dan tentu saja Anda dapat menggunakan konversi tipe dalam daftar asosiasi untuk daftar asosiasi panggilan fungsi "-",
Tipe signed
dipilih karena konstanta Anda c
ditetapkan sebagai tipe integer. Bisa saja dengan mudah mengetik unsigned, atau std_logic_vector menggunakan paket numerik_std_unsigned. Memilih tipe yang ditandatangani agak aneh, o
menentukan tanda hasil dengan cara ini.
Contoh di atas menganalisis, menguraikan, dan menjalankan, sebenarnya tidak melakukan banyak hal menarik, sambil menunjukkan sintaksisnya valid.
Nama irisan juga dapat dimanipulasi.
(Dan ya, ini akan berfungsi dengan paket Synopsys std_logic_unsigned, tanpa konversi tipe dan menentukan i
tipe std_logic_vector. Ada sedikit keuntungan saat menggunakan pemanggilan fungsi.)
person
Community
schedule
22.09.2014