在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1929|回复: 2

大家看看那里错了 vhdl 程序

[复制链接]
发表于 2007-5-25 15:29:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity speed is
port (fp,reset:in std_logic;
speed0,speed1:buffer std_logic_vector(3 downto 0);
speed2,speed3:buffer std_logic_vector(3 downto 0));  
end speed;               
architecture behave of speed is
signal c1,c2,c3:std_logic;
begin
spd0:process(reset,fp)
   begin
       if reset= '1' then
         speed0<="0000"; speed1<="0000";
         speed2<="0000"; speed3<="0000";
         c1<='0'; c2<='0'; c3<='0';
       elsif (fp'event and fp='1') then
           if speed0="1001" then
               speed0<="0000"; c1<='1';
           else speed0<=speed0+1; c1<='0';
           end if;
       end if;
end process spd0;
spd1:process(c1)
   begin
      if (c1'event and c1='1') then
          if speed1="1001" then
               speed1<="0000"; c2<='1';
          else speed1<=speed1+1; c2<='0';
         end if;
      end if;
end process spd1;
spd2:process(c2)
begin
if (c2'event and c2='1') then
if speed2="1001" then
speed2<="0000"; c3<='1';
else speed2<= speed2+1; c3<='0';
end if;
end if;
end process spd2;
spd3: process (c3)
         begin
     if (c3'event and c3='1') then
       if speed3="1001" then
speed3<="0000";
else speed3<=speed3+1;
end if;
end if;
end process spd3;
end behave;


仿真说是有多个源 不知道什么原因 请那位高手检查修改以下
谢谢
发表于 2007-5-30 18:00:52 | 显示全部楼层
哈哈,程序写的太不好读了。

你的错误是这个原因:举其中一个例子:

你在block sp0中 对speed1 进行了赋值;
   然后你又在spd1中对 speed1 又进行了赋值;

所以你编译的时候会出错:speed1有多个源。   

修改方法: 把所有对speed1赋值的操作放在一个process 里面。
发表于 2007-5-31 13:47:16 | 显示全部楼层
spd0:process(reset,fp)
   begin
       if reset= '1' then
         speed0<="0000"; speed1<="0000";
         speed2<="0000"; speed3<="0000";
         c1<='0'; c2<='0'; c3<='0';
       elsif (fp'event and fp='1') then
           if speed0="1001" then
               speed0<="0000"; c1<='1';
           else speed0<=speed0+1; c1<='0';
           end if;
       end if;
end process spd0;


speed1, speed2, speed3在其它process中再次赋值,可以把此处的reset复位分别加到其它process中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-17 09:46 , Processed in 0.027652 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表