EDA实验七八程序及仿真波形
- 格式:doc
- 大小:68.50 KB
- 文档页数:4
实验一 maxplusII 软件的初步使用(图形的设计)一、实验目的:1、初步掌握Max+PlusII 软件的基本操作与应用。
2、初步了解可编程器件的设计全过程。
二、实验仪器: 1. 电脑一台 2. 实验箱一个三、实验内容:(一)设计输入:1、软件的启动:单击“开始”进入“程序”选中“Max+PlusII 10.1 BASELINE ”,打开“”MaxplusII 软件,如图1.1-1所示。
2、启动File\New 菜单,弹出设计输入选择窗口,如图1.1-2所示:3、选择Graphic Editor File ,单击OK ,打开原理图编辑器,进入原理图设计输入电路编辑状态。
如图1.1-3所示。
4、设计输入1)放置一个器件在原理图上 01.1-4图1.1-1图1.1-2图1.1-3 图1.1-4b 、在光标处输入元件名称(如:input ,output ,and2,and3,nand2,or2,not ,xor ,dff 等)或用鼠标点击库元件,按下OK 即可。
c 、如果安放相同的元件,只要按住Ctrl 键,同时用鼠标按左键拖动该元件复制即可。
d 、一个完整的电路包括:输入端口input 、电路元件集合、输出端口output 。
e 、图1.1-5为3-8译码器元件安放结果。
2)添加连线到器件的引脚上:把鼠标移到元件引脚附近,则鼠标自动由箭头变为十字,按住鼠标左键拖动,即可画出连线。
3-8译码器原理图连线后如图1.1-6所示。
3)标记输入/输出端口属性分别双击输入端口的“PINNAME ”,当变成黑色时,即可输入标记符并回车确认;输出端口标记方法类似。
本译码器的三输入端分别标记为:A 、B 、C ;其八输出端分别为:D0、D1、D2、D3、D4、D5、D6、D7。
如图1.1-7所示。
4)保存原理图单击保存按钮图表,对于新建文件,出现类似文件管理器图框,请选择保存路径/文件名称保存原理图,原理图的扩展名为.gdf ,本实验中取名为test1.gdf 。
计科二班 03号樊艳波实验三:存储器实验实验设备1、PC机一台2、数字系统实验箱3、QuartusII配套软件实验预习:计算机的存储器是存储各种二进制信息的记忆装置,计算机的内存是计算机不可缺少的部件,用来存放计算机正在执行或将要执行的程序和数据等信息;本次实验主要是学习存储器的组成、分类、容量扩展等内容,学习了Lpm_ram_io定制方法,并设计了存储器的数据通路和附加显示电路,对存储器的数据传送、存储和读取进行验证,预习中主要遇到了一下问题1、存储器实验原理框图的理解及各个部分芯片的选择2、画图法设计时地址计数器PC的设计3、如何修改电路使其能连续读取连续地址单元中的内容实验的结构框图以及各部分的芯片选择(可以实现连读功能)实验中几个主要部件的设计如下:程序计数器PC的设计:通过两片74161级联而成,其电路图如下设计这部分时的主要问题在于级联信号的生成;一开始误以为装载时需要使能EN有效,所以在装载和清零上卡了很长时间,后来通过对时钟信号的控制虽然解决了这个问题,但是电路比较麻烦;通过与同学讨论才发觉装载时不需要EN 信号有效,只需要将第四位的进位输出rco当做高四位的使能输入即可实现级联Lpm_ram_io的定制及相关参数如下附加电路的设计:这里将K值,PC中的地址,以及总线上的数据都显示到数码管上,K的生成有两片16进制的计数器级联而成,这部分只需要根据实验2的附加电路坐一些改动即可,没有遇到什么问题,其顶层图如下波形仿真:波形仿真参数设置仿真参数设置:Grid size:100.0ns End time:10.0us验证功能:PC的装载、清零、+1功能;存储器的读写功能,(从.mif文件中读数据);以及连续读数据Initial_file.mif中的部分数据如下波形仿真结果及分析思考题1、如何将两片512*4bit的RAM构成容量为512*8bit的存储体?2、如何将两片512*4bit的RAM构成容量为1024*4bit的存储体?3、如何修改电路使其能读出存入连续地址单元中的数据?答:只需要将图中的存储地址显示由AR输出端移到PC输出端,同时PC输出端不连接到总线上即可,见结构框图4、如何将原理图输入的逻辑电路转换成HDL语言描述的器件?答:通过File->Create/Update->Create HDL Design File For Current File实验日志:1、本次试验主要学习了有关存储器的一些知识,设计了一个八位存储器和相关的数据通路,模拟了存储器的读写操作;实验的难点在于数据通路的设计,本实验我采用VHDL和画图法两种方法设计了数据通路;2、实验中主要在画图的过程中出现了一些问题,一开始对实验原理图不是很理解,对芯片的选择弄不对,进过自己的仔细分析弄清楚了各部分的功能;在程序计数器PC的设计方面遇到了困难,本实验是通过两片74161芯片级联而成,在高四位的时钟信号的生成上遇到了困难,经过好长时间的实验才解决(解决方法见上)3、波形模拟过程中在PC的装载上出现了问题,经检查原来是SW_bus打开的同时存储器进行了读得操作,结果存储器里的数据和K值被同时放到了总线上导致PC装载时出错,在这里耽误了我许多时间;以后实验还是需要更加仔细一些,本次试验花费了我很多时间,但也暴露出了我的一些个问题。
EDA实验8位加法器的设计实验报告_王炜20150414电⽓与信息⼯程学院电⼦设计⾃动化实验报告实验⼆8位加法器设计指导⽼师:谭会⽣⽼师学⽣姓名:王炜班级:电⼦信息1202学号:12401720207实验时间:2015-04-07实验⼆8位加法器设计1.实验⽬的(1)掌握EDA使⽤⼯具QUARTUS2 的使⽤⽅法。
(2)学会⽤quartus软件建⽴项⽬并编写程序和调试下载的⽅法。
(3)掌握VHDL程序的软件及硬件的仿真⽅法。
2.实验内容设计并调试好⼀个由两个4位⼆进制并⾏加法器级联⽽成的8位⼆进制并⾏加法器,并⽤软件QUARTUS II进⾏仿验证。
3.实验条件开发软件:Quartus ii 8.04.实验设计1)系统原理框图系统设计思路:加法器是数字系统中的基本逻辑器件,减法器和硬件乘法器都可以由加法器来构成。
多位加法器的构成有两种⽅式:并⾏进位和串⾏进位。
并⾏进位加法器设有进位产⽣逻辑,运算速度加快;串⾏进位⽅式是将全加器级联构成多位加法器。
并⾏进位加法器通常⽐串⾏级联加法器占⽤的更多的资源。
随着位数的增加,相同位数的并⾏加法器与串⾏加法器的资源占⽤差距也越来越⼤。
因此,在⼯程中使⽤的加法器时,要在速度和容量之间寻找平衡点。
设计⽅法:为了简化设计并便于显⽰,本计数器电路ADDER8B的设计分为两个层次,其中底层电路包括两个4位⼆进制并⾏加法器ADDER8B,再由这两个模块按照图2-1所⽰的原理图构成顶层电路ADDER8B。
这⾥我们采⽤由两个4位⼆进制并⾏加法器级联⽽成的⽅案。
图2-1 ADDER8B电路原理图2)VHDL程序8位加法器的底层和顶层电路均采⽤VHDL⽂本输⼊,有关VHDL程序如下:4位⼆进制并⾏加法器的VHDL源程序:--ADDER4B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER4B ISPORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4:OUT STD_LOGIC);END ENTITY ADDER4B;ARCHITECTURE ART OF ADDER4B ISSIGNAL S5:STD_LOGIC_VECTOR(4 DOWNTO 0);SIGNAL A5,B5:STD_LOGIC_VECTOR(4 DOWNTO 0);BEGINA5<='0'&A4B5<='0'&B4S5<=A5+B5+C4;S4<=S5(3 DOWNTO 0);CO4<=S5(4);END ARCHITECTURE ART;8位⼆进制并⾏加法器的VHDL源程序:--ADDER8B.VHDLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ADDER8B ISPORT(C8:IN STD_LOGIC;A8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);B8:IN STD_LOGIC_VECTOR(7 DOWNTO 0);S8:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);CO8:OUT STD_LOGIC);END ENTITY ADDER8B;ARCHITECTURE ART OF ADDER8B ISCOMPONENT ADDER4B ISPORT(C4:IN STD_LOGIC;A4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);B4:IN STD_LOGIC_VECTOR(3 DOWNTO 0);S4:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);CO4:OUT STD_LOGIC);END COMPONENT ADDER4B;SIGNAL SC:STD_LOGIC;BEGINU1:ADDER4BPORT MAP(C4=>C8,A4=>A8(3 DOWNTO 0),B4=>B8(3 DOWNTO 0), S4=>S8(3 DOWNTO 0),CO4=>SC);U2:ADDER4BPORT MAP(C4=>SC,A4=>A8(7 DOWNTO 4),B4=>B8(7 DOWNTO 4), S4=>S8(7 DOWNTO 4),CO4=>CO8);END ARCHITECTURE ART;3)仿真波形设置顶层ADDER8B仿真输⼊设置及可能结果估计图如图2-2。
河北科技大学实验报告2012级电信专业122班学号38 15年6月3日姓名郑振兴同组人指导教师于国庆实验名称实验三七段译码显示成绩实验类型设计型批阅教师一、实验目的(1)掌握VHDL语言的行为描述设计时序电路。
(2)掌握FPGA动态扫描显示电路设计方法。
(3)熟悉进程(process)和顺序语句的应用。
二、实验原理:用4个开关作为加法器的一组输入变量,共4组输入变量;对每组变量进行译码,变换成0~F标准段码,段码中“1”表示段亮,“0”表示段灭。
一位时钟输入作为扫描显示位扫时钟,四位位扫输出,依次输出高电平。
8位段码输出,根据位选状态选择输出四组输入变量的相应译码结果。
四组输入采用试验箱K1~K16,时钟输入选择试验箱CP1或CP2;试验箱LED显示选择动态显示方式(CZ1开关ST选择 OFF),段码、位码分别扫描输出,某个管的位码有效期间,将其对应的段码输出,各位码依次有效,实现循环扫描显示,将输入的16位二进制数,每4位一组,分别显示到4个数码管上(0 ~ F)。
三、实验内容及步骤1.打开MUXPLUS II VHDL编辑器,完成七段译码显示的设计。
包括VHDL程序输入、编译、综合。
实验程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;ENTITY qiduanyima ISPORT ( CLK: IN STD_LOGIC;A: OUT STD_LOGIC_VECTOR(3 DOWNTO 0) ;B: IN STD_LOGIC_VECTOR(15 DOWNTO 0) ;C: OUT STD_LOGIC_VECTOR(6 DOWNTO 0) ) ; END qiduanyima;ARCHITECTURE simple OF qiduanyima ISBEGINPROCESS (CLK)VARIABLE Q : INTEGER RANGE 0 TO 5;VARIABLE COUNT : STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINIF CLK'EVENT AND CLK='1' THENQ:=Q+1;CASE Q ISWHEN 1 => A(3 DOWNTO 0)<= "1000";WHEN 2 => A(3 DOWNTO 0)<= "0100";WHEN 3 => A(3 DOWNTO 0)<= "0010";WHEN 4 => A(3 DOWNTO 0)<= "0001";WHEN OTHERS => NULL;END CASE;CASE Q ISWHEN 1 =>COUNT(3 DOWNTO 0):=B(3 DOWNTO 0);WHEN 2 =>COUNT(3 DOWNTO 0):=B(7 DOWNTO 4);WHEN 3 =>COUNT(3 DOWNTO 0):=B(11 DOWNTO 8);WHEN 4 =>COUNT(3 DOWNTO 0):=B(15 DOWNTO 12);WHEN OTHERS => NULL;END CASE;IF Q = 5 THENQ := 0;END IF;END IF;CASE COUNT ISWHEN "0000" => C(6 DOWNTO 0) <= "0111111" ;WHEN "0001" => C(6 DOWNTO 0) <= "0000110" ;WHEN "0010" => C(6 DOWNTO 0) <= "1011011" ;WHEN "0011" => C(6 DOWNTO 0) <= "1001111" ;WHEN "0100" => C(6 DOWNTO 0) <= "1100110" ;WHEN "0101" => C(6 DOWNTO 0) <= "1101101" ;WHEN "0110" => C(6 DOWNTO 0) <= "1111101" ;WHEN "0111" => C(6 DOWNTO 0) <= "0000111" ;WHEN "1000" => C(6 DOWNTO 0) <= "1111111" ;WHEN "1001" => C(6 DOWNTO 0) <= "1101111" ;WHEN "1010" => C(6 DOWNTO 0) <= "1110111" ;WHEN "1011" => C(6 DOWNTO 0) <= "1111100" ;WHEN "1100" => C(6 DOWNTO 0) <= "0111001" ;WHEN "1101" => C(6 DOWNTO 0) <= "1011110" ;WHEN "1110" => C(6 DOWNTO 0) <= "1111001" ;WHEN "1111" => C(6 DOWNTO 0) <= "1110001" ;WHEN OTHERS => NULL ;END CASE;END PROCESS;END ARCHITECTURE simple;2、建立仿真波形文件,使用 MAXPLUS II Simulator功能进行功能仿真。
福建农林大学金山学院信息工程类实验报告课程名称:EDA技术姓名:邱彬彬系:信息与机电工程系专业:电子信息工程专业年级:2010级学号:100201079指导教师:蔡剑卿职称:讲师2013年05月03日实验项目列表福建农林大学金山学院信息工程类实验报告系:信息与机电工程系专业:电子信息工程年级: 2010级姓名:邱彬彬学号: 100201079 实验课程: EDA技术实验室号:__田实405 实验设备号: 2B 实验时间: 2013年4月13日指导教师签字:成绩:实验一Quartus II 9.0软件的使用1.实验目的和要求本实验为验证性实验,其目的是熟悉Quartus II 9.0软件的使用,学会利用Quartus II 9.0软件来完成整个EDA开发的流程。
2.实验原理利用VHDL完成电路设计后,必须借助EDA工具中的综合器、适配器、时序仿真器和编程器等工具进行相应的处理后,才能使此项设计在FPGA上完成硬件实现,并得到硬件测试,从而使VHDL设计得到最终的验证。
Quartus II是Altera提供的FPGA/CPLD开发集成环境,包括模块化的编译器,能满足各种特定设计的需要,同时也支持第三方的仿真工具。
3.主要仪器设备(实验用的软硬件环境)实验的硬件环境是:微机一台GW48 EDA实验开发系统一套电源线一根十芯JTAG口线一根USB下载线一根USB下载器一个实验的软件环境是:Quartus II 9.0软件4.操作方法与实验步骤利用Quartus II 9.0软件实现EDA的基本设计流程:创建工程、编辑文本输入设计文件、编译前设置、全程编译、功能仿真。
利用Quartus II 9.0软件实现引脚锁定和编译文件下载。
利用Quartus II 9.0软件实现原理图输入设计文件的编辑和产生相应的原理图符号元件。
5.实验内容及实验数据记录安装QUARTUSII软件;因为实验时我的机器了已经有QUARTUSII软件,所以我并没有进行安装软件的操作。
eda仿真实验报告EDA仿真实验报告一、引言EDA(Electronic Design Automation)是电子设计自动化的缩写,是指利用计算机技术对电子设计进行辅助、自动化的过程。
在现代电子设计中,EDA仿真是不可或缺的一环,它可以帮助工程师验证电路设计的正确性、性能和可靠性。
本篇报告将介绍我在EDA仿真实验中的经验和收获。
二、实验背景本次实验的目标是对一个数字电路进行仿真,该电路是一个4位加法器,用于将两个4位二进制数相加。
通过仿真,我们可以验证电路设计的正确性,并观察其在不同输入情况下的输出结果。
三、实验步骤1. 电路设计:首先,我们根据给定的要求和电路原理图进行电路设计。
在设计过程中,我们需要考虑电路的逻辑关系、时序要求以及输入输出端口的定义等。
2. 仿真环境搭建:接下来,我们需要选择合适的EDA仿真工具,并搭建仿真环境。
在本次实验中,我选择了Xilinx ISE Design Suite作为仿真工具,并创建了一个仿真项目。
3. 仿真测试向量生成:为了对电路进行全面的测试,我们需要生成一组合适的仿真测试向量。
这些测试向量应该覆盖了电路的所有可能输入情况,以验证电路的正确性。
4. 仿真运行:在仿真环境搭建完成后,我们可以开始进行仿真运行了。
通过加载测试向量,并观察仿真结果,我们可以判断电路在不同输入情况下的输出是否符合预期。
5. 仿真结果分析:仿真运行结束后,我们需要对仿真结果进行分析。
通过对比仿真输出和预期结果,可以判断电路设计的正确性。
如果有不符合预期的情况,我们还可以通过仿真波形分析,找出问题所在。
四、实验结果与讨论在本次实验中,我成功完成了4位加法器的仿真。
通过对比仿真输出和预期结果,我发现电路设计的正确性得到了验证。
无论是正常情况下的加法运算,还是特殊情况下的进位和溢出,电路都能够正确地输出结果。
在实验过程中,我还发现了一些有趣的现象。
例如,在输入两个相同的4位二进制数时,电路的输出结果与输入完全一致。
EDA实验报告EDA 实验实验一用原理图输入法设计半加器一、实验目的:1.熟悉利用Quartus Ⅱ的原理图输入方法设计简单组合电路;2.通过一个半加器的设计把握利用EDA 软件进行电子线路设计的详细流程;3.学会对实验板上的FPGA/CPLD 进行编程下载,硬件验证自己的设计项目。
二、实验器材:1、计算机及操作系统2、QUARTUS II 软件三、实验要求:1. 利用原理图输入法对半加器电路进行描述;2. 进行波形仿真测试;3. 严格按照实验步骤进行实验;4. 管脚映射按照芯片的要求进行。
四、实验原理其中a, b 为输入端口,So 与Co 分别为半加器和与进位。
其逻辑表达式为:2. 根据逻辑表达式进行原理图输入。
五、实验步骤:1. 为本项工程设计建立文件夹。
注意文件夹名不能用中文,且不可带空格。
2. 输入设计项目并存盘。
3. 将设计项目设计为工程文件。
4. 选择目标器件并编译。
b a b a b a So ⊕=+=ab Co =5. 时序仿真。
6. 引脚锁定。
7. 编程下载。
实验二用原理图法设计一位、四位全加器一、实验目的:1. 熟悉利用QuartusⅡ的原理图输入方法设计简单组合电路;2. 通过一个半加器的设计把握利用EDA 软件进行电子线路设计的详细流程;3. 学会对实验板上的FPGA/CPLD 进行编程下载,硬件验证自己的设计项目。
二、实验器材:1、计算机及操作系统2、QUARTUS II软件三、实验要求:1.利用原理图输入法对一位全加器电路进行描述;2. 进行波形仿真测试;3. 严格按照实验步骤进行实验;四、实验原理:利用实验一所设计的半加器设计一位全加器;利用设计封装好的一位全加器进行四位全加器的设计。
五、实验步骤:与实验一相同。
六、实验报告:1. 要求画出一位、四位全加器的真值表;2. 分析用半加器实现一位全加器的优点;3. 对波形进行分析,并绘制波形图。
实验三用文本输入法设计D触发器和锁存器一、实验目的:1. 熟悉QuartusⅡ的VHDL 文本设计过程。
本课程设计的VHDL程序,仿真波形及实验输出波形library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity MGPP isport(input:in std_logic_vector(4 downto 0);clk,f1:in std_logic;f2:in std_logic_vector(1 downto 0);fout :out integer range 255 downto 0);END;architecture one of MGPP issignal q1,q2: integer range 255 downto 0;signal D,d2 : integer range 255 downto 0;signal full:std_logic;signal s1,s2,s3,s4:integer range 255 downto 0;beginprocess (clk)variable r1:std_logic_vector(4 downto 0);beginif clk'event and clk ='1' thenif r1="11111" thenr1:=input;full<=not full;else r1:=r1+1;full<='0';end if;end if;END PROCESS;PROCESS(full)variable r2:integer range 255 downto 0;beginif full'event and full='1' thenif r2<255 thenr2:=r2+1;else r2:=0;end if;end if;if f1='1' thenq1<=r2;else q2<=r2;end if;end process;PROCESS (q1)BEGINCASE q1 ISWHEN 00=> D <=127;WHEN 01=> D <=130;WHEN 02=> D <=133;…….WHEN 255=> D <=117;WHEN OTHERS => NULL;END CASE;END PROCESS;process(f2)begincase f2 iswhen "00"=>s1<=255;s2<=0;s3<=0;s4<=0;when "01"=>s1<=255;s2<=255;s3<=0;s4<=0;when "10"=>s1<=255;s2<=255;s3<=255;s4<=0;when "11"=>s1<=255;s2<=255;s3<=255;s4<=255;when others=>null;end case;end process;process(q2)BEGINcase q2 isWHEN 00=> D2 <=s1;WHEN 01=> D2 <=s1;WHEN 02=> D2 <=s1;….WHEN 48=> D2 <=s1;WHEN 49=> D2 <=s1;WHEN 50=> D2 <=s1;WHEN 51=> D2 <=s2;WHEN 52=> D2 <=s2;WHEN 53=> D2 <=s2;WHEN 54=> D2 <=s2;…..…..WHEN 66=> D2 <=s2;WHEN 67=> D2 <=s2;WHEN 68=> D2 <=s2;WHEN 69=> D2 <=s2;WHEN 102=> D2 <=s2;WHEN 103=> D2 <=s2;WHEN 104=> D2 <=s2;WHEN 105=> D2 <=s3;WHEN 106=> D2 <=s3;WHEN 107=> D2 <=s3;WHEN 108=> D2 <=s3;…..…...WHEN 151=> D2 <=s3;WHEN 152=> D2 <=s3;WHEN 153=> D2 <=s3;WHEN 154=> D2 <=s3;WHEN 155=> D2 <=s4;WHEN 156=> D2 <=s4;WHEN 157=> D2 <=s4;WHEN 158=> D2 <=s4;WHEN 159=> D2 <=s4;…..……WHEN 217=> D2 <=s4;WHEN 218=> D2 <=s4;WHEN 219=> D2 <=s4;WHEN 220=> D2 <=s4;WHEN 221=> D2 <=0;WHEN 222=> D2 <=0;WHEN 223=> D2 <=0;………….WHEN 253=> D2 <=0;WHEN 254=> D2 <=0;WHEN 255=> D2 <=0;WHEN OTHERS => NULL;END CASE;end process;PROCESS(D,D2)BEGINIF f1='1' THENfout<=D;ELSE fout<=D2;END IF;END PROCESS;END;图1.17分频时正弦波形输出图2. 32分频和20分频正弦输出图3. 仿真波形正弦波各分频概况图4. 正弦波2分频的波形输出图5. 方波不同占空比波形图6.频率为2.8KHZ的正弦波形输出图7.频率为4.7KHZ的正弦输出波形图8.占空比为1/5的方波输出波形图9. 占空比为2/5方波输出波形。
图3.5-4 7位并串转换电路4.QuartusII仿真QuartusII的Waveform Editor及Simulator提供了便利的功能仿真与时序仿真功能,通过仿真波形报告可以直观地验证电路逻辑行为与时序的正确性。
Waveform Editor编辑仿真输入的矢量波形文件(Vector Waveform file,VWF)。
Simulator仿真VWF文件并计算输出波形数据。
为了便于分享交流,仿真波形图务必做到“完整、简明”的基本原则,即花最少的仿真时间清晰地呈现最多信息。
仿真常规步骤分为新建波形文件、添加仿真节点或总线信号、输入仿真激励、启动仿真、结果分析。
3.5.4 实验内容学习电路仿真基本方法;熟悉双向移位寄存器的原理及设计方法,通过仿真验证及硬件实验箱验证设计并完成报告。
1. 仿真验证用一片74194芯片连接好功能验证电路,如图3.5-5所示,通过功能仿真验证74194并入置数、异步清零、串行右移、串行左移、保持的逻辑行为,如图3.5-6所示。
图3.5-5 74194功能验证电路图3.5-6 74194功能仿真结果本例在电路编译后进行功能仿真,具体说明以下仿真步骤。
1)新建波形文件后的波形图参数设置网格宽度Grid size和时间轴长度End time是波形图的基本参数。
添加节点前设置好参数可以减少波形图重复调整时间开销。
网格宽度与时钟周期紧密相关,通常设置为时钟周期的四分之一、二分之一或整数倍。
时间轴长度默认1us,需要配合网格保证充裕的仿真时间。
2)添加节点或总线后的信号整合与位置分配添加节点或总线后的VWF文件如图3.5-7所示,信号杂乱需要重新调配位置与整合。
信号位置分配要注意:激励输入信号(I类)与待分析的输出信号(O类、R类、C类)上下放置,界限分明;时钟信号置顶,其他输入信号可按“异步控制→同步控制→数据输入”顺序向下放置;同一元器件的控制信号就近放置;同一功能的控制信号就近放置。
8位全加器仿真波形图8位全加器的原理图VCC a0INPUTVCC b1INPUTVCC c0INPUTVCC a1INPUTVCC b0INPUTVCC a2INPUTVCC b2INPUTVCC a3INPUTVCC b3INPUTVCC a4INPUTVCC b4INPUTVCC a5INPUTVCC b5INPUTVCC a6INPUTVCC b6INPUTVCC a7INPUTVCC b7INPUTsum0OUTPUT sum1OUTPUT sum2OUTPUT sum3OUTPUT sum4OUTPUTsum5OUTPUTsum6OUTPUTain bin cincout sumf-adderinstain bin cincout sumf-adderinst1ain bin cincout sumf-adder inst2ain bin cincout sumf-adderinst3ain bin cincout sumf-adder inst4ain bin cincout sumf-adder inst5ain bin cincout sumf-adder inst6ain bin cincout sumf-adder inst7sum7OUTPUTcourtOUTPUT100进制计数器原理图和仿真波形图VCCenbINPUT VCCclkINPUT VCCclrINPUT q[3..0]OUTPUT q[7..4]OUTPUTDUAL COUNTER2CLKA 2CLR 2CLKB1CLR 1CLKA 1CLKB1QA 1QB 1QC 1QD 2QA 2QB 2QC 2QD74390inst AND2inst1NOTinst4NOTinst5NOTinst6NOTinst7AND4inst8AND6inst9VCCq[0]q[1]q[2]q[3]q[4]q[5]q[6]q[7]coutOUTPUT PIN_93PIN_7PIN_10PIN_50PIN_49PIN_48PIN_47PIN_42PIN_41PIN_40PIN_39频率计总体电路原理图及仿真波形enb clk clrq[3..0]q[7..4]coutcnt100instclk CNT_E NLOCK CLRctrlinst1OCTAL D-FFD1D2D3D4D6D5OE N D8D7CLKQ2Q3Q5Q4Q6Q7Q8Q174374inst2BCD TO 7SE GA B RBIN D C LTNBIN OGOD OE OF OA OB OC RBON 74248inst3BCD TO 7SE GA B RBIN D C LTNBIN OGOD OE OF OA OB OC RBON 74248inst4GNDVCCL[0]L[1]L[2]L[3]L[5]L[6]H[0]H[1]H[2]H[3]H[4]H[5]H[6]q[0]q[1]q[2]q[3]q[4]q[5]q[6]q[7]VCCclkINPUT VCCF_ININPUT q[3..0]q[7..4]L[6..0]OUTPUT H[6..0]OUTPUT P IN_93L[4]7段数码显示译码器仿真波形与电路图7段数码显示译码器元件例化程序段library ieee;use ieee.std_logic_1164.all;entity kfc isport(clock0,rst0,ena0:in std_logic;led:out std_logic_vector(6 downto 0);cout0:out std_logic);end entity kfc;architecture one of kfc iscomponent cnt4bport(clk,rst,ena:in std_logic;outy:out std_logic_vector(3 downto 0);cout:out std_logic);end component;component decl7sport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0));end component;signal tmp:std_logic_vector(3 downto 0);beginu1:cnt4b port map(clk=>clock0,rst=>rst0,ena=>ena0,outy=>tmp,cout=>cout0);u2:decl7s port map(a=>tmp,led7s=>led);end architecture one;4位二进制加法计数器程序段library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt4b isport(clk,rst,ena:in std_logic;outy:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt4b;architecture one of cnt4b isbeginprocess(clk,rst,ena)variable outyi:std_logic_vector(3 downto 0);beginif rst='1' then outyi:=(others=>'0');elsif clk'event and clk='1' thenif ena='1' thenif outyi<15 then outyi:=outyi+1;else outyi:=(others =>'0');end if;end if;end if;if outyi=15 then cout<='1';else cout<='0';end if;outy<=outyi;end process;end;七段译码器library ieee;use ieee.std_logic_1164.all;entity decl7s isport(a:in std_logic_vector(3 downto 0);led7s:out std_logic_vector(6 downto 0)); end;architecture one of decl7s isbeginprocess(a)begincase a iswhen "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 "1010" =>led7s <="1110111";when "1011" =>led7s <="1111100";when "1100" =>led7s <="0111001";when "1101" =>led7s <="1011110";when "1110" =>led7s <="1111001";when "1111" =>led7s <="1110001";when others =>null;end case;end process;end;六十进制计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt10 isport(clk,rst,en:in std_logic;cq:out std_logic_vector(3 downto 0);cout:out std_logic);end cnt10;architecture one of cnt10 isbeginprocess(clk,rst,en)variable cqi:std_logic_vector(3 downto 0);beginif rst='1' then cqi:=(others=>'0');elsif clk'event and clk='1' thenif en='1' thenif cqi<9 then cqi:=cqi+1;else cqi:=(others =>'0');end if;end if;end if;if cqi=9 then cout<='1';else cout<='0';end if;cq<=cqi;end process;end;cnt6 计数器程序段library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt6 isport(clk,rst,en:in std_logic;cq:out std_logic_vector(2 downto 0);cout:out std_logic);end cnt6;architecture one of cnt6 isbeginprocess(clk,rst,en)variable cqi:std_logic_vector(2 downto 0);beginif rst='1' then cqi:=(others=>'0');elsif clk'event and clk='1' thenif en='1' thenif cqi<5 then cqi:=cqi+1;else cqi:=(others =>'0');end if;end if;end if;if cqi=5 then cout<='1';else cout<='0';end if;cq<=cqi;end process;end;。
辽东学院自编教材《可编程逻辑器件原理及应用实验》指导书李海成编(计算机科学与技术、电子信息工程专业用)姓名:学号:班级:信息技术学院2013年6月目录目录 (1)实验一MAX+PLUS-II设计三八译码器......... 错误!未定义书签。
实验二半加器 . (2)实验三带进位输入的8位加法器 (4)实验四数据比较器 (6)实验五编码器 (9)实验六组合逻辑电路的设计 (12)实验七计数器 (14)实验八触发器功能的模拟实现 (17)(被加数)Ai(被加数)Bi(半加和)Hi(本位进位)Ci实验二 半加器实验类型: 验证性实验课时: 2指导教师: 李海成 时 间:201 年 月 日 课 次:第 节教学周次:第 周实验分室: 实验台号: 实 验 员:一、 实验目的1.设计并实验一个一位半加器2.掌握CPLD/FPGA 组合逻辑设计基本方法。
二、 实验原理计算机中数的操作都是以二进制进位的,最基本的运算就是加法运算。
按照进位是否加入,加法器分为半加器和全加器电路两种。
计算机中的异或指令的功能就是求两个操作数各位的半加和。
一位半加器有两个输入、输出,如图2-1。
图2-1 一位半加器示意图表2-1一个半加大路的真值表如表2-1所示,根据真值表可得到半加器的函数表达式:Bi Ai Bi Ai Hi ∙+∙= Bi Ai Ci ∙=三、 实验连线半加器的两个输入所对应的管脚同两位拨码开关相连,两个输入管脚名为a 、b ;两个输出所对应的管脚同两位发光二极管相连,两个输出管脚名为 c0和s,其中c0表示进位, s 表示相加结果。
四、 实验记录五、实验注意事项1.提前编辑实验程序。
2.根据教师要求正确操作,并检验逻辑的正确性六、思考题1.EDA半加器实现与数字电路设计方法的根本区别。
2.简述EDA设计半加器的不同方法,并比较其优缺点。
3.心得体会及其他。
实验三 带进位输入的8位加法器实验类型: 验证性实验课时: 2 指导教师:时 间:200 年 月 日 课 次:第 节教学周次:第 周实验分室: 实验台号: 实 验 员:一、 实验目的1. 设计并实现一个8位全加器2. 掌握EDA 中模块调用方法 二、 实验原理利用实验二构建的半加器构建一位的全加器,然后设计一个8 位的全加器,其框图如图4-1所示。
2009-2010第一学期北京工业大学实验学院EDA实验报告题目波形发生与嵌入式逻辑分析仪专业电子信息工程学号 07521203姓名马艳成绩指导教师2009年12 月 6 日一实验目的学习内嵌式逻辑分析工具Signal TabII测试波形功能。
达到检验设计效果和提高分析设计过程的能力。
二实验内容与要求利用内嵌式逻辑分析工具完成信号发生器设计及编译、综合、适配、仿真和硬件测试,能够产生正弦波,方波,三角波,锯齿波。
三实验平台(1)硬件:计算机、GX-SOC/SOPC-DEVLABCycloneII EP2C35F672C8核心扳(2)软件:Quartus II四实验原理嵌入式逻辑分析仪主要分为硬件部分和软件部分。
硬件部分由待测设计(DUT),嵌入到FPGA中的ELA IP核、RAM存储单元以及JTAG接口组成;软件部分由用户设计软件和集成在其中的ELA在线调试软件组成。
五程序代码---clkgen.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY clkgen ISPORT(clkin:IN STD_LOGIC ;clkout: OUT STD_LOGIC);END;ARCHITECTURE even OF clkgen ISconstant N:Integer:=16;SIGNAL coun:integer range 0 to N;SIGNAL clk1:STD_LOGIC;BEGINPROCESS(clkin)BEGINIF(clkin'EVENT AND clkin='1')THEN IF(coun=N)THENcoun<=0;clk1<=Not clk1;elsecoun<=coun+1;END IF;END IF;END PROCESS;clkout<=clk1;END even;--方波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity fang2 isport(clk : in std_logic;fd1 : out std_logic_vector(7 downto 0)); end;ARCHITECTURE fang OF fang2 ISSIGNAL q:integer range 0 to 1;BEGINPROCESS(clk)BEGINIF(clk'EVENT AND clk='1')THENq<=q+1;END IF;END PROCESS;process(q)begincase q iswhen 0=>fd1<="00000000";when 1=>fd1<="";when others=>null;end case;end process;end architecture;--三角波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sanj isport(clk: in std_logic;dd3 : out std_logic_vector(7 downto 0));end;architecture one of sanj isbeginprocess(clk)variable num : std_logic_vector(7 downto 0); variable ff : std_logic;beginif (clk'event and clk='1') thenif ff = '0' thenif num=""thennum:="";ff:='1';elsenum:=num+8;end if;elseif num="00000111" thennum:="00000000";ff:='0';elsenum:=num-8;end if;end if;end if;dd3<=num;end process;end;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;entity jvchi2 isport(clk,up_down: in std_logic;dd2:out integer range 255 downto 0);end;architecture one of jvchi2 issignal d,temp:integer range 255 downto 0;beginprocess(clk)beginif(clk'event and clk='1') thenif temp<198 then temp<=temp+2;else temp<=0;end if;end if;end process;process(temp,up_down)beginif up_down='0' then d<=temp;else d<=198-temp;end if;end process;dd2<=d;end;六引脚定义及代码代码:# Copyright (C) 1991-2008 Altera Corporation# Your use of Altera Corporation's design tools, logic functions # and other software and tools, and its AMPP partner logic# functions, and any output files from any of the foregoing# (including device programming or simulation files), and any# associated documentation or information are expressly subject # to the terms and conditions of the Altera Program License# Subscription Agreement, Altera MegaCore Function License# Agreement, or other applicable license agreement, including, # without limitation, that your use is for the sole purpose of # programming logic devices manufactured by Altera and sold by # Altera or its authorized distributors. Please refer to the# applicable agreement for further details.# Quartus II: Generate Tcl File for Project# File: wave.tcl# Generated on: Thu Nov 12 12:00:52 2009# Load Quartus II Tcl Project packagepackage require ::quartus::projectset need_to_close_project 0set make_assignments 1# Check that the right project is openif {[is_project_open]} {if {[string compare $quartus(project) "wave"]} {puts "Project wave is not open"set make_assignments 0}} else {# Only open if not already openif {[project_exists wave]} {project_open -revision wave wave} else {project_new -revision wave wave}set need_to_close_project 1}# Make assignmentsif {$make_assignments} {set_global_assignment -name FAMILY "Cyclone II"set_global_assignment -name DEVICE EP2C35F672C8set_global_assignment -name TOP_LEVEL_ENTITY wavetopset_global_assignment -name ORIGINAL_QUARTUS_VERSION 8.0set_global_assignment -name PROJECT_CREATION_TIME_DATE "11:58:59 NOVEMBER 12, 2009"set_global_assignment -name LAST_QUARTUS_VERSION 8.0set_global_assignment -name USE_GENERATED_PHYSICAL_CONSTRAINTS OFF -section_id eda_palaceset_global_assignment -name DEVICE_FILTER_PACKAGE FBGAset_global_assignment -name DEVICE_FILTER_PIN_COUNT 672set_global_assignment -name DEVICE_FILTER_SPEED_GRADE 8set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top set_global_assignment -name PARTITION_COLOR -section_id Topset_global_assignment -name LL_ROOT_REGION ON -section_id "Root Region"set_global_assignment -name LL_MEMBER_STATE LOCKED -section_id "Root Region"set_global_assignment -name BDF_FILE wavetop.bdfset_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top# Commit assignmentsexport_assignmentsset_location_assignment PIN_B13 -to clkset_location_assignment PIN_F6 -to switch[0]set_location_assignment PIN_A21 -to switch[1]set_location_assignment PIN_B21 -to switch[2]set_location_assignment PIN_J25 -to dac_abset_location_assignment PIN_J26 -to dac_csset_location_assignment PIN_U26 -to dac_wrset_location_assignment PIN_G21 -to dout[0]set_location_assignment PIN_E23 -to dout[1]set_location_assignment PIN_E24 -to dout[2]set_location_assignment PIN_B24 -to dout[3]set_location_assignment PIN_B25 -to dout[4]set_location_assignment PIN_V21 -to dout[5]set_location_assignment PIN_V20 -to dout[6]set_location_assignment PIN_AE15 -to dout[7]# Close projectif {$need_to_close_project} {project_close}}七仿真图一原理图图二仿真结果八导入程序到实验箱图三锯齿波1图四锯齿波2图五正弦波图六方波1图七方波2图八三角波。
半加器原理图:全加器原理图:半加器波形:全加器波形:实验二仿真波形:实验三原理图:实验三波形:library ieee;use ieee.std_logic_1164.all;entity shift_circuit isport(din:in std_logic_vector( 7 downto 0);clk:in std_logic;reset:in std_logic;load:in std_logic;q:out std_logic_vector(7 downto 0));end entity shift_circuit;architecture behave of shift_circuit is--signal m :std_logic_vector(7 downto 0);--signal m_bit: std_logic;beginprocess(clk,reset)variable m :std_logic_vector(7 downto 0);variable m_bit: std_logic;beginif reset='1' then m:="00000000";else if(clk'event and clk='1') thenif load='1' then m:=din;else m_bit:=m(7);m(7 downto 1):=m(6 downto 0 );m(0):=m_bit;end if;end if;end if;q<=m;end process;end architecture behave;顶层原理图:实验五波形:实验五原理图:library ieee; ---8位跑马灯程序use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity pmd isport(clk:in std_logic;mode:in std_logic_vector(2 downto 0);q:out std_logic_vector(7 downto 0));end entity pmd;architecture rtl of pmd isSIGNAL current_state, next_state: STD_LOGIC_VECTOR(7 DOWNTO 0 ); CONSTANT m0_st0 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111111"; --常数的定义不允许重复CONSTANT m0_st1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111110";CONSTANT m0_st2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111100";CONSTANT m0_st3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11111000"; CONSTANT m0_st4 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11110000"; CONSTANT m0_st5 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11100000"; CONSTANT m0_st6 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11000000";CONSTANT m0_st7 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "10000000";CONSTANT m1_st0 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01111111"; CONSTANT m1_st1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111111";CONSTANT m1_st2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00011111"; CONSTANT m1_st3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001111";CONSTANT m1_st4 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000111"; CONSTANT m1_st5 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000011";CONSTANT m1_st6 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001"; CONSTANT m1_st7 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000000";CONSTANT m2_st0 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00011000"; CONSTANT m2_st1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11100111"; CONSTANT m2_st2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11000011"; CONSTANT m2_st3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "10000001"; CONSTANT m2_st4 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01111110";CONSTANT m2_st5 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00111100";CONSTANT m2_st6 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "11010111";CONSTANT m2_st7 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00101000";CONSTANT m3_st0 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "10000000"; CONSTANT m3_st1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01000000"; CONSTANT m3_st2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00100000";CONSTANT m3_st3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00010000"; CONSTANT m3_st4 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001000"; CONSTANT m3_st5 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000100"; CONSTANT m3_st6 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000010"; CONSTANT m3_st7 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001";CONSTANT m4_st0 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000001" ; CONSTANT m4_st1 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000010" ; CONSTANT m4_st2 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00000100" ; CONSTANT m4_st3 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00001000" ; CONSTANT m4_st4 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00010000" ; CONSTANT m4_st5 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "00100000" ; CONSTANT m4_st6 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "01000000" ; CONSTANT m4_st7 : STD_LOGIC_VECTOR(7 DOWNTO 0) := "10000000" ;beginCOM1: PROCESS(current_state,mode) --决定转换状态的进程BEGINif mode="000" thenCASE current_state ISWHEN m0_st0 => next_state <= m0_st1;WHEN m0_st1 => next_state <= m0_st2;WHEN m0_st2 => next_state <= m0_st3;WHEN m0_st3 => next_state <= m0_st4;WHEN m0_st4 => next_state <= m0_st5;WHEN m0_st5 => next_state <= m0_st6;WHEN m0_st6 => next_state <= m0_st7;WHEN m0_st7 => next_state <= m0_st0;WHEN OTHERS => next_state <= m0_st0; ---实现电路的自启动END CASE ;end if;if mode="001" thenCASE current_state ISWHEN m1_st0 => next_state <= m1_st1;WHEN m1_st1 => next_state <= m1_st2;WHEN m1_st2 => next_state <= m1_st3;WHEN m1_st3 => next_state <= m1_st4;WHEN m1_st4 => next_state <= m1_st5;WHEN m1_st5 => next_state <= m1_st6;WHEN m1_st6 => next_state <= m1_st7;WHEN m1_st7 => next_state <= m1_st0;WHEN OTHERS => next_state <= m1_st0;END CASE ;end if;if mode="010" thenCASE current_state ISWHEN m2_st0 => next_state <= m2_st1;WHEN m2_st1 => next_state <= m2_st2;WHEN m2_st2 => next_state <= m2_st3;WHEN m2_st3 => next_state <= m2_st4;WHEN m2_st4 => next_state <= m2_st5;WHEN m2_st5 => next_state <= m2_st6;WHEN m2_st6 => next_state <= m2_st7;WHEN m2_st7 => next_state <= m2_st0;WHEN OTHERS => next_state <= m2_st0;END CASE ;end if;if mode="011" thenCASE current_state ISWHEN m3_st0 => next_state <= m3_st1;WHEN m3_st1 => next_state <= m3_st2;WHEN m3_st2 => next_state <= m3_st3;WHEN m3_st3 => next_state <= m3_st4;WHEN m3_st4 => next_state <= m3_st5;WHEN m3_st5 => next_state <= m3_st6;WHEN m3_st6 => next_state <= m3_st7;WHEN m3_st7 => next_state <= m3_st0;WHEN OTHERS => next_state <= m3_st0;END CASE ;end if;if mode="100" thenCASE current_state ISWHEN m4_st0 => next_state <= m4_st1;WHEN m4_st1 => next_state <= m4_st2;WHEN m4_st2 => next_state <= m4_st3;WHEN m4_st3 => next_state <= m4_st4;WHEN m4_st4 => next_state <= m4_st5;WHEN m4_st5 => next_state <= m4_st6;WHEN m4_st6 => next_state <= m4_st7;WHEN m4_st7 => next_state <= m4_st0;WHEN OTHERS => next_state <= m4_st0;END CASE ;end if;q <= current_state(7 DOWNTO 0);END PROCESS COM1 ;REG: PROCESS (CLK) -- 时序进程BEGINIF ( CLK'EVENT AND CLK='1') THENcurrent_state <= next_state;END IF;END PROCESS REG;end architecture rtl;实验六原理图:实验六波形:实验七原理图:实验七波形:。
实验1-------用原理图输入法设计四位全加器实验2------计数译码显示电路设计实验3-----计数器的设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY counter ISPORT(ld,ce,clk,rst:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(7 DOWNTO 0);q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END counter;ARCHITECTURE behave OF counter IS SIGNAL count:STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(clk,rst)BEGINIF rst='1' THEN count<=(OTHERS=>'0');ELSIF RISING_EDGE(clk) THENIF ld='1' THEN count<=d;ELSIF ce='1' THENcount<=count+1;END IF;END IF;END PROCESS;q<=count;END behave;实验4----序列检测器设计----学习用CASE语句描述序列检测器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY CHK ISPORT( din: IN STD_LOGIC;clk,clr:IN STD_LOGIC;d:IN STD_LOGIC_VECTOR(7 DOWNTO 0);AB: OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END CHK;ARCHITECTURE behav OF CHK ISSIGNAL Q:INTEGER RANGE 0 TO 8;BEGINPROCESS(clk,clr)BEGINIF clr='1' THEN Q<=0;ELSIF clk'EVENT AND clk='1' THENCASE Q ISWHEN 0=> IF din=d(7) THEN Q<=1;ELSE Q<=0;END IF ;WHEN 1=> IF din=d(6) THEN Q<=2;ELSE Q<=0;END IF ;WHEN 2=> IF din=d(5) THEN Q<=3;ELSE Q<=0;END IF ;WHEN 3=> IF din=d(4) THEN Q<=4;ELSE Q<=0;END IF ;WHEN 4=> IF din=d(3) THEN Q<=5;ELSE Q<=0;END IF ;WHEN 5=> IF din=d(2) THEN Q<=6;ELSE Q<=0;END IF ;WHEN 6=> IF din=d(1) THEN Q<=7;ELSE Q<=0;END IF ;WHEN 7=> IF din=d(0) THEN Q<=8;ELSE Q<=0;END IF ;WHEN OTHERS =>Q<=0;END CASE;END IF;END PROCESS;PROCESS(Q)BEGINIF Q=8 THENAB<="1010";ELSE AB<="1011";END IF;END PROCESS;END behav;实验5----脉宽可调的发波信号发生器设计LCNT8.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY LCNT8 ISPORT(CLK,LD:IN STD_LOGIC;D:IN INTEGER RANGE 0 TO 255;CAO:OUT STD_LOGIC);END LCNT8;ARCHITECTURE behav OF LCNT8 ISSIGNAL COUNT:INTEGER RANGE 0 TO 255; BEGINPROCESS(CLK)BEGINIF CLK'EVENT AND CLK='1'THENIF LD='1'THENCOUNT<=D;ELSE COUNT<=COUNT+1;END IF;END IF;END PROCESS;PROCESS(COUNT)BEGINIF COUNT=255 THEN CAO<='1';ELSE CAO<='0';END IF;END PROCESS;END behav;PULSE.vhdLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY PULSE ISPORT(CLK:IN STD_LOGIC;A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0);PSOUT:OUT STD_LOGIC); END PULSE;ARCHITECTURE mixed OF PULSE IS COMPONENT LCNT8PORT(CLK,LD:IN STD_LOGIC; D:IN STD_LOGIC_VECTOR(7 DOWNTO 0);CAO:OUT STD_LOGIC); END COMPONENT;SIGNAL CAO1,CAO2:STD_LOGIC; SIGNAL LD1,LD2:STD_LOGIC;SIGNAL PSINT:STD_LOGIC; BEGINU1:LCNT8 PORT MAP(CLK=>CLK,LD=>LD1,D=>A,CAO=>CAO1); U2:LCNT8 PORT MAP(CLK=>CLK,LD=>LD2,D=>B,CAO=>CAO2); PROCESS(CAO1,CAO2) BEGINIF CAO1='1'THEN PSINT<='0';ELSIF CAO2'EVENT AND CAO2='1'THEN PSINT<='1'; END IF;END PROCESS; LD1<=NOTPSINT;LD2<=PSINT;PSOUT<=PSINT; END mixed;实验6----序列检测器设计----学习用状态机设计序列检测器library ieee;use ieee.std_logic_1164.all; entity jcq isport(clk,xi:in std_logic;z:out std_logic); end jcq;architecture one of jcq istype state_type is (s0,s1,s2,s3,s4,s5,s6,s7); signal present_state,next_state:state_type; beginstate_comb:process(present_state,xi) begincase present_state is when s0=>z<='0';if xi='1' then next_state<=s1;else next_state<=s0; end if;when s1=>z<='0';if xi='1' then next_state<=s2; else next_state<=s0; end if;when s2=>z<='0';if xi='1' then next_state<=s3; else next_state<=s0; end if;when s3=>z<='0';if xi='1' then next_state<=s3; else next_state<=s4; end if;when s4=>z<='0';if xi='1' then next_state<=s1; else next_state<=s5; end if;when s5=>z<='0';if xi='1' then next_state<=s6; else next_state<=s0; end if;when s6=>z<='0';if xi='1' then next_state<=s2; else next_state<=s7; end if;when s7=>z<='1';if xi='1' then next_state<=s1;else next_state<=s0;end if;end case;end process state_comb;state_clk:process(clk)beginif clk'event and clk='1' thenpresent_state<=next_state;end if;end process state_clk;end one;实验7----8位十进制数字频率计设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY testctl ISPORT(clk:IN STD_LOGIC;cnt_ena,cnt_clr,load:OUT STD_LOGIC); END testctl;ARCHITECTURE behav OF testctl IS SIGNAL div2clk:STD_LOGIC;BEGINPROCESS(clk)BEGINIF clk'EVENT AND clk='1' THENdiv2clk<=NOT div2clk;END IF;END PROCESS;PROCESS(clk,div2clk)BEGINIF clk='0' AND div2clk='0' THEN cnt_clr<='1';ELSEcnt_clr<='0';END IF;END PROCESS;load<=NOT div2clk;cnt_ena<=div2clk;END behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg ISPORT(load:IN STD_LOGIC;din:IN STD_LOGIC_VECTOR(3 DOWNTO 0); dout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END reg;ARCHITECTURE behav OF reg IS BEGINPROCESS(load,din) BEGINIF load'EVENT AND load='1' THEN dout<=din; END IF; END PROCESS;END behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cnt ISPORT(clk,clr,ena:IN STD_LOGIC;outy:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);cout:OUT STD_LOGIC); END cnt;ARCHITECTURE behav OF cnt ISSIGNAL q:STD_LOGIC_VECTOR(3 DOWNTO 0); BEGINPROCESS(clk,clr,ena) BEGINIF clr='1' THEN q<="0000";ELSIF(clk'EVENT AND clk='1') THEN IF ena='1' THENIF q="1000" THENq<=q+1;cout<='1'; ELSIF q="1001" THENcout<='0';q<="0000"; ELSE q<=q+1;cout<='0'; END IF; END IF; END IF; outy<=q; END PROCESS; END behav;实验8---8路彩灯控制器设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 ISPORT(a,b,s:IN STD_LOGIC; y:OUT STD_LOGIC); END mux21;ARCHITECTURE ar OF mux21 IS BEGINPROCESS(a,b,s) BEGINIF s='0' THEN y<=a; ELSE y<=b; END IF; END PROCESS;END ar;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY fen2 ISPORT(clk:IN STD_LOGIC; clkk:OUT STD_LOGIC); END fen2;ARCHITECTURE behav OF fen2 IS BEGINPROCESS(clk) VARIABLE clkk1:STD_LOGIC:='0'; BEGINIF clk'EVENT AND clk='1' THEN clkk1:=NOT clkk1; END IF; clkk<=clkk1; END PROCESS; END behav;LIBRARY IEEE;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY cd ISPORT(clk:IN STD_LOGIC;jp:OUT STD_LOGIC;qq:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END cd;ARCHITECTURE behav OF cd ISCONSTANT w:INTEGER:=7;SIGNAL q:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGINPROCESS(clk)VARIABLE flag:BIT_VECTOR(2 DOWNTO 0):="000";VARIABLE jp1:STD_LOGIC:='0';BEGINIF clk'EVENT AND clk='1' THENIF flag="000" THENq<='1' & q(w DOWNTO 1);IF q(1)='1' THENflag:="001";END IF;ELSIF flag="001" THENq<=q(w-1 DOWNTO 0) & '0';IF q(6)='0' THENflag:="010";END IF;ELSIF flag="010" THENq(w DOWNTO 4)<=q(w-1 DOWNTO 4) & '1';q(w-4 DOWNTO 0)<='1' & q(w-4 DOWNTO 1);IF q(1)='1' THENflag:="011";END IF;ELSIF flag="011" THENq(w DOWNTO 4)<=q(w-1 DOWNTO 4) & '0';q(w-4 DOWNTO 0)<='0' & q(w-4 DOWNTO 1);IF q(1)='0' THENflag:="100";END IF;ELSIF flag="100" THENq(w DOWNTO 4)<='1' & q(w DOWNTO 5);q(w-4 DOWNTO 0)<=q(w-5 DOWNTO 0) & '1';IF q(4)='1' THENflag:="101";END IF;ELSIF flag="101" THENq(w DOWNTO 4)<='0' & q(w DOWNTO 5);q(w-4 DOWNTO 0)<=q(w-5 DOWNTO 0) & '0';IF q(4)='0' THENflag:="110";END IF;ELSIF flag="110" THENq(w DOWNTO 4)<='1' & q(w DOWNTO 5);q(w-4 DOWNTO 0)<='1' & q(w-4 DOWNTO 1);IF q(1)='1' THENflag:="111";END IF;ELSIF flag="111" THENq<="00000000";jp1:=NOT jp1;flag:="000";END IF;END IF;qq<=q;jp<=jp1;END PROCESS;END behav;。
学生实验报告系别电子信息学院课程名称《EDA综合实验》班级实验名称8位全加器的设计姓名实验时间2014年月日学号指导教师王红航成绩批改时间2014年月日报告内容一、实验目的和任务利用Quartus II 原理图输入方法设计简单组合电路, 通过一个8位全加器的设计掌握利用EDA软件进行原理图输入方式的电子线路设计的详细流程。
二、实验原理介绍三、一个8位全加器可以由2个4位全加器构成, 加法器间的进位可以用串行方式实现, 即将低位加法器的进位输出cout 与相邻的高位加法器的最低进位输入信号cin相接。
四、设计代码(或原理图)、仿真波形及分析在Quartus II 集成环境下, 选择“Bock Diagram/Schematic File”, 进入Quartus II图形编辑方式。
双击编辑窗口, 在元件选择窗口的符号库“Library”栏中, 选择”Primitives”文件夹中的”Logic”后, 调出元件。
根据8位加法器设计的原理图, 将2个4位加法器74283及输入、输出元件符号调入, 完成电路内部的连接及输入、输出元件的连接, 并将相应的输入、输出元件符号名分别更改为A[7..0]、B[7..0]、SUM[7...0]和OUT2。
再将当前设计设定为工程, 目标芯片类型为ACEX1K;型号为EP1K30TC144-3。
编译设计文件, 选择“Start Compilation”对文件进行编译。
然后进行逻辑仿真设计, 先建立波形文件, 然后输入信号节点, 设置波形参量, 编辑输入信号, 保存文件。
时序仿真图功能仿真图由图片可以看出, 当8位全加器的输入端口A输入为60时, B端口输入为160时, 输出SUM 为220, 进位OUT2为0;当输入端口A输入为60时, B输入为200时, SUM为4, 进位OUT2为1.当8位全加器的输入端口A输入为80时, B端口输入为200时, 输出SUM为24, 进位OUT2为1;当输入端口A输入为80时, B输入为160时, SUM为240, 进位OUT2为0.证明设计是正确的。
实验项目一:74LS318译码器的设计实验目的:1、通过一个简单的三-八译码器的设计,让学生掌握组合逻辑电路的设计方法。
2、掌握组合逻辑电路的静态测试方法。
3,初步了解QUARTUS II原理图输入设计的全过程。
二、实验的硬件要求:1、EDA2000实验箱(其他厂家具有同等配置试验箱均可),主要使用:输入:DIP拨码开关3位、输出:LED灯;2、主芯片:EP1K1OTC100-3(大于此规模的芯片亦可);3、计算机与QUARTUS 软件;三、实验原理三-译码器为三输入、八输出。
当输入信号按二进制方式的表示值为N时(输入端低电平有效),输出端从零到七,标号为N输出端输出低电平表示有信号产生,而其它则为高电平表示无信号产生。
因为三个输入端能产生的组合状态有八种,所以输出端在每种组合中仅有一位为低电平的情况下,能表示所有的输入组合,因此不需要像编码器实验那样再用一个输出端指示输出是否有效。
但可以在输入中加入一个输出使能端,用来指示是否将当前的输入进行有效的译码,当使能端指示输入信号无效或不用对当前信号进行译码时,输出端全为高电平,表示无任何信号。
本例设计中没有考虑使能输入端,自己设计时可以考虑加入使能输入端时,程序如何设计。
表8.1三-八译码器真值表输入输出A2 A1 A0 Y7 Y6 Y5 Y4 Y3 Y2 Y1 Y00 0 0 0 0 0 0 0 0 0 10 0 1 0 0 0 0 0 0 1 00 1 0 0 0 0 0 0 1 0 00 1 1 0 0 0 0 1 0 0 01 0 0 0 0 0 1 0 0 0 01 0 1 0 0 1 0 0 0 0 01 1 0 1 0 0 0 0 0 01 1 1 1 0 0 0 0 0 0 0四、实验步骤:打开QUARTUS II,打开原理图编辑器,按图8.26进行原理图设计。
各逻辑符号放置在原理图上后,经检查保存原理图。
完成了原理图的输入后,我们就可以用前面介绍的软件的使用方法,对程序进行管脚的定义、编译、仿真、下载,完成整个实验的设计。
1.8位序列信号检测器
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY SCHK IS
PORT(DIN, CLK, CLR : IN STD_LOGIC;
AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END SCHK;
ARCHITECTURE behav OF SCHK IS
SIGNAL Q : INTEGER RANGE 0 TO 8 ;
SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
D <="11100101";
PROCESS( CLK, CLR )
BEGIN
IF CLR ='1' THEN Q <= 0 ;
ELSIF CLK'EVENT AND CLK='1' THEN
CASE Q IS
WHEN 0=> IF DIN = D(7) THEN Q <= 1 ; ELSE Q <= 0 ; END IF ; WHEN 1=> IF DIN = D(6) THEN Q <= 2 ; ELSE Q <= 0 ; END IF ; WHEN 2=> IF DIN = D(5) THEN Q <= 3 ; ELSE Q <= 0 ; END IF ; WHEN 3=> IF DIN = D(4) THEN Q <= 4 ; ELSE Q <= 0 ; END IF ; WHEN 4=> IF DIN = D(3) THEN Q <= 5 ; ELSE Q <= 0 ; END IF ; WHEN 5=> IF DIN = D(2) THEN Q <= 6 ; ELSE Q <= 0 ; END IF ; WHEN 6=> IF DIN = D(1) THEN Q <= 7 ; ELSE Q <= 0 ; END IF ; WHEN 7=> IF DIN = D(0) THEN Q <= 8 ; ELSE Q <= 0 ; END IF ; WHEN OTHERS => Q <= 0 ;
END CASE ;
END IF ;
END PROCESS ;
PROCESS( Q )
BEGIN
IF Q = 8 THEN AB <="1010";
ELSE AB <="1011";
END IF ;
END PROCESS ;
END behav ;
仿真波形
2.可预置的8位序列信号检测器
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SCHK2 IS
PORT (DIN,CLK,CLR: IN STD_LOGIC;
SHR: IN STD_LOGIC_VECTOR(7 DOWNTO 0);
AB : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));
END ENTITY SCHK2;
ARCHITECTURE behav OF SCHK2 IS
SIGNAL Q : INTEGER RANGE 0 TO 8;
SIGNAL D : STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
D<=SHR;
PROCESS(CLK,CLR)
BEGIN
IF CLR='1' THEN Q<=0;
ELSIF CLK'EVENT AND CLK='1'THEN
CASE Q IS
WHEN 0=> IF DIN=D(7) THEN Q<=1; ELSE Q<=0; END IF;
WHEN 1=> IF DIN=D(6) THEN Q<=2; ELSE Q<=0; END IF;
WHEN 2=> IF DIN=D(5) THEN Q<=3; ELSE Q<=0; END IF;
WHEN 3=> IF DIN=D(4) THEN Q<=4; ELSE Q<=0; END IF;
WHEN 4=> IF DIN=D(3) THEN Q<=5; ELSE Q<=0; END IF;
WHEN 5=> IF DIN=D(2) THEN Q<=6; ELSE Q<=0; END IF;
WHEN 6=> IF DIN=D(1) THEN Q<=7; ELSE Q<=0; END IF;
WHEN 7=> IF DIN=D(0) THEN Q<=8; ELSE Q<=0; END IF;
WHEN OTHERS=> Q<=0;
END CASE;
END IF;
END PROCESS;
PROCESS(Q)
BEGIN
IF Q=8 THEN AB<="1010";
ELSE AB<="1011";
END IF;
END PROCESS;
END ARCHITECTURE behav;
仿真波形
正弦信号发生器的顶层设计程序
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SINGT IS
PORT ( CLK : IN STD_LOGIC;
DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END;
ARCHITECTURE DACC OF SINGT IS
COMPONENT data_rom
PORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
inclock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END COMPONENT;
SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0);
BEGIN
PROCESS(CLK )
BEGIN
IF CLK'EVENT AND CLK = '1' THEN
Q1<=Q1+1;
END IF;
END PROCESS;
u1 : data_rom PORT MAP(address=>Q1, q => DOUT,inclock=>CLK); END;
仿真波形。