打印

VHDL语句执行顺序请教

[复制链接]
3536|27
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
harvard83|  楼主 | 2013-5-1 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
process (DOok_Buf,FCO)  
        begin
                if (DOok_Buf='0')   then
                    P_Count<=X"000";
                elsif rising_edge(FCO)   then                                                                                               
                    P_Count<=P_Count+1;
                    if(P_Count=X"001")   then               
                        LVAL<='0';                                                               
                    else
                         LVAL<='1';       
                    end if;
                end if;
        end process;
想问下大家这个进程执行完后LVAL是1还是0啊?

相关帖子

沙发
GoldSunMonkey| | 2013-5-1 16:15 | 只看该作者
您这个有点意思,您这个程序谁也不知道执行完等于几

使用特权

评论回复
板凳
harvard83|  楼主 | 2013-5-1 16:24 | 只看该作者
GoldSunMonkey 发表于 2013-5-1 16:15
您这个有点意思,您这个程序谁也不知道执行完等于几

这个是我临时随便写的 可以把  DOok_Buf改成RST  反正就是初值为 000  然后来了一个FCO的上升沿 然后给计数加1   再去判断计数的值   是1还是0?

使用特权

评论回复
地板
GoldSunMonkey| | 2013-5-1 20:00 | 只看该作者
你想知道是这个问题啊。第一个上声沿判断是0,下个上升沿是1

使用特权

评论回复
5
harvard83|  楼主 | 2013-5-1 20:09 | 只看该作者
GoldSunMonkey 发表于 2013-5-1 20:00
你想知道是这个问题啊。第一个上声沿判断是0,下个上升沿是1

进程里面不是顺序执行吗

使用特权

评论回复
6
harvard83|  楼主 | 2013-5-1 20:25 | 只看该作者
harvard83 发表于 2013-5-1 20:09
进程里面不是顺序执行吗

我就是想请教下这个所谓的顺序执行是什么意思呢

使用特权

评论回复
7
lxAPP| | 2013-5-1 20:26 | 只看该作者
harvard83 发表于 2013-5-1 20:25
我就是想请教下这个所谓的顺序执行是什么意思呢

猴哥已经回答的很充分了。

使用特权

评论回复
8
GoldSunMonkey| | 2013-5-1 20:27 | 只看该作者
lxAPP 发表于 2013-5-1 20:26
猴哥已经回答的很充分了。

是呀,难道我这个不是顺序么??
请自己看一下VHDL语言

使用特权

评论回复
9
harvard83|  楼主 | 2013-5-1 20:43 | 只看该作者
GoldSunMonkey 发表于 2013-5-1 20:27
是呀,难道我这个不是顺序么??
请自己看一下VHDL语言

哦 是顺序执行才会先0后1
① process(clk)
② begin
③ if clk’event and clk=’1’ then
④ Ctl_areg<=Ctl_a;--产生相邻状态
⑤ if Ctl_areg=’0’ and Ctl_a=’1’ then--上跳判断
⑥ … … ; --执行相应操作
⑦ end if;
⑧ end if;
⑨ end process;
但是如果顺序执行的话会出现5吗  理解不到位啊  见笑了

使用特权

评论回复
10
GoldSunMonkey| | 2013-5-1 21:53 | 只看该作者
对呀,但是对于信号来说,必须等待 end process结束后才能赋值成功

使用特权

评论回复
11
resxpl| | 2013-5-1 22:08 | 只看该作者
猴歌回答得很对啊.
楼主并行没搞懂吧, 可以看看下面3个process, 功能完全一样.
用<=给信号赋值, 都是在时钟结束时同时赋值的. 跟process里面的并行语句顺序无关.

process (DOok_Buf,FCO)  
        begin
                if (DOok_Buf='0')   then
                    P_Count<=X"000";
                elsif rising_edge(FCO)   then                                                                                                
                    P_Count<=P_Count+1;
                    if(P_Count=X"001")   then               
                        LVAL<='0';                                                               
                    else
                         LVAL<='1';        
                    end if;
                end if;
        end process;

process (DOok_Buf,FCO)  
        begin
                if (DOok_Buf='0')   then
                    P_Count<=X"000";
                elsif rising_edge(FCO)   then                                                                                                
if(P_Count=X"001")   then               
                        LVAL<='0';                                                               
                    else
                         LVAL<='1';        
                    end if;
P_Count<=P_Count+1;
end if;
        end process;

process (DOok_Buf,FCO)  
        begin
                if (DOok_Buf='0')   then
                    P_Count<=X"000";
                elsif rising_edge(FCO)   then                                                                                                
P_Count<=P_Count+1;
P_Count<=P_Count+1;
P_Count<=P_Count+1;
if(P_Count=X"001")   then               
                        LVAL<='0';                                                               
                    else
                         LVAL<='1';        
                    end if;
end if;
        end process;





使用特权

评论回复
12
GoldSunMonkey| | 2013-5-1 22:11 | 只看该作者
resxpl 发表于 2013-5-1 22:08
猴歌回答得很对啊.
楼主并行没搞懂吧, 可以看看下面3个process, 功能完全一样.
用 ...

;P

使用特权

评论回复
13
harvard83|  楼主 | 2013-5-1 22:54 | 只看该作者
resxpl 发表于 2013-5-1 22:08
猴歌回答得很对啊.
楼主并行没搞懂吧, 可以看看下面3个process, 功能完全一样.
用 ...

第一:都是时钟结束后生效。 第二:重复赋值最后一次生效。
那所谓的顺序只是顺序描述了 不能算顺序执行吧?

使用特权

评论回复
14
resxpl| | 2013-5-1 22:58 | 只看该作者
一般仅仅是<=赋值时才需要考虑并行.
如果是variable赋值, 就是按照书写顺序执行的.

使用特权

评论回复
15
harvard83|  楼主 | 2013-5-1 23:00 | 只看该作者
resxpl 发表于 2013-5-1 22:58
一般仅仅是

哦 学习中。。。

使用特权

评论回复
16
mjc4404| | 2013-5-2 01:19 | 只看该作者
不妨借助modelsim跑一下试试.

使用特权

评论回复
17
金则立则翔| | 2013-5-2 13:19 | 只看该作者
只要看到仿真的结果,然后结合理论去分析,才能够更深入的理解。

使用特权

评论回复
18
HORSE7812| | 2013-5-2 14:19 | 只看该作者
好贴

使用特权

评论回复
19
entepino| | 2013-5-2 18:27 | 只看该作者
GoldSunMonkey 发表于 2013-5-1 16:15
您这个有点意思,您这个程序谁也不知道执行完等于几

猴哥,好像这个第一个脉冲是1,第二个脉冲是0(不来DOok_Buf信号的话)。

使用特权

评论回复
20
GoldSunMonkey| | 2013-5-2 21:07 | 只看该作者
harvard83 发表于 2013-5-1 22:54
第一:都是时钟结束后生效。 第二:重复赋值最后一次生效。
那所谓的顺序只是顺序描述了 不能算顺序执行 ...

当然要算顺序了。
一共两种方式,一种顺序,一种并行,你说这是哪一种呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

43

主题

201

帖子

1

粉丝