学 习 情 境 三: 简易电子琴

189
EDA 技技Electronic Design Automation 1 技 技 技 技 技技技技技技

Upload: camila

Post on 12-Jan-2016

195 views

Category:

Documents


0 download

DESCRIPTION

学 习 情 境 三: 简易电子琴. 主要内容. A. 项目任务 B. 项目目标 C. 实施步骤 D. 相关知识 E. 评价与总结. 掌握基本的 VHDL 语言。用 VHDL 语言设计乐音的节拍与音符产生电路;用 VHDL 语言设计分频系数、音符显示数据产生电路;用 VHDL 语言设计可控分频器电路;用 VHDL 语言设计琴键输入电路。理解简易电子琴总体设计方案,把音乐播放与演奏电路总装成简易电子琴。. A. 项目任务. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 1

学 习 情 境 三:简易电子琴

Page 2: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 2

主要内容

A. 项目任务 B. 项目目标 C. 实施步骤 D. 相关知识 E. 评价与总结

Page 3: 学 习 情 境 三: 简易电子琴

绵阳职业技术学院 信息工程系

A. 项目任务 掌握基本的 VHDL 语言。用 VHDL 语言设计乐音的节拍与音符产生电路;用VHDL 语言设计分频系数、音符显示数据产生电路;用 VHDL 语言设计可控分频器电路;用 VHDL 语言设计琴键输入电路。理解简易电子琴总体设计方案,把音乐播放与演奏电路总装成简易电子琴。

Page 4: 学 习 情 境 三: 简易电子琴

绵阳职业技术学院 信息工程系

B. 项目目标任务 1.1 目标:掌握基本的 VHDL 语言;理解音乐播放电路设计方案。掌握用 VHDL 语言设计节拍与音符产生电路;掌握用 VHDL 语言设计分频系数、音符显示数据产生电路;掌握用 VHDL 语言设计可控分频器电路。设计结果:原理图与原程序、电路仿真图、能在实训系统上播放悦耳动听的音乐。

任务 1.2 目标:掌握键盘电路设计、键盘输入去抖动方法;掌握层次电路设计方法;初步具备独立的 VHDL 编程能力。设计结果:原理图与原程序、电路仿真图、能在实训系统上弹奏曲子或播放悦耳动听的音乐。

Page 5: 学 习 情 境 三: 简易电子琴

绵阳职业技术学院 信息工程系

C. 实施步骤

Page 6: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 6

任务 3.1 实施步骤

一、资讯 1. 明确任务 一般来说,所有乐音有四个基本要素—— “音的长短”(决定节拍)、

“音的高低”(频率决定)、“音的强度”、“音色”。而其中最重要的是 “音的长短” 和 “音的高低”。为了简化设计,本任务设计的音乐播放电路只考虑音的最重要的两个方面: “音的长短” 和“音的高低”,忽略音的强度和音色。要求音乐播放电路最少能连续循环播放一首歌曲,在此基础上可再做进一步的扩展。

为实现播放 “音的长短” 和 “音的高低” ,可根据乐谱用一个控制电路模块产生 “音的长短” 和 “音的高低”信号,控制电路模块包括一个节拍产生子模块(控制“音的长短”)与音符产生子模块(控制“音的高低”)。 用一个分频系数、音符显示数据产生模块把音符信号转换为分频系数、音符显示数据和高低音显示电平。用一个可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。

Page 7: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 7

电路输入是两路时钟信号:一路作为可控分频电路模块的输入时钟,经可控分频电路模块分频后,得到各种所需的乐音信号。另一路作为控制电路模块的输入时钟,用来产生节拍。这两路时钟信号的频率根据具体的实验条件和所选歌曲可有所不同。

电路的输出有:一路一线是乐音信号输出,用来驱动外接喇叭或蜂鸣器播放音乐;一路四线用来驱动外接的数码管,显示播放的音符简谱符号;一路一线用来驱动外接的一个 LED, 播放高音时发光。

2. 查阅资料 到图书馆、互联网查找有关资料。前人发表的有关音乐电路的文章主要

散见在学术期刊和有关网页上。可用乐曲播放电路、音乐发生器等关键词查找。另外,要理解这些文章所介绍的原理,还要具有音乐谱、乐音频率的有关知识。

任务 3.1 实施步骤

Page 8: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 8

二、计划 音乐电路是模仿人歌唱的电路,故可用人歌唱作为原型来分析设计本任务的总

体方案。人通过声带振动发出声音,声带振动频率不同发出不同声音。故在用数字电路来模仿时,用一个控制电路,实现声带振动功能,控制音符信号的产生;用一个电路把音符信号转换为可控分频模块可用的分频系数;可控分频电路在分频系数作用下产生不同频率信号来驱动外接喇叭或蜂鸣器播放音乐。

控制电路模块根据歌谱控制可控分频电路模块按照一定节拍在不同时间发出不同的乐音。而控制电路模块应该分为两个子模块,一个用于产生节拍,称节拍产生模块;另一个用于根据歌谱控制可控分频电路模块在不同时间发出不同的乐音,称音符产生模块。音乐电路是连续循环播放的,故控制电路模块的核心部分——节拍产生模块是一个计数器,每个状态持续的时间是需播放的所有音的音长的最小公因数,比如是一个十六分音符时值,具体时间长度应根据需播放的歌曲而定。这样,每个音符持续的时间是每个状态持续的时间的整数倍,故占据整数倍个状态。具体占据状态的个数要根据每个音的音长来决定。控制电路的计数器的模即状态数,可由需播放歌曲的各个音所占据状态个数累加而得。例如,一首用于播放“梁祝”乐曲的音乐电路的控制电路的计数器的模是 139 。节拍产生电路的计数器是用来产生节拍定的,音符产生模块则将节拍产生电路的计数器的状态翻译成对应的音符,如需播放的歌曲中所用到的音符为 9~16 个,则音符产生模块的输出信号应有四位,其他情况依此类推。

任务 3.1 实施步骤

Page 9: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 9

控制电路模块只是根据歌谱产生控制可控分频模块按照一定节拍在不同时间发出不同乐音的音符信号。控制电路模块要具体控制可控分频模块,还要把音符信号转换为分频系数作为可控分频模块的输入信号,也要根据音符信号决定提供给外围数码管的用于显示简谱音符符号的数据和提供给外围 LED 的用于显示高低音的数据,这就需要另一个模块——分频系数、LED 数据产生模块。分频系数、 LED 数据产生模块根据音符产生模块输出的音符信息,产生每个时刻提供给可控分频模块的分频系数、提供给外围数码管的用于显示谱音符符号的数据和提供给外围 LED 的用于显示高低音的数据。

可控分频模块根据分频系数产生不同频率信号驱动喇叭或蜂鸣器播放音乐。

播放音乐电路设计总体参考方案如图 3-1 所示,其中的两个时钟频率的取值将在下面介绍实施的部分做分析。

任务 3.1 实施步骤

Page 10: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 10

图 3-1 播放电路总体方案

任务 3.1 实施步骤

Page 11: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 11

任务 3.1 实施步骤

三、决策 本音乐电路设计重点在控制电路模块和可控分频模块设计,下面讨论这

两个模块以及顶层模块的设计方案的选择。 1 、控制电路模块(节拍产生模块与音符产生模块)设计方案的选择 节拍产生模块是一个计数器,可采用通常的方法设计。 音符产生模块的输入信号是节拍产生模块输出的计数值,输出信号是表

示音符的音符序号。在节拍产生模块输出的计数值变化范围不大并且音符产生模块的输出数值不需灵活改变时,可用 VHDL 语句直接来描述音符产生模块。在节拍产生模块输出的计数值变化范围较大或音符产生模块的输出数值需灵活改变时,可使用 LPM_ROM 来存储对应于不同计数值的音符序号。

2 、可控分频模块设计方案的选择 (1) 等占空比和非等占空比方案选择 可控分频电路按输出时钟的占空比来分,有等占空比和非等占空比两类

方案。为了得到足够驱动蜂鸣器的功率,采用等占空比输出的可控分频电路方案。

Page 12: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 12

任务 3.1 实施步骤

(2)偶数分频、整数分频方案的选择 常见的分频电路有偶数分频、奇数分频和整数分频电路,本任务从原理

来看,既有偶数分频又有奇数分频,故应属于整数分频电路。非等占空比的偶数分频、奇数分频电路有统一的设计方法并且比较简单,但等占空比的偶数分频、奇数分频电路设计方法则不相同。对于偶数 (2N) 的等占空比分频,可先做 N 非等占空比分频,再做 2 分频即可,比较简单。对于等占空比的奇数分频电路则不能采用这种方法,比较复杂。本任务可采取用较高频率 ( 比如 12 MHz) 的输入时钟,这样分频比就比较大,故对于初学者,作为初步解决方案,可采用偶数分频比近似代替奇数分频比的方法,把整数分频电路变成偶数 (2N) 分频电路,用先做 N 非等占空比分频,再做 2 分频这种较简单的方法来设计;作为提高,可采用比较复杂的真正的整数分频电路设计方法设计。

3. 、 VHDL 输入设计法和原理图输入设计法的选择 在本任务中,底层模块采用 VHDL 语言设计较简单,顶层模块采用原理

图设计与 VHDL 设计均可,我们采用原理图设计顶层电路。

Page 13: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 13

任务 3.1 实施步骤

四、实施 下面以用于播放“梁祝”乐曲的音乐电路为例,对音乐电路各模块的实施进行

进一步的设计实现。 (一 )控制电路模块 控制电路模块包含节拍产生模块和音符产生模块两个子模块,合写成一个文件。 1 、节拍产生模块设计分析 根据以上分析,此模块为一个计数器,现在需进一步决定计数器的模与输入时

钟频率。 根据乐曲“梁祝”简谱,见图 3—2 ,此乐曲以四分音符为一拍,四拍为一节,

所有音的音长最小公因数是一个十六分音符时值,所以,以十六分音符时值作为一个状态持续时间,把乐曲“梁祝”中各个音符所占据状态个数累加而得知节拍产生模块计数器的模是 139 ,其中最后体止符用了 3 个时间单位。

乐曲“梁祝”的简谱没有明确标出播放速度,根据经验设定 1 min 播放 60 拍,因此一拍持续时间即四分音符的时值为 1s ,一个状态持续时间即一个十六分音符时值为 0.25 s 。故节拍产生模块输入时钟周期为 0.25s, 频率为 4Hz 。

Page 14: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 14

任务 3.1 实施步骤

图 3-2 《梁祝化蝶》简谱

Page 15: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 15

任务 3.1 实施步骤

2 、音符产生模块设计分析 音符产生模块的功能是将节拍产生电路的计数器的值按照乐曲“梁祝”

的简谱翻译成对应的音符。规定用 Counter 表示计数器的值, Index 表示 15 个音符符号。播放乐曲“梁祝”需低音 7 个、中音 7 个与高音 1 个,共 15 个音符,用 15 个数字( Index ) 1—15 来表示,则乐曲“梁祝”简谱的 15 个音符与数字( Index )的对应关系见表 3-1 。

表 3-1 乐曲“梁祝”简谱音符与数字对应关系

Page 16: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 16

任务 3.1 实施步骤

根据乐曲“梁祝”简谱可得其计数器值与音符对应关系,见表 3-2 。见表 3-2 音符产生模块——计数器值与音符对应表

Page 17: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 17

任务 3.1 实施步骤

3 、控制电路模块(节拍产生模块和音符产生模块) VHDL描述 控制电路模块的输入时钟信号与 C1k4Hz相连; Index 表示音符信息,因为 Index取值为 1 ~15 ,故为四位二进制信号。

此控制电路模块 VHDL描述有两个进程, CNT8 进程描述的是一个时序逻辑电路计数器(节拍产生模块), Search 进程描述的是一个组合逻辑译码电路(音符产生模块),两模块由 Counter 信号相连,这是一个数字系统的控制模块描述。具体程序描述如下:

LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE ieee.std_logic_arith.ALL;

