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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2055|回复: 8

好郁闷!!哪位高手不吝赐教!

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

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

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

x
问题是CASE 语句在仿真时,,当CIN为1或0时会执行第一个分支,但CIN不为1或0时并没有执行
others那个分支,为什么呢??好郁闷那,希望高手不吝赐教!!

library ieee ;
use ieee.std_logic_1164.all;

entity count8 is
port(result_o :             out integer range 0 to 256:=0 ;
     cin,sel,gate,clk:      in std_logic;
         cout:              out std_logic);
end count8;

architecture count8_behav of count8 is
begin
process(clk,gate,cin)   
variable counter:integer range 0 to 256:=0;
variable x      :integer range 0 to 256:=0;

begin
if sel='1' then
            
   if gate='1' then  


      case cin is                                                              --case 语句   
           when '1'|'0'=>  
               if((cin'event) and (cin='1') )then
                  counter:=counter+1;
                                            x:=counter;
                   if counter=256 then
                       cout<='0'; ---creating a plus.
                       counter:=0;
                       x:=counter;            
                    else
                       cout<='1';
                    end if;
               end if;


when others =>                         -----问题是cin不为‘1’或‘0’时,他为什么不执行下面的分支??
                 if((clk'event) and (clk='1' )  )then
                    counter:=counter+1;
                                            x:=counter;
                    if counter=256 then ---creating a pulse.
                       cout<='0';
                       counter:=0;
                        x:=counter;
                    else
                       cout<='1';

                    end if;
                 end if;

       end case;


else
          result_o<=x;

          counter:=0;
         
    end if;
end if;
end process;
end count8_behav;

[ 本帖最后由 XMUSZQ 于 2007-5-13 15:12 编辑 ]
发表于 2007-5-12 22:15:50 | 显示全部楼层
when others => null;
发表于 2007-5-13 10:43:46 | 显示全部楼层
shi bushi zong he diao le
 楼主| 发表于 2007-5-13 15:18:42 | 显示全部楼层
编译的时候都过了,就是仿真的时候,CIN为非‘1’或‘0’的时候,为什么没有执行
when others 这个分之??
发表于 2007-5-13 19:47:55 | 显示全部楼层
when others 的那个分支感觉怎么是和上一个一样的?
发表于 2007-5-14 16:55:12 | 显示全部楼层
建议你最好不要这样来使用case语句,你可以就使用一个if--else来代替这个过程.在仿真中,你的输入信号都是testbench输入了,不是0就是1.那你想要执行非0 or1的others语句,你根本就没满足它的条件,所以下面语句就不会执行了.if有关键路径优先权,而case没有
 楼主| 发表于 2007-5-14 18:26:46 | 显示全部楼层


原帖由 lycokl 于 2007-5-13 19:47 发表
when others 的那个分支感觉怎么是和上一个一样的?




是的,这两个分支结构是一样的,就是一个是CIN触发,另一个是CLK
 楼主| 发表于 2007-5-14 18:58:51 | 显示全部楼层


原帖由 xcxpeng 于 2007-5-14 16:55 发表
建议你最好不要这样来使用case语句,你可以就使用一个if--else来代替这个过程.在仿真中,你的输入信号都是输入了,不是0就是1.那你想要执行非0 or1的others语句,你根本就没满足它的条件,所以下面语句就不 ...






谢谢XCXPENG的热情帮助
还有个问题,我用的是QUARTERS 2 来防真的,输入信号直接用信号编辑器编出来的,,,上面有‘Z’,X,H,L等非1和0的信号。那么,这样编出的和用testbench写的有什么区别呢??
发表于 2007-5-15 12:14:25 | 显示全部楼层
最好发个图上来看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-17 06:52 , Processed in 0.025510 second(s), 8 queries , Gzip On, Redis On.

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