第五讲-VHDL数据对象及属性课件.ppt

上传人(卖家):三亚风情 文档编号:2263299 上传时间:2022-03-27 格式:PPT 页数:64 大小:1.08MB
下载 相关 举报
第五讲-VHDL数据对象及属性课件.ppt_第1页
第1页 / 共64页
第五讲-VHDL数据对象及属性课件.ppt_第2页
第2页 / 共64页
第五讲-VHDL数据对象及属性课件.ppt_第3页
第3页 / 共64页
第五讲-VHDL数据对象及属性课件.ppt_第4页
第4页 / 共64页
第五讲-VHDL数据对象及属性课件.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

1、第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 1l VHDLVHDL处理处理静态数据静态数据的两种对象:的两种对象:constconst和和genericgeneric。l VHDLVHDL处理处理非静态数据非静态数据的两种对象:的两种对象:信号和变量信号和变量。l 常量和信号是全局的,既可以用于顺序代码,也可常量和信号是全局的,既可以用于顺序代码,也可用于并发代码;用于并发代码;l 变量只能在顺序代码中使用,相对于信号而言,变变量只能在顺序代码中使用,相对于信号而言,变量只能是局部的,所以变量值不能传递到量只能是局部的,所以变量值不能传递到processprocess、fun

2、ctionfunction和和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,

3、0,1,1);常量可以在包集、实体或结构体中声明:常量可以在包集、实体或结构体中声明:包集中:全局;包集中:全局;实体中:对该实体内的所有结构体而言是全局的;实体中:对该实体内的所有结构体而言是全局的;结构体中:结构体内是全局的。结构体中:结构体内是全局的。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 3n 信号信号VHDLVHDL中中信号信号代表电路单元、功能模块间的硬件连线,代表电路单元、功能模块间的硬件连线,也可表示电路单元的也可表示电路单元的IN/OUTIN/OUT端口;端口;实体的所有端口都默认为信号,语法结构:实体的所有端口都默认为信号,语法结构:Signal 信号

4、名:type range:=初始值;注意:注意:当信号用于顺序描述语句如当信号用于顺序描述语句如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

6、 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; 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

7、 if; END LOOP; ones=temp; END process; END not_ok;进程结束后才更新进程结束后才更新第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 7两种代码更正方法:两种代码更正方法:1、使用变量来记录中间值,可以将、使用变量来记录中间值,可以将signal temp.改为改为variable temp.;同时修改相应;同时修改相应的的赋值语句赋值语句;2、取消、取消temp,同时将端口信号,同时将端口信号ones重新定重新定义为:义为: ones: BUFFER integer range 0 to 8;使得使得ones可以被内部调用。可以被内

8、部调用。在进程结束后,在进程结束后,ones值将被更新。值将被更新。 (编码风格不好,不提编码风格不好,不提倡此种方式!倡此种方式!)第第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);

10、 ones: OUT integer range 0 to 8); end count_ones; architecture 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数据对象及属性

11、数据对象及属性 OK!Not OK?第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 11n 信号和变量的比较信号和变量的比较赋值方式的不同赋值方式的不同: 变量变量:= = 表达式;表达式; 信号信号 = = 表达式;表达式; 硬件实现的功能不同:硬件实现的功能不同: 信号信号代表电路单元、功能模块间的互联,代表电路单元、功能模块间的互联, 代表实际的硬件连线;代表实际的硬件连线; 变量变量代表电路单元内部的操作,代表暂代表电路单元内部的操作,代表暂存存的临时数据。的临时数据。 第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 12有效范围的不同:有效范围的不同: 信

12、号:信号:程序包、实体、结构体;全局量。程序包、实体、结构体;全局量。 变量:变量:进程、子程序;局部量。进程、子程序;局部量。 ARCHITECTURE SIGNAL Declarationslabel1: PROCESSVARIABLE Declarationslabel2: PROCESSVARIABLE Declarations第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 13 赋值行为的不同:赋值行为的不同: 信号信号赋值延迟更新数值、时序电路;赋值延迟更新数值、时序电路; 变量变量赋值立即更新数值、组合电路。赋值立即更新数值、组合电路。 信号的多次赋值信号的多次赋值

13、 a. a. 一个进程:最后一次赋值有效一个进程:最后一次赋值有效 b. b. 多个进程:多源驱动多个进程:多源驱动, ,线与、线与、 线或、三态线或、三态 第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 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() beg

14、in a = b; end process; process() begin a = c; . end process;end ex;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 15例:信号赋值与变量赋值的比较例:信号赋值与变量赋值的比较 信号赋值:信号赋值: 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

