第五讲-VHDL数据对象及属性课件.ppt
《第五讲-VHDL数据对象及属性课件.ppt》由会员分享,可在线阅读,更多相关《第五讲-VHDL数据对象及属性课件.ppt(64页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 1lVHDLVHDL处理处理静态数据静态数据的两种对象:的两种对象:constconst和和genericgeneric。lVHDLVHDL处理处理非静态数据非静态数据的两种对象:的两种对象:信号和变量信号和变量。l常量和信号是全局的,既可以用于顺序代码,也可常量和信号是全局的,既可以用于顺序代码,也可用于并发代码;用于并发代码;l变量只能在顺序代码中使用,相对于信号而言,变变量只能在顺序代码中使用,相对于信号而言,变量只能是局部的,所以变量值不能传递到量只能是局部的,所以变量值不能传递到processprocess、functio
2、nfunction和和procedureprocedure外部。外部。l但是,在有些情况下,选择信号还是变量却是比较但是,在有些情况下,选择信号还是变量却是比较难以抉择的。难以抉择的。信号信号(Signal)(Signal)和变量和变量(Variable)(Variable)。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 2n 常量常量用于确定默认值,语法结构:用于确定默认值,语法结构:CONST 常量名:常量名:type:=值值;例子:例子:CONST set_bit:BIT:=1;CONST datamemory:memory:=(0,0,1,1),0,0,1,1);常量可
3、以在包集、实体或结构体中声明:常量可以在包集、实体或结构体中声明:包集中:全局;包集中:全局;实体中:对该实体内的所有结构体而言是全局的;实体中:对该实体内的所有结构体而言是全局的;结构体中:结构体内是全局的。结构体中:结构体内是全局的。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 3n 信号信号VHDLVHDL中中信号信号代表电路单元、功能模块间的硬件连线,代表电路单元、功能模块间的硬件连线,也可表示电路单元的也可表示电路单元的IN/OUTIN/OUT端口;端口;实体的所有端口都默认为信号,语法结构:实体的所有端口都默认为信号,语法结构:Signal 信号名:type ran
4、ge:=初始值;注意:注意:当信号用于顺序描述语句如当信号用于顺序描述语句如processprocess中中时,其值时,其值不是立刻更新的不是立刻更新的;只有当其所在的;只有当其所在的processprocess、函数或过程、函数或过程完成之后才进行更新完成之后才进行更新。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 4信号的赋值符号:信号的赋值符号:=注意注意1:对信号赋初值的操作是不可综合的,通常只用于对信号赋初值的操作是不可综合的,通常只用于 仿真。仿真。例如:例如:signal control:BIT:=0;注意注意2:不要对同一个信号进行多重赋值不要对同一个信号进行多
5、重赋值。(。(buffer模式的模式的端口信号除外!)端口信号除外!)例如:例如:process(.).for i IN 0 TO 10 LOOP control=control+1;-error!或最后一次有效!或最后一次有效!.第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 5例例1 1“1 1”计数器计数器功能描述:功能描述:计算一个二进制矢量中计算一个二进制矢量中1的个数的个数din7:0one2:0第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 6实现代码:-错误使用信号的例子 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.al
6、l;ENTITY count_ones iS PORT(din:IN std_logic_vector(0 to 7);ones:OUT integer range 0 to 8);END count_ones;ARCHITECTURE not_ok OF count_ones IS signal temp:integer range 0 to 8;BEGIN process(din)BEGIN temp=0;FOR i IN 0 TO 7 LOOP IF(din(i)=1)then temp=temp+1;END if;END LOOP;ones=temp;END process;END n
7、ot_ok;进程结束后才更新进程结束后才更新第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 7两种代码更正方法:两种代码更正方法:1、使用变量来记录中间值,可以将、使用变量来记录中间值,可以将signal temp.改为改为variable temp.;同时修改相应;同时修改相应的的赋值语句赋值语句;2、取消、取消temp,同时将端口信号,同时将端口信号ones重新定重新定义为:义为:ones:BUFFER integer range 0 to 8;使得使得ones可以被内部调用。可以被内部调用。在进程结束后,在进程结束后,ones值将被更新。值将被更新。(编码风格不好,不提倡编
8、码风格不好,不提倡此种方式!此种方式!)第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 8n 变量变量(variable)(variable)变量代表电路单元内部的操作,代表暂存的临时数变量代表电路单元内部的操作,代表暂存的临时数据。与信号和常量相比,据。与信号和常量相比,变量仅用于局部的电路描变量仅用于局部的电路描述,只能用于进程、函数和过程内部述,只能用于进程、函数和过程内部。注意注意:对变量的赋值是立即生效的,无需等待进程对变量的赋值是立即生效的,无需等待进程结束结束。新的值可以在下一行代码中立即使用。新的值可以在下一行代码中立即使用。变量的赋值符号变量的赋值符号“:=”,
9、语法结构:,语法结构:variable 变量名:变量名:type range:=初始值初始值;注意:注意:对变量赋初值的操作也是不可综合的,通常只用于仿真对变量赋初值的操作也是不可综合的,通常只用于仿真。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 9例:“1”计数器的实现代码:LIBRARY ieee;USE ieee.std_logic_1164.all;entity count_ones is port(din:IN std_logic_vector(0 to 7);ones:OUT integer range 0 to 8);end count_ones;archite
10、cture ok of count_ones isbeginprocess(din)variable temp:integer range 0 to 8;begin temp:=0;FOR i IN 0 TO 7 LOOP IF(din(i)=1)then temp:=temp+1;END if;END LOOP;ones=temp;end process;end ok;变量的赋值是立即生效变量的赋值是立即生效第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 OK!Not OK?第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 11n 信号和变量的比较信号和变量的比较赋
11、值方式的不同赋值方式的不同:变量变量:=表达式;表达式;信号信号 =表达式;表达式;硬件实现的功能不同:硬件实现的功能不同:信号信号代表电路单元、功能模块间的互联,代表电路单元、功能模块间的互联,代表实际的硬件连线;代表实际的硬件连线;变量变量代表电路单元内部的操作,代表暂代表电路单元内部的操作,代表暂存存的临时数据。的临时数据。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 12有效范围的不同:有效范围的不同:信号:信号:程序包、实体、结构体;全局量。程序包、实体、结构体;全局量。变量:变量:进程、子程序;局部量。进程、子程序;局部量。ARCHITECTURE SIGNAL D
12、eclarationslabel1:PROCESSVARIABLE Declarationslabel2:PROCESSVARIABLE Declarations第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 13 赋值行为的不同:赋值行为的不同:信号信号赋值延迟更新数值、时序电路;赋值延迟更新数值、时序电路;变量变量赋值立即更新数值、组合电路。赋值立即更新数值、组合电路。信号的多次赋值信号的多次赋值 a.a.一个进程:最后一次赋值有效一个进程:最后一次赋值有效 b.b.多个进程:多源驱动多个进程:多源驱动,线与、线与、线或、三态线或、三态 第第5 5讲讲 VHDLVHDL数据对
13、象及属性数据对象及属性 14例:信号的多次赋值例:信号的多次赋值 architecture rtl of ex is signal a:std_logic;begin process()begin a=b;a=c;end process;end rtl;architecture rtl of ex is signal a:std_logic;begin process()begin a=b;end process;process()begin a=c;.end process;end ex;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 15例:信号赋值与变量赋值的比较例:信号赋
14、值与变量赋值的比较 信号赋值:信号赋值:architecture rtl of sig isarchitecture rtl of sig is signal a,b:std_logic;-signal a,b:std_logic;-定义信号定义信号 begin begin process(a,b)process(a,b)begin begin a=b;a=b;b=a;b=a;end process;end process;end rtl;-end rtl;-结果是结果是 a a 和和 b b 的值互换的值互换第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 16 变量赋值变量赋值
15、 architecture rtl of var isarchitecture rtl of var is begin begin process process variable a,b:std_logic;-variable a,b:std_logic;-定义变量定义变量 begin begin a:=b;a:=b;b:=a;b:=a;end process;end process;end rtl;end rtl;-结果是结果是a a和和b b的值都等于的值都等于b b的初值的初值 第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 17例:变量赋值实现循环语句功能例:变量赋值实
16、现循环语句功能 process(indicator,sig)process(indicator,sig)variable temp:std_logic;variable temp:std_logic;begin begin temp:=temp:=0 0;for i in 0 to 3 loop for i in 0 to 3 loop temp:=temp xor(sig(i)and temp:=temp xor(sig(i)and indicator(i);indicator(i);end loop;end loop;output=temp;output=temp;end process;
17、end process;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 18以上语句等效为:process(indicator,sig)process(indicator,sig)variable temp:std_logic;variable temp:std_logic;beginbegin temp:=temp:=0 0;temp:=temp xor(sig(0)and indicator(0);temp:=temp xor(sig(0)and indicator(0);temp:=temp xor(sig(1)and indicator(1);temp:=temp xor
18、(sig(1)and indicator(1);temp:=temp xor(sig(2)and indicator(2);temp:=temp xor(sig(2)and indicator(2);temp:=temp xor(sig(3)and indicator(3);temp:=temp xor(sig(3)and indicator(3);output=temp;output=temp;end process;end process;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 19如改为信号,则无法实现原功能:如改为信号,则无法实现原功能:signal temp:s
19、td_logic;signal temp:std_logic;process(indicator,sig,temp)process(indicator,sig,temp)begin begin temp=temp=0 0;temp=temp xor(sig(0)and indicator(0);temp=temp xor(sig(0)and indicator(0);temp=temp xor(sig(1)and indicator(1);temp=temp xor(sig(1)and indicator(1);temp=temp xor(sig(2)and indicator(2);temp
20、=temp xor(sig(2)and indicator(2);temp=temp xor(sig(3)and indicator(3);temp=temp xor(sig(3)and indicator(3);output=temp;output=temp;end process;end process;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 20例3:多路复用器的对比设计 方案一:使用信号(not OK)LIBRARY ieee;USE ieee.std_logic_1164.all;entity mux is port(a,b,c,d,s0,s1:IN std_l
21、ogic;y:OUT std_logic);end mux;architecture not_ok of mux is signal sel:integer range 0 to 3;begin 值不能立即更新,不能在值不能立即更新,不能在process的其它代码中继续使用的其它代码中继续使用不能进行同一信号的多次不能进行同一信号的多次赋值,要么出错,要么赋值,要么出错,要么“线与线与”,要么只考虑最后,要么只考虑最后一次赋值,取决于编译器一次赋值,取决于编译器process(a,b,c,d,s0,s1)begin sel=0;if(s0=1)then sel=sel+1;end if;if(
22、s1=1)then selyyyyyyyy=d;end case;end process;end ok;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 22例例5.1.4 5.1.4 带带q q和和qbarqbar的的DFFDFF DFFqdclkqbar功能描述:功能描述:D触发器触发器 qbar为为q的反相输出端。的反相输出端。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 23方案方案1:not_ok-library ieee;use ieee.std_logic_1164.all;-entity dff is port(d,clk:IN std_logic;
23、q:BUFFER std_logic;qbar:OUT std_logic);end dff;-architecture not_ok of dff is begin process(clk)begin if(clkevent AND clk=1)then q=d;qbar=NOT q;end if;end process;end not_ok;-方案方案2:ok-library ieee;use ieee.std_logic_1164.all;-entity dff is port(d,clk:IN std_logic;q:BUFFER std_logic;qbar:OUT std_logi
24、c);end dff;-architecture ok of dff is begin process(clk)begin if(clkevent AND clk=1)then q=d;end if;end process;qbar=NOT q;end mux2;-q值在process之后更新,引起qbar的同步更新q不能立即更新,导致qbar值将延后一个时钟周期buffer类型输出信号可供内部电路使用第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 Not okOK第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 25u分频器分频器功能描述功能描述:对时钟进行:对时钟
25、进行6 6分频;分频;设计要点设计要点:两个输出,一个基于:两个输出,一个基于信号信号,另一个,另一个基于基于变量变量。分频器分频器fclkfclk/6第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 26实现代码:LIBRARY ieee;USE ieee.std_logic_1164.all;entity freq_divider is port(clk:IN std_logic;out1,out2:BUFFER std_logic);end freq_divider;architecture example of freq_divider is SIGNAL count1:i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 VHDL 数据 对象 属性 课件
限制150内