- 1、本文档共59页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 VHDL要素 7.1 算术操作符与优先级 7.1.1 算术操作符Arithmetic Operator 【例7-1】用SLL完成3-8译码器的设计 ENTITY decoder3to8 IS port (input: IN INTEGER RANGE 0 TO 7; output: OUT BIT_VECTOR ( 7 DOWNTO 0)); END decoder3to8; ARCHITECTURE behave OF decoder3to8 IS BEGIN output=SLL input; --被移位部分是常数! END behave; 【例7-2】乘方和取绝对值语法例 SIGNAL a,b:INTEGER RANGE -8 to 7; SIGNAL c:INTEGER RANGE 0 to 5; SIGNAL d:INTEGER RANGE 0 to 3; a=ABS(b); c=2**d; 7.1.2 VHDL操作符优先级 7.2 BUFFER类型与操作符重载函数 【例6-3】4位计数器设计。 题目分析: 计数器:对时钟信号CLK进行计数,即在CLK上升沿时输出值Q=Q+1; 端口设置:CLK为IN BIT,Q=Q+1要实现将输出到端口的值反馈回来加1,只有采用BUFFER端口类型;要实现算术运算,数据类型须采用INTEGER。 注意:表面上BUFFER具有双向端口INOUT的功能,但实际上其输入功能是不完整的,它只能将自己输出的信号再反馈回来。 ENTITY CNT4 IS PORT (CLK: IN BIT; Q :BUFFER INTEGER RANGE(15 DOWNTO 0));END CNT4; ARCHITECTURE bhv OF CNT4 IS BEGIN PROCESS(CLK) BEGIN IF CLK‘EVENT AND CLK=‘1’ THEN Q=Q十1; END IF; END PROCESS; END bhv; BUFFEF类型在多级设计中不便于综合,常用OUT类型。 ENTITY CNT4 1S PORT(CLK:IN BIT; Q :OUT INTEGER RANGE(15 DOWNTO 0)); END; ARCHITECTURE bhv OF CNT4 IS SIGNAL Q1: INTEGER RANGE(15 DOWNTO 0); BEGIN PROCESS (CLK) BEGIN IF CLK‘EVENT AND CLK=‘l’ THEN Q1=Q1+1; END IF; Q=Q1; END PROCESS; END bhv; 7.2.2 操作符重载函数 【例7-5】带有异步清零、进位输入/输出的4位计数器。 题目分析: 计数器概念同上即在CLK上升沿时输出值Q=Q+1; 异步清零:只要清零信号RES有效,Q=0; 进位输入:在进位输入Ci=1时,才对时钟信号CLK进行计数; 进位输出:Q=1111时来个脉冲本计数器清零,进位输出Co=1,使下级计数器加1计数。 端口设置:我们在5.3.2中介绍,实际设计中尽量采用STD_LOGIC类型,故端口定义见程序。现在出现一个问题,算术运算只能用于整型,不能用于STD_LOGIC类型。要解决此问题,需要用到操作符重载函数,此函数在ieee.std_logic_unsigned程序包中定义,用户可不必自己设计。 LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY cntm16 IS GENERIC (cntwidth : integer : = 4 ); PORT ( ci : IN std_logic; res : IN std_logic; clk : IN std_logic; co : OUT std_logic; q : BUFFER std_logic_vector ( cntwidth-1 DOWNTO 0 ) END
文档评论(0)