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

想问一下elsiffalling_edge(clkin)then这一句下面就是cnt<=cnt+1;然后判断cnt=0是否没有意义?因为if中是顺序执行的,进入elsif... 想问一下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;
展开
 我来答
nereus78e904
2016-05-14 · TA获得超过1.5万个赞
知道大有可为答主
回答量:5463
采纳率:90%
帮助的人:1979万
展开全部
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的时候才对信号进行实际赋值,所以在顺序信号赋值语句之后是不能马上判断出赋值之后的信号值的,此时的信号值是上一个仿真周期结束时所赋的值。
只有变量才是即时赋值的。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式