ENTITY aaa IS PORT(clk:IN STD_LOGIC;

Index:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END;

Page 18: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 18

任务 3.1 实施步骤

ARCHITECTURE one OF aaa IS SIGNAL Counter:INTEGER RANGE 0 TO 138; SIGNAL DateOut:INTEGER RANGE 0 TO 15; BEGIN CNT8:PROCESS(clk, Counter) BEGIN IF Counter=138 THEN Counter<=0; ELSIF (clk'EVENT AND clk='1') THEN Counter<=Counter+1; END IF; END PROCESS;

Page 19: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 19

任务 3.1 实施步骤 Search: PROCESS(Counter) BEGIN CASE Counter IS WHEN 00=>DateOut<=3; WHEN 01=>DateOut<=3; WHEN 02=>DateOut<=3; WHEN 03=>DateOut<=3; WHEN 04=>DateOut<=5; WHEN 05=>DateOut<=5; WHEN 06=>DateOut<=5; WHEN 07=>DateOut<=6; WHEN 08=>DateOut<=8; WHEN 09=>DateOut<=8; WHEN 10=>DateOut<=8; WHEN 11=>DateOut<=9; WHEN 12=>DateOut<=6; WHEN 13=>DateOut<=8; WHEN 14=>DateOut<=5; WHEN 15=>DateOut<=5; WHEN 16=>DateOut<=12;WHEN 17=>DateOut<=12; WHEN 18=>DateOut<=12;WHEN 19=>DateOut<=15; WHEN 20=>DateOut<=13;WHEN 21=>DateOut<=12; WHEN 22=>DateOut<=10;WHEN 23=>DateOut<=12; WHEN 24=>DateOut<=9; WHEN 25=>DateOut<=9; WHEN 26=>DateOut<=9; WHEN 27=>DateOut<=9; WHEN 28=>DateOut<=9;WHEN 29=>DateOut<=9; WHEN 30=>DateOut<=9;WHEN 31=>DateOut<=9;

Page 20: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 20

任务 3.1 实施步骤

WHEN 32=>DateOut<=9;WHEN 33=>DateOut<=9; WHEN 34=>DateOut<=9;WHEN 35=>DateOut<=10; WHEN 36=>DateOut<=7;WHEN 37=>DateOut<=7; WHEN 38=>DateOut<=6;WHEN 39=>DateOut<=6; WHEN 40=>DateOut<=5;WHEN 41=>DateOut<=5; WHEN 42=>DateOut<=5;WHEN 43=>DateOut<=6; WHEN 44=>DateOut<=8;WHEN 45=>DateOut<=8; WHEN 46=>DateOut<=9;WHEN 47=>DateOut<=9; WHEN 48=>DateOut<=3;WHEN 49=>DateOut<=3; WHEN 50=>DateOut<=8;WHEN 51=>DateOut<=8; WHEN 52=>DateOut<=6;WHEN 53=>DateOut<=5; WHEN 54=>DateOut<=6;WHEN 55=>DateOut<=8; WHEN 56=>DateOut<=5;WHEN 57=>DateOut<=5; WHEN 58=>DateOut<=5;WHEN 59=>DateOut<=5; WHEN 60=>DateOut<=5;WHEN 61=>DateOut<=5; WHEN 62=>DateOut<=5;WHEN 63=>DateOut<=5; WHEN 64=>DateOut<=10;WHEN 65=>DateOut<=10; WHEN 66=>DateOut<=10;WHEN 67=>DateOut<=12;

Page 21: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 21

任务 3.1 实施步骤

WHEN 68=>DateOut<=7;WHEN 69=>DateOut<=7; WHEN 70=>DateOut<=9;WHEN 71=>DateOut<=9; WHEN 72=>DateOut<=6;WHEN 73=>DateOut<=8; WHEN 74=>DateOut<=5;WHEN 75=>DateOut<=5; WHEN 76=>DateOut<=5;WHEN 77=>DateOut<=5; WHEN 78=>DateOut<=5;WHEN 79=>DateOut<=5; WHEN 80=>DateOut<=3;WHEN 81=>DateOut<=5; WHEN 82=>DateOut<=3;WHEN 83=>DateOut<=3; WHEN 84=>DateOut<=5;WHEN 85=>DateOut<=6; WHEN 86=>DateOut<=7;WHEN 87=>DateOut<=9; WHEN 88=>DateOut<=6;WHEN 89=>DateOut<=6; WHEN 90=>DateOut<=6;WHEN 91=>DateOut<=6; WHEN 92=>DateOut<=6;WHEN 93=>DateOut<=6; WHEN 94=>DateOut<=5;WHEN 95=>DateOut<=6; WHEN 96=>DateOut<=8;WHEN 97=>DateOut<=8; WHEN 98=>DateOut<=8;WHEN 99=>DateOut<=9; WHEN 100=>DateOut<=12;WHEN 101=>DateOut<=12; WHEN 102=>DateOut<=12;WHEN 103=>DateOut<=10;

Page 22: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 22

任务 3.1 实施步骤 WHEN 104=>DateOut<=9;WHEN 105=>DateOut<=9; WHEN 106=>DateOut<=10;WHEN 107=>DateOut<=9; WHEN 108=>DateOut<=8;WHEN 109=>DateOut<=8; WHEN 110=>DateOut<=6;WHEN 111=>DateOut<=5; WHEN 112=>DateOut<=3;WHEN 113=>DateOut<=3; WHEN 114=>DateOut<=3;WHEN 115=>DateOut<=3; WHEN 116=> DateOut<=8;WHEN 117=>DateOut<=8; WHEN 118=>DateOut<=8;WHEN 119=>DateOut<=8; WHEN 120=>DateOut<=6;WHEN 121=>DateOut<=8; WHEN 122=>DateOut<=6;WHEN 123=>DateOut<=5; WHEN 124=>DateOut<=3;WHEN 125=>DateOut<=5; WHEN 126=>DateOut<=6;WHEN 127=>DateOut<=8; WHEN 128=>DateOut<=5;WHEN 129=>DateOut<=5; WHEN 130=>DateOut<=5;WHEN 131=>DateOut<=5; WHEN 132=>DateOut<=5;WHEN 133=>DateOut<=5; WHEN 134=>DateOut<=5;WHEN 135=>DateOut<=5; WHEN 136=>DateOut<=0;WHEN 137=>DateOut<=0; WHEN 138=>DateOut<=0; WHEN OTHERS=>DateOut<=0; END CASE; END PROCESS; Index<=CONV_STD_LOGIC_VECTOR(DateOut,4); END;

Page 23: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 23

任务 3.1 实施步骤

4 、仿真图 图 3-3 是控制电路模块在 Quartus软件中的仿真图,其中四位二进制数 Index 用十进制表示。

图 3-3 控制电路模块

Page 24: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 24

任务 3.1 实施步骤

(二 ) 分频系数、音符显示数据产生模块 1 、设计分析 此模块的功能是产生提供给可控分频模块的分频系数、提供给外围数码

管和外围 LED 的数据。乐曲“梁祝”是 F 调,其音符对应的频率数据见表 3-3 ,又因为可控分频模块的输入时钟设为 12 MHz ,可控分频模块设计有 12预分频和 2 后分频,经 12预分频和 2 后分频后的频率为 500 000 Hz ,故供给可控分频模块的分频系数 Tone =211 -500 000/f ,又考虑到最大分频系数为 1397 ,其二进制表示是 11010011010 ,故可控分频模块的计数器为十一位二进制计数器。可得音符信号对应的分频系数、音符显示数据和高低音指示电平见表 3-3

Page 25: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 25

任务 3.1 实施步骤

表 3-3 音符信号对应的分频系数、音符显示数据和高低音指示电平

Page 26: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 26

任务 3.1 实施步骤

2 、设计文件 VHDL 描述 对于简单的组合逻辑模块的 VHDL描述,最常用的方法是应用 CASE

语句或 IF 语句来描述。在设计文件中: Index 为四位二进制信号,表示输入音符信息 ; CODE 为四位二进制信号,是提供给外围数码管的用于显示简谱音符符

号的数据 ; LED 是提供给外围 LED 的用于显示高低音的数据 ; Tone 是供给可控分频模块的分频系数。

Page 27: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 27

任务 3.1 实施步骤 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0) ; CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0) ; LED : OUT STD_LOGIC; Tone : OUT STD_LOGIC_VECTOR (10 DOWNTO 0) ); END; ARCHITECTURE one OF ToneTaba IS BEGIN Search : PROCESS(Index) BEGIN CASE Index IS -- 译码电路,查表方式,控制音调的预置数 WHEN "0000" => Tone<="11111111111" ; CODE<="0000"; LED <='0'; WHEN "0001" => Tone<="01001101000" ; CODE<="0001"; LED <='0'; WHEN "0010" => Tone<="01100000101" ; CODE<="0010"; LED <='0'; WHEN "0011" => Tone<="01110010000" ; CODE<="0011"; LED <='0'; WHEN "0100" => Tone<="01111010000" ; CODE<="0100"; LED <='0'; WHEN "0101" => Tone<="10001000100" ; CODE<="0101"; LED <='0';

Page 28: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 28

任务 3.1 实施步骤 WHEN "0110" => Tone<="10010101101" ; CODE<="0110"; LED <='0'; WHEN "0111" => Tone<="10100001010" ; CODE<="0111"; LED <='0'; WHEN "1000" => Tone<="10101011100" ; CODE<="0001"; LED <='1'; WHEN "1001" => Tone<="10110000010" ; CODE<="0010"; LED <='1'; WHEN "1010" => Tone<="10111001000" ; CODE<="0011"; LED <='1'; WHEN "1011" => Tone<="10111101000" ; CODE<="0110"; LED <='1'; WHEN "1100" => Tone<="11000100010" ; CODE<="0101"; LED <='1'; WHEN "1101" => Tone<="11001010110" ; CODE<="0110"; LED <='1'; WHEN "1110" => Tone<="11010000100" ; CODE<="0111"; LED <='1'; WHEN "1111" => Tone<="11010011010" ; CODE<="0001"; LED <='1'; WHEN OTHERS => NULL; END CASE; END PROCESS; END;

Page 29: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 29

任务 3.1 实施步骤

3 、仿真图 图 3-4 是分频系数、音符显示数据产生模块在 Quartus软件中的仿真图,其中

CODE 用十进制 (总线形式 )表示简谱音符符号的数据, Index 用二进制 (总线形式 )表示输入音符信息、 Tone 用二进制 (总线形式 )表示分频系数。

图 3-4 分频系数、音符显示数据产生模块仿真图

Page 30: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 30

任务 3.1 实施步骤

(三 ) 可控分频模块 1 、设计分析 此模块的功能是用一个可控分频电路来产生播放音乐所需的每个音。其

实质是设计一个可预置数的计数器,预置数就是分频系数。 作为初步解决方案,本任务采用偶数分频近似代替奇数分频的方法,把整数分频电路变成偶数分频电路来设计。可控分频模块是一个具有 12预分频和 2 后分频的可控分频电路。可控分频模块的输入时钟 clk 频率选12 MHz ,为了使可控分频模块分频系数取值范围比较合适,输入时钟先经 12 分频,同时为了使输出信号 SpkS 具有较高的驱动功率,可控分频后再经 2 分频,使输出信号 SpkS 具有 50% 的占空比,从而具有较高的驱动功率。

2 、设计文件 VHDL描述

Page 31: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 31

任务 3.1 实施步骤 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY Speakera IS PORT ( clk : IN STD_LOGIC; Tone : IN STD_LOGIC_VECTOR (10 DOWNTO 0); SpkS : OUT STD_LOGIC ); END; ARCHITECTURE one OF Speakera IS SIGNAL PreCLK, FullSpkS : STD_LOGIC; BEGIN DivideCLK : PROCESS(clk) --12 分频计数器 VARIABLE Count4 : STD_LOGIC_VECTOR (3 DOWNTO 0) ; BEGIN IF clk'EVENT AND clk = '1' THEN if Count4>11 THEN PreCLK <= '1'; Count4 := "0000"; else Count4 := Count4 + 1; PreCLK <= '0';END IF; END IF; END PROCESS;

Page 32: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 32

任务 3.1 实施步骤 GenSpkS : PROCESS(PreCLK, Tone)-- 11位可预置计数器,非等占空比分频电路 VARIABLE Count11 : STD_LOGIC_VECTOR (10 DOWNTO 0); BEGIN IF PreCLK'EVENT AND PreCLK = '1' THEN IF Count11 = 16#7FF# THEN Count11 := Tone ; FullSpkS <= '1'; ELSE Count11 := Count11 + 1; FullSpkS <= '0'; END IF; END IF; END PROCESS; DelaySpkS : PROCESS(FullSpkS)--将输出再 2 分频,等占空比频电路,故整个电

路构成等占空比频电路,使扬声器有足够功率发音 VARIABLE Count2 : STD_LOGIC; BEGIN IF FullSpkS'EVENT AND FullSpkS = '1' THEN Count2 := NOT Count2; IF Count2 = '1' THEN SpkS <= '1'; ELSE SpkS <= '0'; END IF; END IF; END PROCESS; END;

Page 33: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 33

