VHDL变量与信号的差异分析及实例文档格式.docx
《VHDL变量与信号的差异分析及实例文档格式.docx》由会员分享,可在线阅读,更多相关《VHDL变量与信号的差异分析及实例文档格式.docx(24页珍藏版)》请在冰豆网上搜索。
信号赋值延时更新数值,一般生成时序电路
变量赋值立即更新数值,一般生成组合电路
1.5信号的多次赋值
a,一个进程中:
仅最后一次赋值有效
b,多个进程中:
称为多源驱动(如总线结构)
能综合成硬件电路的多源驱动有三种:
线与,线或,三态
2.变量与信号的比较实例
2.1信号的仿真
ARCHITECTURE
rtlOFsigIS
SIGNALa,b:
STD_LOGIC;
--定义信号
BEGIN
PROCESS(a,b)
BEGIN
a<
=b;
b<
=a;
ENDPROCESS;
ENDrtl;
由于信号赋值的延时性(赋新值发生在进程结束时),所以结果是a,b的值互换
------------------------testbench--------------------
LIBRARYieee;
USEieee.std_logic_1164.all;
--------------------------------------------
ENTITYtestbenchIS
ENDtestbench;
architecturemtestoftestbenchis
componentsigIS
PORT(clk,rst:
INstd_logic;
din1,din2:
instd_logic_vector(3downto0);
dout1,dout2:
outstd_logic_vector(3downto0));
ENDcomponent;
signalclk:
std_logic:
='
0'
;
signalrst:
std_logic;
signaldin1,din2:
std_logic_vector(3downto0);
signaldout1,dout2:
std_logic_vector(3downto0);
constantclkpd:
time:
=20ns;
begin
clk<
=notclkafterclkpd/2;
process
rst<
1'
din1<
="
0111"
din2<
1010"
waitfor40ns;
wait;
endprocess;
sig_0:
sig
PORTmap(clk=>
clk,rst=>
rst,din1=>
din1,din2=>
din2,dout1=>
dout1,dout2=>
dout2);
endmtest;
-------------------------------------------signal------------------------------------------
ENTITYsigIS
ENDsig;
ARCHITECTURErtlOFsigIS
PROCESS(clk,rst)
BEGIN
if(rst='
)then
a<
=din1;
b<
=din2;
elsif(clk'
eventandclk='
a<
b<
endif;
ENDPROCESS;
dout1<
=a;
dout2<
=b;
--------------------------------------------------------------simulationresults-------------------
------------------------------------------------synthesisresults---------------------------
A和B都综合出寄存器;
A寄存器的输出接至B寄存器的输入;
B寄存器的输出接至A寄存器的输入;
2.2变量的仿真
ARCHITECTURErtlOFvarIS
PROCESS
VARIABLEa,b:
--定义变量
a:
b:
由于变量赋值的立即更新,所以结果是a和b的值均为b
------------------------------------------variable------------------------------
LIBRARYieee;
variablea,b:
--?
?
a:
b:
a:
b:
------------------------------------simulationresults-------------------
A综合出寄存器,B没有被综合出寄存器;
3.状态机中的变量和信号
3.1状态机中的赋值采用信号来进行
--------------------------------------------
ENTITYstring_detectorIS
PORT(d,d2,clk,rst:
q:
OUTstd_logic);
ENDstring_detector;
ARCHITECTUREmy_archOFstring_detectorIS
TYPEstateIS(zero,one,two,three);
SIGNALpr_state,nx_state:
state;
signalt1,t2:
-----Lowersection:
--------------------
PROCESS(rst,clk)
IF(rst='
)THEN
pr_state<
=zero;
ELSIF(clk'
EVENTANDclk='
=nx_state;
ENDIF;
----------Uppersection:
---------------
PROCESS(d,pr_state)
--variabletemp:
t1<
=d;
CASEpr_stateIS
WHENzero=>
IF(d='
)THENnx_state<
=one;
ELSEnx_state<
WHENone=>
=dxord2;
=two;
WHENtwo=>
=dandd2;
=three;
WHENthree=>
ENDCASE;
q<
=t1;
ENDmy_arch;
-----------------------------synthesisresults---------------
由图可见,由于状态机会综合出寄存器,所以t1这个寄存器被状态机中的寄存器代替了;
如果在状态机中采用信号来赋值,那么结果应该是一样的;
3.2状态机中的赋值采用信号来进行