版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第六章 VHDL中的语句,主要内容,顺序语句 If语句、case语句、Loop语句 并行语句 进程、元件例化、并行信号赋值语句 描述风格 行为描述、数据流描述、结构描述,一、顺序语句,1、if语句 If语句执行一序列的语句,其次序依赖于一个或多个条件的值。 一般表达形式 IF 条件 THEN 顺序语句; END IF ; IF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF;,一、顺序语句(续1),计数器的设计 例1:,Entity CNT4 IS PORT(CLK : IN BIT; Q: BUFFER INTEGER RANGE 15 DOWNTO 0 ); END
2、; ARCHITECTURE ONE OF CNT4 IS BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q=Q+1; END IF; END PROCESS; END;,定义整数需要限定取值范围,思考:整数类型的数据规范?,1、定义时需要限定取值范围,否则会采用32位,造成浪费 2、整数的表达不加引号,一、顺序语句(续2),例2:,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT4 IS PORT (CLK : IN S
3、TD_LOGIC; Q : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END; ARCHITECTURE ONE OF CNT4 IS SIGNAL Q1:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(CLK) BEGIN IF CLKEVENT AND CLK=1 THEN Q1=Q1+1; END IF; END PROCESS;Q0); d2e(3),3=1,others=e(1); 同步和异步的概念 不依赖于时钟而有效的信号称为异步信号,否则称为同步信号。 If语句的嵌套 注意END IF的数量,IF 条件 THEN
4、IF 条件 THEN END IF; END IF;,一、顺序语句(续7),不完整if语句-产生时序电路的关键 例1:,entity comp2 is port(a1,b1:in bit; q1 :out bit); end; architecture one of comp2 is begin process(a1,b1) begin if a1b1 then q1=1; else q1b1 then q1=1; elsif a1; WHEN OTHERS =; END CASE; 计算表达式的值,根据WHEN条件句中与之相同的,执行对应顺序语句 选择值在表达式取值范围内,数据类型必须匹配,
5、且只能出现一次 当选择值不能完整覆盖表达式取值时,最后必须加上WHEN OTHERS WHEN OTHERS只能出现一次,作为最后一种条件取值,一、顺序语句(续11),例1:,library ieee; use ieee.std_logic_1164.all; entity mux21a is port(a,b,c,d: in std_logic; ctl : in std_logic_vector(1 downto 0); q : out std_logic); end; architecture one of mux21a is begin process(a,b,c,d,ctl) beg
6、in case ctl is when 00 =qqqqreg(0)reg(0)reg(7)reg(7)reg(7 downto 0)reg=reg;cy=cy; end case; end if; end process; q=reg;cn=cy; end;,思考: 1、语句顺序是否有影响?会覆盖原值否?将reg、cy改成变量可以吗? reg(0)=c0;reg(7 downto 0)NULL;,一、顺序语句(续14),3、loop语句 循环语句,使一组顺序语句循环执行 一般表达形式 单个loop语句 标号 :LOOP 顺序语句; END LOOP标号; 单个loop语句需要引入其他语句进行
7、循环控制,如:EXIT、NEXT、WAIT; For_loop语句由循环变量范围决定循环次数,标号: FOR 循环变量 IN 循环范围LOOP 顺序语句; END LOOP标号;,FOR_LOOP语句,一、顺序语句(续15),例1:单个loop语句,L2 : LOOP a := a+1; EXIT L2 WHEN a10; END LOOP L2;,循环标号,用于多个循环语句,条件为真时,跳出循环语句,EXIIT语句格式: EXIT; EXIT LOOP 语句; EXIT LOOP 标号 WHEN 条件表达式;,NEXT语句格式: NEXT; NEXT LOOP 语句; NEXT LOOP 标
8、号 WHEN 条件表达式;,跳出循环,跳转到循环结束处,跳出循环,跳转到循环开始处,NEXT L2 WHEN a10;,一、顺序语句(续15),例2: FOR_LOOP语句,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity cntc is port(din : in std_logic_vector(7 downto 0); cnt : out std_logic_vector(3 downto 0) ); end ; architecture one of cntc is be
9、gin process(din) variable q : std_logic_vector(3 downto 0); begin q:=0000; FOR n in 0 to 7 LOOP if (din(n)=1) then q:=q+1; end if; end loop; cnt=q; end process; end;,循环变量,循环变量: 1、临时变量(局部变量); 2、不需要事先定义,由LOOP语句自动定义; 3、在LOOP语句的范围内不能再使用同名的标识符,循环次数,以常数表示,功能:计算“1”码个数,一、顺序语句(续17),仿真波形,一、顺序语句(续18),例3:,libra
10、ry ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity andc is port(a : in std_logic_vector(3 downto 0); b : in std_logic_vector(3 downto 0); c : out std_logic_vector(3 downto 0) ); end; architecture one of andc is begin process(a,b) begin for n in 0 to 3 loop c(n)=b(n) AND a(
11、n); end loop; end process; end;,缺点:每次循环都将产生一个硬件模块,硬件资源大量耗用,二、并行语句,进程语句、元件例化语句、信号赋值语句 1、简单信号赋值语句 VHDL并行语句结构中最基本的单元 一般表达格式: 赋值目标=表达式; 赋值目标和表达式数据类型一致;,ARCHITECTURE one OF mux21a IS SIGNAL d,e : BIT; BEGIN d = a AND (NOT S) ; e = b AND s ; y = d OR e ; END ARCHITECTURE one ;,二、并行语句(续1),2、条件信号赋值语句 一般语法格式
12、 赋值目标=表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE 表达式; 要执行的表达式是第一个满足布尔条件值为true的表达式 当所有条件都不满足时,执行最后一条表达式,最后一条表达式没有条件子句 功能与if语句相同,注意:此处没有分号,条件子句,二、并行语句(续2),例: ENTITY MUX IS PORT(A,B,C : IN BIT; P1,P2 :IN BIT; Z : OUT BIT); END; ARCHITECTURE ONE OF MUX IS BEGIN Z=A WHEN P1=1 ELSE B WHEN P2=1 ELSE C; END;,思考:
13、 1、如果P1和P2同时为1,执行哪条语句?Z是多少? 2、如果改用if语句?,二、并行语句(续3),3、选择信号赋值语句 一般语法格式 WITH 选择表达式 SELECT 赋值目标信号=表达式 WHEN 选择值, 表达式 WHEN 选择值, 表达式 WHEN 选择值 表达式 WHEN OTHERS; 当选择表达式的值发生变化,就启动语句,对选择值进行测试对比 选择值覆盖选择表达式的所有取值,如不能覆盖,最后加上WHEN OTHERS子句 选择值不能重复 与case语句功能相同,二、并行语句(续4),例: ENTITY DECODER IS PORT(A , B, C : IN STD_LOG
14、IC; DATA1,DATA2:IN STD_LOGIC; DATAOUT : OUT STD_LOGIC); END; ARCHITECTURE ONE OF DECODER IS SIGNAL CQI:STD_LOGIC_VECTOR(2 DOWNTO 0); CQI seg seg seg seg seg seg seg seg segnull; end case; end process p2; end;,译码,三、一些程序示例(续5),2、设计一个同步并行置数,串行右移移出的移位寄存器,library ieee; use ieee.std_logic_1164.all; entity
15、 shift is port(clk,load:in std_logic; din :in std_logic_vector(7 downto 0); q :out std_logic); end; architecture one of shift is begin process(load) variable reg8:std_logic_vector(7 downto 0); begin if clkevent and clk=1 then if load=1 then reg8:=din; else reg8(6 downto 0):=reg8(7 downto 1); end if;
16、 end if; q=reg8(0); end process; end;,三、一些程序示例(续6),波形仿真结果,三、一些程序示例(续7),3、数控分频器的设计 分频器设计的基础计数器 计满全1后,产生进位信号cout,cout的频率是计数时钟频率的16分之一,称cout是clk的十六分频。 如果有一个预置数d3.0,从d开始计数计到全1,这时进位信号cout与clk的频率关系是什么呢? 如果是一个减法计数器呢?,4位二进制加法计数器,分频比R=“1111”-d3.0+1,三、一些程序示例(续8),library ieee; use ieee.std_logic_1164.all; use
17、ieee.std_logic_unsigned.all; entity pulse is port(clk : in std_logic; d : in std_logic_vector(7 downto 0); fout : out std_logic); end;,分频后结果,连接到蜂鸣器,观察发声情况,计数器计数脉冲信号,同时也是分频前的原始信号,分频预置数d,三、一些程序示例(续9),architecture one of pulse is signal full : std_logic; begin p0:process(clk) variable cnt8 :std_logic_v
18、ector(7 downto 0); begin if clkevent and clk=1 then if cnt8=11111111 then cnt8:=d; full=1; else cnt8:=cnt8+1;full=0; end if; end if; end process; p1:process(full) variable cnt2 :std_logic; begin if fullevent and full=1 then cnt2:=not cnt2; end if; if cnt2=1 then fout=1; else fout=0; end if; end proc
19、ess; end;,思考: 1、信号full的频率是多少? 2、可否定义变量来替代信号full? 3、信号fout的频率是多少? 4、为什么要将信号full二分频产生fout输出到扬声器,直接使用信号full连接到扬声器可以吗?,作为敏感参数,在两个进程中传递信息,三、一些程序示例(续10),思考: 1、分频波形从12.8us开始的原因? 2、clk时钟频率为20MHz,预置数d=252,则信号full的频率?信号fout的频率? 3、如果预置数是238呢?,cnt8从零开始计数,记到全1时才进行第一次初值置入,然后才开始分频,思考:采用此方法能够设计的分频器的特点? 偶次分频?奇次分频?占空
20、比?,三、一些程序示例(续11),4、任意占空比是50%的奇数分频电路的设计 设计一个占空比为50%的三分频电路,library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity pulse is port( clk : in std_logic; c1,c2 : out std_logic_vector(2 downto 0); q ,q1,q2 : out std_logic ); end;,三、一些程序示例(续12),architecture one of pulse is signal
21、cnt1,cnt2 : std_logic_vector(2 downto 0); signal cout1,cout2: std_logic; begin process(clk) begin if clkevent and clk=1 then if cnt1=010 then cnt1=000; else cnt1=cnt1+1; end if; if cnt1=001 then cout1=not cout1; elsif cnt1=010 then cout1=not cout1; end if; end if; end process; process(clk) begin if
22、clkevent and clk=0 then if cnt2=010 then cnt2=000; else cnt2=cnt2+1; end if; if cnt2=001 then cout2=not cout2; elsif cnt2=010 then cout2=not cout2; end if; end if; end process; c1=cnt1;c2=cnt2;q1=cout1;q2=cout2; q=cout1 or cout2;end;,占空比非50%的奇数N次分频,三、一些程序示例(续13),总结:如何设计占空比为50%的任一奇数N次分频电路? 上升沿触发模N计数,选定计数到某一个值输出时钟翻转,然后经过(N-1)/2次计数后再次进行翻转得到一个占空比非50%奇数N分频时钟 下降沿触发模N计数,选定和上升沿触发输出时钟翻转相同的值,同样经过(N-1)/2次计数后再将输出时钟再次翻转,得到一个占空比非50%的奇数N分频 两个占空比非50%的N分频时钟相或运算,得到占空比为50%的奇数N分频时钟,四、VHDL的描述方式,相同的逻辑行为,可以有不同的语句表达方式。 在VHDL模块中,不同的描述方式可以分为三类:行为描述、数据流描述、结构描述。 1、行为描述 只描述了电路的功能和行为,没有直接指明或涉及实现这些行为的硬件结构,包括:硬件特性、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- ISO 23629-122022 UAS流量管理(UTM)-第12部分UTM服务提供商的要求标准立项发展报告
- 高端餐饮用水产品养殖基地可行性研究报告
- 关于战略科技力量的试题及参考答案
- 工业园区新建飞轮储能传感器制造项目可行性研究报告
- 年产30万只光纤器件建设项目可行性研究报告
- Kimi优化公司:企业AI搜索布局服务商选择体系观察
- 七年级英语下册 Unit 1 Dream homes Reading教案 (新版)牛津版
- 政治学原理试题及答案
- 党章知识测试题及答案
- 三年级道德与法治下册 第二单元 我在这里长大 5我的家在这里第二课时教学设计 新人教版
- 2025-2026学年广东省广州市越秀区培正中学八年级(上)期中语文试卷
- 2026年一级建造师一建水利水电案例分析考前重点知识必背十页纸
- 储能系统安装规范
- 浙江吉利控股集团
- 工程造价重新鉴定申请书
- 2025高考历史全国I卷真题试卷(含答案)
- 2025年网格员知识题库及参考答案
- 东航管理竞聘笔试题及答案
- 学校安保八大件使用培训
- 北师大七年级上册数学各章节知识点总结
- 《研学旅行基地运营与管理》课件-研学基地1.3 现状
评论
0/150
提交评论