任务 3.1 实施步骤

3 、仿真图 图 3-5 是可控分频模块在 Quartus软件中的仿真图。其中 clk 输入频率为 12M ,由于频率太大,显示的是一条黑带, Tone 是用二进制(总线形式)表示的分频系数, Spks 是可控分频模块输出音频信号。

图 3-5 可控分频模块仿真图

Page 34: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 34

任务 3.1 实施步骤

(四 ) 播放电路顶层模块设计 播放电路顶层模块用原理图输入法设计。把以上各子模块在 Quartus创建图元,新建一个原理图编辑文件,然后把创建的图元组装起来构成一个完整的电路进行编译,仿真。

1 、播放电路顶层原理图输入描述。

图 3-6 播放电路原理图输入

Page 35: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 35

任务 3.1 实施步骤

2 、播放电路仿真图

图 3-7 播放电路仿真图

Page 36: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 36

任务 3.1 实施步骤

五、检查 分别编译各底层模块和顶层电路,并分别仿真底层模块和顶层电路。通

过后,应将源代码下载到硬件中做最后的验证。 六、评估 对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,设计报告应包括所应用到的 EDA 方法及知识的总结。

Page 37: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 37

任务 3.2 实施步骤

一、资讯 音乐演奏电路由琴键输入识别模块电路;分频系数、 LED 数据产生模

块;可控分频模块电路构成。在音乐播放电路设计中我们已设计分频系数、 LED 数据产生模块;可控分频模块电路。所以设计音乐演奏电路重点在设计琴键输入识别模块电路;以及把音乐演奏电路与音乐播放电路总装成一个简易电子琴。

二、计划 设计一个琴键输入识别模块电路,产生歌谱的音符信号;改进分频系

数、 LED 数据产生模块电路,设置音乐演奏与播放功能选择端;把音乐演奏电路与音乐播放电路总装成一个简易电子琴。

Page 38: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 38

任务 3.2 实施步骤

三、决策 1. 琴键输入识别模块电路设计方案 琴键输入识别模块电路主要解决按键后产生相应的音符信号与键盘去抖动。音

符信号产生用 VHDL 选择语句容易实现;键盘去抖动的方法有计数器、移位寄存器、 D 型触发器延时、采样型防抖微分电路四种,可选择一种完成去抖动设计

2.改进分频系数、 LED 数据产生模块电路 主要改进分频系数、 LED 数据产生模块电路,实现音乐演奏与播放功能选择 3. 音乐演奏电路与音乐播放电路总装 把音乐演奏电路与音乐播放电路总装成简易电子琴,然后编译、仿真、下载。 四、实施 这个任务学生自己动手做,老师现场指导,学生在做中完成学习任务。下面给

出演奏电路与简易电子琴参考设计方案。 1. 演奏电路设计(参考) 学生在方案实施过程中,可先设计一个琴键输入识别模块电路(注意键盘去抖动

设计)。然后利用琴键输入识别模块电路,音乐播放电路中已设计好的分频系数、 LED 数据产生模块,可控分频模块组装音乐演奏电路顶层文件(原理图输入或 VHDL 设计输入均可)。演奏电路顶层设计文件 ,见图 3-8 。

Page 39: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 39

任务 3.2 实施步骤

图 3-8 演奏电路顶层设计文件

Page 40: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 40

任务 3.2 实施步骤

2. 简易电子琴总装电路设计(参考) 改进分频系数、 LED 数据产生模块电路设计,使其具有音乐播放与演奏

选择功能。然后把各模块总装成一个简易电子琴电路如图 3-9 所示,仿真图如图 3-10 所示

图 3-9 简易电子琴顶层设计文件

Page 41: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 41

任务 3.2 实施步骤

图 3-10 简易电子琴仿真

Page 42: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 42

任务 3.2 实施步骤

五、检查 分别编译各底层模块和整个电路设计,并分别仿真控制电路模块和分频

系数、 LED 数据产生模块。通过后,将源代码下载到硬件中做最后的验证。

六、评估 对本次设计进行评估,可尝试更好的方案、方法。写出设计报告,设计报告应包括所应用到的 EDA 方法及知识的总结。

Page 43: 学 习 情 境 三: 简易电子琴

绵阳职业技术学院 信息工程系

D. 相关知识

硬件描述语言 VHDL

音乐知识

Page 44: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 44

3.1 引言3.2 VHDL 的基础知识3.3 VHDL 结构体的描述方式3.4 结构体的子结构形式 3.5 顺序语句和并发语句 3.6 VHDL 中的信号和信号处理3.7 元件例化 3.8 配置

硬件描述语言 VHDL-- 目录

Page 45: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 45

VHDL 的特点: 1. 支持多种设计方法和技术。 2. 与工艺技术独立。 3. 多层次描述能力。 4. 标准化 , 易于共享和复用。VHDL 程序的构件 实体 结构体 程序包 配置 库VHDL 的版本: IEEE STD 1076.1987[LRM87]              IEEE STD   1076.1993[LRM93]

3.1 引言

Page 46: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 46

3.2 VHDL 的基础知识

Page 47: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 47

8 位计数器

ENTITY counter IS PORT( data_in: IN INTEGER RANGE 0 TO 255;

clk,ena,load,clear: IN STD_LOGIC; Count_out: OUT

INTEGER RANGE 0 TO 255);

END counter;

enaclk

loadclear

data_in

count_out

实体 count

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164 .ALL;USE IEEE.STD_LOGIC_ARITH .ALL;USE IEEE.STD_LOGIC

_UNSIGNED.ALL;

3.2.1 VHDL 程序的结构

Page 48: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 48

8 位计数器的功能描述 : ARCHITECTURE behav_count OF counter IS SIGNAL counter_data: INTEGER RANGE 0 TO 255; BEGIN PROCESS( clk,clear,load ) BEGIN IF ( clear =‘0’ ) THEN counter_data=0; ELSIF ( clk ‘EVENT AND clk=‘1’ ) THEN IF ( load=‘1’ ) THEN counter_data <=data_in; ELSE IF ( ena=‘1’) THEN IF counter_data=255 THEN counter_data<=0; ELSE counter_data<=counter_data+1; ENDIF; ELSE counter_data<=counter_data; ENDIF; ENDIF; ENDIF; END PROCESS; count_out<=counter_data; END behav_count;

进程

结构体

3.2.1 VHDL 程序的结构

Page 49: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 49

ENTITY 实体名 IS[GENERIC ( 类属表 ) ;][PORT ( 端口表 ) ;]

[ 实体说明部分 ;]

[BEGIN 实体语句部分 ;]

END 实体名 ;

GENERIC ( 端口名 {,端口名 }:类型名 [:= 初始值 ]

{ 端口名 {,端口名 }:类型名 [:= 初始值 ]});

例 GENERIC ( m :TIME :=3ns);

1 实体 ( ENTITY) 说明

(1) 类属说明

3.2.1 VHDL 程序的结构

Page 50: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 50

PORT ( 端口名 {, 端口名 } : 方向 数据类型 ;::

端口名 {, 端口名 } : 方向 数据类型 );

端口方向 实体

INOUT

INOUTBUFFER

LINKAGE

(2) 端口说明

3.2.1 VHDL 程序的结构

Page 51: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 51

2 结构体 (ARCHITECTURE) ARCHITECTURE 结构体名 OF 实体名 IS [ 定义语句 ] BEGIN [ 并行处理语句 ] END 结构体名 ;

=

D Q

clk

3.2.1 VHDL 程序的结构

Page 52: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 52

设计库 IEEE 库

预定义库(隐含打开 )

STD 库 STANDARD( 隐含说明 )TEXTIO( 用 UES 说明 )

WORK 库

资 源 库( 用 LIBRARY)

其它库

STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNEDNUMERIC_STDNUMERIC_BITMATH_REALMATH_COMPLEXVITAL_TIMINGVITAL_PRIMITIVE

3 库 (LIBRARY)

3.2.1 VHDL 程序的结构

Page 53: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 53

PACKAGE 程序包名 IS [ 说明语句 ] END [PACKAGE] [ 程序包名 ] ;

PACKAGE BODY 程序包名 IS [ 说明语句 ] END [PACKAGE BODY] [ 程序包名 ] ;

程序包说 明

程序包体

4 程序包 (PACKAGE)

3.2.1 VHDL 程序的结构

Page 54: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 54

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE upac IS CONSTANT k : INTEGER := 4; TYPE instruction IS ( add, sub, adc, inc, srf, slf , mov ); SUBTYPE cpu_bus IS STD_LOGIC_VECTOR ( k-1 DOWNTO 0 ); END upac;

程序包设计举例 1

3.2.1 VHDL 程序的结构

Page 55: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 55

PACKAGE example IS CONSTANT pi : REAL := 3.1415926; CONSTANT defer : INTEGER; FUNCTION mean (a, b, c : REAL) RETURN REAL;

COMPONENT and IS GENERIC ( tpd1, tpd2 : TIME := 3ns);

PORT ( in1, in2 : IN BIT ; y : OUT BIT ); END COMPONENT and;

END example; PACKAGE BODY example IS

CONSTANT defer : INTEGER := 5; FUNCTION mean ( a, b, c : REAL ) RETURN REAL IS BEGIN RETURN ( a+b+c)/3.0; END FUNCTION mean;

END PACKAGE BODY example;

程序包体的应用

3.2.1 VHDL 程序的结构

Page 56: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 56

1 . STANDARDD 程序包 2. TEXTIO 程序包 3 . STD_LOGIC_1164 程序包 4 . NUMERICSTD 和 NUMERIC_BIT程序包

5 . VITAL_TIMING 和VITAL_PRIMITIVE 程序包

6 . MATH_REAL 和 MATH_COMPLEX 程序包

STD

IEEE

3.2.2 VHDL 常用资源库中的程序包

Page 57: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 57

1 .对象 常量 ( CONSTANT ) 变量 ( VARIABLE ) 信号 ( SIGNAL ) 文件( FILE ) ( 1 )常量 CONSTANT 常量名:数据类型∶ = 标达式;例如 : CONSTANT Vcc : REAL ∶=5.0 ;( 2 )变量 VARIABLE 变量名:数据类型 约束条件∶ = 表达式; 例 : VARIABLE x: STD_LOGIC ∶=’0’; VARIABLE a, b : INTEGER ;

3.2.3 数据对象和类型

Page 58: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 58

SIGNAL 信号名:数据类型 约束条件∶ = 表达式; 例如: SIGNAL clk : BIT∶= ‘0’ ;除了基本信号之外,信号也用于表示不同宽度的总线,例如: SIGNAL bus_a : STD_LOGIC_VECTOR ( 7 DOWNTO 0 );

SIGNAL bus_b : STD_LOGIC_VECTOR ( 0 DOWNTO 7 );

信号在说明语句中用赋值号“ := ” 赋初始值 ,信号量用代入语句赋值,并可延时 , 信号量的代入 : y <= a AND b; 在 VHDL 语言中,信号是全局量。

( 3 )信号

3.2.3 数据对象和类型

Page 59: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 59

(1)VHDL 语言所定义的标准数据类型有 10 个:整数类型 1 , -2实数类型 1.2, 1.2E+3位 ‘ 0’, ‘1’ 位矢量 “ 001100” , X“00BE” 布尔量 真( TRUE ) , 假( FALSE )字符 字符是用单引号括起来的字母或符号,字符区分大小写,‘ A’ ’、 a’ ‘、 B’ ’、 b’ 都是不同的字符。

字符串 字符串是由双引号括起来的一个字符序列。例如:“ COUNTER” “、 8bit_bus” 等。

3.2.3 数据对象和类型

2. 数据类型 (1) VHDL 语言所定义的标准数据类型(2) 用户自定义的数据类型(3) 用户定义的子类型(4) 数据类型的转换(5) IEEE “标准数据类型 STD_LOGIC” 和“ STD_LOGIC_VECTOR”

Page 60: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 60

3.2.3 数据对象和类型

时间类型 55 sec ; 2 min 。在 STANDARD 程序包中给出的时间预定义单位为: fs , ps, ns, μs, ms, sec, min, hr 。错误等级 错误等级在仿真时用于表示系统工作的状态。错误等级分为四钟: NOTE (注意)、 WARING (警告)、 ERROR (错误)和 FAILURE (失败)。自然数( NATURAL )和正整数( POSITIVE )

Page 61: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 61

TYPE 数据类型名 { ,数据类型名 } 数据类型定义;枚举类型 TYPE 数据类型名 IS (元素,元素,……); 例如: TYPE instruction IS (add, sub, inc, srl, srf, mov,dec,);

