搜索
bottom↓
回复: 19

VHDL菜鸟问题,求高手解答!

[复制链接]

出0入0汤圆

发表于 2012-3-7 09:27:50 | 显示全部楼层 |阅读模式
entity test is
        generic (depth: integer :=4;
                 width: integer :=8);
    Port ( clk : in  STD_LOGIC;
         rst : in  STD_LOGIC;
           din : in  STD_LOGIC_VECTOR(width-1 downto 0);
           dout : out  STD_LOGIC_VECTOR(width-1 downto 0));
end test;

architecture Behavioral of test is
        signal a,b:STD_LOGIC_VECTOR (depth-1 downto 0);
begin
        PROCESS(clk)
        begin
                if(clk'event and clk='1')then
                        if(a=b)then
                                dout <= din;
                        end if;
                end if;
        end process;
       
        PROCESS(clk,rst)
        begin
                if(rst= '1')then
                        a <= (others=>'0');
                        b <= (others=>'1');
                elsif(clk'event and clk='1')then
                        a <= a+1;
                        b <= b-1;
                end if;
        end process;

end Behavioral;
这是一个测试语法的代码,为什么编译老是提示if(a=b)then这句话有问题,把他改成if(a(0)=b(0) and a(1)=b(1) and a(2)=b(2) and a(3)=b(3))then就可以啦,这是为什么啊?求高手指点!感激不尽~~
错误提示:ERROR:HDLCompiler:607 - "E:\VHDL_program_test\test1\test.vhd" Line 48: Multiple declarations of "=" included via multiple use clauses; none are made directly visible

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-3-7 09:36:26 | 显示全部楼层
难道if里面不能直接两个STD_LOGIC_VECTOR进行比较?我试过如果用integer类型的就可以用~~

出0入0汤圆

 楼主| 发表于 2012-3-7 10:17:27 | 显示全部楼层
顶一下,在线等高手~~~
if()里面不能使std_logic_vector吗?

出0入0汤圆

发表于 2012-3-7 12:40:08 | 显示全部楼层
问下加法能用在std_logic_vector类型吗

出0入0汤圆

发表于 2012-3-7 13:14:18 | 显示全部楼层
应该没有问题啊,库包含了没有?

出0入0汤圆

 楼主| 发表于 2012-3-7 14:51:41 | 显示全部楼层
回复【4楼】zkf0100007
-----------------------------------------------------------------------

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_signed.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
use IEEE.STD_LOGIC_arith.ALL;
我觉得这应该算包含了吧~~~该有的都有了!

出0入0汤圆

 楼主| 发表于 2012-3-7 14:53:25 | 显示全部楼层
回复【3楼】nuaatao
-----------------------------------------------------------------------

确实我之前就试验啦,再定义一个和a,b一样的信号,然后
c <= a + b;
这样也有问题,而且原因是一样的!
ERROR:HDLCompiler:607 - "E:\VHDL_program_test\test1\test.vhd" Line 49: Multiple declarations of "+" included via multiple use clauses; none are made directly visible
但是还是不知道怎么解决~!

出0入0汤圆

 楼主| 发表于 2012-3-7 14:57:46 | 显示全部楼层
回复【3楼】nuaatao
-----------------------------------------------------------------------

包含了use IEEE.STD_LOGIC_signed.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
这两个库后,这两个库里面包含一些函数,使得STD_LOGIC_VECTOR类型的数据可以进行算术运算!

出0入0汤圆

发表于 2012-3-7 14:58:37 | 显示全部楼层
a=b是赋值语句,a==b才是判断,C语言新手常见错误。不过在C语言里面这种错误编译的时候是检查不出来的,往往结果跟预期不一样才发现,编译器把它当作真来处理。

出0入0汤圆

 楼主| 发表于 2012-3-7 15:33:15 | 显示全部楼层
回复【8楼】s200661524
-----------------------------------------------------------------------

。。。。。。。。我用的是VHDL~~~~

出0入0汤圆

 楼主| 发表于 2012-3-7 15:35:25 | 显示全部楼层
刚刚发现了一个解决方法,那就是去掉库use IEEE.STD_LOGIC_signed.ALL; 那样就没错误啦,
库声明用这三个:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_unsigned.ALL;
use IEEE.STD_LOGIC_arith.ALL;



我得再去找找use IEEE.STD_LOGIC_signed.ALL; 库里面是什么限制住啦。。。。

出0入0汤圆

 楼主| 发表于 2012-3-7 16:10:02 | 显示全部楼层
发现这些库文件都打不开,用ISE打开是乱码,是加密啦吗,还是什么的
有高手有高招吗?

出0入0汤圆

发表于 2012-3-7 16:27:53 | 显示全部楼层
这两个库的作用都是:可以让std_logic_vector类型的信号可以进行加减运算;不同之处在于std_logic_unsigned将std_logic_vector信号视为无符号数的运算;而std_logic_signed则是将std_logic_vector信号的运算视为有符号数的运算。两个库应该不能同时加吧?

出0入0汤圆

 楼主| 发表于 2012-3-7 17:27:15 | 显示全部楼层
回复【13楼】bityoung
-----------------------------------------------------------------------

应该是这样的~~~

出0入0汤圆

发表于 2012-3-7 19:16:12 | 显示全部楼层
回复【14楼】tongluren
回复【13楼】bityoung  
-----------------------------------------------------------------------
应该是这样的~~~
-----------------------------------------------------------------------

俺还是正确的,哈哈

出0入55汤圆

发表于 2012-3-8 09:25:17 | 显示全部楼层
去掉use IEEE.STD_LOGIC_signed.ALL;

出0入55汤圆

发表于 2012-3-8 09:25:48 | 显示全部楼层
原来有答案了。。。。

出0入0汤圆

 楼主| 发表于 2012-3-8 10:02:44 | 显示全部楼层
回复【16楼】jssd 龙
去掉use ieee.std_logic_signed.all;
-----------------------------------------------------------------------

求解释~~~?为什么啊!

出0入55汤圆

发表于 2012-3-9 23:57:23 | 显示全部楼层
回复【18楼】tongluren  
回复【16楼】jssd 龙
去掉use ieee.std_logic_signed.all;
-----------------------------------------------------------------------
求解释~~~?为什么啊!
-----------------------------------------------------------------------

不知道。只是我也遇到过这种情况..
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 11:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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