1k likes | 1.21k Views
EDA 技术 --Quartus II. 制作人 : 林建华. 闽南理工学院 实践教学中心. 实验目录. 实验一 双控开关的控制 实验二 含有控制信号计数器的 VHDL 设计 实验三 数码管显示电路的 VHDL 设计 实验四 分频器的设计 实验五 序列发生器和检测器的设计 实验六 2 选 1 和 4 选 1 多路选择设计 实验七 交通灯红绿灯控制器 实验八 伪随机序列码发生器及 CMI 编码、译码的 VHDL 语言设计. 实验一. 双控开关的设计. 一、实验目的.
E N D
EDA技术--Quartus II 制作人:林建华 闽南理工学院 实践教学中心
实验目录 实验一 双控开关的控制 实验二 含有控制信号计数器的VHDL设计 实验三 数码管显示电路的VHDL设计 实验四 分频器的设计 实验五 序列发生器和检测器的设计 实验六 2选1和4选1多路选择设计 实验七 交通灯红绿灯控制器 实验八 伪随机序列码发生器及CMI编码、译码的 VHDL 语言设计
实验一 双控开关的设计
一、实验目的 • 1、通过一个两路控制开关电路的的设计,让学生掌握逻辑电路的设计方法。 • 2、掌握逻辑电路的原理图输入方式。 • 3、初步了解Quartus II软件的设计过程。
二、实验内容 • 用原理图输入方式设计双控开关电路,用两个开关控制一盏灯,要求合上任一开关,灯亮,断任一开关,灯灭。(即任一开关的合断改变原来灯亮灭的状态)。 • 根据设计要求,得出其逻辑函数为:。那么需要的元器件是两个与门,两个非门,一个或门,两个输入信号和一个输出信号。
二、实验仪器 • 1、PC机一台 • 2、Quartus II 9.0软件
四、实验步骤 1.进入WINDOWS操作系统,在E盘建立一个名字为kaiguan的文件夹,打开Quartus II。 2. 原理图设计输入法 (1)启动菜单File\New,选择Block Diagram/Schematic File,打开原理图编辑器,进行原理图设计输入如图1-1。 (2)根据逻辑函数查找相应器件并放置在原理图上。 在原理图的空白处点击右键,选择Insert-Symbol,现出图1-2。 <a> 在元件库栏中输入元件名称或用鼠标点击(选择)元件,按下OK即可。 <b> 图1-3为电路需要的元件。 (3)连线到器件的管脚上。 把鼠标移到引脚附近,则鼠标光标自动由箭头变为十字,按住鼠标左键拖动,即可画出连线.如图1-4所示。
图1-3 调用的元器件 图1-4 电路原理图
3.将设计项目保存并设置成工程文件 在利用EDA开发系统进行数字电路设计过程中,开发系统会自动产生大量与分析和设计相关的文件,因此为了便于管理和使用这些文件,常常在进行逻辑设计时,建立一个项目(project)文件,通常将设计文件设置成project。 (1)单击save as按扭 ,选择合适目录,合适名称保存刚才输入的原理图。原理图的扩展名为.bdf,本实验取名kaiguan.bdf。 (2)把当前文件设置为工程文件。一般来说如果设计项目由多个设计文件组成,则应该将他们的主文件,即顶层文件设置成project。工程名称和顶层设计文件相同,但没有扩展名,同一时间内只能对一个项目进行编译,仿真,定时分析和编程操作。 (3)选择芯片型号 我们设计的程序最终要在芯片里执行它的功能,目前开发商生产了很多不同类型的芯片,每个芯片都有它自己的资源优势,在已有芯片的基础上正确编程才能充分利用芯片资源,才能使得编写的程序在已有的芯片里正确运行。这非常重要。同样,如果在编译时不选择适配芯片的
4.设计项目的编译 (1)对设计项目进行编译。 启动Quartus II\Processing菜单,按START Compilation开始全程编译,并显示编译结果,可详细查看编译结果。如图1-6所示。 图1-6 设计项目的编译界面
5. 设计项目的仿真 如果编译通过了,只能说明你的设计在逻辑上没有问题,但是否符合你的设计要求还要看项目的功能仿真和时序分析。 (1)选择“FILE/NEW项 Vector Waveform File”命令,进入波形编辑窗口,如图1-7所示。 图1-7 波形编辑界面
(2)将鼠标指针移至空白处并单击鼠标右键,在弹出的快捷菜单中选择“Insert Node or bus”命令,将弹出如图1-8所示的对话框。单击LIST和=>按钮,选择欲仿真的所有I/O管脚。 图1-8 节点的调用
(3)单击‘OK’按钮,列出了仿真电路的所有输入和输出管脚。(3)单击‘OK’按钮,列出了仿真电路的所有输入和输出管脚。 (4)为电路输入端添加激励波形,如图1-11所示。 选中欲添加信号的管脚,窗口左边的各种信号源即刻被激活,设置输入信号,保存文件。 此实验请将输入信号分别设置为以下: a:111000110001 b:110010011000 图1-9 添加激励信号图
(5)设置仿真时间。 选择“Edit/End time”菜单命令,弹出仿真对话框,如图1-10所示。 图1-10 仿真对话框图 接下来要确定仿真时间,END TIME 为‘1’的整数倍,仿真时间的确定非常重要,如果编译通过而仿真没有结果,有可能是添加的激励信号和仿真时间设置错误。
(6)仿真并观察电路仿真结果。 图1-11 电路仿真结果
启动仿真,在菜单选中Processing/Run Simulation选项运行,由仿真结果可以看出,设计完全正确。在仿真结果的空白处点击鼠标右键,出现测量标尺,然后将标尺拖至欲测量的地方,查看延时情况。 从图中可以看到电路实际工作时激励输出有5.6ns的延迟时间。 若输入信号 a:111000110001 b:110010011000 则输出信号c为什么? 请画出正确的波形,实验中电路实际工作时激励输出有否出现延时?若有,延时是多少?
6.管脚的重新分配与定位 选择“Assignments︱pins”的菜单命令,弹出如图1-12所示的芯片管脚分配窗口。用户可随意改变管脚分配,以方便与外设电路进行匹配。 图1-12 管脚分配图 最后,存储了这些引脚锁定的信息后,必需在编译一次,才能将引脚锁定的信息编译进程序下载的文件中。
7.器件的下载编程 (1)选择”Tool/Programmer”菜单命令,手动选择配置kaiguan.sof。注意核对下载文件名和路径。 点击Hard Setup按钮,如果是第一次用编程器的话,提示”No Hardware”,需要选择硬件类型。编程器选择“Byte Blaster”并单击“OK”按钮即可。 (2)选择欲编程的文件,在Program/Configure方框处打钩,表示下载配置。如果列表中不是当前需要下载编程的文件,应单击“Delete”按钮将其删除,然后单击”Add”按钮,将其添加到文件列表中。 (3)选择要下载的.pof文件(如选择的芯片是FPGA类型,下载的文件类型则应该选择.sof文件),后单击“Start”按钮,弹出下载编程窗口进行下载编程。
五、实验扩展 请结合本例子,思考并设计一个四个开关控制一盏灯的VHDL语言程序。 六、实验思考题 1、可编程逻辑器件的发展历程。 2、原理图输入的设计方法流程是什么? 七、实验注意事项 1、保持实验室的安静,卫生。 2、没有老师的允许,不可擅自拆装电脑的各个配件。注意用电安全。 3、每一次设计一个独立的项目时,一定要事先建立一个属于自己的文件夹,把该项目的文件存在自己的文件夹里。 4、记住每个文件在命名时的后缀。 5、 注意程序编写逻辑的严谨性。 八、实验报告要求 1、观察记录实验仿真结果,分析其正确性和延迟时间。回答5-6中的问题,并分析其原理。
实验二 含有控制信号计数器的VHDL设计 --(设计性实验)
一、实验目的 • 1、学习计数器的设计、仿真测试,进一步熟悉VHDL设计技术。
二、实验内容 在QuartusII上设计一个含计数使能、异步复位和计数值并行预置功能的4位加法计数器,并进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。
三、实验仪器 • PC机一台。 • QuartusII 9.0软件。
四、实验原理 • 本实验要设计的是一个含计数使能、异步复位和计数值并行预置功能的4位加法计数器。如图2-1所示,输入端口共有5个,其中reset是异步清信号,高电平有效;clk是时钟信号;Data[3:0]是4位数据输入端。当时钟信号来到,load为‘1’,且reset为‘0’时,对这个计数器进行置数。反之,在en为‘1’的情况下,计数器加1计数。 图2-1 4位加法计数器
实验参考程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter4 IS PORT(reset,load,en,clk:IN STD_LOGIC; data:IN STD_LOGIC_VECTOR(3 DOWNTO 0); cnt4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END counter4; ARCHITECTURE ONE OF counter4 IS SIGNAL cqi: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN PROCESS(clk,reset) BEGIN IF (reset=’1’) THEN Cqi<=(OTHERS=>’0’); ELSIF(clk’event and clk=’1’) THEN IF load=’1’ THEN Cqi<=data; ELSIF en=’1’ THEN Cqi<=cqi+1; END IF; END IF; END PROCESS; Cnt4<=cqi; END ONE;
五、实验扩展设计 本实验设计的计数器是一个加1的计数器,而日常生活中我们用的计数器既可加1也可减1,请同学们充分发挥自己的聪明才智,在本例子的基础上思考并设计一个含有控制信号的计数器,既可预置加1,也可预置减1。 另外,本实验也可以使用参数可设置LPM宏功能块来设计,请同学们自己去思考。 六、实验注意事项 1、保持实验室的安静,卫生。 2、没有老师的允许,不可擅自拆装电脑的各个配件。注意用电安全。 3、每一次设计一个独立的项目时,一定要事先建立一个属于自己的文件夹,把该项目的文件存在自己的文件夹里。 4、记住每个文件在命名时的后缀。 5、注意程序编写逻辑的严谨性。 6. 在设置仿真波形的激励信号时,一定要与该信号的功能保持一致,这样才能看到正确的时序仿真。
七、实验思考题 • 1、是否可以不定义信号 CQI,而直接用输出端口信号完成加法运算,即 : CNT4 <= CNT4 + 1 ? 为什么? • 2、本实验的敏感信号还有哪些。 • 八、实验报告要求 • 1、将实验原理、设计过程、编译仿真波形和分析结果、硬件测试实验结果写进实验报告。 • 2、本次实验中你的感受;你从实验中获得了哪些收益;本次实验你的成功之处;本次实验中还有待改进的地方;下次实验应该从哪些地方进行改进;怎样提高自身的实验效率和实验水平等等。
实验三 数码管显示电路的VHDL设计 --(设计性实验)
一、实验目的 • 通过数码管显示电路的设计学习VHDL的CASE语句应用及多层次设计方法。
二、实验内容 1、在QuartusII设计一个7段数码显示电路进行编辑、编译、综合、适配、仿真,给出其所有信号的时序仿真波形。 2、其中用VHDL语言编写一个译码器和一个4位加法器,并在顶层文件中用原理图编辑方法把它们组合成7段数码显示译码器。
三、实验仪器 • PC机一台。 • Quartus II 9.0软件
四、实验原理 7段数码显示是纯组合电路,在日常生活中应用广泛,它可以显示0—9十个阿拉伯数字。作为7段十进制译码器,输出信号LED7S的7位分别接如图3-1数码管的7个段,高位在左,低位在右。例如当LED7S输出为“1101101”时,数码管的7个段:g、f、e、d、c、b、a分别接1、1、0、1、1、0、1;接有高电平的段发亮,于是数码管显示“5”。 图3-1 共阴数码管及其电路
设计提示: 本电路包含有两个设计,一个是计数器的设计,一个是数码管译码器的设计,在波形仿真中我们需要设定输入信号,那么这个输入信号应该由计数器提供,这样可以看到数码管0变到9,人工输入就比较麻烦且不定符合要求。给出所有信号的时序仿真波形时用输入总线的方式给出输入信号仿真数据)。 图3-2 计数器和译码器连接电路的顶层文件原理图
参考程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DECL7S IS PORT( A:IN STD_LOGIC_VECTOR(3 DOWNTO 0); LED7S:OUT STD_LOGIC_VECTOR(6 DOWNTO 0)); END encoder7; ARCHITECTURE behav OF DECL7S IS BEGIN PROCESS(A) BEGIN CASE A IS WHEN "0000"=> LED7S <="0111111"; WHEN "0001"=> LED7S <="0000110"; WHEN "0010"=> LED7S <="1011011"; WHEN "0011"=> LED7S <="1001111"; WHEN "0100"=> LED7S <="1100110"; WHEN "0101"=> LED7S <="1101101"; WHEN "0110"=> LED7S <="1111101"; WHEN "0111"=> LED7S <="0000111"; WHEN "1000"=> LED7S <="1111111"; WHEN "1001"=> LED7S <="1101111"; WHEN OTHERS=> LED7S <="1110001"; END CASE; END PROCESS; END behav;
五、实验扩展 通常的小规模专用IC,如74或4000系列的器件能作十进制BCD码译码,然而数字系统中的数据处理和运算都是2进制的,所以输出表达都是16进制的,为了满足16进制数的译码显示,最方便的方法就是利用译码程序在FPGA/CPLD中来实现,请在本例的基础上思考并设计一个能显示0—9和字母a,b,c,d,e的十六进制BCD译码器。 六、实验注意事项 1、保持实验室的安静,卫生。 2、没有老师的允许,不可擅自拆装电脑的各个配件。注意用电安全。 3、每一次设计一个独立的项目时,一定要事先建立一个属于自己的文件夹,把该项目的文件存在自己的文件夹里。 4、记住每个文件在命名时的后缀。 5、注意程序编写逻辑的严谨性。
七、实验思考题 • 1、讨论语句WHEN OTHERS=>NULL的作用。对于不同的VHDL综合器,此句是否具有相同含义和功能? • 2、思考如何实现不同字母显示电路的设计? • 八、实验报告要求 • 1、根据以上的实验内容写出实验报告,包括程序设计、软件编译、仿真分析和实验过程,总结实验步骤和实验结果; • 2、本次实验中你的感受;你从实验中获得了哪些收益;本次实验你的成功之处;本次实验中还有待改进的地方;下次实验应该从哪些地方进行改进;怎样提高自身的实验效率和实验水平等等。 • 3、完成实验思考题。
实验四 分频器的设计 --(设计性实验)
一、实验目的 • 1.了解时钟分频电路的原理。 • 2.掌握使用计数器来实现时钟的分频。
二、实验内容 • 设计一个时钟分频电路,其输入信号为输入时钟信号clk,清零脉冲clr(高有效),分频使能信号en(高电平有效) ,分频控制信号data,输出信号为输出时钟clk-out。 • 假设输入时钟周期为T,试设计一个分频电路,使其输出时钟的周期为2nT,即对时钟信号进行2n分频。
三、实验仪器 • PC机一台。 • QuartusII 9.0软件。
四、实验原理 • 在数字电路中,常需要对较高频率的时钟进行分频操作,得到较低频率的时钟信号。我们知道,在硬件电路设计中时钟信号是最重要的信号之一。 下面我们介绍分频器的 VHDL 描述,在源代码中完成对时钟信号 CLK 的 2的倍数 分频,这也是最简单的分频电路,只需要一个计数器即可。 • 使用一模N计数器模块即可实现,即每当模N计数器上升沿从0开始计数至N时,输出时钟进行翻转,同时给计数器一复位信号使之从0开始重新计数,以此循环即可。
参考程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY clk_div IS PORT(clk,en,clr:IN STD_LOGIC; data:IN STD_LOGIC_VECTOR(3 DOWNTO 0); clk_out:OUT STD_LOGIC); END clk_div; ARCHITECTURE ONE OF clk_div IS SIGNAL count: STD_LOGIC_VECTOR(3 DOWNTO 0); SIGNAL clkout: STD_LOGIC; BEGIN PROCESS(clk,clr) BEGIN IF clr=’1’ THEN clkout<=’0’; ELSIF(clk’event and clk=’1’) THEN IF EN=’1’ THEN IF(count=data) THEN Count<=(others=>’0’);clkout<= NOT clkout; ELSE count<=count+1; END IF; END IF; END IF; END PROCESS; Clk_out<=clkout: END ONE;
五、实验扩展 本实验是对时钟信号的2的倍数分频,而在各个设计中我们还需要对时钟的奇数和小数倍的分频,请结合本例子思考并设计一个可以进行奇数倍分频的程序。 六、实验注意事项 1、保持实验室的安静,卫生。 2、没有老师的允许,不可擅自拆装电脑的各个配件。注意用电安全。 3、每一次设计一个独立的项目时,一定要事先建立一个属于自己的文件夹,把该项目的文件存在自己的文件夹里。 4、记住每个文件在命名时的后缀。 5、注意程序编写逻的严谨性。
10s 20s 20s 0 T 七、实验思考题 1、如何改变分频后时钟信号的占空比。 2、利用10MHz的时钟,设计一个单周期形状如下图4-1所示的周期波形。 图4-1 占空比不是1:1的波形 八、实验报告 1、除了本实验的设计方法,你还想到哪些分频的设计思路,哪一种比较合理? 2、仿真中是否出现竞争冒险?若有,是如何解决的? 3、给出每种方法的仿真波形截图,并结合自己的设计思路加以说明。
实验五 序列发生器和检测器的设计 (设计性实验)
一、实验目的 1、掌握序列发生器和检测器的工作原理; 2、学会用状态机进行数字系统设计。
二、实验内容 • 连续完成一个“ 10001110”序列和九个非“10001110”序列的发生; • 检测“ 10001110”序列,当检测到该序列后输出“1010”,否则输出“1011”。