VHDL中if循环的执行顺序问题

想问一下elsif falling_edge(clkin)then这一句下面就是cnt<=cnt+1;然后判断cnt=0是否没有意义?因为if中是顺序执行的,进入elsif判断后,cnt就会加1了,这里有点不懂了,求解答。。。

architecture behave of spi_en is

signal cnt:integer range 0 to 11;

begin
EWEN:
process(clkin,start_ewen,cnt)
begin
if start_ewen='1'then
cnt<=0;
cs<='0';
elsif falling_edge(clkin)then
cnt<=cnt+1;
if cnt=0 then
cs<='1';
di<='1';
elsif cnt=1 then
di<='0';
elsif cnt=2 then
di<='0';
elsif cnt=3 then
di<='1';
elsif cnt=4 then
di<='1';
elsif cnt>4 and cnt<10 then
di<='0';
elsif cnt>=10 and cnt<=11 then
cs<='0';
di<='0';
cnt<=11;
end if;
end if;
if start_ewen='1' then
sk<='0';
elsif cnt>=1 and cnt<=11 then
sk<=clkin;
else
sk<='0';
end if;
end process;
end behave;

cnt是个信号而不是变量,所以“cnt<=cnt+1;”之后的if语句中所判断的cnt不是+1之后的值,而是+1之前的,是上一个仿真周期结束时的值。追问

谢谢你的回头,还是有些不明白,就是cnt<=cnt+1这条语句是在之后的if语句执行后再执行的吗?还是进入了elsif falling_edge(clkin)then这条语句后,最后就会执行一次?其实把cnt<=cnt+1放在end if之前效果都是一样的?
如果cnt是变量就是按照顺序执行了吗?

追答

注意你这是在设计硬件而不是软件。信号的实际赋值不在顺序信号赋值语句之后,而是在所在的进程结束之前,具体一点说,就是在end process的时候才对信号进行实际赋值,所以在顺序信号赋值语句之后是不能马上判断出赋值之后的信号值的,此时的信号值是上一个仿真周期结束时所赋的值。
只有变量才是即时赋值的。

温馨提示:内容为网友见解,仅供参考
无其他回答

VHDL中if循环的执行顺序问题
cnt是个信号而不是变量,所以“cnt<=cnt+1;”之后的if语句中所判断的cnt不是+1之后的值,而是+1之前的,是上一个仿真周期结束时的值。

VHDL的IF语句是 IF THEN ELSIF 向上与怎么解释啊?
IF 条件1 then 满足条件1执行的代码;elsif 条件2 then 满足条件2执行的代码;(此处如果还有条件继续选择elsif,否则)else 剩余情况下执行的代码;end if;IF语句的执行是有优先性选择的,程序一进来会先判断条件1是否满足,然后是条件2,一直继续下去。看看如果还有不明白的给我发邮件吧liuyle04@gmail...

VHDL的if语句的初级问题!
IF语句是顺序语句,顺序语句应该放在进程Process中啊,可你连process都没有,肯定会报错啦。

VHDL中 怎么在确认一个条件语句之后执行多个顺序语句。
VHDL里if后的语句都是并行执行的,没有先后之分,如 A<='1';B<='0';if(C)then A<=A AND B;B<=A OR B;end if;结果A 是'0',B是'1'。非要追求顺序的话只能是B<=(A AND B) OR B;VHDL只是描述语言,不是逻辑语言

VHDL中多个if递进的问题
这不是if语句的问题。在顺序语句中如果存在判断(例如if语句),则不要用信号,而要用变量。当需要改变信号值的时候,将变量赋值给信号。

vhdl语言关于if语句的问题。
end if;else if(b'event and b='1')then if(counter="0000")then counter<="1111";else counter<=counter-'1';end if;end if;end if;end if;end process;end behav;你试试这个 我觉得 A、B是要有优先级的 不然A和B 同时产生上升延时 COUNTER是加1还是减1?这个编译通过了 没仿真 你...

VHDL非完整IF条件语句为何产生时序电路
因为非完整的IF语句,会产生锁存器:if(a==1) b<=1;如果a为1,b也会为1;之后如果a不为1的话,b都不会跟着变,而是一直保持为1,这就是带有锁存功能的触发器了。就是触发器搭出来的逻辑实现的。字数限制说不多了

VHDL 语言问题 在process里面 1 if语句块和2 case语句块两个我换下...
VHDL中的if语句和case语句都是顺序语句,因此,描述的顺序不同,对应的硬件也是不同的。这与并行语句是不一样的。

vhdl程序总有错误,怎么解决
这个写法是错误的。VHDL程序在进程里面是顺序执行的,你的原始程序可以分成 if reset='1' then c_st<=s0;end if;和 if clk='1'and clk'event then 这两个部分,if reset='1' then 这一部分其实没有起作用。c_st又需要在电平触发,有需要沿触发,这个是没办法综合,这个就是你错误的原因。...

VHDL里的 IF Count11=16#7FF# THEN是什么意思?求大神解答!感激不敬...
这是在做一个判断,如果(IF)变量Count11这个变量的数值等于16进制的数7FF,然后(THEN)才做相应的操作。16#7FF#是VHDL语言中对数值的一种表现形式,第一个#之前的数字为进制,默认为10进制,如2进制数2#1111_1111,中间下划线只为可读性。第一个#之后,第二个#之前的那个数表示的就是对应进制...

相似回答