3.2.3 数据对象和类型

( 2 )用户定义的数据类型

Page 62: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 62

整数类型和实数类型 TYPE digit IS INTEGER RANGE 0 TO 9; 数组 TYPE 数组名 IS ARRAY [ 下标约束 ] OF 数组元素 的类型名;

TYPE word8 IS ARRAY (1 TO 8 ) OF BIT; TYPE word8 IS ARRAY ( INTEGER RANGE 1 TO 8 ) OF BIT; TYPE word8 IS ARRAY (INTEGER RANGE <>) OF STD_LOGIC; -- 无界数组 TYPE RAM IS ARRAY (1 TO 8, 1 TO 10 ) OF BIT ; -- 二维数组 TYPE instruction IS ( add, sub, inc, dec , srl, srf, mov, xfr ); TYPE insflag IS ARRAY (instruction add TO srf ) OF

STD_LOGIC ; 多维数组仅用于仿真生成硬件的抽象模型,而不能用于逻辑综合。

3.2.3 数据对象和类型

Page 63: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 63

时间类型 (物理类型 ) TYPE 数据类型名 IS 范围 UNITS 基本单位; 单位; END UNITS ;例如: TYPE time IS RANGE –1E18 TO 1E18 UNITS fs ; ps =1000 fs ; ns =1000 ps ; us =1000 ns ; ms =1000 us ; sec =1000 ms ; min =60 sec ; hr =60 min ; END UNITS;

3.2.3 数据对象和类型

Page 64: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 64

TYPE capacitor IS RANGE 0 TO 1E18 UNITS fF ; pF =1000 fF ; nF =1000 pF ; uF =1000 nF ; mF =1000 uF ; F =1000 mF ; END UNITS;

3.2.3 数据对象和类型

物理量的定义应用

Page 65: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 65

记录是由不同类型的数据集合在一起形成的数据类型, TYPE 数据类型名 IS RECODE           元素名:数据类型; 元素名:数据类型; ∶ END RECODE;记录经常用于描述总线和通讯协议。例如: TYPE PCI_bus IS RECODE Addr : STD_LOGIC_VECTOR (31 DOWNTO 0 ) ; Data : STD_LOGIC_VECTOR ( 31 DOWNTO 0 ) ; R0 : INTEGER ; Inst : instruction ; END RECODE ;

3.2.3 数据对象和类型

记录

Page 66: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 66

文件类型是在系统环境中定义为代表文件的一类客体。其说明格式为: TYPE 文件类型名 IS FILE 限制; 例如: TYPE text IS FILE OF string ; 在 TEXTIO 中有两个预定义的标准文本文件: FILE input : text OPEN read_mode IS “STD_INPUT”; FILE output : text OPEN write_mode IS “STD_OUTPUT”;

3.2.3 数据对象和类型

文件类型

Page 67: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 67

存取类型用于为客体之间建立联系,或者给新对象分配或释放存储空间。其说明格式为:

TYPE 数据类型名 IS ACCESS 限制; 例如,在 TEXTIO 程序包中定义了一个存取类型的量: TYPE line IS ACCESS string ;

3.2.3 数据对象和类型

存取类型

Page 68: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 68

用户定义的子类型是用户对已定义的数据类型,作一些范围限制而形成的一种新的数据类型。子类型的名称通常采用用户容易理解的名字。子类型定义的一般格式为:

SUBTYPE 子类型名 IS 数据类型名 [ 范围 ] ; 例如,在“ STD_LOGIC_VECTOR” 基础上形成的子类: SUBTYPE iobus IS STD_LOGIC_VECTOR ( 7 DOWNTO 0 );

SUBTYPE digit IS INTEGER RANGE 0 TO 9 ;通常,用户定义的数据类型和子类型都放在程序包中定义,然后通过USE 语句调用。

3.2.3 数据对象和类型

(3) 用户定义的子类型

Page 69: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 69

数字系统中的逻辑值有 : ‘0’ 、‘ 1’ 和‘ X’ ; 数字系统中的逻辑强度:强强度 F 、电阻强度 R 、弱电阻强度 W 、高阻强度

Z 。

a

by

y<=a;y<=b;

3.2.3 数据对象和类型

(4) 数据类型的转换(5) IEEE “标准数据类型 STD_LOGIC” 和“ STD_LOGIC_VECTOR”

Page 70: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 70

“IEEE.STD_LOGIC” 九态数值模型如下:‘U’—— 初始值; ‘ X’—— 不定态;

‘1’—— 逻辑 1 ; ‘ 0’—— 逻辑 0 ; ‘Z’—— 高阻态; ‘ W’—— 弱信号不定;

‘L’—— 弱信号 0 ‘H’—— 弱信号 1 ; ‘—’——不可能情况 。

Vcc Vcc

Vo Vo

3.2.3 数据对象和类型

逻辑强度

Page 71: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 71

结构体说明 信号说明,类型说明,元件说明,常量

说明和子程说明 BEGIN

并行语句 块语句

并行语句集合元件例化

产生另一个实体的元件例化信号赋值语句过程调用语句

调用预定义的算法进程语句

定义一个算法

结构体结构体的描述方式

行为描述

RTL 描述

结构化描述

3.3 VHDL 结构体的描述方式

Page 72: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 72

所谓结构体的行为描述( Behavioral Descriptions ),即对设计实体按算法的路径进行描述。行为描述往往不涉及设计实体的电路结构,是设计实体整体功能的一种抽象描述。在行为描述方式的程序中,往往大量采用算术运算、关系运算、惯性延时、传输延时等难以进行逻辑综合和不能进行逻辑综合的 VHDL 语句。采用行为描述的 VHDL 程序主要用于系统数学模型的仿真或系统工作原理的仿真,少数也可以用于综合。

8 位比较器a=b

a

bc

3.3.1 结构体的行为描述

Page 73: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 73

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comparator IS PORT ( a, b : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ); c : OUT STD_LOGIC) ; END comparator ; ARCHITECTURE behavior OF comparator IS BEGIN PROCESS ( a, b ) BEGIN IF a = b THEN c<=’1’ ; ELSE c<=’0’; END IF ; END PROCESS; END behavior ;

3.3.1 结构体的行为描述8 位比较器结构体的行为描述

Page 74: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 74

RTL ( Regesist Transform Leval )描述,即寄存器传输级描述,有的文献称为数据流描述。 RTL 描述是用于逻辑综合的实体描述方法,与行为描述不同, RTL 描述中指定了各个寄存器的时钟,确定了存储单元的复用结构及总线,指定了电路元件之间的连接关系。 RTL 数据模型描述的语句与实际寄存器的结构模型之间存在直接的映射关系,程序的描述隐含了电路结构。在 RTL 描述中,信号代表了硬件中数据的实际移动方向以及电路的互连关系。由于 RTL描述用于逻辑综合,故 RTL 描述对语句有严格限制,一些难以综合的语句(如信号代入中的延时等)、一些抽象的数据类型(如实数、记录、文件等)和一些难以综合或不可综合的运算符(如除法 / 、乘方 ** 等),都不能在程序中使用。

3.3.2 结构体的 RTL 描述

Page 75: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 75

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY comparator IS PORT ( a, b : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ; c : OUT STD_LOGIC ) ; END comparator ; ARCHITECTURE rtl OF comparator IS BEGIN

3.3.2 结构体的 RTL 描述

8 位比较器的布尔方程 RTL 描述

Page 76: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 76

a0b0

a1b1

a6b6

a7b7

=

&

=

=

=c

x0x1

x6

x7

3.3.2 结构体的 RTL 描述

8 位比较器的布尔方程 RTL 描述的逻辑电路

Page 77: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 77

c<= NOT( a (0) XOR b(0)) AND NOT (a (1) XOR b (1)) AND NOT (a(2) XOR b(2)) AND NOT (a(3)XOR b(3)) AND NOT (a(4) XOR b(4)) AND NOT (a(5) XOR b(5)) AND NOT (a(6) XOR b(6)) AND NOT (a(7)XOR b(7)) ; END rtl ;

RTL 描述的限制1. 为了保证逻电路的正确,应对不定态“ X”状态有所限制;2. 禁止在一个进程中存在两个寄存器描述;寄存器描述中必须代入信号值;

3. 关联性强的信号应放在一个进程中;4 .避免使用 WAIT FOR xx ns 或 AFTER xx ns 类语句;

3.3.2 结构体的 RTL 描述

Page 78: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 78

结构化描述是常用的层次化设计方法。对于一个复杂的电子系统,可将其分解成若干个子系统,子系统再可以进一步分解成若干个模块。层次化设计便于多人协作,同时并行设计。在结构化设计中,每个设计层次可以作为一个元件,而无需考虑元件的复杂性。每个元件可以分别仿真,然后将各个元件组合起来构成系统,进行整体调试。

结构化描述的系统功能体现在所调用的元件功能及相互间的互连关系中。

3.3.3 结构体的结构化描述

Page 79: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 79

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comparator IS PORT ( a,b: IN STD_LOGIC_VECTOR( 7 DOWNTO 0 ); c: OUT STD_LOGIC ); END comparator; ARCHITECTURE structure OF comparator IS SIGNAL x: STD_LIGIC_VECTOR ( 7 DOWNTO 0 ) ; COMPONENT xnor2 PORT ( a,b: IN STD_LOGIC; c: OUT STD_LOGIC ); END COMPONENT;

3.3.3 结构体的结构化描述8 位比较器结构体的结构化描述

Page 80: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 80

BEGIIN U0 : xnor2 PORT MAP ( a(0), b(0), x (0) ); U1 : xnor2 PORT MAP ( a(1), b(1), x (1) ); U2 : xnor2 PORT MAP ( a(2), b(2), x (2) ); U3 : xnor2 PORT MAP ( a(2), b(2), x (2) ); U4 : xnor2 PORT MAP ( a(4), b(4), x (4) ); U5 : xnor2 PORT MAP ( a(5), b(5), x (5) ); U6 : xnor2 PORT MAP ( a(6), b(6), x (6) ); U7 : xnor2 PORT MAP (a(7),b(7),x (7)); c<= x(0) AND x(1) AND x(2) AND x (3) AND x(4) AND x(5) AND x(6) AND x(7)                  ; END structure;

3.3.3 结构体的结构化描述

Page 81: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 81

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY xnor2 IS PORT ( a,b: IN STD_LOGIC; c: OUT STD_LOGIC ); END xnor2; ARCHITECTURE bool OF xnor2 IS BEGIN c<=NOT ( NOT a)AND b OR a AND( NOT b)); END bool; 用户将自己设计的电路标准化后作为一个元件放在库中供调用的过程称为元件例化,或者称为标准化。

核 ( IP Core ) 软核 固核 硬核

3.3.3 结构体的结构化描述底层元件二输入同或门的描述

Page 82: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 82

COMPONENT 语句 COMPONENT 元件名 [GENERIC 说明; ] --参数说明,仅整型可综合,

[PORT 说明; ] END COMPONENT ;

映射语句 标号名:元件名

[GENERIC MAP ( 类属关联表 );] [ PORT MAP (端口关联表) ; ]

标号名在结构体中必须是唯一的。

3.3.3 结构体的结构化描述元件例化的主要语句

Page 83: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 83

参数映射关系和端口映射关系有两种:位置映射和名称映射。 1 .位置映射方法 PORT MAP (a(0) , b(0), x(0) ); PORT ( a , b: IN STD_LOGIC ; c: OUT STD_LOGIC ); -- 元件说明语句

2. 名称映射方法 U0:xnor2 PORT MAP (a=>a(0), c=> x(0), b=>b(0) );

3.3.3 结构体的结构化描述映射方式

Page 84: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 84

进程 (PROCESS)

块 (BLOCK)

子程序 (SUBPROGRAM)

结构体

3.4 结构体的子结构形式

Page 85: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 85

[ 进程名: ] PROCESS [(敏感信号量表 )] 说明语句 ∶ BEGIN 顺序执行语句 ∶ END PROCESS [ 进程名 ] ; 1.进程内部所有的语句都是顺序执行的, 2. 进程和进程之间是并行执行的, 3 .进程的启动由 PROCESS 语句的敏感信号量表中的信号量触发,也可以由 WAIT 语句触发。

3.4.1 进程

Page 86: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 86

利用进程语句设计一位加法器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half-adder IS PORT(a, b: IN STD_LOGIC; sum, carry: OUT STD_LOGIC); END half-adder; ARCHITECTURE behav OF half-adder IS BEGIN PROCESS (a, b) BEGIN sum<= a XOR b AFTER 5nS; carry<= a AND b AFTER 5nS; END PROCESS END behav;