15、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 变量赋值变量赋值 architecture rtl of var isarchitecture rtl of var is begin begin process process variable a,b:std_logic; - variable a,b:std_logic; - 定义变量定义变量

16、 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例:变量赋值实现循环语句功能例:变量赋值实现循环语句功能 process(indicator, sig)process(indicator, sig) variable temp : std_logic; variable temp : std_logic; begin b

17、egin 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; end process;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 18以上语句等效为:process(indicator, sig)process

18、(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 (sig(1) and indicator(1); temp :=temp xor (sig(2) a

19、nd 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 : std_logic; signal temp

20、 : 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 indicato

21、r(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数据对象及属性数据对象及属性 20例3:多路复用器的对比设计 方案一:使用信号(not OK) LIBRARY ieee; USE ieee.std_logic_1164.all; entity mux

22、 is port ( a, b, c, d, s0, s1: IN std_logic; 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, s

23、0, s1) begin sel=0; if (s0=1) then sel=sel+1; end if; if (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; u

24、se ieee.std_logic_1164.all;- entity dff is port( d, clk: IN std_logic; 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_lo

25、gic_1164.all;- entity dff is port( d, clk: IN std_logic; q: BUFFER std_logic; qbar: OUT std_logic ); 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类型输出

26、信号可供内部电路使用第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 Not okOK第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 25u分频器分频器功能描述功能描述:对时钟进行:对时钟进行6 6分频;分频;设计要点设计要点:两个输出,一个基于:两个输出,一个基于信号信号,另一,另一个基于个基于变量变量。分频器分频器fclkfclk/6第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 26实现代码: LIBRARY ieee; USE ieee.std_logic_1164.all; entity freq_divider is port ( clk:

27、IN std_logic; out1, out2: BUFFER std_logic); end freq_divider; architecture example of freq_divider is SIGNAL count1: integer range 0 to 7; begin process (clk) variable count2: integer range 0 to 7; begin if (clkevent AND clk=1) then count1=count1+1; count2:=count2+1; if (count1=_) then out1=NOT out

28、1; count1=0; end if; if (count2=_) then out2=NOT out2; count2:=0; end if; end if; end process; end example;未赋初值,但范围固定未赋初值,但范围固定buffer类型,可以实现电平翻转;类型,可以实现电平翻转;另,将另,将std_logic改为改为bit类型更好些类型更好些!计数计数清零清零信号延迟更新,变量即时更新,填空区别?第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 28 寄存器的数量寄存器的数量-对电路面积

29、的重要影响对电路面积的重要影响 不同的编译器(仿真工具、综合工具等)对不同的编译器(仿真工具、综合工具等)对不同风格的代码进行编译时产生的寄存器数量不同风格的代码进行编译时产生的寄存器数量是不同的是不同的。本小节目的:。本小节目的:了解可以使用什么方法来减少寄存器数量;了解可以使用什么方法来减少寄存器数量;了解代码是否可以实现预期的结果;了解代码是否可以实现预期的结果;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 n寄存器生成的条件寄存器生成的条件 对信号来说:当一个信号的赋值是以另一个信号的边沿或跳对信号来说:当一个信号的赋值是以另一个信号的边沿或跳变为条件时(即发生同步赋值

30、时),该信号经编译后就会生变为条件时(即发生同步赋值时),该信号经编译后就会生成寄存器。成寄存器。同步赋值只能在进程、函数或过程等顺序代码中同步赋值只能在进程、函数或过程等顺序代码中出现,一般在语句出现,一般在语句if signalevent.或或wait until之后。之后。 对变量来说:对变量来说: (1)若一个变量是在一个信号跳变时被赋值,若一个变量是在一个信号跳变时被赋值,并且该值最终又被赋给了另外的信号(数值传递作用),则并且该值最终又被赋给了另外的信号(数值传递作用),则将生成寄存器将生成寄存器 。(2)一个变量未进行赋值操作时已经被信号一个变量未进行赋值操作时已经被信号使用,也

31、将产生寄存器(使用,也将产生寄存器(用以存储用以存储process上一次执行后上一次执行后c的值的值)。)。 如果未被进程、函数或过程之外的代码调用,则不一定生成如果未被进程、函数或过程之外的代码调用,则不一定生成寄存器。寄存器。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 30例:例:output1和和output2都被寄存的情况都被寄存的情况 process (clk) begin if (clkevent AND clk=1) then output1=temp; -被存储或生成寄存器;被存储或生成寄存器; output2=a; -被存储或生成寄存器;被存储或生成寄存器;

32、 end if; end process;原因:原因:对对信号信号来说:当一个信号的赋值是以另一个信号的来说:当一个信号的赋值是以另一个信号的边沿或跳变为条件时(即发生同步赋值时),该信号经编边沿或跳变为条件时(即发生同步赋值时),该信号经编译后就会生成寄存器。同步赋值只能在进程、函数或过程译后就会生成寄存器。同步赋值只能在进程、函数或过程等顺序代码中出现,一般在语句等顺序代码中出现,一般在语句if signalevent.if signalevent.或或wait untilwait until之后。之后。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 31例:例:output

33、1被寄存、被寄存、output2未被寄存的情况未被寄存的情况 process (clk) begin if (clkevent AND clk=1) then output1=temp; -被存储或生成寄存器;被存储或生成寄存器; end if; output2=a; -未以另一个信号的边沿跳变进行赋值未以另一个信号的边沿跳变进行赋值, -故未被存储;故未被存储; end if; end process;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 32例:变量被寄存的情况例:变量被寄存的情况 process (clk) variable temp: BIT; begin if

34、 (clkevent AND clk=1) then temp:=a; end if; x=temp; -temp促使促使x被存储;被存储; end process;原因:原因:对对变量变量来说:来说: 若一个变量是在一个信号跳若一个变量是在一个信号跳变时被赋值,并且该值最终又被赋给了另外的信变时被赋值,并且该值最终又被赋给了另外的信号(数值传递作用),则将生成寄存器号(数值传递作用),则将生成寄存器 。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 33例例6:带:带q和和qbar的的DFF 带带q和和qbar的的 DFFqdclkqbar功能描述:功能描述: D触发器触发器

35、qbar为为q的反相输出端。的反相输出端。两种实现方案两种实现方案:方案一生成两:方案一生成两个寄存器,方案二生成一个寄个寄存器,方案二生成一个寄存器。存器。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 34方案方案1: two-dff- library ieee; use ieee.std_logic_1164.all;- entity dff is port( d, clk: IN std_logic; q: BUFFER std_logic; qbar: OUT std_logic ); end dff;-architecture two_dff of dff is be

36、gin process (clk) begin if (clkevent AND clk=1) then q=d; qbar=NOT q; end if; end process; end two_dff; -生成两个寄存器生成两个寄存器 DFFqdclk DFFqbar第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 35方案方案2: one-dff- library ieee; use ieee.std_logic_1164.all;- entity dff is port( d, clk: IN std_logic; q: BUFFER std_logic; qbar: OU

37、T std_logic ); end dff;-architecture one_dff of dff is begin process (clk) begin if (clkevent AND clk=1) then q=d; end if; end process; qbar=NOT q; end one_dff; - DFFqdclkqbar生成一个寄存器生成一个寄存器使用组合逻辑,而使用组合逻辑,而不是寄存器不是寄存器第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 36小结小结 如果不对代码进行有效合理的组织,则会生如果不对代码进行有效合理的组织,则会生成额外的寄存器。成

38、额外的寄存器。 另外,在一些另外,在一些FPGA/CPLDFPGA/CPLD器件中,对同一个代器件中,对同一个代码,综合工具与布局布线工具的报告文件显示寄码,综合工具与布局布线工具的报告文件显示寄存器的数目可能是不一致的。存器的数目可能是不一致的。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 37例例7 7 模模8 8计数器计数器 计数器计数器clkcount(2:0)rst功能描述:功能描述: 模模8计数器。计数器。两种实现方案两种实现方案:方案一使用变:方案一使用变量进行同步赋值,方案二使用量进行同步赋值,方案二使用信号进行同步赋值。信号进行同步赋值。第第5 5讲讲 VHD

39、LVHDL数据对象及属性数据对象及属性 38方案方案1: 变量方式变量方式- entity counter is port( clk, rst: IN BIT; count: OUT integer range 0 to 7 ); end counter;-architecture counter of counter is begin process (clk, rst) variable temp: integer range 0 to 7; begin if (rst=1) then temp:=0; elsif (clkevent AND clk=1) then temp:=temp+

40、1; end if; count=temp; end process; end counter;方案方案2: 信号方式信号方式- entity counter is port( rst, clk: IN BIT; count: BUFFER integer range 0 to 7 ); end counter;-architecture counter of counter is begin process (clk, rst) begin if (rst=1) then count=0; elsif (clkevent AND clk=1) then count=count+1; end

41、if; end process; end counter; buffer类型端口类型端口不必声明包集不必声明包集都需要使用寄存器来保存都需要使用寄存器来保存3 3位的当前计数值,位的当前计数值,综合时均会生成综合时均会生成3 3个寄存器。个寄存器。第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 39例例8 8 移位寄存器移位寄存器 DFFdoutdinclk DFF DFF DFF三个设计方案:三个设计方案:三个变量顺序排列三个变量顺序排列三个信号顺序排列三个信号顺序排列三个变量颠倒顺序排列三个变量颠倒顺序排列第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 40方案

42、方案1: 三个变量顺序排列三个变量顺序排列- entity shift is port( clk, din: IN BIT; dout: OUT BIT ); end shift;-architecture shift of shift is begin process (clk) variable a, b, c: BIT; begin if (clkevent AND clk=1) then dout=c; c:=b; b:=a; a:=din; end if; end process; end shift;方案方案2: 三个信号顺序排列三个信号顺序排列- entity shift is

43、port( din, clk: IN BIT; dout: OUT BIT ); end shift;-architecture shift of shift is signal a, b, c: BIT; begin process (clk) begin if (clkevent AND clk=1) then a=din; b=a; c=b; dout=c; end if; end process; end shift; 生成生成4个寄存器个寄存器不必声明包集不必声明包集生成生成1个寄存器个寄存器c、b、a的值被赋给的值被赋给dout、c、b之前没有被赋过值,综合时之前没有被赋过值,综合

44、时会生成会生成3个寄存器,用以存储个寄存器,用以存储process上一次执行后上一次执行后c、b、a的值。的值。方案一、二的波形相同,方案一、二的波形相同,dout较较din延后延后4个时钟周期个时钟周期第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 41 方案方案3 3: 三个变量颠倒顺序排列三个变量颠倒顺序排列 entity shift is port( clk, din: IN BIT; dout: OUT BIT ); end shift;-architecture shift of shift is begin process (clk) variable a, b,

45、c: BIT; begin if (clkevent AND clk=1) then a:=din; b:=a; c:=b; dout=c; end if; end process; end shift;方案方案1: 三个变量顺序排列三个变量顺序排列- entity shift is port( clk, din: IN BIT; dout: OUT BIT ); end shift;-architecture shift of shift is begin process (clk) variable a, b, c: BIT; begin if (clkevent AND clk=1) t

46、hen dout=c; c:=b; b:=a; a:=din; end if; end process; end shift;赋值顺序与方案一相反,赋值顺序与方案一相反,因对变量的赋值是立即生因对变量的赋值是立即生效的,三行代码可以简化效的,三行代码可以简化为为c:=dinc:=din。整个四行代码可以简化为整个四行代码可以简化为dout=din;dout=din;方案三中方案三中dout较较din延后延后1个时钟周期,未能实现设计初衷个时钟周期,未能实现设计初衷第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 42例例9 9 移位寄存器移位寄存器#2#2增加了一个复位端增加了一个

47、复位端两种设计方案:两种设计方案:用信号生成寄存器用信号生成寄存器用变量生成寄存器用变量生成寄存器 DFFdclk DFF DFF DFFrstinternal(3)internal(2)internal(1)internal(0)第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 方案方案1: 内部信号方式内部信号方式 library ieee; use ieee.std_logic_1164.all; entity shiftreg is port( d, clk, rst: IN std_logic; q: OUT std_logic ); end shiftreg;archi

48、tecture behavior of shiftreg is signal internal: std_logic_vector(3 downto 0); begin process (clk, rst) begin if (rst=1) then internal0); elsif (clkevent AND clk=1) then internal=d & internal(3 donwto 1); end if; end process; q0); elsif (clkevent AND clk=1) then internal:=d & internal(3 donwto 1); e

49、nd if; end process; q=internal(0); end behavior;第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 44 属性(ATTRIBUTE)l属性是指从指定的客体或对象(如属性是指从指定的客体或对象(如entity entity /type /architecture/type /architecture等)中获取关心的数等)中获取关心的数据或信息。据或信息。l利用属性可以使利用属性可以使VHDLVHDL源代码更加简明扼要,源代码更加简明扼要,易于理解;易于理解;l语法:语法: 对象对象属性属性l预定义的属性:数值类属性和信号类属性预定义的属性

50、:数值类属性和信号类属性第第5 5讲讲 VHDLVHDL数据对象及属性数据对象及属性 45数值类属性:获取数组、块或一般数据数值类属性:获取数组、块或一般数据 的相关信息。的相关信息。u VHDL VHDL预先定义的、可综合的数值类属性:预先定义的、可综合的数值类属性: leftleft:索引的左边界值:索引的左边界值 rightright:索引的右边界值:索引的右边界值 highhigh:索引的上限值:索引的上限值 lowlow:索引的上限值:索引的上限值 lengthlength:索引的长度值:索引的长度值 rangerange:索引的位宽范围:索引的位宽范围 reverse_ranger

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第五讲-VHDL数据对象及属性课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|