搜索
bottom↓
回复: 5

请教VHDL中信号赋值和变量赋值的区别。

[复制链接]

出0入0汤圆

发表于 2014-3-14 21:20:07 | 显示全部楼层 |阅读模式
本帖最后由 avrwoo 于 2014-3-14 21:23 编辑

偶然间碰到了这么一个问题,请哪位帮助解释一下。
library ieee;
use ieee.std_logic_1164.all;
entity test1 is
port(
clk,a:in std_logic;
c:out std_logic

);
end test1;
architecture bh of test1 is
--signal b,c:std_logic;

begin
process(clk)
variable b:std_logic;
begin
if clk'event and clk='1' then
b:=a;
c<=b;
end if;
end process;
end bh;


在QUARTUS7.2中。上面程序的RTL Viewer中生成的电路图是图1显示的
而把上面程序中进程的两个赋值语句颠倒一下,即
library ieee;
use ieee.std_logic_1164.all;
entity test1 is
port(
clk,a:in std_logic;
c:out std_logic

);
end test1;
architecture bh of test1 is
--signal b,c:std_logic;

begin
process(clk)
variable b:std_logic;
begin
if clk'event and clk='1' then
c<=b;
b:=a;
end if;
end process;
end bh;

在RTL viewer中生成的电路中就多了一个寄存器,如图2显示的,搜了一下信号赋值和变量赋值的特点,但是上面的原因没找到合理的解释。不知道哪位帮助给解释一下。谢谢。

本帖子中包含更多资源

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

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-3-14 21:35:44 | 显示全部楼层
本帖最后由 sky5566 于 2014-3-14 21:37 编辑

你搜一下 VHDL中,變數(Variable)與信號(Signal)的區別 .....

3.總結
在一個進程中,如果對一個信號(signal)多次賦值,那麼,只有最後一個值才是有效的。
如果對變數(variable)多次賦值,那麼每次賦值都是有效的,並且,變數的值在再次賦值之前一直保持不變。

出0入0汤圆

 楼主| 发表于 2014-3-14 21:45:37 | 显示全部楼层
sky5566 发表于 2014-3-14 21:35
你搜一下 VHDL中,變數(Variable)與信號(Signal)的區別 .....

3.總結


你说的总结里我这里都了解。问题是在第二个程序中。我先给端口赋值。即信号赋值,可以综合出一个触发器,但是第二句变量赋值,也综合出触发器。我就不理解了。变量赋值不是立即生效的吗。怎么也出来个触发器?
和第一段程序就是一个信号赋值和变量赋值的顺序。综合的电路怎么会多一个触发器呢?

出0入0汤圆

发表于 2014-3-14 21:57:53 | 显示全部楼层
本帖最后由 sky5566 于 2014-3-14 22:04 编辑
avrwoo 发表于 2014-3-14 21:45
你说的总结里我这里都了解。问题是在第二个程序中。我先给端口赋值。即信号赋值,可以综合出一个触发器, ...


if clk'event and clk='1' then
c<=b;  <<---"b"何處來?  只有 Signal 才能這樣寫吧!
....變數的值在再次賦值之前一直保持不變...

出0入0汤圆

 楼主| 发表于 2014-3-14 22:34:26 | 显示全部楼层
sky5566 发表于 2014-3-14 21:57
if clk'event and clk='1' then
c


也就是说。在c<=b,这句话之前。变量b的值是不定的,因为确定的给bf赋值,尽管在其后有b:=a,也要有寄存器保持b的值。但是信号赋值不是在进程结束之后才更新吗。也就是说虽然c<=b;在前,其值也是晚于变量赋值的。两个程序都应生成一个寄存器啊。还请给解释下。谢谢。
process(clk)
variable b:std_logic;
begin
if clk'event and clk='1' then
c<=b;
b:=a;
end if;
end process

出0入0汤圆

 楼主| 发表于 2014-3-15 08:59:28 | 显示全部楼层
自己顶一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 03:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表