微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 好郁闷!哪位高手不吝赐教!

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

时间:10-02 整理:3721RD 点击:
问题是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;

when others => null;

shi bushi zong he diao le

编译的时候都过了,就是仿真的时候,CIN为非‘1’或‘0’的时候,为什么没有执行
when others 这个分之?

when others 的那个分支感觉怎么是和上一个一样的?

建议你最好不要这样来使用case语句,你可以就使用一个if--else来代替这个过程.在仿真中,你的输入信号都是testbench输入了,不是0就是1.那你想要执行非0 or1的others语句,你根本就没满足它的条件,所以下面语句就不会执行了.if有关键路径优先权,而case没有

是的,这两个分支结构是一样的,就是一个是CIN触发,另一个是CLK

谢谢XCXPENG的热情帮助。
还有个问题,我用的是QUARTERS 2 来防真的,输入信号直接用信号编辑器编出来的,,,上面有‘Z’,X,H,L等非1和0的信号。那么,这样编出的和用testbench写的有什么区别呢?

最好发个图上来看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top