Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vhdl ModelSim不编译重载函数和未定义的范围类型_Vhdl_Overloading_Modelsim_Intel Fpga_Quartus - Fatal编程技术网

Vhdl ModelSim不编译重载函数和未定义的范围类型

Vhdl ModelSim不编译重载函数和未定义的范围类型,vhdl,overloading,modelsim,intel-fpga,quartus,Vhdl,Overloading,Modelsim,Intel Fpga,Quartus,我正在运行ModelSim 10.3d,我的软件包中包含以下代码: package core_params_types is type array_1d_logic is array (natural range <>) of std_logic; type array_1d_logic_vector is array (natural range <>) of std_logic_vector (natural range <>); type arr

我正在运行ModelSim 10.3d,我的软件包中包含以下代码:

package core_params_types is
    type array_1d_logic is array (natural range <>) of std_logic;
type array_1d_logic_vector is array (natural range <>) of std_logic_vector (natural range <>);
type array_2d_logic is array (natural range <>, natural range <>) of std_logic;
type array_2d_logic_vector is array (natural range <>, natural range <>) of std_logic_vector (natural range <>);

function or_reduce_2d_logic(a : array_2d_logic; i : integer) return std_logic;
function or_reduce_2d_logic_vector(a : array_2d_logic_vector; i : integer) return std_logic_vector;

function bitwise_cmp(a : std_logic_vector; b : std_logic_vector) return std_logic;
function bitwise_cmp(a : std_logic; b : std_logic) return std_logic;

function full_adder(a : std_logic_vector; b : std_logic_vector; ci : std_logic) return std_logic_vector;

function sign_extend(a : std_logic_vector; b : integer) return std_logic_vector;
function sign_extend(a : std_logic; b : integer) return std_logic_vector;
function logic_extend(a : std_logic_vector; b : integer) return std_logic_vector;
function logic_extend(a : std_logic; b : integer) return std_logic_vector;
我从Quartus运行ModelSim模拟,它编译代码时没有错误,并生成一个电路。ModelSim说这些功能已经定义好了。这是正确的,但是它们有不同的类型,所以应该重载它们。而且ModelSim不理解数组类型的声明。

类型声明

type array_1d_logic_vector is array (natural range <>) of std_logic_vector (natural range <>);
其中,元素子类型约束为7到0,数组约束为0到1

见IEEE标准1076-2008 5.3.2阵列类型,5.3.2.1一般段落6:

一种无界数组定义,其中元素子类型指示表示无约束的复合子类型或非复合子类型的子类型定义数组类型和表示该类型的名称。对于具有数组类型的每个对象,索引的数量、每个索引的类型和位置以及元素的子类型与类型定义中的相同。根据定义,给定索引位置的索引子类型是由相应索引子类型定义的类型标记表示的子类型。未定义每个索引范围的左右边界值,但应属于相应的索引子类型;类似地,未定义每个索引范围的方向。索引子类型定义中的符号(称为方框)表示未定义的范围(该类型的不同对象不需要具有相同的边界和方向)

在5.3.2.1(接近结尾)中有一个代码示例

如果第二种形式看起来容易搞乱,那就是。可以使用具有不同子类型约束且长度不同时不兼容的元素声明相同类型的对象

如果没有看到使用原始成功合成的任何合成操作的日志文件输出,将不符合VHDL标准

如果不仔细检查所有内容,您的测试用例包声明与示例代码中给出的行号不匹配。看起来您正在包体中重新声明函数(注意行号310)。尝试删除重复的函数声明


(你也可以提供一个真实的,它能准确地告诉你发生了什么事情,这真是太神奇了)。

你好。问题在于类型声明不正确。一旦我修复了它(以及其他一些小的修复),它就编译并运行了测试台。谢谢
transcript on
if {[file exists rtl_work]} {
    vdel -lib rtl_work -all
}
vlib rtl_work
vmap work rtl_work

vcom -2008 -work work {core_params_types.vhd}
vcom -2008 -work work {alu.vhd}

vcom -2008 -work work {tb_alu.vhd}
vcom -2008 -work work {alu.vhd}

vsim -t 1ps -L altera -L lpm -L sgate -L altera_mf -L altera_lnsim -L cyclonev -L rtl_work -L work -voptargs="+acc"  tb_alu

add wave *
view structure
view signals
run -all
type array_1d_logic_vector is array (natural range <>) of std_logic_vector (natural range <>);
type array_1d_logic_vector is array (natural range <>) of std_logic_vector;
variable foo: array_1d_logic_vector(0 to 1)(7 downto 0);