3.4.1 进程进程的应用

Page 87: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 87

LIBRARY IEEE USE IEEE.STD_LOGIC_1164.ALL ; ENTITY dff4 IS PORT (clk, d, clr, pset : IN STD_LOGIC ; q : OUT STD_LOGIC )                           ; END dff4 ; ARCHITECTURE rtl OF dff4 IS BEGIN PROCESS (clk, pset, clr) BEGIN IF (clr = '0' ) THEN q <= ‘0' ; ELSIF (pset = '0') THEN q <= ‘1' ; ELSIF (clk 'EVENT AND clk = '1') THEN q <= d ; END IF ; END PROCESS ; END rtl ;

D Q

clk

clr

pset

3.4.1 进程用进程设计 D 触发器

Page 88: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 88

(1) 无限等待 WAIT ; (2) 敏感信号量变化等待 WAIT ON 信号名 [ ,信号名 ] ; (3) 条件等待 WAIT UNTIL 表达式; (4) 时间等待 WAIT FOR 时间表达式; 例如 :WAIT FOR 20nS ; -- 同步点在延时 20nS 后, WAIT ON clk, interrupt FOR 5nS;--当信号 clk 或 interrupt 变化 5nS 后启动进程。

3.4.1 进程进程启动的 WAIT 语句

Page 89: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 89

硬件的行为描述中,构造算法模型实际上就是把描述系统功能的自然语言翻译成为一组进程,每个进程完成不同的功能。为了方便系统的行为描述,通常用进程模型图( PMG )表示系统的行为。如图所示的系统分解成四个进程,每个进程完成一定的功能,进程之间的关联由箭头线表示。

进程 1 进程 2

进程 4进程 3

P1

P3

P2

P4

P12

P31 P24

P34

P14

3.4.2 复杂结构体的多进程组织方法

Page 90: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 90

ENTITY pro_com IS PORT (sa: IN BIT, q: OUT BIT) END pro_com; ARCHITECTURE folow OF pro_com IS SINGAL sta, stb: BIT: =’0’; BEGIN A: PROCESS (sa, sta) BEGIN IF (sa‘EVENT AND sa=’1’) OR (sta’EVENT AND sta=’1’) ; THEN stb<=‘1’ AFTER 20nS ; ‘0’ AFTER 30nS; ENDIF; END PROCESS A;

进程 A

进程 B

sa

stb sta

q

3.4.2 复杂结构体的多进程组织方法两个进程间的通信

Page 91: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 91

B: PROCESS (stb) BEGIN IF (stb’EVENT AND stb = ’1’) THEN sta<=’1’ AFTER 10nS; ‘0’ AFTER 20nS; ENDIF; END PROCESS B; END folow;

0 10 20 30 40 50 60 70 80

sa

stb

sta

3.4.2 复杂结构体的多进程组织方法

Page 92: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 92

块( BLOCK )是 VHDL 程序中又一种常用的子结构形式。采用多模块组织方法描述一个复杂的结构体,是一种结构化描述方法。

块名: BLOCK[ 条件表达式 ] [ 类属子句 类属接口表; ] [ 端口子句 端口接口表; ] [块说明部分 ] BEGIN                       : 并发执行语句 : END BLOCK[块名 ] ;

3.4.3 块

Page 93: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 93

从块的结构可以知道块具有如下特点:( 1 )块内的语句是并发执行的,运行结果与语句的书写顺序无关;

( 2 )在结构体内,可以有多个块结构,块在结构体内是并发运行的;

( 3 )块的运行有无条件运行和条件运行两种。条件运行的块结构称为卫式 BLOCK ( GUARDED BLOCK )。

( 4 )构内可以再有块结构,形成块的嵌套,组成复杂系统的层次化结构。

综上所述,块的内部结构与结构体类似,是一种层次化结构设计方法。

3.4.3 块块结构的特点

Page 94: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 94

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE bit32 IS -- 定义一个名为 bit32 的程序包 TYPE tw32 IS ARRAY (31 DOWNTO 0) OF STD_LOGIC; -- 定义一个名为 tw32 的数组 END bit32; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.bit32.ALL; ENTITY cpu IS PORT (clk, interrupt: IN STD_LOGIC; Addr: OUT TW32; -- 定义 32 位地址总线 Data: INOUT TW32); -- 定义 32 位数据总线 END cpu;

3.4.3 块块结构的使用方法

Page 95: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 95

ARCHITECTURE cpu_block OF cpu IS SIGNAL addr_bus, data_bus: TW32; BEGIN Alu: BLOCK --Alu块 SIGNAL Ad_bus: TW32; BEGIN                        :                                            :              --Alu功能描述

END BLOCK Alu;

3.4.3 块

Page 96: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 96

Register: BLOCK --寄存器组块 SIGNAL reg_bus: TW32; BEGIN Register1: BLOCK SIGNAL Ad_bus: TW32; --内层块引用外层块的信号 BEGIN                                             : --寄存器功能描述

END BLOCK register1;                                             : -- 其余寄存器的功能描述

END BLOCK register;                                                  : --cpu_blk 的其余功能描述

END cpu_blk;

3.4.3 块

Page 97: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 97

CPU

Addr

Data

clk

interrupt

addr_bus

data_bus

AluAd_bus

Regsiter

Reg_bus

Regsiter1

Ad_bus

cpu

3.4.3 块

Page 98: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 98

过程语句 过程( PROCEDURE )用过程语句定义。过程语句的结构如下:

PROCEDURE 过程名(参数 1 ;参数 2 ;……) IS [ 定义语句 ] ; -- 变量或常量定义 BEGIN [ 顺序处理语句 ] -- 过程描述语句 END 过程名;

3.4.4 子程序

Page 99: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 99

函数语句的结构为: FUNCTION 函数名 (参数 1, 参数 2;···) RETURN 数据类型名 IS

[ 定义语句 ] BEGIN [ 顺序处理语句 ] RETURN [返回变量名 ]; END 函数名 ;

3.4.4 子程序函数语句

Page 100: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 100

三种子结构体之间的关系

结构体块块

块 进程

子程序

进程

子程序

进程

子程序

子程序

子程序子程序

3.4.4 子程序

Page 101: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 101

结构体 进程块

并发语句块 (BLOCK) 语句

进程 (PROCESS) 语句信号代入语句

条件信号代入语句选择信号代入语句

生成 (GENERATE) 语句元件例化语句

并发过程调用语句

子程序顺序语句WAIT 语句

断言 (ASSRT) 语句信号代入语句变量赋值语句

CASE 语句IF 语句

LOOP 语句EXIT 语句

RETURN 语句过程调用语句NULL 语句

3.5 顺序语句和并发语句

Page 102: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 102

八 -三优先级编码器真值表 输 入 输出 d7 d6 d5 d4 d3 d2 d1 d0 q2 q1 q0

0 x x x x x x x 1 1 1 1 0 x x x x x x 1 1 0 1 1 0 x x x x x 1 0 1 1 1 1 0 x x x x 1 0 0 1 1 1 1 0 x x x 0 1 1 1 1 1 1 1 0 x x 0 1 0 1 1 1 1 1 1 0 x 0 0 1 1 1 1 1 1 1 1 0 0 0 0

3.5.1 顺序语句IF 语句的应用

Page 103: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 103

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY priority_encoder IS PORT ( d : IN STD_LOGIC_VECTOR ( 7 DOWNTO 0 ) ;

q : OUT STD_LOGIC_VECTOR( 2 DOWNTO 0 ) ) ;

END priority_encoder ; ARCHITECTURE example_if OF priority_encoderIS

BEGIN

3.5.1 顺序语句

Page 104: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 104

PROCESS ( d ) BEGIN IF ( d (7)=’0’ ) THEN q<= ”111”; ELSIF ( d (6) = ’0’ ) THEN q<= ”110”; ELSIF ( d (5) = ’0’ ) THEN q<= ”101”; ELSIF ( d (4) = ‘0’ ) THEN q<= ”100”; ELSIF ( d (3) = ‘0’ ) THEN q<= “011”;

3.5.1 顺序语句

Page 105: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 105

ELSIF ( d (2) = ‘0’ ) THEN q<= “010”; ELSIF ( d (1) =’0’ ) THEN q<= “001”; ELSE q<= “000”; END IF; END PROCESS; END example_if ;

3.5.1 顺序语句

Page 106: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 106

CASE 语句用于描述条件电路,但与 IF 语句不同。 IF 语句实现的是优先权电路,而 CASE 语句实现的是平衡电路。 CASE 语句常用于描述总线、译码器和平衡编码器的结构。 CASE 语句的一般格式如下:

CASE 条件表达式 IS WHEN 条件表达式的值 =>顺序处理语句; : WHEN 条件表达式的值 =>顺序处理语句; END CASE ;

3.5.1 顺序语句CASE 语句

Page 107: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 107

WHEN 中的条件有下述四种方式: WHEN 值 =>顺序处理语句; WHEN 值│值│……值│ =>顺序处理语句; --若干可列的值。 WHEN 值 TO 值 =>顺序处理语句;某个区间的值。 WHEN OTHERS=>顺序处理语句;  LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT ( a,b,d0,d1,d2,d3 : IN STD_LOGIC ; q : OUT STD_LOGIC ) ; END mux4;

3.5.1 顺序语句

Page 108: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 108

ARCHITECTURE example_case OF mux4 IS SIGNAL sel : INTEGER RANGE 0 TO 3 ; BEGIN PROCESS ( a,b,d0,d1,d2,d3 ) BEGIN sel<=’0’; IF ( a=’1’ ) THEN sel<=sel+1 ; END IF ;

3.5.1 顺序语句用 CASE 语句设计四选一电路

Page 109: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 109

IF ( b=’1’ ) THEN sel <=sel+2; END IF; CASE sel IS WHEN 0 => q<=d0; WHEN 1 => q<=d1; WHEN 2 => q<=d2; WHEN 3 => q<=d3; END CASE; END PROCESS; END example_case;

3.5.1 顺序语句

Page 110: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 110

上述程序所描述的是一个平衡结构的四选一电路 .

F

G

HOBUF

a

b

d0

d1

d2

d3

q

3.5.1 顺序语句CASE 语句设计的四选一电路实现

Page 111: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 111

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS

PORT (a, b, d0, d1 , d2, d3: IN STD_LOGIC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE example_if OF mux4 IS BEGIN PROCESS (a, b, d0,d1,d2,d3) BEGIN IF (a = ‘0’ AND b = ‘0’) THEN q <= d0;

3.5.1 顺序语句用 IF 语句设计四选一电路

Page 112: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 112

ELSIF (a = ‘1’ AND b = ‘0’) THE q <= d1; ELSIF (a = ‘0’ AND b = ‘1’) THEN q <= d2; ELSIF (a = ‘1’ AND b = ‘1’) THEN q <= d3; END IF; END PROCESS; END example_if;

3.5.1 顺序语句用 IF 语句设计四选一电路

Page 113: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 113

G

F

d0

a

b

d1

d2

d3

y

F

3.5.1 顺序语句用 IF 语句设计四选一电路是权电路

Page 114: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 114

1. 并发信号代入 目的信号量 <=敏感信号量表达式 : 一个并发信号代入语句实际上是一个进程的缩写。例如: ARCHITECTURE behav OF examp IS BEGIN output <= aANDb; END behav;

3.5.2 并发语句

Page 115: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 115

可等效于 ARCHITECTURE behav OF examp IS BEGIN PROCESS (a, b) BEGIN output <= aANDb; END PROCESS; END behav;

3.5.2 并发语句

Page 116: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 116

条件信号代入语句也是并发语句,它可以根据不同的条件将不同的表达式的值代入目的信号量,其书写格式为:

目的信号量 <= 表达式 1WHEN 条件 1 ELSE                                表达式 2WHEN条件 2 ELSE                                          :                                          :                                          : 表达式 n WHEN 条件 n ELSE

表达式 n + 1 ;

3.5.2 并发语句2. 条件信号代入语句

Page 117: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 117

选择信号代入语句类似于 CASE 语句,它对条件表达式进行测试,根据选择条件表达式的值将不同的信号表达式的值代入目的信号量。选择信号代入语句的书写格式如下:

WITH 选择条件表达式 SELECT         目的信号量 <= 信号表达式 1 WHEN 选择条件 1 信号表达式 2 WHEN 选择条件 2 : : 信号表达式 n WHEN 选择条件n ;

3.5.2 并发语句3 .选择信号代入语句

Page 118: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 118

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT (d0,d1,d2,d3, a, b: IN STD_LOIGC; q: OUT STD_LOGIC); END mux4; ARCHITECTURE behav OF mux4 IS SIGNAL sel, INTEGER; BEGIN

3.5.2 并发语句利用选择信号代入语句和选择信号代入语句设计的四选一电路

Page 119: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 119

WITH sel SELECT q <= d0 WHEN 0 d1 WHEN 1 d2 WHEN 2 d3 WHEN 3 ‘x’ WHEN OTHERS; sel <= 0 WHEN a = ‘0’ AND b = ‘0’ ELSE 1 WHEN a = ‘1’ AND b = ‘1’ ElSE 2 WHEN a = ‘0’ AND b = ‘1’ ELSE 3 WHEN a = ‘1’ AND b = ‘1’ ELSE 4; END behav;

3.5.2 并发语句

Page 120: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 120

上例中,根据 sel 的值选择代入值。选择信号代入语句在进程外使用,当被选择的信号 sel 变化时,程序就会启动执行,它与下例中使用 CASE 语句的进程的功能相当。

LIBRARY IEEE ; UES IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS PORT ( d0,d1,d2,d3 : IN STD_LOGIC; input : IN STD_LOGIC_VECTOR (1 DOWNTO 0 );

q : OUT STD_LOGIC ); END mux4;

3.5.2 并发语句

Page 121: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 121

ARCHITECTURE rtl OF mux4 IS BEGIN PROCESS ( input ) BEGIN CASE input IS WHEN "00"=> q<=d0; WHEN "01"=> q<=d1; WHEN"10"=> q<=d2; WHEN"11"=> q<=d3; WHEN OTHERS => q<='x'; END CASE; END PROCESS; END rtl;

3.5.2 并发语句

Page 122: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 122

4.参数传递( GENERIC )语句 5. 元件调用和端口映射语句

生成语句用于产生多个相同的结构和描述规则结构,在数字系统中常用于描述寄存器阵列、存储单元阵列、仿真状态编译器等。

GENERATE 语句有两种形式,即 FOR-GENERATE 和IF-GENERATE 。

FOR-GENERATE 语句的书写格式: 标号: FOR 变量 IN 不连续区间(即离散区 ) GENERATE                   〈并发处理的生成语句〉 END GENERATE[ 标号名 ] ;

6. 生成( GENERATE )语句

3.5.2 并发语句

Page 123: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 123

FOR-GENERATE 形式的生成语句用于描述结构相同的多重模式,在结构内是并发处理语句。在此结构不能使用 EXIT 语句和 NEXT 语句。

FOR-GENERATE 语句中的变量在逻辑综合时无意义;也不能在程序中引用。

IF-GENERATE 形式的生成语句书写格式如下: 标号: IF 条件 GENERATE            〈并发处理的生成语句〉 END GENERATE[ 标号名 ] ;这种形式的生成语句主要描述结构的例外(在某种条件下)情况。

3.5.2 并发语句

Page 124: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 124

4 位移位寄存器的设计。

Qclk D

Qclk D

Qclk D

Qclk D

aclk

x(0) x(1) x(2)

x(4) b

x(3)

3.5.2 并发语句生成语句的应用

Page 125: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 125

LIBRARTY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY shift_register IS PORT ( a , clk : IN STD_LOGIC ; b : OUT STD_LOGIC ); END shift_ register ; ARCHITECTURE gene_example OF shift_register IS COMPONENT dff PORT ( d , clk : IN STD _LOGIC ; q : OUT STD_LOGIC ); END COMPONENT ; SIGNAL x : STD_LOGIC_VECTOR ( 0 TO 4 );

3.5.2 并发语句4 位移位寄存器的设计

Page 126: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 126

BEGIN x(0)<= a; shift : FOR i IN 0 TO 3 GENERATE dffx : dff PORT MAP ( x(i) , clk , x(i+1) );

END GENERATE ; b<= x(4) ; END gene_example ;

3.5.2 并发语句

Page 127: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 127

3.6 VHDL 中的信号和信号处理

Page 128: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 128

进程对信号的作用有两种:一种是“事务( transaction ”) ,另一种是“事件( event ”) 。如果某进程对信号赋值,不论赋给信号的新值与信号原有的值是否相同,都称该信号发生了一个“事务”;如果某进程对信号赋值,且赋给信号的新值与信号的原值不同,则称该信号上发生了“事件”。在仿真过程中,对信号进行操作必须指明三项内容:( 1 )信号名,这是被操作的对象,( 2 )操作发生的时刻,( 3 )信号值。在仿真器中,通常把由这三项内容指定的对信号的操作也称为事件,并把对信号的操作保存在一个称为“信号操作队列”(也称为“事件队列”)的链表中。

3.6.1 信号的驱动源

Page 129: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 129

在时间域内,给某个信号赋值的序列,称为该信号的驱动源。一个进程只能为某个信号建立一个驱动源,而不论赋值多少次。一个信号可能有一个驱动源,也可能有多个驱动源。在结构体或块结构内,当存在对相同的信号多次赋值时,则该信号有多个驱动源,这时,要由判决函数来确定采用哪一个驱动源。

ARCHITECTURE example OF multi _driver IS SIGNAL a , b , c : INTEGER ; BEGIN a<= b AFTER 10ns ; a<= c AFTER 5ns ; END example ;

b

c

a

3.6.1 信号的驱动源

多驱动源举例

Page 130: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 130

信号的延迟是从发生到生效的时间间隔。 VHDL 语言中,存在两种延迟模型:惯性延迟和传输延迟。这两种延迟模型常用于结构体的行为描述。

信号赋值语句句法的一般格式为:信号 <= 延迟模型 /[REJECT 时间表达式 ]/UNAFFECTED 其中:延迟模型由关键字 INERTIAL TRANSPORT指定,若无关键字说明则默认为惯性延迟。保留字 REJECT用于指定脉冲宽度,保留字 UNAFFECTED 用于表示事件无变化。

1. 信号的惯性延迟( INERTIAL )惯性延迟用于建立开关器件的模型,几乎所有器件都存在惯性延迟。惯性延时的书写格式为:

信号 <=[[REJECT 时间表达式 ]INERTIAL]波形表达式;

3.6.2 信号的延迟

Page 131: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 131

ARCHITECTURE example OF filter IS SIGNAL reference : BIT :=’0’; SIGNAL a , b , c : BIT ; CONSTANT t1 : TIME := 10ns ; CONSTANT t2 : TIME := 4ns; BEGIN Reference <=’1’AFTER 10ns;’0’AFTER 20ns;’1’AFTER 25ns ; ‘0’ AFTER 30ns ’; 1’ AFTER 45ns ’; 0’ AFTER 55ns ;

‘1’ AFTER 58ns ’; 0’ AFTER 60ns ’; 1’ AFTER 65ns ;

‘0’ AFTER 80ns           ; -- 形成一个脉冲波形 b <= reference AFTER t1 ; c <= reference AFTER t2 ; a <= reference AFTER 1ns ; END example ;

3.6.2 信号的延迟惯性延迟的作用

Page 132: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 132

reference

a

b

c

0 10 20 30 40 50 60 70 80ns

Reference

a

b

c

1ns

4ns

3.6.2 信号的延迟惯性延迟的作用

Page 133: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 133

传输延时用于描述连接线、总线、器件内传输路径等的延时。无任输入信号的波形和宽窄如何,输出端都将复原输入信号。在 VHDL 语言中,传输延时不可缺省,必须在语句中说明。

传输延时的书写格式如下: signal<= TRANSPORT 波形表达式;

3.6.2 信号的延迟2. 信号的传输延时

Page 134: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 134

在 VHDL 的仿真中,时间轴是按仿真时钟进行,其单位是仿真时间单位。在同一仿真时刻,所有发生的事件以及这些事件所激活的所有进程,被一起处理。尽管处理这些事件需要计算机顺序地执行一系列指令,但是在仿真时间认为是同一时刻。处理该时刻所发生的所有事件和被这些事件所激活的所有的进程的全过程构成一个仿真周期。在一个仿真周期中,首先判断哪些信号上有事件发生,如果某信号上发生了事件,则被这个信号触发的进程被激活。

仿真周期由三部分组成:( 1 )       敏感条件成立或等待条件成立,如 WAIT ON a ; WAIT FOR 10ns 等,

( 2 )    经过适当的延迟后更新信号的值,( 3 )   执行每一个被激活的进程,直到被再次挂起。

3.6.3 仿真周期和信号的 δ 延迟

Page 135: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 135

每一个仿真周期完成时,模拟时间被设置为下一个事务的发生时刻。仿真周期再次开始循环。

δ 延迟是 VHDL 仿真的最小时间单位,任意有限个 δ 延迟相加并不增加仿真时间的数值。应此, δ 延迟可以认为是微时间。在仿真时钟的同一时刻,可能伴随多个由 δ 延迟产生的仿真周期,一个仿真周期产生的延迟为 δ ,然而并不增加仿真时钟。对于信号赋值语句,例如 y<=x ,语句执行后,y 值并未被更新,其原值一直维持到当前仿真周期结束,在下一个仿真周期开始时, y 值才被更新。如果在当前仿真周期内其它语句要引用 y 的值,无论这语句在赋值语句 y<=x之前或之后,所使用的均是 y 的原值。

由于采用了仿真时间和 δ 延迟,从而在并发执行的语句中,使得各语句可以并行处理,程序运行的结果与并发语句的先后顺序无关,有效地模拟了硬件电路的并行处理功能。

3.6.3 仿真周期和信号的 δ 延迟

Page 136: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 136

ENTITY gate IS PORT ( a , clock : IN BIT ; b , d : OUT BIT ); END gate ;

ARCHITECTURE example1 OF gate IS SIGNAL c : BIT ; BEGIN b<= NOT ( a ); c<= NOT ( clock AND d ); d<= c AND a ; END example1 ;

3.6.3 仿真周期和信号的 δ 延迟利用 δ 延迟实现并发处理

Page 137: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 137

ARCHITECTURE example2 OF gate IS SIGNAL c : BIT ; BEGIN d<= c AND a ; b<= NOT ( a ); c<= NOT ( clock AND d ); END example2 ;

3.6.3 仿真周期和信号的 δ 延迟利用 δ 延迟实现并发处理 (续 )

Page 138: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 138

并发语句的仿真过程

结构体1

结构体2

仿 真 周 期

敏感信号变化

1δ 2δ 3δ

执行语句

a (b) d c

b<=NOT(a)d<=c ANDa

c<=NOT(clockANDd)

d<=c AND a

敏感信号变化

执行语句

a

b<=NOT(a)d<=c ANDa

(b) d

c<=NOT(clockANDd)

c

d<=c AND a

3.6.3 仿真周期和信号的 δ 延迟

Page 139: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 139

属性的一般书写格式: 客体‘属性名

信号的属性函数用来得到信号的行为信息和功能信息。信号的属性函数可以获取:

· 信号是否发生了值的变化,· 信号最后一次变化到现在经历的时间,· 信号变化之前的值。

3.6.4 信号的属性函数

Page 140: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 140

signal‘EVENT :如果在当前相当小的一段时间间隔内, siganl 发生了一个事件,则函数返回一个“真( TRUE ”) 的布尔量,否则就返回“假( FALSE ”) 。

signal‘ACTIVE :若在当前仿真周期中,信号 siganl 上有一个事务,则 signal‘ACTIVE 返回“真”值,否则返回“假”值。

signal‘LAST_EVENT :信号最后一次发生的事件到现在时刻所经历的时间,并将这段时间值返回。

signal‘LAST_VALUE :信号最后一次变化前的值,并将此值返回。

signal‘LAST_ACTIVE :返回一个时间值,即从信号最后一次发生的事务到现在的时间长度。

3.6.4 信号的属性函数信号的属性函数

Page 141: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 141

LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY dff IS PORT ( d , clk : IN STD_LOGIC; q : OUT STD_LOGIC );

END dff ; ARCHITECTURE datafolow OF dff IS BEGIN PROCESS ( clk ) BEGIN IF ( clk‘EVENT ) AND ( clk=‘1’  ) THEN q<= d ; END IF ; END PROCESS ; END datafolow ;

3.6.4 信号的属性函数利用属性函数描述 D 触发器

Page 142: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 142

IF ( clk‘EVENT ) AND ( clk=‘1’ ) AND                                                                              

( clk‘LAST_VALUE=‘0’ ) THEN q<= d ; END IF ;修改以后的 IF 语句可以避免“ X→1”状态变化引起的误触发

1

X0

3.6.4 信号的属性函数

Page 143: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 143

带属性函数的信号是一类由属性函数指定的特别信号。这个特别信号是以所加的属性函数为基础和规则而形成的信号。在这一类特别的信号中,包含了属性函数所增加的有关信息。

signal ’DELYED [(time)] : 该函数产生一个延时的信号,延迟时间由表达式 time确定,信号在 signal 经过 time 表达式所确定的时间延时后得到。

signal’STABLE [(time)] : 该属性可建立一个布尔信号,在表达式 time规定的时间内,若信号 signal 是稳定的,没有什么事件发生则返回一个“真”值,否则为“假”。

3.6.5 带属性函数的信号

Page 144: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 144

signal’QUIET [(time)] 当参考信号 signal 在时间表达式 time指定的时间内没有事务要处理时,建立一个布尔量“真”,否则为“假”。

signal’TRANSACTION : 该属性建立一个 BIT 类型的信号,当属性所加的信号有事务时,其值都将发生变化。信号signal ’TRANSACTION 上的一个事件表明在 signal 上有一个事务。

3.6.5 带属性函数的信号

Page 145: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 145

带属性函数信号的应用

clk

clk2

0 10 20 30 40 50 ns

ab

c

0 10 20 30 40 50 60 70 80ns

A B C D

clk2<=clk’DELAYED(4ns);

b<=a’STABLE(10ns);c<=a’STABLE(1na);

3.6.5 带属性函数的信号

Page 146: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 146

3.7 元件例化把一些已经仿真的模块或系统,经标准化后形成一个代表相

同实体的同一构造的通用元件放在库中,以供以后的设计单元共享,这个过程称为元件的例化。

例化和标准化的含义不一样,例化的对象不仅是标准的电路,也可以是用户自己定义的具有某种特殊功能的模块。元件例化是层次化设计的重要手段,层次化设计的各个层次都可以作为元件。元件例化的过程包括通元件的构造,元件打包和建库,以及元件的调用。

Page 147: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 147

作为例化的元件,应具有通用性。通用元件的设计要参数化,要带有参数的入口,常见的参数主要有时间参数和宽度,这个任务通常是由参数说明语句完成。

带有上升时间和下降时间的门电路。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and2 IS GENERIC (rise,fall : TIME:=2ns); -- 上升和下降时间作为参数。

PORT (a, b : IN STD_LOGIC; c : BUFFER STD_LOGIC); END and 2;

3.7.1 设计通用元件

Page 148: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 148

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and2 IS GENERIC (rise,fall : TIME); -- 上升和下降时间作为参数。 PORT (a, b : IN STD_LOGIC; c : BUFFER STD_LOGIC); END and 2; ARCHITECTURE behav_and2 OF and2 IS SIGNAL cin : STD_LOGIC; BEGIN cin <= a AND b; c <= cin AFTER (rise) WHEN cin = ‘1’ ELSE cin AFTER (fall); END behav_and2 ;

&

rise fall

3.7.1 设计通用元件带有上升时间和下降时间的门电路

Page 149: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 149

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY regs IS GENERIC (size : INTEGER := 2); --size 的默认值为 2 。 PORT (clk, reset, set, load : IN STD_LOGIC; d : IN STD_LOGIC_VECTOR (size DOWN TO 1); q : BUFFER STD_LOGIC_VECTOR (size DOWN TO 1); END regs;

size:1

size:1

clkresetset

loadd

q

3.7.1 设计通用元件n bit带有异步复位和置位的寄存器组的设计

Page 150: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 150

ARCHITECTURE regs_struct OF regs IS BEGIN P1: PROCESS (clk, reset, set) BEGIN IF reset = ‘1’ THEN q<= ( OTHERS=>0 ) ; ELSIF set = ‘1’ THEN q<= (OTHERS=>1); ELSIF (clk’EVENT AND clk = ‘1’) THEN IF load = ‘1’ THEN q<=d; ELSE q<=q; END IF; END IF; END PROCESS P1; END regs_struct;

3.7.1 设计通用元件

Page 151: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 151

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE regs_pkg IS COMPONENT regs GENERIC (size : INTEGER: = 2); --size 的隐含值为 2 PORT (clk, reset, set, load : IN STD_LOGIC; d : IN STD_LOGIC_VECTOR (size DOWN TO

1); q : BUFFER STD_LOGIC_VECTOR (size DOWN

TO 1)); END COMPONENT; COMPONENT counter IS GENERIC (size : INTEGER:=2 ) ; PORT (clk, areset, sreset, enable : IN STE_LOGIC; count : BUFFER STD_LOGIC_VECTOR (size DOWN

TO 1)); END COMPONENT; END regs_pkg;

3.7.2 构造程序包

Page 152: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 152

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; PACKAGE gats_beha_pkg IS COMPONENT and 2 GENERIC (rise,fall : TIME); PORT (a,b : IN STD_LOGIC; c : BUFFER STD_LOGIC); END COMPONENT; COMPONENT or2 GENERIC (rise, fall : TIME); PORT (a,b : IN STD_LOGIC; c : BUFFER STD_LOGIC); END COMPONENT; END gats_beha_pkg ;

3.7.2 构造程序包程序包 --gats_beha_pkg

Page 153: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 153

在一个设计单元中调用已在库中的现成的元件,用元件说明语句和元件例化语句进行。

元件说明语句的格式为 COMPONENT 元件名 GENERIC 说明 PORT 说明 END COMPONENT;COMPONENT 语句可以在结构体,程序包和块的说明中使用。

3.7.3 元件的调用

Page 154: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 154

例化语句也称为映射语句,包括参数映射和端口映射,其格式如下:

标号:元件名 [GENERIC MAP. (类属关联表) ] ; [PORT MAP (端口关联表) ] ;两种语句都可以用位置映射和名称映射的方法实现。

3.7.3 元件的调用

Page 155: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 155

如图所示,与门 U0 的上升时间为 5ns ,下降时间为 7ns ;与门 U1 的上升时间和下降时间均为 10ns ;与门U2 的上升时间为 9ns ,下降时间为 11ns 。现用元件调用方法实现该电路。所调用的元件为程序包 gats_beha_pkg 中的and2 。

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE WORK.gats_beha_pkg.ALL; ENTITY ins_example IS PORT (d0, d1, d2, d3:IN STD_LOGIC; q : OUT STD_LOGIC); END ins_example;

U0

&

&

&

d0d1

d2d3

q

U2

U1

3.7.3 元件的调用元件例化语句的使用方法

Page 156: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 156

ARCHITECTURE beha OF ins_example IS COMPONENT and2; GENERIC (rise,fall : TIME); PORT (a,b : IN STD_LOGIC; c : BEFFER.STD_LOGIC); END COMPOENT;SIGNAL q0, q1: STD_LOGIC;BEGIN U0: and2 GENERIC MAP (5ns, 7ns); --U0 参数映射 PORT MAP (d0, d1, q0); --U0 端口映射 U1: and2 GENERIC MAP (10ns, 10ns); --U1 参数映射 PORT MAP (d2, d3, q1); --U1 端口映射 U2: and2 GENERIC MAP (9ns, 11ns); --U2 参数映射 PORT MAP (q0, q1, q); --U2 端口映射END beha;

3.7.3 元件的调用

Page 157: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 157

配置用于描述层于层之间的连接关系(例如设计单元和元件库之间)和实体与结构体之间的连接关系 ,是整个设计系统的结构指引。

实体

结构体 1 结构体 N

设计库

元件库

在 VHDL 程序设计中,例化的元件和设计实体的连接有 4 种方式,即默认连接,默认配置,配置

说明和元件配置。

3.8 配置

Page 158: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 158

配置说明的基本书写格式如下: CONFIGURATION 配置名 OF 实体名 FOR 结构体名 [ 配置说明语句 ] END FOR ; END 配置名;相应于不同的使用情况,配置说明有多种形式。利用元件说明和例化语句调用元件,即是默认连接。另外三种连接方都是属于配置方式。

3.8 配置

Page 159: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 159

默认配置是最简单的配置方式,其书写格式为 CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 END FOR ; END 配置名;默认配置定义了配置名,将当前库中的选配结构体,配置给实体。利用这种配置方法,可以为一个实体选择不同的结构体。默认配置用于选配不包含块结构和元件的结构体。

3.8.1 默认配置

Page 160: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 160

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY adder IS PORT ( cin : IN STD_LOGIC; carry: OUT STD_LOGIC; data_a, data_b :IN STD_LOGIC_VECTOR(31 DOWNTO 0); sum:OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END adder; ARCHITECTURE structure1_adder OF adder IS BEGIN : END sturect1_adder ; ARCHITECTURE structure2_adder OF adder IS BEGIN : END sturect2_adder ;

3.8.1 默认配置为一个加法器选择两个不同结构的结构体进行仿真

Page 161: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 161

CONFIGURATION config1 OF adder IS FOR structure1_adder ; END FOR; END config1; --加法器实体 adder默认配置是结构体 structure1_adder ; CONFIGURATION config2 OF adder IS FOR structure2_adder ;  --加法器 adder第二次默认配置 END FOR; -- 是结构体 structure2_adder,

END config2;

加法器实体加法器结构体 1加法器结构体 2

3.8.1 默认配置配置的使用

Page 162: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 162

利用例化元件 inv 和 and3 设计一个二 -四译码器。二 -四译码器的用结构化程序如下: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY decode_24 IS PORT (a, b, en : IN STD_LOGIC; q0, q1, q2, q3 : OUT STD_LOGIC); END decode_24; ARCHITECTURE struct OF decode_24 IS COMPONENT inv PORT (a : IN STD_LOGIC; b : OUT STD_LOGIC); END COMPONENT;

en

a

b

q0

q1

q2

q3

IV1

IV2

AN1

AN2

AN3

AN4

3.8.1 默认配置元件配置的使用

Page 163: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 163

COMPONENT and3 PORT (a, b, c : IN STD_LOGIC; q : OUT STD_LOGIC); END COMPONENT; SIGNAL nota, notb : STD_LOGIC; BEGIN IV1: inv PORT MAP (a, nota); IV2: inv PORT MAP (b, notb); AN1: and3 PORT MAP (nota, en, notb, q0); AN2: and3 PORT MAP (a, en, notb, q1); AN3: and3 PORT MAP (nota, en, b, q2); AN4: and3 PORT MAP (a, en, b, q3); END struct;

3.8.1 默认配置

Page 164: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 164

实体 - 结构体对的配置方式 FOR 例化标号:元件名 USE ENTITY 库名 . 实体名 [ (结构体名) ] END FOR; 二 -四译码器电路的配置说明(一)。二 -四译码器电路的行为描述 .

3.8.1 默认配置1. 实体 - 结构体对的元件配置

Page 165: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 165

CONFIGURATION decode_con1 OF decode-24 IS FOR struct FOR IV1 : inv USE ENTITY WORK.inv (behave); GENERIC MAP (1.2ns, 1.7ns); END FOR; FOR OTHERS : inv USE ENTITY WORK.inv (behave); GENERIC : MAP (1.3ns, 1.5ns); END FOR; FORALL : and3 USE ENTITY WORK.and3 (behave); GENERIC MAP ( 2.0ns, 2.2ns); END FOR; END struct; END decode_con1;

3.8.1 默认配置

Page 166: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 166

CONFIGURATION decode_con2 OF decode-24 IS FOR struct FOR IV1 : inv USE ENTITY WORK.inv(inv_rtl); END FOR; FOR OTHERS : inv USE ENTITY WORK.inv (inv_rtl); FOR ALL : and3 USE ENTITY WORK.and3 (and3_rtl); END FOR; END struct; END decode_con2;    由上述配置说明可得到二 -四译码器的 RTL 结构体设计。

3.8.1 默认配置二 - 四译码器电路的配置说明(二)

Page 167: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 167

底层元件配置的书写格式为: FOR 元件例化标号:元件名 USE CONFIGURATION 库名 . 配置名; END FOR; 在这个配置说明中,为例化元件指名了一个库中的一个配置,从而将该元件与一实体(结构体)相连。

采用底层元件配置说明时,在通用元件的设计中,必须用配置说明的方式预先为一实体 - 结构体对定义一个配置名。

3.8.1 默认配置2. 底层元件配置

Page 168: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 168

LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and3 IS GENERIC (rise, fall : TIME) PORT (a, b, c : IN STD_LOGIC; q : OUT STD_LOGIC); END and3; ARCHITECTURE behave OF and3 IS BEGIN

3.8.1 默认配置

元件例化和元件配置

Page 169: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 169

PROCESS (a, b, c) SIGNAL state : STD_LOGIC BEGIN state : = a AND b AND c; IF state = ‘1’ THEN q <= state AFTER rise; ELSE q <= state AFTER fall; END IF END PROCESS; END behave;

ARCHITECTURE rtl_and3 OF and3 ISBEGIN

PROCESS(a,b,c) BEGIN

q<=a AND b AND c; END PROCESS;

END rtl_and3;

3.8.1 默认配置

Page 170: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 170

CONFIGURATION and3_con1 OF and3 IS FOR behave END FOR; END and3_con1;

CONFIGURATION and3_con2 OF and3 IS FOR rtl_and3 END FOR; END and3_con2;

3.8.1 默认配置元件的配置

Page 171: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 171

在 VHDL 程序中,块是独立的子结构。当结构体中含有块时,在配置说明中,不仅要说明配置的结构体名,还应说明块名。块配置语句的书写格式如下:

CONFIGURATION 配置名 OF 实体名 IS FOR 结构体名 FOR块名 [ 配置说明语句 ] END FOR; END FOR; END 配置名 ;

3.8.2 块的配置

Page 172: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 172

结构体的配置位于结构体的说明部分中,规定用于结构体中的元件配置。这种形式的配置方式无需独立的结构体的配置说明。结构体配置语句的一般形式为:

FOR 标号名:元件名 USE CONFIGURATION 库名 .实体名 ;

3.8.3 结构体的配置

Page 173: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 173

下一页

1. 乐音的四个基本要素 一般来说,所有乐音有四个基本要素,而其中最重要的是“音的高低”和“音的长短”。 (1) 音的高低 任何一首曲子都是由高低相间的音组成的,从钢琴上直观看就是越往左面的键盘音越低,越往右面的键盘音越高。 (2) 音的长短 除了音的高低外,还有一个重要的因素就是音的长短。音的高低和长短的标注决定了该首曲子有别于另外的曲子,因此成为构成音乐的最重要的基础元素。

音乐知识

Page 174: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 174

下一页上一页

(3) 音的强度 一首音乐作品总会有一些音符的力度比较强一些,有些地方弱一些。而强度的变化是音乐作品中表达情感的因素之一。 (4) 音色 对于同样的旋律音高,男生和女声唱的音色就不一样,示提琴和钢琴的音色也不一样。 2. 音名与唱名 不同音高的乐音,是用 CDEFGAB来表示的,这 7个拉丁字母就是乐音的音名,它们一般依次唱成 do( 多 ) 、 re(瑞 ) 、mi(米 ) 、 fa( 发 ) 、 sol(梭 ) 、 la(拉 ) 、 si(西 ) ,即唱成简谱的 1, 2, 3, 4, 5, 6, 7o do( 多 ) 、 re(瑞 ) 、mi(米 ) 、…是唱曲时乐音的发音,所以叫唱名。

音乐知识

Page 175: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 175

3. 简谱中的音符 谱是国内广泛使用的记录音乐的方式。谱是一种比较简单易学的音乐记谱法,它仅用 7个阿拉伯数字— 1, 2, 3, 4, 5, 6, 7表示 CDEFGAB,通过这 7个阿拉伯数字,就能将千变万化的音乐曲子记录并表示出来。谱虽然不是出现在中国,但在中国得到了非常广泛的传播。 在谱中,记录音的高低和长短的符号,叫做音符。 简谱的音符相对应的数字的大示决定音的相对高低。比如数字 2 比 1大,re 就比 do高 ; 数字 2 比 3 示, re 就比mi低等。 音符有多种类型,具体类型如下。

下一页上一页

音乐知识

Page 176: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 176

(1)按所记录的音的相对高低来分 按所记录的音的相对高低,音符分为中音音符、高音音符、低音音符、倍高音音符、倍低音音符、超高音音符、超低音音符、最高音音符和最低音音符。 7个音符主体 1, 2, 3, 4, 5, 6, 7就表示 7个中音音符。在 7个基本的音符 1~7上面各加一个圆点即成为 7个高音音符 : 。在七个基本的音符 1 2 3 4 5 6 7下面各加一个圆点即成为 7个低音音符 : 。如果在中音音符上下各加两个圆点,就成为倍高音音符和倍低音音符,在中音音符上下各加二个圆点,就成为超高音音符和超低音音符,在中音音符上下各加二个圆点,就成为最高音音符和最低音音符。

下一页上一页

音乐知识

Page 177: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 177

下一页上一页

(2)按所记录的音的相对长短来分 按所记录的音的相对长短,音符分为全音符、二分音符、四分音符、八分音符、十六分音符和三十二分音符。 7个音符主体 1234567表示四分音符。在四分音符后面每加一条短横线就表示增加等于一个四分音符的时值 ( 时间长度 ) ,在四分音符后面加一条短横线就成为一分音符,例如 2 一 ; 在四分音符后面加二条短横线就成为全音符,例如 3 一一一。在四分音符下面每加一条短横线,就表示将其上面的音符的时值削减一半,在四分音符下面加一条短横线就成为八分音符,例如4; 在四分音符下面加两条或者二条短横线就成为十六分音符或者三十二分音符,例如 。

音乐知识

Page 178: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 178

下一页上一页

(3)附点音符 附点音符又分为单附点音符和双附点音符。通常说附点音符即指单附点音符,如指双附点音符,必须加“双”字。 单附点音符和双附点音符是在以上音符基础上,在其后面加上一个或两个附点 (圆点或短横线 ) 构成。单附点将音符的时值增加一半,第二附点则将第一附点的时值增加一半。全音符和二分音符的附点不用圆点而用短横线,其他情况的附点使用圆点。例如 4· 、 、 3 一一一一一、 2 一一是单附点音符,而 4·· 、 、 3 一一一一、 2 一一 · 双附点音符。 (4)休止符 音乐有时会出现一定时间的体止 ( 间断 ) ,以适应表达乐思的需要,

音乐知识

Page 179: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 179

下一页上一页

同时也与乐音形成对比。只用数字 0 作记录休止符号,叫做休止符。 4.调、节拍与速度 谱中的音符的音高只是相对的音高,需要指定其中一个基本音比如 1的绝对音高才能确定所有音符的绝对音高,谱中使用表明一首乐曲的调的方法来规定乐曲中各音符的绝对音高。例如 1=C,称为 C调,表明中音1 发钢琴键盘中间的白色的 C键的音。 一首乐曲的谱是由一个一个示节构成的,示节之间用一条示竖线隔开。一个示节中用某种时值的音符 ( 四分音符或八分音符等 ) 作一拍,结合每示节的拍数 ( 二拍、三拍等 )就构成了拍子。 标明拍子的记号叫拍号,用一个分数来表示。拍号的分母表示用什么时值的音符作一拍,分子表示每示节的拍数。

音乐知识

Page 180: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 180

下一页上一页

例如, ,分母数字 4 表示用四分音符作一拍,分子数字 2 表示每示节容纳两拍。 速度指唱奏时节拍、节奏的快慢程度。唱奏速度是用每一分钟唱奏多少拍表示,唱奏速度一定后,每一拍以至每个音符就有了确定的时值,在此之前,每一拍和每个音符只有相对时值。 5. 音阶与调性 按照一定关系结合在一起的几个音 ( 一般是 7个音左右 ) 组成一个有主音( 中心音 ) 的音列体系,构成一个调式。把调式中的个音,从主音到主音,按一定的音高关系排列起来的音列叫音阶。 (1) 12 个大调音阶 音与音之间的距离符合全全半全全全半的 8个音,就称为大调音阶。

4

2

音乐知识

Page 181: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 181

这单的全和半分别指全音和半音。距离是一个半音的相邻两个音,高音频率是低音频率的“ 2 的 1/12次方倍”。一个全音的距离等于两个半音的距离。 首先以大家最熟悉的 C大调音阶为例作一个说明。 C大调音阶 :CDEFGABC,主音是 C。 C与 D之间的音程为全音 ; D与 E之间的音程为全音 ; E与 F 之间的音程为半音 ; F与 G之间的音程为全音 ; G与 A之间的音程为全音 ; A与 B之间的音程为全音 ; B与 C之间的音程为半音。 又例如G大调 :GABCDEF#G(这单的 F#是比 F 升半音的音 ) ,也符合全全半全全全半的规则。

下一页上一页

音乐知识

Page 182: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 182

了解大调的定义之后,就可以排出所有的大调音阶。因为一个八度内总共有 12 个半音,每一个都可以作为大调的起音,所以总共有 12 个大调。 C Major C D E F G A B C

G Major G A B C D E F# G 一个升 D Major D E F# G A B C# D 两个升 A Major A B C# D E F# G# A 二个升 E Major E F# G# A B C# D# E 四个升 B Major B C# D# E F# G# A# B 五个升 F# Major F# G# A# B C# D# E# F# 六个升

下一页上一页

音乐知识

Page 183: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 183

等于 Gb Major Gb Ab Bb Cb Db Eb F Gb 六降个 ( 这单的Gb 是比 G 降半音的音 )

C# Major C# D# E# F# G# A# B# C#七个升等于 Db

Major Db Eb F Gb Ab Bb C Db 五个降 Ab Major Ab Bb C Db Eb F G Ab 四个降 Eb Major Eb F G Ab Bb C D Eb 二个降 Bb Major Bb C D Eb F G A Bb 两个降 F Major F G A Bb C D E F 一个降 其中 F# 和 Gb, C# 和 Db 音名不同,但实际上是相同的音。

下一页上一页

音乐知识

Page 184: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 184

下一页上一页

从以上的 12 个大调可以看出,每往上五度就多一个升, C G D A E B F # ,而每往下五度就多一个降, C F B b E b A b D b…

也就是说,从任一个音往上或往下数完全五度,数完 12 个之后又会回到同一个音,这就叫做五度圈,如图 3-11 所示。所以,以后听到两个升的大调一定是D 大调,升 F 升 C: 两个降的大调一定是 Bb大调,降B 降 E 。

图 3-11 五度圈

音乐知识

Page 185: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 185

下一页上一页

(2)小调音阶 小调与大调的不同点在于示调听起来比较忧郁、哀伤,而大调比较明快。示调有二种,在这单只讲最简单的自然小调。 自然示调的规则为全半全全半全全。完全没有升降的示调是 A 示调 :A B

C D E F G A 。同样,每往上完全五度就多一个升,往下完全五度就多一个降。自然示调的升降数目与它上方示二度的大调相同。 例如 :A 示调跟C 大调一样没有升降, E 示调跟G 大调一样升 F, D 示调跟 F 大调一样降B 。也就是说, A 示调与 C 大调共享这 7 个音,只是一个从A 开始一个从C 开始。所以归纳起来,如果看到乐 r,最前面的调号是两个升 ( 一定是升 F 升 C ,不会有其他情况 ) ,就可以判断它是 D 大调或者B 示调。如果是两个降 ( 一定是降B 降 E) ,就可以判断是 Bb大调或G 示调。至于如何区分究竞是大调还是示调,要从旋律来看,必须先熟悉示调的感觉,听旋律就来分辨是大调还是小调。

音乐知识

Page 186: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 186

下一页上一页

6.钢琴上各音的名称和频率 图 3-12 所示 : 为钢琴上各音的名称和频率 ( 以 al = 440 Hz 为标准 ) 。

图 3-12钢琴上各音的名称和频率

音乐知识

Page 187: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 187

7. 简谱中各调各音符的频率 简谱中各调的 do( 多 ) 对应于钢琴上各组中此调的主音。以C 调为例, C调是 CDEFGABC ,主音 C 唱为 do( 多 ) 。有些资料规定中音 do( 多 ) 对应示字 1 组的 c1 ,有些资料则升八度,规定低音 do ( 多 ) 对应示字 1 组的 c1 。这单采用低音 do( 多 ) 对应示字 1 组的 cl ,频率为 261.63 Hz 。根据钢琴上各音的频率,其余各音的频率依次列出,见表 3-4 。

表 3-4 简谱中 C调各音符的频率

音乐知识

Page 188: 学 习 情 境 三: 简易电子琴

《 EDA 技术》

Electronic Design Automation 188

下一页上一页

又例如 F 调, F 调是 FGABbCDEF, 主音是 F 。采用低音 do( 多 ) 对应示字 1 组的 fl ,频率为 349.23 Hz 。根据钢琴上各音的频率,其余各音的频率依次列出,见表 3-5 。 其他各调可模仿以上做法得出。 表 3-5 简谱中 F调各音符的频率

音乐知识

Page 189: 学 习 情 境 三: 简易电子琴

绵阳职业技术学院 信息工程系

E. 评价与总结