集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 5076|回复: 11

出现这个错误“found 2 possible definitions”是为什么?

[复制链接]
linzhjbtx 发表于 2011-6-12 19:24:12 | 显示全部楼层 |阅读模式
题目要求是利用减法运算后的符号和结果来判别两个值的大小,
下面是我的源程序:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_ARITH.ALL;
ENTITY cmp8bit_2 IS
        PORT( a : IN SIGNED(7 DOWNTO 0);
                           b : IN SIGNED(7 DOWNTO 0);
                   d,e,f : OUT SIGNED(1 DOWNTO 0)  );
END ENTITY cmp8bit_2;
ARCHITECTURE one OF cmp8bit_2 IS
        SIGNAL qout : SIGNED(7 DOWNTO 0);
  BEGIN
        qout <= a - b;                                                               
                PROCESS(qout)
          BEGIN
                IF qout="00000000" THEN d <= '1';
                                           e <= '0';
                                           f <= '0';
                        ELSIF qout(7)='0' THEN  d <= '0';
                                               e <= '1';
                                                f <= '0';
                                ELSIF qout(7)='1' THEN d <= '0';
                                                      e <= '0';
                                                      f <= '1';
                                                ELSE d <= 'Z';
                                                                 e <= 'Z';
                                                         f <= 'Z';
                END IF;
        END PROCESS;
END ARCHITECTURE one;

可以解释下为什么出现下面这个错误吗?Error (10327): VHDL error at cmp8bit_2.vhd(14): can't determine definition of operator ""="" -- found 2 possible definitions
yq_dream 发表于 2011-6-13 09:42:14 | 显示全部楼层
USE IEEE.STD_LOGIC_ARITH.ALL 换成 IEEE.STD_LOGIC_UNSIGNED.ALL 试试

我看不懂代码,我刚开始学,但我帮你google了下,不知道行不
最是那低头温柔 发表于 2011-6-13 11:40:25 | 显示全部楼层
你这写了什么程序呀,VHDL中压根就没SIGNED数据类型,建议你先看看语法再说。
 楼主| linzhjbtx 发表于 2011-6-13 15:27:01 | 显示全部楼层
回复 2# yq_dream


    不行噢,SIGNED这个类型不在你说的那个程序包里面!
 楼主| linzhjbtx 发表于 2011-6-13 15:28:58 | 显示全部楼层
回复 3# 最是那低头温柔


    我找的资料书上有SIGNED和UNSIGNED这两个数据类型啊!
最是那低头温柔 发表于 2011-6-13 21:50:57 | 显示全部楼层
别扯淡了,你就用STD_LOGIC的就行。我现在就给你写段程序
最是那低头温柔 发表于 2011-6-13 21:51:07 | 显示全部楼层
别扯淡了,你就用STD_LOGIC的就行。我现在就给你写段程序
最是那低头温柔 发表于 2011-6-13 22:58:46 | 显示全部楼层
LIBRARY IEEE;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_ARITH.ALL;
use ieee.std_logic_unsigned.all;

ENTITY cmp8bit_2 IS
        PORT( a : IN STD_LOGIC_vector(7 DOWNTO 0);
                           b : IN STD_LOGIC_vector(7 DOWNTO 0);
                   d,e,f : OUT STD_LOGIC );
END ENTITY cmp8bit_2;
ARCHITECTURE one OF cmp8bit_2 IS
        SIGNAL qout : STD_LOGIC_vector(7 DOWNTO 0);
  BEGIN
        qout <= a - b;                                                               
                PROCESS(qout)
          BEGIN
                IF qout="00000000" THEN d <= '1';
                                           e <= '0';
                                           f <= '0';
                        ELSIF qout(7)='0' THEN  d <= '0';
                                               e <= '1';
                                                f <= '0';
                                ELSIF qout(7)='1' THEN d <= '0';
                                                      e <= '0';
                                                      f <= '1';
                                                ELSE d <= 'Z';
                                                                 e <= 'Z';
                                                         f <= 'Z';
                END IF;
        END PROCESS;
END ARCHITECTURE one;
yq_dream 发表于 2011-6-14 09:55:25 | 显示全部楼层
LIBRARY IEEE;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_ARITH.ALL;
use ieee.std_logic_unsig ...
最是那低头温柔 发表于 2011-6-13 22:58



    学习下,虽然看不懂,

但对照网络查找了下,至少知道了,定义下面的a,b,c....时,不能用SIGNED,要用STD_LOGIC这个

呵呵
yq_dream 发表于 2011-6-14 10:06:59 | 显示全部楼层
我又百度了下

对于楼主的问题 别个是这样说的
你在库里已经定义采用有符号型数据,就不必在数据类型重复定义

其实下面这个代码也是对的,我编译了下也是通过的(虽然我看不懂这个代码是什么意思,= =!),就是UNSIGNED换成SIGNED,
LIBRARY IEEE;
use ieee.std_logic_1164.all;
USE IEEE.STD_LOGIC_ARITH.ALL;
use ieee.std_logic_signed.all;
ENTITY cmp8bit_2 IS
        PORT( a : IN STD_LOGIC_vector(7 DOWNTO 0);
                           b : IN STD_LOGIC_vector(7 DOWNTO 0);
                   d,e,f : OUT STD_LOGIC );
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2025-6-23 13:09 , Processed in 0.117119 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表