EDA技术与应用的二选一选择器
EDA:实验六2选1和4选1多路选择实验
实验六 2选1和4选1多路选择实验班级:通信1121 姓名:王密学号:1121302230一、实验目的:1、了解2选1和4选1的工作原理和实现的方法。
2、实现两个多路选择器,一个2选1,一个4选1。
3、学会用于VHDL语言进行程序设计。
二、实验原理:2选1当选择输入S为L时,Y输出A, 当S为H时,Y输出B。
当选择输入AB为LL时,Y输出D0, 当AB为LH时,Y输出D1, 当AB为HL时,Y输出D2,当AB为HH时,Y输出D3。
说明:sw1选择是控制4选1,还是2选1,sw1=1,为4选1,sw1=0,为2选1。
sw3,sw2为4选1的地址,sw4为2选1的地址。
三、实验连线:1、将EP2C5适配板左下角的JTAG用十芯排线和万用下载区左下角的SOPC JTAG口连接起来,万用下载区右下角的电源开关拨到 SOPC下载的一边。
2、请将JPLED1短路帽右插,JPLED的短路帽全部上插。
3、将实验板左端的JP103全部用短路帽接上(共八个)。
四、实验内容与步骤:(程序:EP2C5\muxsel\muxsel.sof)1、打开Quartus II 6.0软件,点击“File→OpenP roject”出现如下的对话框(图9.1),选中muxsel,点打开即可;图9.12、点击“Tools-Programmer”后出现如下的对话窗口,3、在点”Edit→Add File………”出现如下对话框(图9.2),在图9.3对话框中,选中EP2C5/muxsel/muxsel.sof项目后点击打开回到Programmer对话框, 在下载对话窗口中“选中Program/ Configure”,点击“Start”即进行下载。
图9.2图9.3现将muxsel.vhd原程序作如下说明:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_SIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY liu123 ISPORT (SW1:IN BOOLEAN;SW2:IN STD_LOGIC;SW3:IN STD_LOGIC;SW4:IN BOOLEAN;LED:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));END liu123;ARCHITECTURE ADO OF liu123 ISSIGNAL RST_MUXSEL: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL RST_MUXSEL2: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGINPROCESS(SW1,SW2,SW3)beginIF (SW2='0' AND SW3 ='0') THEN RST_MUXSEL<="10101010";ELSIF (SW2='0' AND SW3='1' )THEN RST_MUXSEL<="01010101";ELSIF (SW2='1' AND SW3='0')THEN RST_MUXSEL<="10001000";ELSIF (SW2='1' AND SW3='1') THEN RST_MUXSEL<="01110111";ELSE RST_MUXSEL<="XXXXXXXX";END IF;E ND PROCESS;PROCESS (SW4)BEGINIF SW4 THENRST_MUXSEL2<="10100101";ELSERST_MUXSEL2<="01011010";END IF;END PROCESS;PROCESS(SW1,RST_MUXSEL,RST_MUXSEL2)BEGINcase sw1 iswhen true => LED<=RST_MUXSEL;when false => LED<=RST_MUXSEL2;END case;END PROCESS;END ADO;引脚分配(Cyclone EP2C5Q208C8):sw1-P43,sw2-P44,sw3-P45,sw4-P46,led0-P13,led1-P14,led2-P15,led3-P30,led4-P3 1,led5-P33,led6-P34,led7-P35,管脚标号led0到led7分别接到8位的LED流水灯上,使用高低电平观察输出的结果,sw1到sw4接到拨码开关上,。
二选一数据选择器
郑州工商学院
实验报告册所属课程名称:EDA技术及应用
院部:工学院
专业:电子科学与技术
班级:1702班
学号:170508070246
姓名:刘应许
指导教师:靳世红
1.新建一个工程,为工程指定工作目录,分配工程名称以及指定是最高层设计实体名称.将设计文件加入工程中,选择目标器件,选择综合器和仿真器,结束设计.
2.输入源文件,选择源文件类型,之后出现原理图文件编辑界面,工程中出现Block1.vhd文件.
3.输入VHDL代码.
4.打开波形编辑器,输入信号节点,编辑输入信号波形,观察仿真结果.仿真完成后可查看输出波形.
5.查看电路图.
二选一数据选择器
三人表决器。
EDA技术与应用实践案例1 数据选择器
案例1数据选择器1.1 预习内容(1)数据选择器的逻辑功能图1 数据选择器的逻辑符号(2)Quartus软件下的FPGA开发流程设计输入(原理图/HDL文本编辑),综合,适配,时序仿真与功能仿真,编程下载,硬件测试。
1.2 案例目的熟悉利用QuartusⅡ的代码输入方法设计简单组合电路,并掌握编程配置以及硬件测试验证等一系列相关技术。
1.3 案例环境为了避免将EDA技术的学习仅仅停留在软件设计和功能模拟上而是立足于有效地提高VHDL的应用和实践的能力本章提供了19则基于VHDL的逻辑设计示例及相应的实训案例。
1.4 案例原理图2 数据选择器的逻辑图思考:EDA技术是如何把代码变成网表电路图的?1.5 案例步骤(1)按照第一部分介绍的方法与流程,完成代码的输入、编译、综合,通过对报错信息的分析调试代码直到代码完全正确。
完成电路的仿真,观察仿真波形是否符合电路的逻辑功能要求。
(2)完成电路的引脚锁定,将a,b,s分别锁定到按键或者跳线上,将Y锁定到LED小灯上。
(3)适配、实验板上的硬件测试,观察电路工作是否正常。
1.6 案例报告详细叙述数据选择器的设计流程;给出综合后的网表电路图;给出数据选择器的时序分析情况;最后给出硬件测试流程和结果。
1.7 附录1.7.1 设计代码ENTITY mux21a ISPORT(a, b : IN BIT;s: IN BIT;y: OUT BIT );END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINy <= a WHEN s = '0' ELSE b ;END ARCHITECTURE one;数据选择器的VHDL描述1ENTITY mux21a ISPORT(a, b, s: IN BIT;y:OUT BIT);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGINPROCESS (a,b,s)BEGINIF s='0' THENy <= a; ELSEy <= b;END IF;END PROCESS;END ARCHITECTURE one;数据选择器的VHDL描述2 1.7.2 仿真结果图4 数据选择器仿真波形图。
EDA技术与应用课后习题答案
EDA技术与应⽤课后习题答案EDA技术与应⽤课后习题答案⼤全 《EDA技术与应⽤》为普通⾼等教育“⼗⼀五”国家级规划教材,下⾯yjbys⼩编为⼤家提供的是本书的课后习题答案,希望能帮助到⼤家! 主要内容包括:EDA技术;电路设计仿真软件PSpice、Muhisim8的使⽤⽅法;可编程逻辑器件的⼯作原理、分类及应⽤;硬件描述语⾔Verilog HDL的语法要点与设计实例;数字集成软件Quartus n、仿真软件ModelSim、综合软件SynplifyPro等的使⽤⽅法及设计流程;EDA技术综合设计实例。
本书内容全⾯,注重基础,理论联系实际,突出实⽤性,并使⽤⼤量图表说明问题,编写简明精炼、针对性强,设计实例都通过了编译,设计⽂件和参数选择都经过验证,便于读者对内容的理解和掌握。
第⼀章 1-1 EDA技术与ASIC设计和FPGA开发有什么关系? P3~4 答:利⽤EDA技术进⾏电⼦系统设计的最后⽬标是完成专⽤集成电路ASIC的设计和实现;FPGA和CPLD是实现这⼀途径的主流器件。
FPGA和CPLD通常也被称为可编程专⽤IC,或可编程ASIC。
FPGA和CPLD的应⽤是EDA技术有机融合软硬件电⼦设计技术、SoC(⽚上系统)和ASIC设计,以及对⾃动设计与⾃动实现最典型的诠释。
1-2与软件描述语⾔相⽐,VHDL有什么特点? P6 答:编译器将软件程序翻译成基于某种特定CPU的机器代码,这种代码仅限于这种CPU⽽不能移植,并且机器代码不代表硬件结构,更不能改变CPU的硬件结构,只能被动地为其特定的硬件电路结构所利⽤。
综合器将VHDL程序转化的⽬标是底层的电路结构⽹表⽂件,这种满⾜VHDL设计程序功能描述的电路结构,不依赖于任何特定硬件环境;具有相对独⽴性。
综合器在将VHDL(硬件描述语⾔)表达的电路功能转化成具体的电路结构⽹表过程中,具有明显的能动性和创造性,它不是机械的⼀⼀对应式的“翻译”,⽽是根据设计库、⼯艺库以及预先设置的各类约束条件,选择最优的⽅式完成电路结构的设计。
2选1选择器的VHDL设计课件
3.1 多路①可以使用26个英文字母,数字0-9以及下划线“_”,且 只能以英文字母开头;
②不区分大小写;最长不超过64个字符;
③必须是单一下划线,且下划线前后都必须有英文字母 或数字;
6、端口定义语句port和端口模式 端口模式
IN 输入端口,定义的通道为单向只读模 OUT 式输出端口,定义的通道为单向输出模 INOUT 式 定义的通道确定为输入输出双向端口 BUFFER 缓冲端口,其功能与INOUT类似
3、界符 标点符号“;”表示VHDL中语句的结束;
3.1 多路选择器的VHDL描述
4、实体和结构体
实体和结构体是VHDL程序的两个基本组成部分;其中 实体主要用于定义电路或系统的外部端口;结构体用于定义 内部逻辑功能或电路结构。
ENTITY e_name IS PORT ( p_name : port_m
-- 注意,赋值条件的数据类型必须是boolean
3.1 多路选择器的VHDL描述
思考 ❖还有没有其它方法实现二选一? ❖n选一的多路选择器怎么设计?
3.1 多路选择器的VHDL描述
9、赋值符号<=
信号赋值符号“<=”,表示将符号右端的值赋值给左端的 信号; 10、关系运算符=
等号“=”没有赋值的含义,也不是相等的意思,而是 关系运算符,只是一种数据比较符号,其结果只有两种情况, 要么为真true,条件成立;要么为假false,条件不成立。 表达式 WHEN 赋值条件 ELSE
END ARCHITECTURE one ;
3.1 多路选择器的VHDL描述
3.1 多路选择器的VHDL描述
entity 实体
architecture 结构体
实体 mux21a1
EDA技术实验报告完整版
福建农林大学金山学院信息工程类实验报告课程名称: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技术使用教程课后答案第4章
【例4-8】 】 ... IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; ...
的电路图( 综合) 图4-6 例4-8的电路图(Synplify综合) 的电路图 综合
图4-2 mux21a结构体 结构体
KX
康芯科技
4.1 多路选择器的 多路选择器的VHDL描述 描述
4.1.1 2选1多路选择器的 选 多路选择器的 多路选择器的VHDL描述 描述
【例4-1】 】 ENTITY mux21a IS PORT ( a, b : IN BIT; s : IN BIT; y : OUT BIT ); END ENTITY mux21a; ARCHITECTURE one OF mux21a IS BEGIN y <= a WHEN s = '0' ELSE END ARCHITECTURE one ;
KX
康芯科技
4.2 寄存器描述及其 寄存器描述及其VHDL语言现象 语言现象
4.2.2 VHDL描述的语言现象说明 描述的语言现象说明 2. 设计库和标准程序包
LIBRARY LIBRARY WORK ; STD ;
图4-4 D触发器
USE STD.STANDARD.ALL ; 使用库和程序包的一般定义表式是: 使用库和程序包的一般定义表式是: LIBRARY USE <设计库名>; 设计库名>
< 设计库名>.<程序包名>.ALL ; 设计库名> 程序包名>
EDA实验1lxm二选一数据选择器
实验一二选一数据选择器VHDL设计Quartus II 6.0开发环境与EDA实验箱使用一实验目的1.熟悉在Quartus II 6.0环境下原理图输入方法。
2.熟悉Quartus II 6.0环境下编辑、编译综合、仿真的操作方法。
3、掌握利用EDA软件进行电路设计的详细流程;4、熟悉EDA实验箱的基本使用方法。
学会对实验板上的FPGA/CPLD进行编程下载,硬件验证自己的设计项目。
二实验仪器PC机、Quartus II 6.0软件三实验内容1.详细解读教材117页。
2.在QuartusⅡ上输入该设计的原理图,并进行编辑、编译、综合、适配、仿真。
3.给出其所有信号的时序仿真波形。
四实验原理及步骤1.启动Quartus II 6.0软件在桌面上双击Quartus II 6.0图标或者在开始—>所有程序—>Altera—> Quartus II 6.0,如下图2.建立工作库文件夹及工程任何一次设计都是一项工程(Project),所有此工程相关的所有设计文件都需要放在同一个文件夹里。
不同的设计放在不同的文件夹中。
在E盘下建立一个存放本次设计的工程文件夹,比如“shiyan1”。
注意不要使用中文文件夹,文件夹的存放路径也不要包含中文。
注意本实验室计算机C盘和D盘是重启后复原,不要将任何文件和文件夹放置在桌面或者C、D盘下。
初次打开Quartus II 6.0,会有如图提示:选择是的情况下,首先是新工程向导:介绍下一步下一步下一步,选择目标芯片,首先在Family栏选择ACEX1K系列,然后选择此系列的具体芯片:EP1K30TC144-3。
注意不要选成了EP1K30TC144-3。
下一步就点完成。
3.建立文本程序文件选择File菜单下的New或者直接点击工具栏中的新建图标,选择新建文件类型为VHDL File。
接下来另存文件:保存时需更改文件名与项目名称一样,注意保存在同一个工程文件夹下面。
实验1:全加器及二选一数据选择器设计
实验1: 实验 :全加器及二选一数据选择器设计
一、实验前准备
• 本实验例子使用独立扩展下载板 EP1K10_30_50_100QC208(芯片为 EP1K100QC208)。EDAPRO/240H实验仪主板的 VCCINT跳线器右跳设定为3.3V; EDAPRO/240H实验仪主板的VCCIO跳线器组中 “VCCIO3.3V”应短接,其余VCCIO均断开;独 立扩展下载板“EP1K10_30_50_100QC208”的 VCCINT跳线器组设定为2.5V;独立扩展下载板 “EP1K10_30_50_100QC208”的VCCIO跳线器 组设定为3.3V。
(2)实验步骤 ) • 1)半加器图形设计文件输入(后缀为.gdf) →保存→建立设计项目→编译→创建默认 符号; • 2)顶层文件设计: • 全加器图形设计文件输入→保存→建立设 计项目→编译→引脚分配及锁定→功能仿 真→时序分析;
H_adder
F_adder
引脚对应情况
实验板位置 多路选择器信号 ain 通用目标器件引脚名 I/O 目标器件EP1K30TC144引脚号 目标器件 引脚号 85 86 87 88 1、数字开关SW9: 、数字开关 : 2、数字开关 、 开关SW10 3、数字开关 、 开关SW11 4、信号指示灯 、
bincin L9I/O I/O I/O I/O
5、信号指示灯 、
L10
89
四、实验内容
• 把全加器的输入接到拨码开关,输出端接2个LED 灯,通过拨码开关改变输入的逻辑电平变化来观 察LED输出情况,验证全加器的工作状态
多路选择器的VHDL设计 ,熟悉使 (2)通过完成 选1多路选择器的 )通过完成2选 多路选择器的 设计 语言在Max+Plus II环境下设计简单的数字逻 用VHDL语言在 语言在 环境 输入设计流程。 辑电路 输入设计流程。
EDA实验报告8位二选一多路选择器
学号:201400800093 姓名:胡玲专业:电子信息科学与技术科目:电子设计自动化EDA 实验名称:8位二选一多路选择器
一.实验要求
实验要求:1通过有限状态机的VHDL设计初步了解VHDL表达和设计电路的方法2根据学过的一位二选一选择器改进VHDL语言而掌握8位二选一多路选择器
三.RTL图
四.波形仿真图:
由源代码可知a_fin=a_dis,b_fin=b_dis,但由波形仿真图可知在同一时刻它们并不一定相等,而是存在延迟,结果s_fin也是和对应的输入值存在延迟,如果不考虑延迟,结果正确。
例:t=40ns时输入是1010+0001结果是1011,无进位。
五:实验结果
1.用开关sw17-14表示输入的四位二进制A(17-14分别表示A0-A3),并用LEDR17-14显示。
sw13-10表示输入四位二进制B(13-10分别表示B3-B0)并用LEDR13-10显示。
KEY0用于复位KEY1用于做时钟信号LEDR3-0表示输出的四位二进制数LEDG8(绿灯)显示进位输出。
2.按下复位键—用开关确定输入值(例如输入为1111+1000)—按下时钟信号键—可显示红灯为0111以及绿灯亮有进位。
3.可知结果正确。
六.实验体会及心得
1.做实验前先预习实验内容,学以致用和大胆改进很重要。
2.代码写错没关系,几十个错误也没关系,不能复制粘贴那样学不到东西,与同学探讨很有意义,最后结果出来再回过头研究代码会觉得更了解每一步代码。
3.实验过程中切记避免心浮气躁,急于出结果,如果实在没思路可以看同学代码但一定要看懂在之上进行改变看结果。
EDA技术与应用课后习题答案(2)
EDA技术与应用课后习题答案(2)END IF;END PROCESS;PR02:PROCESS(s1)BEGINIF s1=”0” THEN outy<=a1;ELSE outy<=tmp;END IF;END PROCESS;END ARCHITECTURE ONE;END CASE;4-4.下图是一个含有上升沿触发的D触发器的时序电路,试写出此电路的VHDL设计文件。
4-4.答案LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MULTI ISPORT(CL:IN STD_LOGIC; --输入选择信号CLK0:IN STD_LOGIC; --输入信号OUT1:OUT STD_LOGIC);--输出端END ENTITY;ARCHITECTURE ONE OF MULTI ISSIGNAL Q : STD_LOGIC;BEGINPR01: PROCESS(CLK0)BEGINIF CLK ‘EVENT AND CLK=’1’THEN Q<=NOT(CL OR Q);ELSEEND IF;END PROCESS;PR02: PROCESS(CLK0)BEGINOUT1<=Q;END PROCESS;END ARCHITECTURE ONE;END PROCESS;4-5.给出1位全减器的VHDL描述。
要求:(1) 首先设计1位半减器,然后用例化语句将它们连接起来,图3-32中h_suber是半减器,diff是输出差,s_out是借位输出,sub_in 是借位输入。
(2) 以1位全减器为基本硬件,构成串行借位的8位减法器,要求用例化语句来完成此项设计(减法运算是 x – y - sun_in = diffr) 4-5.答案底层文件1:or2a.VHD实现或门操作LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY or2a ISPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END ENTITY or2a;ARCHITECTURE one OF or2a ISBEGINc <= a OR b;END ARCHITECTURE one;底层文件2:h_subber.VHD实现一位半减器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY h_subber ISPORT(x,y:IN STD_LOGIC;diff,s_out::OUT STD_LOGIC);END ENTITY h_subber;ARCHITECTURE ONE OF h_subber ISSIGNAL xyz: STD_LOGIC_VECTOR(1 DOWNTO 0); BEGINxyz <= x & y;PROCESS(xyz)BEGINCASE xyz ISWHEN "00" => diff<='0';s_out<='0';WHEN "01" => diff<='1';s_out<='1';WHEN "10" => diff<='1';s_out<='0';WHEN "11" => diff<='0';s_out<='0';WHEN OTHERS => NULL;END CASE;END PROCESS;END ARCHITECTURE ONE;顶层文件:f_subber.VHD实现一位全减器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY f_subber ISPORT(x,y,sub_in:IN STD_LOGIC;diffr,sub_out:OUT STD_LOGIC);END ENTITY f_subber;ARCHITECTURE ONE OF f_subber IS COMPONENT h_subberPORT(x,y:IN STD_LOGIC;diff,S_out:OUT STD_LOGIC);END COMPONENT;COMPONENT or2aPORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;SIGNAL d,e,f: STD_LOGIC;BEGINu1: h_subber PORT MAP(x=>x,y=>y,diff=>d,s_out=>e);u2: h_subber PORT MAP(x=>d,y=>sub_in,diff=>diffr,s_out=>f);u3: or2a PORT MAP(a=>f,b=>e,c=>sub_out);END ARCHITECTURE ONE;END ARCHITECTURE ART;4-6.根据下图,写出顶层文件MX3256.VHD的VHDL设计文件。
EDA课后题答案
EDA课后题答案第⼀章1.什么叫EDA技术?及狭义定义(书P1)Electronic Design Automation--电⼦设计⾃动化。
EDA的⼴义定义范围包括:半导体⼯艺设计⾃动化、可编程器件设计⾃动化、电⼦系统设计⾃动化、印刷电路板设计⾃动化、仿真与测试、故障诊断⾃动化、形式验证⾃动化统称EDA⼯程。
2.EDA发展历程:CAD- CAE -EDA3 .EDA技术的主要内容实现载体(硬件基础):⼤规模可编程逻辑器件(PLD_Programmable Logic Device)描述⽅式:硬件描述语⾔(HDL_Hard descripation Lauguage,VHDL,Verilog HDL等)设计⼯具:开发软件、开发系统硬件验证:实验开发系统FPGA 在结构上主要分为三个部分,即可编程逻辑单元,可编程输⼊/输出单元和可编程连线三个部分。
CPLD在结构上主要包括三个部分,即可编程逻辑宏单元,可编程输⼊/输出单元和可编程内部连线。
4.硬件描述语⾔(HDL_Hardware Description Language)VHDL:IEEE标准硬件描述语⾔,在电⼦⼯程领域,已成为事实上的通⽤硬件描述语⾔。
系统级抽象描述能⼒较强。
Verilog:⽀持的EDA⼯具较多,适⽤于RTL级和门电路级的描述,其综合过程较VHDL 稍简单,门级开关电路描述能级较强,但其在⾼级描述⽅⾯不如VHDL。
ABEL:⼀种⽀持各种不同输⼊⽅式的HDL,系统级抽象描述能⼒差,适应于门级电路描述。
5. 仿真⼯具功能仿真(也叫前仿真、系统级仿真、⾏为仿真)验证系统的功能。
时序仿真(也叫后仿真、电路级仿真):验证系统的时序特性、系统性能。
6. EDA的⼯程设计流程(P8)第⼆章1.在系统可编程技术(ISP)定义ISP(In_System Programmability/Programming)是指对器件、电路板、整个电⼦系统进⾏逻辑重构和修改功能的能⼒。
EDA实验1lxm二选一数据选择器
实验一二选一数据选择器VHDL设计Quartus II 6.0开发环境与EDA实验箱使用一实验目的1.熟悉在Quartus II 6.0环境下原理图输入方法。
2.熟悉Quartus II 6.0环境下编辑、编译综合、仿真的操作方法。
3、掌握利用EDA软件进行电路设计的详细流程;4、熟悉EDA实验箱的基本使用方法。
学会对实验板上的FPGA/CPLD进行编程下载,硬件验证自己的设计项目。
二实验仪器PC机、Quartus II 6.0软件三实验内容1.详细解读教材117页。
2.在QuartusⅡ上输入该设计的原理图,并进行编辑、编译、综合、适配、仿真。
3.给出其所有信号的时序仿真波形。
四实验原理及步骤1.启动Quartus II 6.0软件在桌面上双击Quartus II 6.0图标或者在开始—>所有程序—>Altera—> Quartus II 6.0,如下图2.建立工作库文件夹及工程任何一次设计都是一项工程(Project),所有此工程相关的所有设计文件都需要放在同一个文件夹里。
不同的设计放在不同的文件夹中。
在E盘下建立一个存放本次设计的工程文件夹,比如“shiyan1”。
注意不要使用中文文件夹,文件夹的存放路径也不要包含中文。
注意本实验室计算机C盘和D盘是重启后复原,不要将任何文件和文件夹放置在桌面或者C、D盘下。
初次打开Quartus II 6.0,会有如图提示:选择是的情况下,首先是新工程向导:介绍下一步下一步下一步,选择目标芯片,首先在Family栏选择ACEX1K系列,然后选择此系列的具体芯片:EP1K30TC144-3。
注意不要选成了EP1K30TC144-3。
下一步就点完成。
3.建立文本程序文件选择File菜单下的New或者直接点击工具栏中的新建图标,选择新建文件类型为VHDL File。
接下来另存文件:保存时需更改文件名与项目名称一样,注意保存在同一个工程文件夹下面。
EDA技术实用教程 2选1多路选择器
学院:电气信息学院专业:电子信息工程班级:一班
姓名
学号
实验序号
1
实验时间
2012-10-10
指导教师
成绩
件测试,实际验证本项设计的功能。
实验内容2:将4.4节的多路选择器看成是一个元件mux21a,利用元件例化语句描述图4-38,
并将此文件放在同一目录E:\muxfile中。以下是部分参考程序:
...
COMPONENT MUX21A
PORT(a,b,s : IN STD_LOGIC;
y : OUT STD_LOGIC);
实验项目名称
2选1多路选择器
实验目的
熟悉Quartus II 6.0的VHDL文本设计流程全过程,学习简单组合电路的设、多层次电路设计、仿真和硬件测试。
实验内容
实验内容1:首先按照4.4节给出的步骤,利用MAX+plus II完成2选1多路选择器的文本
编辑输入(mux21a.vhd)和仿真测试等步骤,给出图4-27所示的仿真波形。最后在实验系统上进行硬
END COMPONENT;
...
u1 : MUX21APORT MAP(a=>a2,b=>a3,s=>s0,y=>tmp);
u2 : MUX21APORT MAP(a=>a1,b=>tmp,s=>s1,y=>outy);
END ARCHITECTURE BHV ;
按照4.4节的步骤对上例分别进行编译、综合、仿真。并对其仿真波形作出分析说明。
[详细讲解]二选一数据选择器
二选一数据选择器目录一:数据选择器的基本原理 (3)二电路逻辑功能 (3)2.1 电路逻辑图 (3)2.2真值表与表达式 (3)2.3电路设计及仿真 (3)三版图设计 (6)3.1总体版图设计及DRC验证 (6)3.1.1数据选择器版图设计步骤 (6)3.1.2版图验证 (9)3.2版图仿真 (10)四数据选择器版图LVS对比 (11)五结论及体会 (13)一:数据选择器的基本原理数据选择器是指经过选择,把多个通道的数据传送到唯一的公共数据通道上去,实现数据选择功能的逻辑电路称为数据选择器。
它的作用相当于多个输入的单刀多掷开关,其示意图如下:图1 n位通道选择信号数据选择器除了可以实现一些组合逻辑功能以外,还可以做分时多路传输电路、函数发生器及数码比较器等。
常见的数据选择器有4选1、8选1、16选1电路。
在多路数据传送过程中,能够根据需要将其中任意一路选出来的电路,叫做数据选择器数据选择器(MUX)的逻辑功能是在地址选择信号的控制下,从多路数据中选择一路数据作为输出信号下图所示为二选一数据选择器原理图,a,b为输入端,sel为控制端,out为输出端图1-1数据选择器原理图二 电路逻辑功能2.1 电路逻辑图Y SA SB =+(S 是数据选择控制端,S 为0时选择A ,为1时选S 择B )要实现2选1选择器,逻辑电路图如下所示图2-1数据选择器逻辑电路图2.2真值表与表达式二选一数据选择器逻辑表达式为:Y SA SB=+根据逻辑表达式所列真值表如下图所示图2-2数据选择器真值表图2.3电路设计及仿真根据原理电路图并使用S-Edit 软件设计出数据选择器的电路图及对应符号图如下:S A B Y1 1 1 1 0 1 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0图2-3数据选择器符号图根据符号图并使用S-Edit软件设计出的数据选择器电路图如下所示图2-4数据选择器电路图导出的SPICE文件,如下图所示图2-5 spice文件加载包含文件,如下图所示图2-6 加载后的SPICE文件在其基础上进行仿真:下图从上到下依次为Y. S B A,结合逻辑表达式及真值表可知,电路为正确的图2-7 模拟波形仿真图三版图设计3.1总体版图设计及DRC验证3.1.1数据选择器版图设计步骤(1)新建文件夹:在电脑本地磁盘新建文件夹,文件夹名为shuju。
2选1数据选择器的VHDL描述
2选1数据选择器的VHDL描述ENTITY mux21a ISPORT( a, b : IN BIT ;s : IN BIT;y : OUT BIT ) ;END ENTITY mux21a ;ARCHITECTURE one OF mux21a ISBEGINy <= a WHEN s = '0'ELSE b ;END ARCHITECTURE one ;译码器的设计architecture dec_behave of e1 issignal sel : std_logic_vector( 0 to 3) ;beginsel(0) <= en ; sel(1) <= a(0) ; sel(2) <= a(1) ; sel(3) <= a(2) ; with sel selecty <= "00000001" when "1000","00000010" when "1001","00000100" when "1010","00001000" when "1011","00010000" when "1100","00100000" when "1101","01000000" when "1110","10000000" when "1111","00000000" when others ;end dec_behave ;8-3优先编码器library IEEE; ……;entity encoder83 isport (ind: in std_logic_vector(7 downto 0);outd: out std_logic_vector(2 downto 0)); end ;architecture behave of encoder83 isbeginprocess (ind)beginif ind (7) = ‘1' then outd<= "111";elsif ind (6) = ‘1' then outd<= "110";elsif ind (5) = ‘1' then outd<= "101";elsif ind (4) = ‘1' then outd<= "100";elsif ind (3 )= ‘1' then outd<= "011";elsif ind (2) = ‘1' then outd<= "010";elsif ind (1) = ‘1' then outd<= "001";elsif ind (0) = ‘1' then outd<= "000";else outd<= "000";end if;end process; end behave;。
基于EDA的数据选择器实现
1.4选1数据选择器entity mux4 isport(d:in bit_vector (0 to 3);sel:in bit_vector (1 downto 0);y:out bit);end mux4;architecture rt1 of mux4 isbegin process(d,sel)begin if sel="00" theny<=d(0);elsif sel="01" theny<=d(1);elsif sel="10" then y<=d(2);else y<=d(3);end if;end process;end rt1;注:引脚锁定:模式5. d(0)——233 d1—234 D2—235 D3—236 sel0—238 sel1—239 y—12. 2选1数据选择器entity mux2 isport(a,b,sel:in bit ;y:out bit);end mux2 ;architecture rt1 of mux2 isbegin process(a,b,sel)begin if sel='1' theny<=a;else y<=b;end if ;end process;end rt1;注:引脚锁定:模式5. d(0)——233 d1—234 Sel—236 y—13.138译码器entity del138 isport(a:in bit_vector(2 downto 0);g:in bit_vector(2 downto 0);ny:out bit_vector (7 downto 0));end del138;architecture rt1 of del138 isbeginprocess(a,g)begin if g="100" then case a iswhen "000" => ny<="11111110";when "001" => ny<="11111101";when "010" => ny<="11111011";when "011" => ny<="11110111";when "100" => ny<="11101111";when "101" => ny<="11011111";when "110" => ny<="10111111";when "111" => ny<="01111111";end case;else ny<="11111111";end if;end process;end rt1;注:引脚锁定:模式5 a0—233 a1—234 a2—235 G0—236 g2—237 g3—238 ny0—1 ny1—2 ny2—3 ny3—4 Ny4—6 ny5—7 ny6—8 ny7—124.10进制计数器entity cut10 isport(NLD,NRD,CLK:in bit;d:in bit_vector(3 downto 0);Q:buffer bit_vector(3 downto 0);y:buffer bit);end cut10;architecture rtl of cut10 isbeginprocess(NLD,NRD,d,CLK)beginif NLD='0' thenQ<=d;y<='0';elsif NRD='0' thenQ<="0000"; y<='0';elsif clk'event and clk='1' thenif Q="0000" thenQ<="0001";y<='0';elsif Q="0001" thenQ<="0010";y<='0';elsif Q="0010" thenQ<="0011"; y<='0';elsif Q="0011" thenQ<="0100"; y<='0';elsif Q="0100" thenQ<="0101";y<='0';elsif Q="0101" thenQ<="0110";y<='0';elsif Q="0110" thenQ<="0111"; y<='0';Q<="1000";y<='0';elsif Q="1000" thenQ<="1001";y<='1';elseQ<="0000";y<='0';end if;elseQ<=Q; y<=y;end if;end process;end rtl;模式5:clk—clk2(选2Hz) nrd—233 nld—234 d0—236 D1—237 d2—238 d3—239 y—1 q0—13 q1—14 q2—15 q3—165.跑马灯控制器entity pmd isport(NRD,CLK:in bit;Q:buffer bit_vector(3 downto 0);y:out bit_vector(5 downto 0));end pmd;architecture rtl of pmd isbeginprocess(NRD,CLK)beginif NRD='0' thenQ<="0000";y<="000000";elsif clk'event and clk='1' thenif Q="0000" thenQ<="0001";y<="000000";elsif Q="0001" thenQ<="0010";y<="000001";elsif Q="0010" thenQ<="0011";y<="000011";elsif Q="0011" thenQ<="0100";y<="000111";elsif Q="0100" thenQ<="0101";y<="001111";elsif Q="0101" thenQ<="0110";y<="011111"; Q<="0111";y<="111111";elsif Q="0111" thenQ<="1000";y<="011111";elsif Q="1000" thenQ<="1001";y<="001111";elsif Q="1001" thenQ<="1010";y<="000111";elsif Q="1010" thenQ<="1011";y<="000011";elsE Q<="0000";y<="000001";end if;end if;end process;end rtl;模式5:clk—clk2(2Hz) nrd—233 q0—13 q1—14 q2—15 q3—16 y0—1 y1—2 y2—3 y3—4 y4—6 y5—76.9进制计数器entity cut9 isport(NLD,NRD,CLK:in bit;d: in bit_vector(3 downto 0);Q:buffer bit_vector(3 downto 0);y:buffer bit);end cut9;architecture rtl of cut9 isbeginprocess(NLD,NRD,d,CLK)beginif NLD='0' thenQ<=d;y<='0';elsif NRD='0' thenQ<="0000";y<='0';elsif clk'event and clk='1' thenif Q="0000" thenQ<="0001";y<='0';elsif Q="0001" thenQ<="0010";y<='0';elsif Q="0010" thenQ<="0011";y<='0';Q<="0100";y<='0';elsif Q="0100" thenQ<="0101";y<='0';elsif Q="0101" thenQ<="0110"; y<='0';elsif Q="0110" thenQ<="0111"; y<='0';elsif Q="0111" thenQ<="1000";y<='0';elseQ<="0000";y<='0';end if;elseQ<=Q;y<=y;end if;end process;end rtl;引脚和10进制相同7. 8进制计数器entity cut8 isport(NLD,NRD,CLK:in bit;d:in bit_vector(3 downto 0); Q:buffer bit_vector(3 downto 0); y:buffer bit);end cut8;architecture rtl of cut8 isbeginprocess(NLD,NRD,d,CLK) beginif NLD='0' thenQ<=d;y<='0';elsif NRD='0' thenQ<="0000";y<='0';elsif clk'event and clk='1' then if Q="0000" thenQ<="0001";y<='0';elsif Q="0001" thenQ<="0010"; y<='0';elsif Q="0010" thenQ<="0011";y<='0';elsif Q="0011" thenQ<="0100"; y<='0';elsif Q="0100" thenQ<="0101";y<='0';elsif Q="0101" thenQ<="0110";y<='0'; Q<="0111"; y<='1';elseQ<="0000";y<='0';end if;elseQ<=Q;y<=y;end if;end process;end rtl;引脚和10进制相同8.7进制计数器entity cut7 isport(NLD,NRD,CLK:in bit;d: in bit_vector(3 downto 0); Q:buffer bit_vector(3 downto 0); y:buffer bit);end cut7;architecture rtl of cut7 isbeginprocess(NLD,NRD,CLK) beginif NLD='0' thenQ<=d;y<='0';elsif NRD='0' thenQ<="0000";y<='0';elsif clk'event and clk='1' then if Q="0000" thenQ<="0001";y<='0';elsif Q="0001" thenQ<="0010";y<='0';elsif Q="0010" thenQ<="0011";y<='0';elsif Q="0011" thenQ<="0100";y<='0';elsif Q="0100" thenQ<="0101";y<='0';elsif Q="0101" thenQ<="0110";y<='1';elseQ<="0000";y<='0';end if;elseQ<=Q;y<=y;end if;end process;end rtl;引脚和10进制相同9.d触发器entity d_ff isport (d,clk,nld,nrd:in bit;q,nq:buffer bit);end d_ff;architecture rt1 of d_ff isbegin process(d,clk,nld,nrd)begin if nrd='0' thenq<='0';nq<='1';elsif nld='0' thenq<='1';nq<='0';elsif clk'event and clk='1' thenq<=d;nq<=not d;else q<=q;nq<=nq;end if ;end process;end rt1;模式5 :clk—clk2(选2Hz) nld—234 nrd—233 d—236 q—1 nq—210 jk触发器entity jk_ff isport (j,k,clk,nld,nrd:in bit;q,nq:buffer bit);end jk_ff;architecture rt1 of jk_ff isbegin process(j,k,clk,nld,nrd)begin if nrd='0' thenq<='0';nq<='1';elsif nld='0' thenq<='1';nq<='0';elsif clk'event and clk='1' thenif j='0' and k='1'thenq<='0';nq<='1';elsif j='1' and k='0' thenq<='1';nq<='0';elsif j='0' and k='0' thenq<=q;nq<=nq;else q<= not q;nq<= not nq;end if ;else q<=q;nq<=nq;end if ;end process; end rt1;模式5 :clk—clk2(选2Hz) nld—234 nrd—233 j—235 k—236q—1 nq—212. t触发器entity t_ff isport(nrd,nld,clk,t:in bit;q,nq:buffer bit);end t_ff;architecture rtl of t_ff isbeginprocess(nrd,nld,clk,t)beginif nrd='0' thenq<='0';nq<='1';elsif nld='0' thenq<='1';nq<='0';elsif clk'event and clk='1' thencase t iswhen '0'=>q<=q;nq<=nq;when others=>q<=not q;nq<=not nq;end case;end if;end process;end rtl;模式5 :clk—clk2(选2Hz) nld—234 nrd—233 t—236 q—1 nq—2。
EDA
二选一选择器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY MUX2 ISPORT(d0,d1: IN std_logic;sel: IN std_logic;q: OUT std_logic);END ENTITY;ARCHITECTURE behav OF MUX2 ISBEGINPROCESS(d0,d1,sel)BEGINIF sel='0'THENq<=d0;ELSIF sel='1'THENq<=d1;ELSE q<='Z';END IF;END PROCESS;END behav;例3-4译码器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY decoder_38 ISPORT(a,b,c,g1,g2a,g2b:IN std_logic;y:OUT std_logic_vector(7 DOWNTO 0)); END decoder_38;ARCHITECTURE behav OF decoder_38 IS SIGNAL indata:std_logic_vector(2 DOWNTO 0); BEGINindata<=c&b&a;PROCESS(indata,g1,g2a,g2b)BEGINIF(g1='1'and g2a='0'AND g2b='0')THENCASE indata ISWHEN"000"=> y<="11111110";WHEN"001"=> y<="11111101";WHEN"010"=> y<="11111011";WHEN"011"=> y<="11110111";WHEN"100"=> y<="11101111";WHEN"101"=> y<="11011111";WHEN"110"=> y<="10111111";WHEN"111"=> y<="01111111";WHEN OTHERS => Y<="XXXXXXXX"; END CASE;ELSEy<="11111111";END IF;END PROCESS;END behav;例3-5优先级编码器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY priorityencoder ISPORT(input:IN std_logic_vector(7 DOWNTO 0);y:OUT std_logic_vector(2 DOWNTO 0)); END priorityencoder;ARCHITECTURE behav OF priorityencoder IS BEGINPROCESS(input)BEGINIF (input(0)='0')THEN y<="111";ELSIF (input(1)='0')THEN y<="110";ELSIF (input(2)='0')THEN y<="101";ELSIF (input(3)='0')THEN y<="100";ELSIF (input(4)='0')THEN y<="011";ELSIF (input(5)='0')THEN y<="010";ELSIF (input(6)='0')THEN y<="001";ELSIF (input(7)='0')THEN y<="000";ELSE y<="XXX";END IF;END PROCESS;END behav;例3-6补码器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY complementer ISPORT(a:IN std_logic_vector(7 DOWNTO 0);b:OUT std_logic_vector(7 DOWNTO 0)); END complementer;ARCHITECTURE dataflow OF complementer IS BEGINb<=not a+'1';END dataflow;例3-7三态门LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY tri_gate ISPORT(din,en:IN std_logic;dout:OUT std_logic);END tri_gate;ARCHITECTURE behav OF tri_gate IS BEGINPROCESS(din,en)BEGINIF(en='1')THEN dout<=din;ELSE dout<='Z';END IF;END PROCESS;END behav;例3-8总线缓冲器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY tri_buf8 ISPORT(din:IN std_logic_vector(7 DOWNTO 0);en:IN std_logic;dout:OUT std_logic_vector(7 DOWNTO 0)); END tri_buf8;ARCHITECTURE behav OF tri_buf8 ISBEGINPROCESS(din,en)BEGINIF(en='1')THEN dout<=din;ELSE dout<="ZZZZZZZZ";END IF;END PROCESS;END behav;例3-9双向总线缓冲器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY tri_bigate ISPORT(a,b:INOUT std_logic_vector(7 DOWNTO 0);en,dr:IN std_logic);END tri_bigate;ARCHITECTURE behav OF tri_bigate ISSIGNAL aout,bout:std_logic_vector(7 DOWNTO 0); BEGINPROCESS(a,dr,en,bout)BEGINIF((en='0')and(dr='1'))THENbout<=a;ELSE bout<="ZZZZZZZZ";END IF;END PROCESS;PROCESS(b,dr,en,aout)BEGINIF((en='0')and(dr='0'))THENaout<=b;ELSE aout<="ZZZZZZZZ";END IF;END PROCESS;END behav;例3-10 8选1多路选择器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY mux8_1 ISPORT(input:IN std_logic_vector(7 DOWNTO 0);a,b,c:IN std_logic;y:OUT std_logic);END mux8_1;ARCHITECTURE behav OF mux8_1 ISSIGNAL sel:std_logic_vector(2 DOWNTO 0); BEGINsel<=b&a&c;PROCESS(input,sel)BEGINIF (sel="000")THEN y<=input(0);ELSIF (sel="001")THEN y<=input(1);ELSIF (sel="010")THEN y<=input(2);ELSIF (sel="011")THEN y<=input(3);ELSIF (sel="100")THEN y<=input(4);ELSIF (sel="101")THEN y<=input(5);ELSIF (sel="110")THEN y<=input(6);ELSIF (sel="111")THEN y<=input(7);ELSIF y<='Z';END IF;END PROCESS;END behav;例3-11全加器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY fadd ISPORT(a,b,ci: IN std_logic;co,sum: OUT std_logic);END fadd;ARCHITECTURE dataflow OF fadd IS BEGINco<=(a and b)or(b and ci)or(a and ci); sum<=a xor b xor ci;END dataflow;例3-124位串行加法器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE ponents.ALL;ENTITY fadd4 ISPORT(a,b: IN std_logic_vector(3 DOWNTO 0);ci: IN std_logic;co: OUT std_logic;sum: OUT std_logic_vector(3 DOWNTO 0)); END fadd4;ARCHITECTURE stru OF fadd4 ISSIGNAL ci_ns:std_logic_vector(2 DOWNTO 0); BEGINU0:fadd PORT map (a(0),b(0),ci,ci_ns(0),sum(0)); U1:fadd PORT map (a(1),b(1),ci_ns(1),sum(1));U2:fadd PORT map (a(2),b(2),ci_ns(2),sum(2));U3:fadd PORT map (a(3),b(3),ci_ns(2),co,sum(3)); END stru;例3—13 4位并行加法器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY fadd4 ISPORT(a,b: IN std_logic_vector(3 DOWNTO 0);ci: IN std_logic;co: OUT std_logic;sum: OUT std_logic_vector(3 DOWNTO 0));END fadd4;ARCHITECTURE behav OF fadd4 ISSIGNAL sint: std_logic_vector(4 DOWNTO 0);SIGNAL aa,bb: std_logic_vector(4 DOWNTO 0);BEGINaa<='0'&a;bb<='0'&b;sint<=aa+bb+ci;sum<=sint(3 DOWNTO 0);co<=sint(4);END behav;]例3-14 8位加法器(编程上要附带上fadd4,fadd,mycom)LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY fadd8 ISPORT(a,b: IN std_logic_vector(7 DOWNTO 0);ci: IN std_logic;co: OUT std_logic;sum: OUT std_logic_vector(7 DOWNTO 0));END fadd8;ARCHITECTURE stru OF fadd8 ISCOMPONENT fadd4PORT(a,b: IN std_logic_vector(3 DOWNTO 0);ci: IN std_logic;co: OUT std_logic;sum: OUT std_logic_vector(3 DOWNTO 0));END COMPONENT;SIGNAL carry_OUT:std_logic;BEGINU1:fadd4 PORT map(a(3 DOWNTO 0),b(3 DOWNTO 0),ci,carry_OUT,sum(3 DOWNTO 0)); U2:fadd4 PORT map(a(7 DOWNTO 4),b(7 DOWNTO 4),carry_OUT,co,sum(7 DOWNTO 4)); END stru;例3-15 比较器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY comparator ISPORT(x,y:IN std_logic_vector(7 DOWNTO 0);eq:OUT std_logic);END comparator;ARCHITECTURE behav OF comparator ISBEGINPROCESS(x,y)V ARIABLE eqi:std_logic;BEGINeqi:='1';FOR I IN x'range LOOPeqi:=eqi and (x(I) xnor y(I));END LOOP;eq<=eqi;END PROCESS;END behav;、例3-16 16*8位ROMLibrary ieee;Use ieee.std_logic_1164.all;PACKAGE databus ISCONSTANT width:integer:=8;TYPE data_bus IS ARRAY(0 TO width-1)OF std_logic; CONSTANT mem_size:integer:=16;END databus;Library ieee;Use ieee.std_logic_1164.all;USE work.databus.ALL;ENTITY rom ISPORT(addr:IN INteger RANGE 0 TO mem_size-1;data:OUT data_bus;ncs:IN std_logic);END rom;ARCHITECTURE arch OF rom ISTYPE mem_block IS ARRAY (0 TO mem_size-1) OF data_bus; CONSTANT hiz_state:data_bus:=('Z','Z','Z','Z','Z','Z','Z','Z'); CONSTANT x_state:data_bus:=('X','X','X','X','X','X','X','X'); CONSTANT rom_data:mem_block:=(('0','0','0','0','0','0','0','0'),('0','0','0','0','0','0','0','1'),('0','0','0','0','0','0','1','0'),('0','0','0','0','0','0','1','1'),('0','0','0','0','0','1','0','0'),('0','0','0','0','0','1','0','1'),('0','0','0','0','0','1','1','0'),('0','0','0','0','0','1','1','1'),('0','0','0','0','1','0','0','0'),('0','0','0','0','1','0','0','1'),('0','0','0','0','1','0','1','0'),('0','0','0','0','1','0','1','1'),('0','0','0','0','1','1','0','0'),('0','0','0','0','1','1','0','1'),('0','0','0','0','1','1','1','0'),('0','0','0','0','1','1','1','1'));BEGINdata<=rom_data(addr) WHEN ncs='0' ELSEhiz_state WHEN ncs='1' ELSEx_state;END arch;例5—1 RS锁存器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY RS_latch ISPORT(S,R:IN std_logic;Q,Qbar:OUT std_logic);END RS_latch;ARCHITECTURE behav OF RS_latch ISBEGINPROCESS(R,S)V ARIABLE rs:std_logic_vector(1 DOWNTO 0);BEGINrs:=R&S;CASE rs ISWHEN"00"=>Q<='1';Qbar<='1';WHEN"01"=>Q<='1';Qbar<='0';WHEN"10"=>Q<='0';Qbar<='1';WHEN OTHERS=>NULL;END CASE;END PROCESS;END behav;例5—2 D锁存器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL; ENTITY D_latch ISPORT(D,Enable:IN std_logic;Q:OUT std_logic); END D_latch;ARCHITECTURE behav OF D_latch IS BEGINPROCESS(D,Enable)BEGINIF(Enable='1')THEN Q<=D;END IF;END PROCESS;END behav;D触发器、方法一:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY D_FF1 ISPORT(D,clock:IN std_logic;Q:OUT std_logic);END D_FF1;ARCHITECTURE behav OF D_FF1 IS BEGINPROCESS(clock)BEGINIF(clock'event AND clock='1')THEN Q<=D;END IF;END PROCESS;END behav;方法二:LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY D_FF2 ISPORT(D,clock:IN std_logic;Q:OUT std_logic);END D_FF2;ARCHITECTURE behav OF D_FF2 ISBEGINPROCESSBEGINW AIT UNTIL(clock='1');Q<=D;END PROCESS;END behav;例5—4带有Q’输出的D触发器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY D_FF ISPORT(D,clock,reset:IN std_logic;Q,Qbar:OUT std_logic); END D_FF;ARCHITECTURE behav OF D_FF IS SIGNAL state:std_logic;BEGINPROCESS(clock,reset)BEGINIF(reset='1')THEN state<='0';ELSIF rising_edge(clock)THEN state<=D;END IF;END PROCESS;Q<=state;Qbar<= NOT state;END behav;JK触发器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY JK_FF ISPORT(J,K,clock,reset:IN std_logic;Q,Qbar:OUT std_logic);END JK_FF;ARCHITECTURE behav OF JK_FF ISSIGNAL state:std_logic;BEGINPROCESS(clock,reset,J,K) ISV ARIABLE jk:std_logic_vector(1 DOWNTO 0); BEGINjk:=j&k;IF(reset='0')THEN state<='0';ELSIF rising_edge(clock)THENCASE jk ISWHEN "11"=>state<=NOT state;WHEN "10"=>state<='1';WHEN "01"=>state<='0';WHEN others=>NULL;END CASE;END IF;END PROCESS;Q<=state;Qbar<= NOT state;END behav;5—6T 触发器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL; ENTITY T_FF ISPORT(T,clock,reset:IN std_logic;Q,Qbar:OUT std_logic); END T_FF;ARCHITECTURE behav OF T_FF IS BEGINPROCESS(T,clock,reset)V ARIABLE state:std_logic; BEGINIF(reset='0')THEN state:='0';ELSIF rising_edge(clock)THENIF T='1' THENstate:=NOT state;END IF;END IF;Q<=state;Qbar<=NOT state;END PROCESS;END behav;例5-7 多位寄存器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY reg ISGENERIC(n:natural:=4);PORT(D:IN std_logic_vector(n-1 DOWNTO 0);clock,reset:IN std_logic;Q:OUT std_logic_vector(n-1 DOWNTO 0)); END reg;ARCHITECTURE behav OF reg ISBEGINPROCESS(clock,reset,D)V ARIABLE state:std_logic;BEGINIF(reset='0')THEN Q<=(OTHERS=>'0');ELSIF rising_edge(clock)THENQ<=D;END IF;END PROCESS;END behav;例5—8 SIPO移位寄存器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY sipo ISGENERIC(n:natural:=8);PORT(clk:IN std_logic;a:IN std_logic;q:OUT std_logic_vector(n-1 DOWNTO 0)); END sipo;ARCHITECTURE behav OF sipo ISBEGINPROCESS(clk)V ARIABLE reg:std_logic_vector(n-1 DOWNTO 0); BEGINIF rising_edge(clk)THENreg:=reg(n-2 DOWNTO 0)&a;END IF;q<=reg;END PROCESS;END behav;例5—9 用“+”函数描述的计数器LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;USE IEEE.std_logic_unsigned.ALL;ENTITY counter ISGENERIC(n:natural:=4);PORT(clk:IN std_logic;reset:IN std_logic;count:OUT std_logic_vector(n-1 DOWNTO 0)); END counter;ARCHITECTURE behav OF counter ISBEGINPROCESS(clk,reset)VARIABLE cnt:std_logic_vector(n-1 DOWNTO 0); BEGINIF reset='0'THEN cnt:=(OTHERS=>'0');ELSIF rising_edge(clk)THENcnt:=cnt+1;END IF;count<=cnt;END PROCESS;END behav;例4—2售邮票机的单进程状态机描述library ieee;use ieee.std_logic_1164.all;entity stamp isport(clk:in std_logic;coin1:in std_logic;coin5:in std_logic;ready:out std_logic;coin:out std_logic;out_stamp:out std_logic;give_charge:out std_logic;retur :out std_logic);end entity;architecture asm of stamp isbeginprocess(clk,coin1,coin5)type state_type is(S0,S1,S2,S3,S4,S6,S8);variable stat:state_type;beginready<='0';coin<='0';out_stamp<='0';give_charge<='0';retur<='0';if(rising_edge(clk))thencase state ISwhen S0=>ready<='1';coin<='0';out_stamp<='0';give_charge<='0';retur<='0';if(coin5='1')then state:=S1;elsif(coin1='1')then state:=S2;else state:=S0;end if;when s1=>out_stamp<='1';ready<='0';give_charge<='1';coin<='0';retur<='0';state:=S0;when s2=>coin<='1';out_stamp<='1';ready<='0';give_charge<='1';retur<='0';if(coin5='1')then state:=S3;elsif(coin1='1')then state:=S4;else state:=S2;end if;when S3=>retur<='1';out_stamp<='0';ready<='0';coin<='0';give_charge<='0';state:=S0;when S4=>coin<='1';ready<='0';give_charge<='0';out_stamp<='0';retur<='0';if(coin5='1')then state:=S3;elsif(coin1='1')then staet:=S8;else state:=S6;end if;when S8=>out_stamp<='1';ready<='0';give_charge<='0';coin<='0';retur<='0';state:=S0;end case;end if;end process;end asm;例4—3售邮票机的双进程状态机描述library ieee;use ieee.std_logic_1164.all;entity stamp isport(clk:in std_logic;coin1:in std_logic;coin5:in std_logic;ready:out std_logic;coin:out std_logic;out_stamp:out std_logic;give_charge:out std_logic;Retur:out std_logic);end entity;architecture asm of stamp istype state_type is(s0,s1,s2,s3,s4,s6,s8); signal present_state,next_state:state_type; beginseq:process(clk)beginif(rising_edge(clk))thenpresent_state<=next_state;end if;end process seq;com:process(present_state,coin1,coin5) beginready<='0';coin<='0';out_stamp<='0';give_charge<='0';retur<='0';case present_state iswhen s0=>ready<='1';if(coin5='1')then next_state<=s1;elsif(coin1='1')then next_state<=s2;else next_state<=s0;end if;when s1=>out_stamp<='1';give_charge<='1'; next_state<=s0;when s2=>coin<='1';if(coin5='1')then next_state<=s3;elsif(coin1='1')then next_state<=s4;else next_state<=s2;end if;when s3=>retur<='1';next_state<=s0;when s4=>coin<='1';if(coin5='1')then next_state<=s3;elsif(coin1='1')then next_state<=s6;else next_state<=s4;end if;when s6=>coin<='1';if(coin5='1')then next_state<=s3;elsif(coin1='1')then next_state<=s8;else next_state<=s6;end if;when s8=>out_stamp<='1';next_state<=s0;end case;end process com;end asm;例4—4售邮票机的三进程状态机描述LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY stamp ISPORT(clk:IN std_logic;coin1:IN std_logic;coin5:IN std_logic;Ready:OUT std_logic;Coin:OUT std_logic;Out_stamp:OUT std_logic;Give_charge:OUT std_logic;Retur:OUT std_logic);END ENTITY;ARCHITECTURE asm OF stamp ISTYPE state_type IS(S0,S1,S2,S3,S4,S6,S8); SIGNAL present_state,next_state:state_type; BEGINseq:PROCESS(clk)BEGINIF(rising_edge(clk))THENpresent_state<=next_state;END IF;END PROCESS seq;ns:PROCESS(present_state,coin1,coin5)BEGINCASE present_state ISWHEN S0=>IF(coin5='1')THEN next_state<=S1;ELSIF(coin1='1')THEN next_state<=S2;ELSE next_state <=S0;END IF;WHEN S1=>next_state<=S0;WHEN S2=>IF(coin5='1')THEN next_state<=S3;ELSIF(coin1='1')THEN next_state<=S4;ELSE next_state<=S2;END IF;WHEN S3=>next_state<=S0;WHEN S4=>IF(coin5='1')THEN next_state<=S3;ELSIF(coin1='1')THEN next_state<=S6;ELSE next_state<=S4;END IF;WHEN S6=>IF(coin5='1')THEN next_state<=s3;ELSIF(coin1='1')THEN next_state<=S8;ELSE next_state<=S6;END IF;WHEN S8=>next_state<=S0;END CASE;END PROCESS ns;op:PROCESS(present_state)BEGINReady<='0';Coin<='0';Out_stamp<='0';Give_charge<='0';Retur<='0';CASE present_state ISWHEN S0=>Ready<='1';WHEN S1=>Out_stamp<='1';Give_charge<='1';WHEN S2=>Coin<='1';WHEN S3=>Retur<='1';WHEN S4=>Coin<='1';WHEN S6=>Coin<='1';WHEN S8=>Out_stamp<='1';END CASE;END PROCESS op;END asm;例4—5 序列检测器的VHDL程序LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY state_machine ISPORT(clk,x:IN std_logic;z:OUT std_logic);END ENTITY;ARCHITECTURE asm OF state_machine IS TYPE state_type IS(s0,s1,s2,s3,s4,s5,s6,s7); SIGNAL present_state,next_state:state_type:=s0; BEGINseq:process(clk)BEGINIF(rising_edge(clk))THENpresent_state<=next_state;END IF;END PROCESS seq;com:process(present_state,x)ISBEGINz<='0';CASE present_state ISWHEN s0=>IF(x='0')THEN next_state<=s0;ELSE next_state<=s1;END IF;WHEN s1=>IF(x='0')THEN next_state<=s0;ELSE next_state<=s2;END IF;WHEN s2=>IF(x='0')THEN next_state<=s0; ELSE next_state<=s3;END IF;WHEN s3=>IF(x='0')THEN next_state<=s4; ELSE next_state<=s3;END IF;WHEN s4=>IF(x='0')THEN next_state<=s5; ELSE next_state<=s1;END IF;WHEN s5=>IF(x='0')THEN next_state<=s0; ELSE next_state<=s6;END IF;WHEN s6=>IF(x='0')THEN next_state<=s7; ELSE next_state<=s2;END IF;WHEN s7=>z<='1';IF(x='0')THEN next_state<=s0; ELSE next_state<=s1;END IF;END CASE;END PROCESS com;END asm;。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
EDA 技术与应用的二选一选择器
学院名称: 东方学院
专 业: 电子信息工程
班 级:
学 号:
姓 名:
指导教师姓名:
指导教师职称:
2007年 4 月24日
JIANGSU TEACHERS UNIVERSITY OF TECHNOLOGY 本科课程设计(论文)
二选一选择器
一.设计目的
1.学习VHDL编程;
2.进一步熟悉实验箱电路;
二.设计指标及功能要求
设计指标:
(1)对所设计的小系统功能正确分析;
(2)基于VHDL语言描述系统的功能;
(3)在QUARTUSⅡ环境中编译通过;
(4)仿真通过,并得到正确的波形;
(5)给出相应设计报告;
功能要求:1.用VHDL语言设计可控加减计数器;
2.至少两层电路,底层有三种元件;
3.使得其执行可控加,减记数;
三.实验步骤
1.建立Light目录,用于存放本实验所建立的文本
2.点击“File New”,在出现的对话框中,选择“VHDL File”进入文本编辑器。
3.输入VHDL语言源文件。
4.点“Save as”,保存该源文件。
5.进行编译,点“start compilation”,若语句有错会有提示,修改后重新编译直到无错误。
6.点“File New”,选择“Vector Waveform File”,建立仿真输入文件.
7.点“End time”,输入终止时间(表示波形长度).点“light”将所有信号选中或部分选中。
点“start simulation”.运行波形,直至正确。
四、电路工作原理
首先,用异或门控制输入端,加一个脉冲信号。
在其后方分别加上加法计数器和减法计数器:来一个脉冲,当异或门输出为0时,减法计数器开始工作,当输出为1时,加法计数器工作。
这样,利用给异或门加不同的信号来控制加减计数器。
五.各子模块设计与调试过程
library ieee;
use ieee.std_logic_1164.all;
entity ora is
port(a:in std_logic;
b:out std_logic);
end entity;
architecture one of ora is
begin
b<=not a;
end architecture;
library ieee;
use ieee.std_logic_1164.all;
entity noxa is
port(a,b:in std_logic;
c:out std_logic);
end entity;
architecture one1 of noxa is
begin
c <= a xor b;
end architecture;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt10a is
port(CP,EN:in std_logic;
q:out std_logic_vector(3 downto 0)); end cnt10a;
architecture one of cnt10a is
begin
process(CP,EN)
variable q1:std_logic_vector(3 downto 0);
begin
if(CP'event and CP='1') then
if EN='1' then
if(q1<9) then q1:=q1+1;
else q1:=(others=>'0');
end if;
end if;
end if;
q<=q1;
end process;
end one;
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity cnt10b is
port(CP,EN:in std_logic;
q: out std_logic_vector(3 downto 0)); end cnt10b;
architecture one of cnt10b is
begin
process(CP,EN)
variable q1:std_logic_vector(3 downto 0);
begin
if(CP'event and CP='1') then
if EN='1' then
if(q1=0) then q1:="1001";
else q1:=q1-1;
end if;
end if;
end if;
q<=q1;
end process;
end;
library ieee;
use ieee.std_logic_1164.all;
entity kekong is
port(a1,b1,cp1:in std_logic;
cq1,cq2:out std_logic_vector(3 downto 0)); end entity;
architecture wowo of kekong is
component noxa is
port(a,b:in std_logic;
c:out std_logic);
end component;
component ora is
port(a:in std_logic;
b:out std_logic);
end component;
component cnt10a is
port(CP,EN:in std_logic;
q:out std_logic_vector(3 downto 0)); end component;
component cnt10b is
port(CP,EN:in std_logic;
q: out std_logic_vector(3 downto 0)); end component;
signal k,j:std_logic;
begin
u1:noxa port map(a=>a1,b=>b1,c=>k);
u2:ora port map(a=>k,b=>j);
u3:cnt10a port map(EN=>k,CP=>CP1,Q=>cq1);
u4:cnt10b port map(EN=>j,CP=>CP1,q=>cq2); end architecture wowo;
六、波形调试:
七、感想:
通过对EDA程序的使用,我发现该程序的实用性!其次,对数字电路的知识也不能遗忘,还要正确使用VHDL语言,通过调试能正确的改错!并且对调试后的波形进行正确的分析。
八、参考文献:
1、《用VHDL设计电子线路》边计年,北京:清华大学出版社,2000;
2、《VHDL设计表示和综合》李宗伯,北京:机械工业出版社,2000;
3、《EDA计数实用教程》潘松,黄继业,北京:电子工业出版社,2000;
4、《CPLD/FPGA的开发与应用》徐志军,北京:电子工业出版社,2000。