收藏 分销(赏)

顺序语句和并行语句.doc

上传人:xrp****65 文档编号:7413612 上传时间:2025-01-03 格式:DOC 页数:4 大小:51.50KB 下载积分:10 金币
下载 相关 举报
顺序语句和并行语句.doc_第1页
第1页 / 共4页
顺序语句和并行语句.doc_第2页
第2页 / 共4页


点击查看更多>>
资源描述
顺序语句与并行语句中你应该知道的  2007-11-13 22:18 顺序语句是指仿真角度看,每一条语句的执行是按书写顺序进行的。顺序语句只能在进程、函数、过程内部使用。 VHDL有一下几种基本顺序语句:变量赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句。常用的顺序语句有if_then_else,case_when,loop_for等。 并行语句是硬件描述语言与编写软件程序的最大区别所在,所有并行语句在结构体中的执行都是同时进行,即它们的执行与语句书写的顺序无关。这种并行性是由硬件本身的并行性所决定的,即一旦电路接通电源,他的各部分就会按照事先设计好的方案同时工作。 VHDL有一下几种主要并行语句:进程语句、块语句、并行信号赋值语句、元件例化语句、生成语句、并行过程调用语句。 大家要注意,把进程语句(process)当作并行语句,是因为进程与进程间的执行是并行的(一个architecture里的不同process是同时执行的)。但进程内部是顺序执行的,大家千万不要因为进程语句是并行语句就误认为是同时执行的。 本人刚开始学习时也困惑过一阵,为什么有些有些顺序语句在实际使用时却表现出“并行特性“。这有两个程序和大家分享一下使大家少走弯路。 程序(1) library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity test is port (clk,reset:in std_logic ); end test; architecture Behavioral of test is signal a,b:integer range 0 to 7; begin process(reset,clk) begin if reset='1' then a<=1; b<=0; elsif rising_edge(clk) then if a=1 then --(a) b<=3; --(a) end if; --(a) if b=3 then --(b) a<=6; --(b) end if; --(b) end if; end process; end Behavioral; 程序(2)library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; ---- Uncomment the following library declaration if instantiating ---- any Xilinx primitives in this code. --library UNISIM; --use UNISIM.VComponents.all; entity test is port (clk,reset:in std_logic ); end test; architecture Behavioral of test is signal a,b:integer range 0 to 7; begin process(reset,clk) begin if reset='1' then a<=1; b<=0; elsif rising_edge(clk) then if b=3 then --(b) a<=6; --(b) end if; --(b) if a=1 then --(a) b<=3; --(a) end if; --(a) end if; end process; end Behavioral; 可以说两个程序几乎一样,只是将a if_then语句 和 b if_then 语句整体调换位置颠倒。但前面提到if_then_else语句是顺序语句,执行会受语句顺序影响,即两个程序执行结果不一样。但仿真发现,进程1与进程2 的结果是一模一样波形如下图。本人当时很困惑,后来看了一些书,查了一些相关资料,找到了原因也就是我上一篇博客中提到的:信号的赋值语句即是被执行,也不会是信号立即发生代入,下一条语句执行时,仍然使用原来的信号值。 查阅一些资料,可知实践证明:一个进程中,如果没有变量的存在,可以将进程内的语句视为并行执行,即书写顺序不影响结果。如进程中存在变量,则进程表现出顺序性,但信号的代入语句仍是在进程被挂起时同时执行的。大家可以多写些变量和信号混合的进程然后仿真加深理解。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服