• 心得体会
  • 办公文秘
  • 报告总结
  • 致辞讲话
  • 条据书信
  • 合同范本
  • 宣传用语
  • 导游词大全
  • 党团范文
  • 毕业大全
  • 个人写作
  • 其他范文
  • 工作总结
  • 工作计划
  • 党建材料
  • 发言稿
  • 讲话稿
  • 演讲稿
  • 述职报告
  • 脱贫攻坚
  • 谈话记录
  • 党课下载
  • 主题教育
  • 对照材料
  • 自查报告
  • 观后感
  • 读后感
  • 事迹材料
  • 策划方案
  • 当前位置: 工作范文网 > 范文 > 个人写作 > 正文

    EDA技术实验报告

    时间:2020-10-23 09:48:18 来源:工作范文网 本文已影响 工作范文网手机站

    福建农林大学金山学院

    信息工程类

    实验报告

    课程名称:

    EDA技术

    姓 名:

    梁冰冰

    系:

    信息与机电工程系

    专 业:

    电子信息工程专业

    年 级:

    2010 级

    学 号:

    100201022

    指导教师:

    蔡剑卿

    职 称:

    讲师

    2013年05月03日

    实验项目列表

    序号

    实验项目名称

    成绩

    指导教师

    1

    实验一 Quartus II 9.0软件的使用

    蔡剑卿

    2

    实验二 用文本输入法设计2选1多路选择器

    蔡剑卿

    3

    实验三用文本输入法设计7段数码显示译码器

    蔡剑卿

    4

    实验四 用原理图输入法设计8位全加器

    蔡剑卿

    5

    实验五 乐曲硬件演奏电路的设计

    蔡剑卿

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    福建农林大学金山学院信息工程类实验报告

    系: 信息与机电工程系 专业: 电子信息工程 年级: 2010 级

    姓名: 梁冰冰

    学号: 100201022 实验课程:

    EDA技术

    实验室号: 田实405实验设备号: 4

    实验时间:2013

    年4月13日

    指导教师签字:

    成绩:

    实验一

    Quartus II 9.0

    软件的使用

    ?实验目的和要求

    本实验为验证性实验,其目的是熟悉 Quartus II 9.0软件的使用,学会利用

    Quartus II 9.0软件来完成整个EDA开发的流程。

    ?实验原理

    利用VHDL完成电路设计后,必须借助 EDA工具中的综合器、适配器、时序 仿真器和编程器等工具进行相应的处理后,才能使此项设计在 FPGA上完成硬件

    实现,并得到硬件测试,从而使 VHDL设计得到最终的验证。

    Quartus II是Altera提供的FPGA/CPLD开发集成环境,包括模块化的编译 器,能满足各种特定设计的需要,同时也支持第三方的仿真工具。

    ?主要仪器设备(实验用的软硬件环境)

    实验的硬件环境是:

    微机一台

    GW48 ED实验开发系统一套

    电源线一根

    十芯JTAG 口线一根

    USB下载线一根

    USB下载器一个

    实验的软件环境是:

    Quartus II 9.0 软件

    ?操作方法与实验步骤

    利用Quartus II 9.0软件实现EDA的基本设计流程:创建工程、编辑文本输入 设计文件、编译前设置、全程编译、功能仿真。

    利用Quartus II 9.0软件实现引脚锁定和编译文件下载。

    利用Quartus II 9.0软件实现原理图输入设计文件的编辑和产生相应的原理

    图符号元件。

    ?实验内容及实验数据记录

    4位加法器是一种可实现两个4位二进制数的加法操作的器件。输入两个 4 位二进制的被加数A和B,以及输入进位Ci,输出为一个4位二进制和数D和输 出进位数Cq 半加操作就是求两个加数 A、B的和,输出本位和数S及进位数 C。全加器有3位输入,分别是加数 A、B和一个进位Ci。将这3个数相加,得 出本位和数(全加和数)D和进位数Co。全加器由两个半加器和一个或门组成。

    设计半加器: 在进行半加器模块逻辑设计时,采用由上至下的设计方法,

    在进行设计输入时,需要由下至上分级输入,使用 QuartusllGraphic Editor进

    行设计输入的步骤如下。

    、打开 QUARTUSI软件,选择 File-new project wizard ,新建一个设 计实体名为has的项目文件;

    、新建文件,在block.bdf窗口下添加元件符号,并连接。如下图:

    、将此文件另存为has.gdf的文件。

    、在主菜单中选择 Processing — Start Compilation 命令,系统对设计 进行编译,同时打开 Compilation Report Flow Summary 窗体,Status视图显 示编译进程。如下图

    Simulator was successful

    Simulator was successful 仿真波形如下图

    □ F I鼻? Pj|i j""""e.沖'tan3 0J-# ■ :l da?屛?■■ EJ iiuJLm |.4h lifMla|i aa-hal Ltal a >f Iw

    □ F I鼻

    ? P

    j|i j

    """"e

    .沖'tan

    3 0J-

    # ■ :l da?

    屛?■■ EJ iiu

    JLm |.4h lifM

    la|i aa-hal Ltal a >f Iw

    fcl ■+*■?■ rwwip

    T s1 ■! 1 I ■

    、在主菜单中选择File — New命令,打开New对话框。单击New对话框 中的Other Files选项卡标签,再选择 Vector Waveform File 选项,单击 OK按 钮,组建一个 Waveform1.vwf的波形文件。

    、在 Waveform1.vwf的波形文件左侧单击右键,选择 Insert — Insert

    Node or Bus (或直接双击界面)打开后再选择 Node Finder按钮,打开。在出

    现的对话框中的Filter下拉列表中选择Pins : all项,单击List按钮,在Nodes Found列表中显示项目中的所有引脚节点。 将所有节点都添加到Selected Nodes

    列表中,确定,关闭对话框。

    、选择主菜单中的Edit — End Time命令,打开对话框,在 Time编辑框 中输入100,单位us。按住Ctrl键,同时向下滚动鼠标滑轮,使窗口比例合适, 拖动选择节点a的一段波形,使其被选中,然后单击左侧工具栏的按钮,使选中 的一段波形状态变为1。采取同样的方法,将输入点都进行设置。

    选择File — Save命令,接受默认名称has.scf,确定,存盘。

     为了 对设计进行仿真,创建的波形文件的名称必须与设计文件的名称相同,并且它们 要保存在同一个子目录下。

    选择Processing — Start Simulation命令。如果没有错误的话,弹出

    17J 5 ns

    Intervd

    aoersns

    ,,. H 护

    E&O 0 站

    Eto □站

    3eo o

    1

    i

    I

    t Wit

    17 15 in H ?丨

    $ M

    一 *

    B °_n 1

    1

    1 , 1

    b

    H 1 |

    t_ _r

    "L

    "1

    1

    一 1

    1 0

    n

    rT

    n

    a 4

    B 0 1 U

    lJ "LT

    LJ LJ~

    nj l

    J 1

    选择 File — Creat/Update — Creat symbol Files for current files ,

    接受对话框内默认的名称has.bsf,确认后,系统生成元件,并保存在上一步设 置的bsa.bsf文件中。

    ?实验数据处理与分析

    因为是第一次接触QUARTUS语言,所以很多的东西都不太了解,加之因 为语言都是英文形式的导致有很多的操作看不懂。以致出现了一些不必要的错 误。

    )实验过程中连图时要注意应该只有代表两根导线相连的情况下才会出现圆 点,其他地方出现则说明导线连接出现问题。

    、在文件的保存的时候,错误的建立了多个“ HSA文件,扩展名也出现了 错误,致使项目出错,不能编译。在请教老师后,老师帮着操作了一次。我基本 是明白了这些操作。

    、实验有时会出现编译不成功,原因是文件名称和存储路径有问题。创建的 波形文件的名称必须与设计文件的名称相同,并且它们要保存在同一个子目录 下。

    、实验时应该针对不同的文件建立不同的子文件夹, 否则容易造成找不到需 要添加的文件,这样做也使实验简单,更具有实用性。

    ?质疑、建议、问题讨论

    通过这次实验,让我明白了整体的重要性,一个器件有时候不能独立运行。

    福建农林大学金山学院信息工程类实验报告

    系: 信息与机电工程系 专业: 电子信息工程 年级: 2010 级

    姓名: 梁冰冰

    学号:

    100201022 实验课程:

    EDA技术

    实验室号: 田实405

    实验设备号:

    4

    实验时间:2013

    年4月13日

    指导教师签字:

    成绩:

    实验二用文本输入法设计 2选1多路选择器

    ?实验目的和要求

    本实验为综合性实验,综合了简单组合电路逻辑、 Quartusll的使用方法、

    多层次电路设计、仿真和硬件测试等内容。其目的是熟悉 Quartusll的VHDL文

    本设计流程全过程。

    ?实验原理

    2选1多路选择器真值表

    s

    a

    b

    y

    L

    L

    X

    L

    L

    H

    X

    H

    H

    X

    L

    L

    H

    X

    H

    H

    ?主要仪器设备(实验用的软硬件环境)

    实验的硬件环境是:

    微机一台

    GW48 ED实验开发系统一套

    电源线一根

    十芯JTAG 口线一根

    USB下载线一根

    USB下载器一个

    实验的软件环境是:

    Quartus II 9.0 软件

    ?操作方法与实验步骤

    首先利用QuartusII完成2选1多路选择器的文本编辑输入(mux21a.vhd)

    和仿真测试等步骤,然后进行仿真。最后在实验系统上进行硬件测试,实际验证 本项实验的功能。

    将设计好的2选

    将设计好的2选1多路多路选择器看成是一个元件 mux21a利用元件例化 语句描述下图,并将此文件放在同一目录 E:\muxfile中。

    5 ?实验内容及实验数据记录

    首先利用Quartus U完成2选1多路选择器的文本编辑输入(mux21a.vhd), 建立工程并保存。

    编译仿真。编译该工程,成功后进行波形仿真,仿真时序图如图所示:

    ENTITY mux21a IS

    PORT ( a, b, s: IN BIT;

    y : OUT BIT );

    END ENTITY mux21a;

    ARCHITECTURE one OF mux21a IS

    BEGIN

    PROCESS (a,b,s)

    BEGIN

    IF s = 'O' THEN y <= a ; ELSE y <= b ;

    END IF;

    END PROCESS;

    END ARCHITECTURE one ;TTLTL22 CEQES8 t応ps 5-

    END ARCHITECTURE one ;

    TTLTL

    22 CEQES8 t応

    ps 5- 12 us 10.2,4 us 15. 36 a 20 備 25,^ us 30. 72 u

    LTH

    warn

    mux21a

    mux21a 功能时序波形

    3.引脚锁定以及硬件下载测试。引脚锁定如图所示。建议选实验电路模式5, clockO接256HZ clock5接1024HZ按键1控制多路选择器对不同时钟的选择, 从而从扬声器中能听到不同音调的声音。

    Node Marne

    Directjorr

    Location

    1

    a

    Input

    PIM-93

    2

    Lnpjt

    PIN 17

    3

    ■ S

    Input

    PIN 1

    4

    O y

    0 input

    PIN 129

    6?实验数据处理与分析

    CS9E6S us■LTLTL111 24 uu5. 1315. 3& TIEwmmwMmwwjuimnwiwmmmfuw皿LruwmrvLruirjLnrLrmnrLn_rLn_rLrLTL

    CS9E6S us

    ■LTLTL

    111 24 uu

    5. 13

    15. 3& TIE

    wmmwMmwwjuimnwiwmmmfuw皿

    LruwmrvLruirjLnrLrmnrLn_rLn_rLrLTL

    2b H u=

    31. 12 ii

    innnwii

    mwu

    jwjiw

    IM1

    m

    inn

    LTLn

    LTLTLn

    LT

    m

    LTL

    分析:当 s=0时,y=a;当 s=1时,y=b。

    分析:当 s1s0=00 时,outy=a1;当 s1s0=01 时,outy=a1;当 s1s0=10时,outy=a2; 当 s1s0=11 时,outy= a3。

    7 ?质疑、建议、问题讨论

    福建农林大学金山学院信息工程类实验报告

    系:信息与机电工程系

    专业:

    电子信息工程

    年级:

    2010 级

    姓名: 梁冰冰

    学号:

    100201022

    实验课程:

    EDA技术

    实验室号: 田实405实验设备号:

    4 实验时间:2013

    年4月13日

    指导教师签字:

    成绩:

    实验三用文本输入法设计7段数码显示译码器

    ?实验目的和要求

    本实验为综合性实验,综合了简单组合电路逻辑,Quartusll的使用方法,多 层次电路设计、仿真和硬件测试等内容。其目的是熟悉 Quartusll的VHDL文本 设计流程全过程。

    ?实验原理

    7段数码是纯组合电路,通常的小规模专用IC,如74或4000系列的器件只 能作十进制BCD码译码,然而数字系统中的数据处理和运算都是 2进制的,所以 输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利 用译码程序在FPGA/CPL中来实现。7段数码显示译码器的输出信号 LED7S勺7 位分别接共阴7段数码管的7个段,高位在左,低位在右。例如当LED7S俞出为

    “ 1101101” 时,数码管的 7 个段:g、f、e、d、c、b、a 分别接 1、1、0、1、1、

    0、1;接有高电平的段发亮,于是数码管显示“ 5”。注意,这里没有考虑表示小 数点的发光管,如果要考虑,需要增加段 h,此时实体说明中的 LED7S:OUT

    STD_LOGIC_VECTOR(6 DOWNT应改为…(7 DOWNTO 0)

    ?主要仪器设备(实验用的软硬件环境)

    实验的硬件环境是:

    微机一台

    GW48 ED实验开发系统一套

    电源线一根

    十芯JTAG 口线一根

    USB下载线一根

    USB下载器一个

    实验的软件环境是:

    Quartus II 9.0 软件

    4.操作方法与实验步骤

    利用 QuartusII 完成 7 段数码显示译码器的文本编辑输入( decl7s.vhd )和 仿真测试等步骤,最后在实验系统上进行硬件测试,实际验证本项实验的功能。

     5.实验内容及实验数据记录

    1打开VHDL编辑器,完成七段译码器的设计。包括 VHDI程序输入、编译、 综合、适配、仿真。

    实验程序如下(CASE§句实现):

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY DECODER IS

    PORT(INP:IN STD_LOGIC_VECTOR(3 DOWNTO 0);

    OUTP:OUT BIT_VECTOR (6 DOWNTO 0);

    SELIN:IN BIT_VECTOR(2 DOWNTO 0);

    SELOUT:OUT BIT_VECTOR(2 DOWNTO 0));

    END DECODER;

    ARCHITECTURE ART4 OF DECODER IS

    BEGIN

    process(inp)

    begin

    CASE INP IS

    WHEN "0000"=>OUTP<= "0111111";

    WHEN "0001"=>OUTP<= "0000110";

    WHEN "0010"=>OUTP<= "1011011";

    WHEN "0011"=>OUTP<= "1001111";

    WHEN "0100"=>OUTP<= "1100110";

    WHEN "0101"=>OUTP<= "1101101";

    WHEN "0110"=>OUTP<= "1111101";

    WHEN "0111"=>OUTP<= "0000111";

    WHEN "1000"=>OUTP<= "1111111";

    WHEN "1001"=>OUTP<= "1101111";

    WHEN "1010"=>OUTP<= "1110111";

    WHEN "1011"=>OUTP<= "1111100";

    WHEN "1100"=>OUTP<= "0111001";

    WHEN "1101"=>OUTP<= "1011110";

    WHEN "1110"=>OUTP<= "1111001";

    WHEN "1111"=>OUTP<= "1110001";

    WHEN OTHERS=>NULL;

    END CASE;

    end process;

    SELOUT<=SELIN;

    END ART4;

    6 ?实验数据处理与分析

    仿真结果如下:

    引脚锁定并下载:

    提示:在七段显示译码器实验时,可用拨码开关作为输入,一个数码管进行 ^显^示。

    inp0=> 45 对应实验箱上的KD1

    inp1=> 46 对应实验箱上的KD2

    inp2=>47 对应实验箱上的KE3

    inp3=>53 对应实验箱上的KD4

    selin=>54 对应实验箱上的KD5

    selin=>55

    对应实验箱上的 KD6

    selin=>56

    对应实验箱上的 KD7

    outp0=>10

    对应实验箱上的 a

    oup1=>11

    对应实验箱上的 b

    outp2=>12

    对应实验箱上的 c

    oup3=>13

    对应实验箱上的 d

    outp4=>14

    对应实验箱上的 e

    outp5=>15

    对应实验箱上的 f

    outp6=>16

    对应实验箱上的 g

    selout=>7

    对应实验箱上的 A

    selout=>8

    对应实验箱上的 B

    selout=>9

    对应实验箱上的 C

    通过对源程序的编写和仿真感受到了语言的功能,实验结果达到了预期的目 的,与硬件结果一模一样。

    7.质疑、建议、问题讨论

    通过本次的实验, 我懂得了如何通过不同管的发亮来显示不同的数字。

     假如能多 几条斜线,那么是否可以组合出各种形状。

    福建农林大学金山学院信息工程类实验报告

    系:信息与机电工程系 专业: 电子信息工程 年级: 2010 级

    姓名: 梁冰冰

    学号:

    100201022 实验课程:

    EDA技术

    实验室号: 田实405

    实验设备号:

    4

    实验时间:2013

    年4月13日

    指导教师签字:

    成绩:

    实验四 用原理图输入方法设计 8位全加器

    ?实验目的和要求

    本实验为综合性实验,综合了简单组合电路逻辑、 Quartusll的原理图输入

    方法、层次化设计的方法等内容。其目的是通过一个8位全加器的设计熟悉EDA 软件进行电子线路设计的详细流程。学会对实验板上的 FPGA/CPLD4行编程下

    载,硬件验证自己的设计项目。

    ?实验原理

    1位全加器可以用两个半加器及一个或门连接而成,半加器原理图的设计方 法很多,我们用一个与门、一个非门和同或门(xnor为同或符合,相同为1,不 同为0)来实现。先设计底层文件:半加器,再设计顶层文件全加器。113

    (1) 半加器的设计:

    半加器表达式: 进位: co=a and b

    和: so=a xnor ( not b )

    半加器原理图如下:

    coabso

    co

    a

    b

    so

    co

    0

    0

    0

    0

    0

    1

    1

    0

    1

    0

    1

    0

    1

    1

    0

    1

    (2) 全加器的设计:

    全加器原理图如下:

    ?主要仪器设备(实验用的软硬件环境)

    实验的硬件环境是:

    微机一台

    GW48 ED实验开发系统一套

    电源线一根

    十芯JTAG 口线一根

    USB下载线一根

    USB下载器一个

    实验的软件环境是:

    Quartus II 9.0 软件

    ?操作方法与实验步骤

    按照以上介绍的方法与流程,完成半加器和全加器的设计,包括原理图输入、 编译、综合、适配、仿真、实验板上的硬件测试,并将此全加器电路设置成一个 硬件符号入库。

    建立一个更高的原理图设计层次,利用以上获得的1位全加器构成8位全加 器,并完成编译、综合、适配、仿真、硬件测试。

    ?实验内容及实验数据记录

    步骤1:为本项工程设计建立文件夹。

    步骤2:输入设计项目,存盘为:h_adder.bdf

    步骤3:将设计项目设置成工程文件

    步骤4:选择目标器件并编译

    步骤5:时序仿真的结果

    1 z j亠

    1

    t BQ

    J

    h i n

    ~L

    am

    co B □

    ...? 1 . . . . . .—

    —£

    so B 0

    i i i i

    半加器工程h_adder仿真波形

    步骤 6:设计顶层文件。(File — Greate/Update — Greate Symbol Files for Gurret File)

    步骤7:输入设计项目,存盘为f_adder.bdf

    步骤8将设计项目设置成工程文件

    步骤9:选择目标器件并编译

    步骤 11:设计顶层文件。(File — Greate/Update — Greate Symbol Files for Gurret File)

    步骤12:输入设计项目,存盘为EDA8.bdf

    IftwlUiipTjHCsjTik.FTxTuTl」ddBi LTi|i]1. ■'>E*—i.n-

    Iftw

    lUiipT

    jHC

    sjTik.

    FT

    xTuT

    l」ddB

    i LTi|i]

    1. ■'>

    E*

    i.n-

    4H1

    in 1

    7~^idar~

    P3.4

    5"H

    a'l

    ■k<

    zin

    sn e!

    罩-耶..

    iuti

    I 1 1 1 ■ 1 I- ■ 1

    * CM

    bri euti

    cfi

    步骤步骤步骤13

    步骤

    步骤

    步骤

    14:选择目标器件并编译

    15:时序仿真得出来的结果

    ¥7 "

    J 州号竺 』Q罕虫

    13 3p ■£ JU. ¥ ㈡ 白 £ 型 QU \i B 3Q .e?l TK

    W-W HE 0導低

    s?*

    E3 口 u

    ]

    ! B-:匸

    35. ■ ■ ' , 50 . ?X..

    昭 工 9C

    W 、 g 1

    4

    Q. bin.

    ; 35 i 阳 :X

    B3 I 57 >

    w ■:

    a y~

    ? EG

    4

    1 1 1

    u-

    J-

    ?:

    4 mA

    -

    1 1 1

    r

    J 1

    Q 7UI>

    -

    —倉丢泓…

    昭 MfGCT厂* F' *^7rTO: X

    8位全加器工程EDA8仿真波形 步骤16:引脚锁定并编译

    IE

    To

    LocaUon

    Enatlerl

    1

    ■* ^in[0]

    PIN 1

    Ves

    2

    PINJ

    Ves

    3

    Lwin 阖

    PIN 3

    Yes

    V

    l^*^in[3]

    PIN<f

    Yes

    foS

    5

    l^aln[4j

    PIN 6

    Ye5

    6

    叽in⑸

    PIN 7

    Yes

    7

    A丽伍]

    PIN 8

    Ves

    -Q

    e

    Main[7]

    PIN_12

    Ves

    9

    I^-bin[0]

    PIN 233

    Yes

    10

    i?^bin[L]

    PIN 23M

    Ves

    11

    Mb in ⑵

    PIN_235

    Yes

    12

    l^bin[31

    PIN.236

    Yes

    13

    i^bin[4]

    PIN 237

    Ves

    14

    Mb in[引

    PIN 23B

    Ves

    15

    l^bin[6]

    PIN.239

    Yes

    IE

    l^bin[7]

    PIN 24O

    Ves

    17

    l?-dn

    PIH_173

    Yes

    IS

    毋 5U71[O]

    PIhLIB

    Yes

    19

    ?弭m[l]

    PIN 14

    Yes

    20

    <!#£UT1[2]

    PIN 15

    '血

    21

    PIN.1&"

    Yes

    22

    <^5unn[4]

    PINJ7

    Ves

    29

    ?乳m[5]

    PIN_19

    Ves

    21

    池 m[6]

    PINJ9

    Yes

    25

    ? 5UH1[7]

    PIN 20

    Yes

    26

    lit'COLlt

    PIN 160

    Yes

    2?

    <<ne¥\!?

    步骤17:编程下载

    7 ?质疑、建议、问题讨论

    通过这次实验,从半加器的设计到1位全加器的设计,再到8位全加器的设 计,对于EDA设计的具体流程更为了解,映像更是深刻。同时对于逻辑运算的与、 或、非更为熟悉,知道他们其中的原理。

    福建农林大学金山学院信息工程类实验报告

    系:信息与机电工程系

    专业:

    电子信息工程

    年级:

    2010 级

    姓名: 梁冰冰

    学号:

    100201022

    实验课程:

    EDA技术

    实验室号: 田实405实验设备号:

    4 实验时间:2013

    年4月13日

    指导教师签字:

    成绩:

    实验五 乐曲硬件演奏电路的设计

    ?实验目的和要求

    本实验为设计性实验。将VHD硬件描述语言,简单组合电路逻辑Quartusll 的使用等知识应用到实际硬件电路设计中。

     其目的是学会在EDA软件平台中利用 VHDL硬件描述语言设计电路.设计要求利用数控分频器设计乐曲硬件演奏电路 。

    ?实验原理

    与利用微处理器(CPU或MCU来实现乐曲演奏相比,以纯硬件完成乐曲演 奏电路的逻辑要复杂得多,如果不借助于功能强大的 EDA工具和硬件描述语言,

    仅凭传统的数字逻辑技术,即使最简单的演奏电路也难以实现。 本实验设计项目

    是“梁祝”乐曲演奏电路的实现。我们知道,组成乐曲的每个音符的发音频率值 及其持续的时间是乐曲能连续演奏所需的两个基本要素, 问题是如何来获取这两

    个要素所对应的数值以及通过纯硬件的手段来利用这些数值实现所希望乐曲的 演奏效果。

    乐曲硬件演奏电路的顶层文件原理图如图 5-1所示,主系统由3个模块组成: NoteTabs.vhd、ToneTaba.vhd 和 Speakera.vhd。其中,模块 U1 (NoteTabs)类 似于弹琴的人的手指;模块 U2 (ToneTaba类似于琴键;模块 U3 (Speakera) 类似于琴弦或音调发声器。

    图5-1乐曲硬件演奏电路的顶层文件原理图

    F面介绍图5-1的工作原理:

    1 、音符的频率可以由图4-1中的Speakera获得,这是一个数控分频器。由

    其elk端输入一具有较高频率(这里是 12MHZ的信号,通过Speakera分频后 由SPKOU输出,由于直接从数控分频器中出来的输出信号是脉宽极窄的脉冲式 信号,为了有利于驱动扬声器,需另加一个D触发器以均衡其占空比,但这时的 频率将是原来的 1/2。Speakera对elk输入信号的分频比由 11位预置数

    Tone[10..0]决定。SPKOU的输出频率将决定每一音符的音调,这样,分频计数 器的预置值 Tone[10..0] 与SPKOUT勺输出频率,就有了对应关系。例如在 TONETAB模块中若取Tone[10..0]=1036,将发音符为"3"音的信号频率。

    2 、音符的持续时间须根据乐曲的速度及每个音符的节拍数来确定,图 5-1 中模块 ToneTaba 的功能首先是为 Speakera 提供决定所发音符的分频预置数, 而此数在 Speakera 输入口停留的时间即为此音符的节拍值。模块 ToneTaba 是 乐曲简谱码对应的分频预置数查表电路,其中设置了“梁祝” 乐曲全部音符所对 应的分频预置数,共 13 个,每一音符的停留时间由音乐节拍和音调发生器模块 NoteTabs的clk的输入频率决定,在此为 4Hz。这13个值的输出由对应于 ToneTaba的4位输入值Index[3..0] 确定,而Index[3..0] 最多有16种可选值。

     输向ToneTaba中Index[3..0] 的值Tonelndex[3..0] 的输出值与持续的时间由模 块NoteTabs决定。

    3、在 NoteTabs 中设置了一个 8 位二进制计数器(计数最大值为 138),作 为音符数据ROM勺地址发生器。这个计数器的计数频率选为 4Hz,即每一计数值

    的停留时间为 0.25 秒,恰为当全音符设为 1 秒时,四四拍的 4 分音符持续时间。

     例如,NoteTabs在以下的VHDL逻辑描述中,“梁祝”乐曲的第一个音符为“ 3”, 此音在逻辑中停留了 4 个时钟节拍,即 1 秒时间,相应地,所对应的“ 3”音符 分频预置值为 1036,在 Speakera 的输入端停留了 1 秒。随着 NoteTabs 中的计 数器按4Hz的时钟速率作加法计数时,即随地址值递增时,音符数据 ROM中的

    音符数据将从ROM中通过ToneIndex[3..0]端口输向ToneTaba模块,“梁祝”乐曲 就开始连续自然地演奏起来了。

    3.主要仪器设备(实验用的软硬件环境)

    实验的硬件环境是:

    微机一台

    GW48 ED实验开发系统一套

    电源线一根

    十芯 JTAG 口线一根

    USB 下载线一根

    USB 下载器一个

    实验的软件环境是:

    Quartus II 9.0 软件

    4.操作方法与实验步骤

    首先给出该电路的各个基本模块, 再利用 QuartusII 完成各个模块的文本编 辑输入和仿真测试等步骤。完成此项设计,并在 EDA实验系统上的FPGA目标器

    件中实现之。

    5.实验内容及实验数据记录

    实验程序:

    电路顶层设计

    LIBRARY IEEE; -- 硬件演奏电路顶层设计

    USE IEEE.STD_LOGIC_1164.ALL;

    ENTITY Songer IS

    PORT ( CLK12MHZ : IN STD_LOGIC;

    -- 音调频率信号

    CLK8HZ : IN STD_LOGIC;

    -- 节拍频率信号

    CODE1OUT STD_LOGIC_VECTO(R3

    CODE1

    OUT STD_LOGIC_VECTO(R3

    DOWNTO0);-- 简谱码输出显示

    HIGH1OUT STD_LOGIC; -- 高

    HIGH1

    OUT STD_LOGIC; -- 高 8 度指

    SPKOUT

    OUT STD_LOGIC );-- 声音输出

    END;

    ARCHITECTUREone OF Songer IS

    COMPONENTNoteTabs

    PORT ( clkIN

    PORT ( clk

    IN

    STD_LOGIC;

    ToneIndex :);END COMPONENT;

    ToneIndex :

    );

    END COMPONENT;

    COMPONENToneTaba

    PORT ( Index

    TO 0) ;

    CODE

    DOWNTO0) ;

    HIGH

    Tone

    DOWNTO0) );

    END COMPONENT;

    COMPONENTSpeakera

    PORT ( clk

    OWNTO0);

    OUT STD_LOGIC_VECTO(R3 DOWNTO0)

    IN STD_LOGIC_VECTO(R3 DOWN

    : OUT STD_LOGIC_VECTO(R3

    : OUT STD_LOGIC;

    : OUT STD_LOGIC_VECTO(R10

    IN STD_LOGIC;

    Tone : IN STD_LOGIC_VECTO(R10 D

    SpkS : OUT STD_LOGIC );

    END COMPONENT;

    SIGNAL Tone : STD_LOGIC_VECTO(R10 DOWNTO0);

    SIGNAL ToneIndex : STD_LOGIC_VECTO(R3 DOWNTO0);

    BEGIN

    u1 : NoteTabs PORT MAP (clk=>CLK8HZ, ToneIndex=>ToneIndex);

    u2 : ToneTaba PORT MAP (Index=>ToneIndex,Tone=>Tone,CODE=>CODE1, HIGH=>HIGH1);

    u3 : Speakera PORT MAP(clk=>CLK12MHZ,Tone=>Tone, SpkS=>SPKOUT); END;

    Speakera模块:

    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_VECTO(R10 DOWNTO

    0);

    SpkS : OUT STD_LOGIC );

    END;

    ARCHITECTUREone OF Speakera IS

    SIGNAL PreCLK, FullSpkS : STD_LOGIC;

    BEGIN

    DivideCLK : PROCESS(clk)

    VARIABLE Count4 : STD_LOGIC_VECTO(R3 DOWNTO0)

    BEGIN

    PreCLK <= 'O'; -- 将 CLK进行 16 分频,PreCLK为

    CLK的16分频

    IF Count4>11 THEN PreCLK <= '1'; Count4 := "OOOO";

    ELSIF clk'EVENT AND clk = '1' THEN Count4 : = Count4 + 1;

    END IF;

    END PROCESS;

    GenSpkS : PROCESS(PreCLK, Tone)-- 11 位可预置计数器

    VARIABLE Count11 : STD_LOGIC_VECTO(R1O DOWNTO O);

    BEGIN

    IF PreCLK'EVENT AND PreCLK = '1' THEN

    IF Count11 = 16#7FF# THEN Count11 := Tone ; Fu llSpkS <= '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;

    Ton eTaba模块:

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    ENTITY ToneTaba IS

    PORT ( Index : IN STD_LOGIC_VECTO(R3 DOWNTO0) ;

    CODE : OUT STD_LOGIC_VECTO(R3 DOWNTO

    0) ;

    HIGH : OUT STD_LOGIC;

    Tone : OUT STD_LOGIC_VECTO(R10 DOWNTO

    0) );

    END;

    ARCHITECTUREone OF ToneTaba IS

    BEGIN

    Search PROCESS(Index)

    Search PROCESS(Index)

    BEGIN

    CASE Index IS--

    CASE Index IS

    -- 译码电路,查表方式,控制

    音调的预置数

    WHEN "0000"

    =>

    Tone<="11111111111" ;

    CODE<="0000";

    HIGH

    <=

    0';-

    - 2047

    WHEN "0001"

    =>

    Tone<="01100000101" ;

    CODE<="0001";

    HIGH

    <=

    0';-

    - 773;

    WHEN "0010"

    =>

    Tone<="01110010000" ;

    CODE<="0010";

    HIGH

    <=

    0';-

    - 912;

    WHEN "0011"

    =>

    Tone<="10000001100" ;

    CODE<="0011";

    HIGH

    <=

    0';-

    -1036;

    WHEN "0101"

    =>

    Tone<="10010101101" ;

    CODE<="0101";

    HIGH

    <=

    0';-

    -1197;

    WHEN "0110"

    =>

    Tone<="10100001010" ;

    CODE<="0110";

    HIGH

    <=

    '0';--1290;

    WHEN "0111"

    =>

    Tone<="10101011100" ;

    CODE<="0111";

    HIGH

    <=

    0';--1372;

    WHEN "1000"

    =>

    Tone<="10110000010" ;

    CODE<="0001";

    HIGH

    <=

    1';--1410;

    WHEN "1001"

    =>

    Tone<="10111001000" ;

    CODE<="0010";

    HIGH

    <=

    1';--1480;

    WHEN "1010"

    =>

    Tone<="11000000110" ;

    CODE<="0011";

    HIGH

    <=

    1';--1542;

    WHEN "1100"

    =>

    Tone<="11001010110" ;

    CODE<="0101";

    HIGH

    <=

    1';--1622;

    WHEN "1101"

    =>

    Tone<="11010000100" ;

    CODE<="0110";

    HIGH

    <=

    1';--1668;

    WHEN "1111"

    =>

    Tone<="11011000000" ;

    CODE<="0001";

    HIGH

    <=

    '1';--1728;

    WHEN OTHERS => NULL;

    END CASE;

    END PROCESS;

    END;

    NoteTabs 模块:

    LIBRARY IEEE;

    USE IEEE.STD_LOGIC_1164.ALL;

    USE IEEE.STD_LOGIC_UNSIGNED.ALL;

    ENTITY NoteTabs IS

    PORT ( clk : IN STD_LOGIC;

    ToneIndex : OUT STD_LOGIC_VECTO(R3 DOWNTO0) );

    END;

    ARCHITECTUREone

    OF NoteTabs IS

    COMPONENTMUSIC

    -- 音符数据 ROM

    PORT(address :

    IN STD_LOGIC_VECTO(R7 DOWNTO0);

    clock

    : IN STD_LOGIC ;

    q : OUT STD_LOGIC_VECTO(R3 DOWNTO0));

    END COMPONENT;

    SIGNAL Counter : STD_LOGIC_VECTO(R7 DOWNTO0);

    BEGIN

    CNT8 : PROCESS(clk, Counter)

    BEGIN

    IF Counter=138 THEN Counter <= ;

    ELSIF (clk'EVENT AND clk = '1') THEN Counter <= Counter+1; END IF;

    END PROCESS;

    u1 : MUSIC PORT MAP(address=>Counter , q=>ToneIndex, clock=> clk);

    END;

    6.实验数据处理与分析 最后成功的播放出声音,说明实验已经成功。

    7.质疑、建议、问题讨论

    通过本次的实验让我对分频器有了更进一步的了解,同时对 VHDLt 了深刻的理

    解。那么能否利用数控治波长来设计乐曲硬件演奏电路呢?

    有关的专题