VHDL COMPONENT中的unsigned 接口总是错误

比如我定义一个74163

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.numeric_bit.ALL;

ENTITY V74163 IS
PORT(LDN,CLRN,P,T,CLK: IN BIT ;
D:IN UNSIGNED(3 DOWNTO 0);
COUT:OUT BIT;
QOUT:OUT UNSIGNED(3 DOWNTO 0)
);
END V74163;
ARCHITECTURE BEHAVE OF V74163 IS
SIGNAL Q: UNSIGNED(3 DOWNTO 0);
BEGIN
QOUT<=Q;
COUT<=Q(3) AND Q(2) AND Q(1) AND Q(0) AND T;
PROCESS(CLK)
BEGIN
IF(CLK'EVENT AND CLK='1') THEN
IF CLRN='0' THEN Q<="0000";
ELSIF LDN='0' THEN Q<=D;
ELSIF (P AND T)='1' THEN Q<=Q+1;
END IF;
END IF ;
END PROCESS;
END BEHAVE;
之后将它作为component使用
引用时
COMPONENT V74163 PORT(
LDN,CLRN,P,T,CLK: IN BIT ;
D:IN UNSIGNED(3 DOWNTO 0);
COUT:OUT BIT;
QOUT:OUT UNSIGNED(3 DOWNTO 0)
);
每次到这里,quartus 都说:
object "UNSIGNED" is used but not declared

类型unsigned是在程序包std_logic_arith中声明的,所以在上面描述中的第2行之后插入USE IEEE.STD_LOGIC_ARITH.ALL;追问

还是不行,我把上面的独立出来不加arith这个库可以运行,但放到component里unsigned它就是不认识,他报错只报component里的错误(unsigned未定义),上面的未显示报错,
然后我component里的unsigned都改为bit_vector compile通过

追答

人们一般不直接引用unsigned和signed类型,而都是引用std_logic_vectoer类型。
当需要进行无符号算术运算时,就声明std_logic_unsigned程序包;而需要进行带符号算术运算时,就声明std_logic_signed程序包。所以这两个程序包通常不会同时被声明。

追问

我把port里的unsigned改为bit_vector问题就解决了,我觉得应该是component Port内部不能申明unsigned类型,具体的我查手册里关于component的内容,但是没有查到相关的,总之非常感谢

追答

谢谢采纳。我在用VHDL时,没有直接引用过unsigned类型,总是用std_logic_vector类型,没有出现过这类错误。希望今后能在百度知道平台上共同探讨学习中的问题。

温馨提示:内容为网友见解,仅供参考
无其他回答

VHDL COMPONENT中的unsigned 接口总是错误
类型unsigned是在程序包std_logic_arith中声明的,所以在上面描述中的第2行之后插入USE IEEE.STD_LOGIC_ARITH.ALL;

我写vhdl程序出了个错误,unsupported feature error:condition statement...
IF(clk='1' AND clk'EVENT) THEN tes_2<=tes_2+1;END IF;中的tes_2<=tes_2+1不对,tes_2是STD_LOGIC_VECTOR(3 DOWNTO 0)不可以直接写成+1的,应给是+‘1’还有程序最后没有end behave ;

VHDL语句中,出现的问题如下,求各位高手解决。
你在进程语句process中选择了可选项敏感信号表(clkin),同时在进程体中又使用了wait语句,这是不被VHDL语法所允许的。进程语句process中的可选项敏感信号表,其作用相当于一个隐含的wait语句。敏感信号表和wait语句,二者只能选其一!你将process(clkin)改为process就行了。

VHDLError (10500): VHDL syntax error at max.vhd(20) near text...
在VHDL中,信号(SIGNAL)表示硬件中的“连线”,而端口(PORT)是设计实体对外的连线。只有在声明端口时,才需要声明信息的流向,而声明实体内部的连线时,不要声明信息流向,因为这根连线上的信息应当既不流出实体也不流入实体。所以声明信号tmp1和tmp2时,只需声明信号的类型,而不要声明信息的流向,...

我现在用VHDL编写五人表决器,但是num_agr计数总是不对,请高手指教,程 ...
这个for循环错了:for i in 0 to 4 loop if (v_in(i)<='0') then opp:=opp+1;end if;if(v_in(i)<='1')then agr:=agr+1;end if;end loop;应该为:for i in 0 to 4 loop if (v_in(i)='0') then opp:=opp+1;elsif(v_in(i)='1')then agr:=agr+1;end if;end...

VHDL元件例化语句的问题 u1 u2总是出错
从上面的描述中看不出问题。但是,你必须将cnt10.vhd文件与cnt7.vhd文件一起放在当前工程项目路径下编译。

vhdl程序总有错误,怎么解决
这个写法是错误的。VHDL程序在进程里面是顺序执行的,你的原始程序可以分成 if reset='1' then c_st<=s0;end if;和 if clk='1'and clk'event then 这两个部分,if reset='1' then 这一部分其实没有起作用。c_st又需要在电平触发,有需要沿触发,这个是没办法综合,这个就是你错误的原因。...

VHDL中无法解决信号重复引用错误的问题?
目前按照这个程序,只能检查这些错误。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY K IS PORT(CLK , RST:IN STD_LOGIC; OI:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END K; ARCHITECTURE BAV OF K IS SIGNAL OOI,OII:STD_LOGIC_VECTOR(3 DOWNTO...

菜鸟上路,VHDL程序出错,求解答。
1.library UNISIM;use UNISIM.VComponents.all;这两个东西貌似无法使用。UNISIM是xilinx的库函数,如果你用第三方的仿真软件,就需要把xilinx的库编译进仿真软件库中 例如modelsim,xilinx软件中可以直接编译 2.怎么使用组件?这个你看看语法吧,在这没法一点点跟你介绍 3.预设的非门的端口为not,与关键字...

VHDL程序编译出错,报错can't determine definition of operator ""+...
1:将你程序中的bit_vector改为 std_logic_vector,USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL可以使得“+”两方具有不同的数据类型,但不支持bit_vector。2:USE IEEE.STD_LOGIC_UNSIGNED.ALL以及USE IEEE.STD_LOGIC_SIGNED.ALL用一个就可以了,删除了USE IEEE.STD_LOGIC...

相似回答
大家正在搜