




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
智能仪器之——测试仪器的微型化与设计方法1、智能仪器发展趋势2、高集成度数字器件及设计方法概述3、高集成度模拟器件及设计方法概述4、混合器件设计方法5、总线相关1、智能仪器发展趋势发展趋势:(1)智能化
(2)集成化与微型化齿轮传动生物芯片集成度的提高使可靠性得到极大提高美军先进的F-111飞机原来的平均间隔故障时间为40h,采用超高速集成电路后,平均间隔故障时间提高到5000h,总的元件从224个减少到60个。海湾战争中的“爱国者”导弹采用高集成度芯片,使电子模块由200个减少到13个(3)仿生学2、高集成度数字器件及设计方法概述电子管晶体管小规模集成电路大规模集成电路中规模集成电路超大规模集成电路ASIC2.1可编程逻辑器件简介20世纪80年代中期Altera公司----EPLD20世纪80年代末Lattice公司----CPLD1985年Xilinx公司首家推出了----FPGACPLD及FPGA的区别及选用原则
FPGA容易实现时序逻辑,CPLD更适合于实现大规模的组合功能CPLD的时序延迟是均匀的和可预测的,FPGA的延迟不可预测性。在编程上FPGA比CPLD具有更大的灵活性。FPGA的集成度比CPLD高,CPLD比FPGA使用起来更方便CPLD的速度比FPGA快,CPLD是系统断电时编程信息也不丢失。FPGA编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。一般情况下,CPLD的功耗要比FPGA大SoPC=FPGA+MCU+DSPXilinx公司的SoPC芯片型号为:
Spartan、Spartan-II、Virtex、Virlex-II、XC4000和XC9500Altera公司的SoPC系列有:
APEXEP20KE
Nios软核带有DSP功能块,在Nios
核中还可得到定时器/计数器、PIO、SPI、PWM控制器、10/100M以太网MAC和SDRAM控制器等资源。
2.2可编程逻辑器件设计方法概述2.2.1可编程逻辑器件设计的基本方法可编程逻辑器件的设计依赖于专用的开发软件,如:
Altera公司的MAX+plusⅡ,QuartusII、Xilinx公司的ISE软件等。在MAX+plusⅡ的开发环境中,可编程逻辑器件的基本设计方法主要包括:(1)图形输入的设计方法(2)文本输入的设计方法2.2.2图形输入设计方法2.2.2.1图形输入的设计文件组成文件包括:(1)元件、(2)连线、(3)网络标号、(4)输入、输出引脚等。2.2.2.2图形输入的元件(1)prim库中基本逻辑器件,(2)mf库中7400系列逻辑(3)mega-lpm库中参数化模块(4)利用已完成的设计文件自创元件
2.2.2.3元件特点
(1)元件参数可以进行设置,增强元件应用范围和灵活性以计数器的设计为例介绍LPM库元件的使用方法。(1)利用向导生成所需参数的器件(计数器)打开MAXPLUSII,单击File下的MegaWizardPlug-InManage项,选择Createanewcustommegafunction
variation,单击Next,在出现的对话框中双击arithmetic,选中LPM-COUNTER,选择输出文件类型为VHDL并取名为counter1确定其存放路径,设置好后对话框如下图所示,单击Next,(2)在出现的对话框中设置计数器数据位宽为8,并设置计数器为递增计数,即选中Uponly,单击Next:(3)设置计数器模即进制为160,并勾选Carry-out,即计数器有进位输出cout,单击Next:(4)设置计数器为异步清零,引脚为aclr,单击Next:(5)单击Finish,完成对计数器的设置,设置完成后,该计数器模块出现在模块库d:\progra~1\maxplu~1\*中,可以在原理图输入方式下直接调用。(6)在原理图中调用模块counter1,并连接其输入输出端口,如下图所示:(7)对该计数器进行仿真,得到其仿真波形如下图,从图中可以看出,当Q计数到9F时,下一个计数值变成了00,即完成了160个数的计数要求,完全符合设计目标:在原理图输入方式下直接调用LPM库元件
(1)选择库与器件在.gdf文件空白处双击打开EnterSymbol对话框,选择mega_lpm库,从SymbolFiles中选择lpm-counter;(2)参数设置单击上图的OK按钮,弹出EditPorts/Parameters对话框;(3)器件生成单击OK,完成对计数器参数的设置,在gdf文件中生成计数器模块:(2)可进行元件的创建。2.2.3文本输入设计方法文本输入设计方法是通过硬件描述语言进行电路设计Altera公司的硬件描述语言包括:
AHDL;
VHDL、
Verilog―HDL
基于AHDL描述语言的文本输入设计简介
AHDL设计文件(TDF)属于ASCII文件由:段(Section)语句(Statement)组成。一个TDF中必须包含一个子设计段(SubdesignSection)和一个逻辑段(LogicSection)。基于VHDL描述语言的文本输入设计简介ALTERA设计流程(以图形输入为例)包括:设计输入、项目编译、设计校验(功能仿真和时序分析、仿真)、器件编程和配置等过程,设计输入:图形输入文本输入等项目编译:优化、综合映射布局、布线等功能仿真时序仿真器件测试器件下载编程和配置(1)设计输入指定设计项目名称创建新的设计文件①指定设计项目名称②创建新的设计文件鼠标左键以确定输入位置双击鼠标左键。在EnterSymbol
对话框中选择元件。指定您将输入文件中的符号名称。双击一个符号库,在SymbolFiles
对话框中将出现它的所有符号显示当前路径下的所有符号input-------output在管脚上的PIN_NAME处双击鼠标左键,然后输入名字。输入符号总线节点名称74163符号输出符号连接点输入管脚名输出管脚名总线名称对n位宽的总线A命名时,您可以采用
A[n-1..0]形式,其中单个信号用A0,A1,A2,…..,An形式。保存文件选择
File菜单中的
SaveAs项.
将出现SaveAs对话框,如下图所示
:在FileName
对话框内输入设计文件名,然后选择
OK即可保存文件。指定具体的设计文件名显示当前文件类型的缺省(Default)扩展名。您可从下拉列表中选择不同的扩展名。例:采集系统的输入时钟频率为10MHz,要求可产生的采样频率为:
10M,5M,2M,1M;
500K,200K,100K;
50K,20K,10K;
5K,2K,1K。编程可选此设计中可以分为频率选择、时钟分频、逻辑控制输出3个模块。系统输入、输出信号示意图频率选择模块的设计
数据选择器,16选一的数据选择器----74154设计步骤为:(1)指定项目名称;(2)建立扩展名为.gdf
的新文件;(3)在图形编辑窗口输入元器件,在SymbolName的框内直接输入器件型号74154,如图5.14,(4)连线及设置输入、输出引脚
(5)加入输入,输出符号
时钟分频模块的设计
功能分析:分频值确定(2)10分频电路的设计与级联控制模块设计(2)项目编译选择“MAX+plus
II”→“Compiler”菜单,则出现编译器窗口,编译器将一次性完成编译、综合、优化、逻辑分割和适配/布线等操作。器件选择设计的文件可以由软件自动选择器件,也可以由设计人员指定。(3)设计校验功能仿真①建立仿真波形文件选择菜单“File”→“New”,在出现的“New”对话框,②确定要观测的信号选择信号结点③设置输入信号波形④进行仿真例1的仿真频率选择模块的设计
数据选择器,16选一的数据选择器----74154频率选择控制系统仿真波形—2M频率选择控制系统仿真波形—500K频率选择控制系统仿真波形—20K在每一模块设计完成就可以进行放置、验证选择5M频率的仿真波形选择200K频率的仿真波形(4)编程与配置
选择“MAX+plusII”→“Programmer”菜单,可调出编程器(Programmer)窗口。2.3VHDL设计概述VHDL的特点①VHDL可用于从门级、电路级直至系统级的描述、仿真和综合。②VHDL有良好的可读性,可以进行团队设计,并可以多方沟通。③VHDL有良好的可移植性。④使用VHDL可以延长设计的生命周期。⑤VHDL支持对大规模设计的分解和已有设计的再利用。⑥VHDL具有类属描述语句和子程序调用等功能,对于完成的设计,在不改变源程序的条件下,只需改变类属参量或函数,就能轻易地改变设计的规模和结构。(1)文件结构对于一个完整的VHDL程序,由以下几个部分组成:LIBRARYieee;--------库-----------------------------------Useieee.std_logic_1164.all;---------程序包-----------------------------------ENTITYxor_gateis---------实体
port(a,b:INbit;c:OUTbit);ENDxor_gate;-----------------------------------ARCHITECTUREdata_flow1ofxor_gateis---------结构体beginc<=aand(notb);ENDdata_flow1;-----------------------------------CONFIGURATIONcnfofxor_gateis-----------配置
fordata_flow1endfor;ENDcnf;1)、库与程序包库用于存放已经编译过的实体说明、结构体、配置说明、程序包说明和程序包体等,可以用作其它VHDL描述的资源而被引用。程序包也叫包集合,主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明和元件说明等部分。设计者使用时只要用USE子句进行说明即可。目前在VHDL语言中,常用的主要有以下几种库:(1)IEEE库(2)STD库(3)WORK库(4)用户库较常引用的程序包是IEEE库中的STD_LOGIC_1164.ALL;STD_LOGIC_ARITH.ALL;STD_LOGIC_UNSIGNED.ALL,利用USE语句引用。如:LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;2)、实体及其说明实体的电路意义相当于器件,在电路原理图上相当于元件符号。实体说明中包含用来描述所设计的模块的公共信息,包括:外部可见特性如端口的数目、方向和类型等,类型说明、断言语句等外部不可见信息。通过实体说明明确了所设计的系统所具有的引脚数目及引脚信号的类型。实体的一般格式如下:ENTITY实体名IS[GENERIC类属参数说明];[PORT端口说明];END实体名;BUFFER
INOUT
OUTINENTITYANDN2ISPORT(A,B:INSTD-LOGIC;Y:OUTSTD-LOGIC);ENDANDN2;3)结构体及其说明通过实体说明定义了所设计系统的对外接口信息,这些信号在内部的逻辑、运算等关系要在结构体内进行描述。结构体都必须附属于某个实体,一个实体可同时具备多个结构体。结构体定义了设计单元具体的功能结构体的结构
ARCHITECTURE结构体名of实体名IS [说明部分;] BEGIN <功能描述语句部分;> END[结构体名];描述方式在结构体中对功能的描述可以使用:结构化描述((structural逻辑元件连接描述)、寄存器传输描述(RTL,数据流描述dataflow)行为描述(behavior数学模型描述)这三种描述方式,VHDL通过这三种不同的描述方式从不同的侧面描述结构体的功能。与非门的寄存器传输描述。LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;ENTITYnand-2ISPORT(a,b:INSTD-LOGIC;y:OUTSTD-LOGIC);ENDnand-2;ARCHITECTURErtlOFnand-2ISBEGINy<=NOT(aANDb);ENDrtl;与非门的结构描述。
LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;ENTITYnand-2ISPORT(a,b:INSTD-LOGIC;y:OUTSTD-LOGIC);ENDnand2;ARCHITECTUREstructOFnand-2ISCOMPONENTinvPORT(in:INSTD-LOGIC;Out:OUTSTD-LOGIC);ENDCOMPONENT;COMPONENTand2PORT(in1,in2:INSTD-LOGIC;Out:OUTSTD-LOGIC);ENDCOMPONENT;SIGNALout1:STD-LOGIC;BEGINu1:and2PORTMAP(a,b,out1);u2:invPORTMAP(out1,y);ENDstruct;与非门的行为描述。
LIBRARYIEEE;USEIEEE.STD-LOGIC-1164.ALL;ENTITYnand-2ISPORT(a,b:INSTD-LOGIC;y:OUTSTD-LOGIC);ENDnand-2;ARCHITECTUREbehavOFnand-2ISBEGINPROCESS(a,b)VARIABLEtmp:STD-LOGIC-VECTOR(1DOWNTO0);BEGIN
tmp:=a&b;CASEtmpISWHEN"00"=>y<=′1′;WHEN"01"=>y<=′1′;WHEN"10"=>y<=′1′;WHEN"11"=>y<=′0′;WHENOTHERS=>y<=′X′;ENDCASE;ENDPROCESS;ENDbehav;(2)数据对象常量(CONSTANT)变量(VARIABLE)信号(SIGNAL)(3)标准的数据类型(4)顺序语句VHDL顺序语句主要包括:变量赋值语句信号赋值语句WAIT语句IF语句CASE语句LOOP(循环)语句EXIT语句NEXT语句返回(RETURE)语句空操作(NULL)语句断言语句过程调用语句·变量赋值语句(VariableEvaluate)变量赋值语句语法格式为:变量赋值目标:=赋值表达式·信号赋值语句(SignalEvaluate)信号赋值语句的书写格式为:目的信号名<=信号变量表达式;WAIT(等待)语句(1)WAIT--无限等待语句(2)WAITON信号[,信号...];--进程暂停,直到信号表中的某个信号值改变时才激活进程(3)WAITUNTIL表达式--条件等待语句
WAITUNTIL语句中的表达式是布尔表达式(4)WAITFOR时间表达式--超时等待语句IF语句IF语句按其书写格式可分为以下3种。(1)IF条件THEN
顺序语句
ENDIF;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcpldfpgaIS
PORT(clk:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCPLDFPGA;ARCHITECTURErtlOFCPLDFPGAISBEGINPROCESS(clk)BEGINIF(clk‘EVENTANDclk=’1‘)THENQ<=DENDIF;ENDPROCESS;ENDrtl;(2)IF条件THEN
顺序语句
ELSE
顺序语句
ENDIF;(3)IF条件THEN
顺序语句
ELSIF条件THEN
顺序语句
ELSIF条件THEN
顺序语句┇
ELSE
顺序语句
ENDIF;LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYcpldfpgaISPORT(clk:INSTD_LOGIC;D:INSTD_LOGIC;PRN,CLRN:INSTD_LOGIC;Q:OUTSTD_LOGIC);ENDCPLDFPGA;ARCHITECTURErtlOFCPLDFPGAISBEGINPROCESS(clk)BEGINIFPRN='0'THENQ<='1';ELSIFCLRN='0'THENQ<='0';ELSIF(clk'EVENTANDclk='1')THENQ<=D;ENDIF;ENDPROCESS;ENDrtl;CASE语句语句的结构为:
CASE表达式ISWHEN条件表达式=>顺序语句;┇
WHEN条件表达式=>顺序语句;
WHENOTHERS=>顺序语句;
ENDCASE;(1)单个普通数值如WHEN选择值=>顺序语句;
CASESISWHEN“00”=>b<=a;
当S的值为“00”时,把a的值赋给b。(2)并列数值如WHEN值/值/值=>顺序语句;
CASESISWHEN1/2/3=>b<=a;
当S的值为1或2或3时,把a的值赋给b。(3)数值选择范围如WHEN值TO值=>顺序语句;
CASESISWHEN1TO5=>b<=a;
当S的值为1,2,3,4,5时,把a的值赋给b。也可以把这几种结合起来作为条件的值,
CASESISWHEN4TO7|2=>b<=a;
当S的值为4TO7或2时,把a的值赋给b。(5)并行语句VHDL中所包含的常用并行语句有以下几种:①进程(PROCESS)语句②信号赋值(CONCURRENTSIGNALASSIGNMENT)语句③断言(ASSERT)语句④过程调用(CONCURRENTPROCEDURECALL)语句⑤块(BLOCK)语句⑥生成(GENERATE)语句⑦元件例化(COMPONENT_INSTANT)语句进程语句(PROCESS)书写格式如下:[进程标号:]PROCESS[(敏感信号表)][is][说明区;]BEGIN<顺序语句;> ENDPROCESS[进程标号];LIBRARYIEEE;USEIEEE.std-logic-1164.ALL;ENTITYdecoderISPORT(a,b:INstd-logic;y0,y1,y2,y3:OUTstd-logic);ENDdeCoder;ARCHITECTUREbehavOFdecoderISBEGINPROCESS(a,b)BEGINy0<=(NOTa)AND(NOTb);y1<=(NOTa)ANDb;y2<=aAND(NOTb);y3<=aANDb;ENDPROCESS;ENDbehav;块语句(BLOCK)
BLOCK语句的书写格式:
[块标号:]BLOCK[保护表达式][GENERIC[类属接口表;]];
[PORT[端口接口表;]];
[块说明部分]BEGIN<并行语句1><并行语句2>┇ENDBLOCK[块标号];并行信号赋值语句VHDL提供了三种并行信号赋值语句:简单信号赋值语句条件信号赋值语句选择信号赋值语句简单信号赋值语句信号量<=敏感信号量表达式;
LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYNNISPORT(a:INSTD_LOGIC;
b:OUTSTD_LOGIC);
ENDNN;
ARCHITECTUREbeOFNNISBEGINb<=NOTa;
ENDbe;条件信号赋值语句书写格式为:目的信号<=表达式1WHEN条件1ELSE
表达式2WHEN条件2ELSE
表达式3WHEN条件3ELSE┇
表达式n-1WHEN条件
ELSE
表达式;选择信号赋值语句书写格式为:
WITH表达式SELECT目的信号<=表达式1WHEN条件1,
表达式2WHEN条件2,
表达式3WHEN条件3,┇
表达式nWHEN条件n;并行过程调用语句过程语句过程调用语句是对过程的调用,VHDL中的过程与其它高级语句的子程序相同,过程语句的书写格式如下:
PROCEDURE过程名(参数1;参数2;┄)IS[定义语句];--变量定义
BEGIN[顺序处理语句]END过程名;过程调用语句书写格式:
过程名[参数表];
其功能是调用过程名指定的过程。例:
ARCHITECTUREROFSEIS…….max(P1,P2,P3);…..EDNR;元件的例化语句:元件的定义---指明对应的实体元件的调用---指明信号的连接关系元件例化语句(1)元件定义语句
COMPONENT例化元件名
GENERIC(类属表);PORT(例化元件端口名表);ENDCOMPONENT例化元件名;例:COMPONENTL-NOTGENERIC(DELAY:TIME);
PORT(a:INSTD_LOGIC;
c:OUTSTD_LOGIC);ENDCOMPONENT;元件调用语句<标号名:><元件名>[GENERICMAP(参数映射)]PORTMAP(端口映射);LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYexampleISPORT(pin:INSTD_LOGIC;
pout:OUTSTD_LOGIC);ENDexample;ARCHITECTUREROFexampleISCOMPONENTL-NOTGENERIC(DELAY:TIME);
PORT(a:INSTD_LOGIC;
c:OUTSTD_LOGIC);ENDCOMPONENT;--元件定义语句BEGINU1:L-NOTGENERICMAP(4ns)--参数映射
PORTMAP(pin,pout);--端口映射ENDR;运算符VHDL的运算符共有4种,可以分别进行:逻辑运算(LOGICAL);关系运算(RELATIONAL);算术运算(ARITHMETIC);并置运算(CONCATENATION)。运算操作符是有优先级的逻辑运算符(1)对于数组型(如STD_LOGIC_VECTOR)数据类型的相互作用是按位进行的。(2)运算符的左边和右边,以及代入的信号的数据类型必须是相同的。(3)7种逻辑运算符中NOT的优先级最高。(4)在一个语句中出现两个以上的逻辑表达式时,不存在自左向右的优先顺序。在同一逻辑表达式中有多个逻辑运算符,采用括号来完成所需的逻辑功能。c<=notaandb;NOT的优先级高于AND,信号a先取反再与信号b与运算,
c<=not(aandb);算术运算符关系运算符(1)不同的关系运算符对两边操作数的类型有不同的要求,其中“=”、“/=”适用范围最广,可以是任何数据类型。(2)关系操作符的作用是将相同数据类型的数据对象进行数值比较或关系排序判断,结果都是以布尔类型(BOOLEAN)的数据表示出来,即TRUE或FALSE两种。(3)关系运算符“<”、“>”、“<=”和“>=”的两边数据类型必须相同;“=”和“/=”的两边数据类型不必相同。(4)注意符号“<=”出现在VHDL程序的含义,可以是小于等于,也有可能是信号的赋值语句。连接运算符-&连接运算符(&)用于位的连接,即把右边的内容接在左边内容之后形成一个新的数组。也常用于字符串。例如:SIGNALa,c:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALm:STD_LOGIC_VECTOR(7DOWNTO0);┇m<=a&c;--矢量m是8位,a,c都为4位,a,c利用连接运算符可进行连接,成为8位后就可以把值赋给m。如a的值为“0101”,c的值为“1100”,利用连接运算符赋于m后,m的值为“01011100”VHDL操作符优先级程序框架LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY实体名IS[GENERIC类属参数说明];[PORT端口说明];END实体名;ARCHITECTURE结构体名of实体名IS [说明部分;] BEGIN <功能描述语句部分;> END[结构体名];①预置数的选择libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenpinvisport(pg:instd_logic_vector(2downto0);
laod:outstd_logic_vector(11downto0));endfenpinv;进程语句(PROCESS)书写格式如下:[进程标号:]PROCESS[(敏感信号表)][is][说明区;]BEGIN<顺序语句;> ENDPROCESS[进程标号];CASE语句语句的结构为:
CASE表达式ISWHEN条件表达式=>顺序语句;┇
WHEN条件表达式=>顺序语句;
WHENOTHERS=>顺序语句;
ENDCASE;architecturefoffenpinvissignalsel:std_logic_vector(2downto0);signala:std_logic_vector(11downto0);
beginsel(0)<=pg(0);sel(1)<=pg(1);sel(2)<=pg(2);process(sel)begincaseseliswhen"000"=>a<="111110110000";--80个CLK出一个脉冲
when"001"=>a<="111111100000";--32(500K)
when"010"=>a<="111101100000";--计160when"011"=>a<="111011000000";--计320when"100"=>a<="110011100000";--计800when"101"=>a<="100111000000";--计1600when"110"=>a<=“000000000000";when"111"=>a<="111111110000";--计16whenothers=>a<="111110110000";--默认的是80的
endcase;
laod<=a;endprocess;endf;分频实现方法22分频模块libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entityFENPIN_2isport(clkin,rst:in
std_logic;
clkout:out
std_logic);endFENPIN_2;IF条件THEN
顺序语句
ELSIF条件THEN
顺序语句
ELSIF条件THEN
顺序语句┇
ELSE
顺序语句
ENDIF;architecturefp2ofFENPIN_2issignalclk:std_logic;beginprocess(clkin,rst)beginifrst='1'then
clk<='0';
elsif
rising_edge(clkin)then
clk<=notclk;endif;endprocess;clkout<=clk;endfp2;5分频模块libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entityFENPIN_5isPort(clkin,rst:instd_logic;
clkout:outstd_logic);endFENPIN_5;architecturezhk1_4ofFENPIN_5isSIGNALCLKOUT1:STD_LOGIC;constantn:integer:=4;signalcount:integerrange0ton;begin
process(clkin,rst)beginifrst='1'then clkout1<='0'; count<=0;
elsif
clkin'EVENTandclkin='1'then ifcount=nthen clkout1<='1'; count<=0; else clkout1<='0'; count<=count+1; endif; endif;CLKOUT<=(NOTCLKOUT1)ORCLKIN;endprocess;endzhk1_4;变采样例libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitymcaiisport(cai1:instd_logic_vector(2downto0);cai2:instd_logic_vector(2downto0);cai3:instd_logic_vector(2downto0);trig:instd_logic_vector(2downto0);
bcpl:outstd_logic_vector(2downto0));endmcai;architecturebeofmcaiissignallaodq:std_logic_vector(2downto0);
begin
process(trig)begincasetrigiswhen"001"=>
laodq<=cai1;when"011"=>
laodq<=cai2;when"111"=>
laodq<=cai3;whenothers=>
laodq<=cai1;endcase;
bcpl<=laodq;endprocess;endbe;分频设计libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entityfenpinjshuisport(
clk:instd_logic;
laod:instd_logic;
datain:instd_logic_vector(11downto0);
dataout:outstd_logic_vector(11downto0);count:outstd_logic);endfenpinjshu;architecturejshuoffenpinjshuissignalq:std_logic_vector(11downto0);signalr:std_logic_vector(11downto0);begin
process(laod)beginiflaod'eventandlaod='1'thenr<=datain;endif;endprocess;
process(clk)beginifclk'eventandclk='1'thenifr<qthenq<=q+1;
dataout<=q;count<='0';elsecount<='1';q<="000000000000";endif;endif;
endprocess;endjshu;内触发类型的判断与触发LIBRARYIEEE;USEieee.std_logic_1164.all;USEieee.std_logic_unsigned.all;USEieee.std_logic_arith.all;ENTITYcomparator_5bitisPORT(a,b:instd_logic_vector(4downto0);x1,x2,x3:outstd_logic);ENDcomparator_5bit;ARCHITECTUREcomparator_5bitofcomparator_5bitisBEGINx1<='1'whena>belse'0';x2<='1'whena=belse'0';x3<='1'whena<belse'0';ENDcomparator_5bit;多存储器选择LIBRARYieee;USEieee.std_logic_1164.ALL;ENTITYcsISPORT(sel1,sel2,p1,p2,rst,s:INSTD_LOGIC;
cs:OUTSTD_LOGIC);ENDcs;ARCHITECTUREcpldOFcsISsignals1,s2:STD_LOGIC_vector(1downto0);BEGINs1<=sel2&sel1;s2<=p2&p1;PROCESS(s1,s2,rst,s)BEGINif(rst='1')then
cs<='0';elsif(s='0')then
cs<='0';elseif(s1=s2)THEN
cs<='1'; else
cs<='0'; endif;endif;ENDPROCESS;ENDcpld;同步十进制可逆计数器
libraryieee;useieee.std_logic_1164.all;useieee.std_logic_unsigned.all;entitycountisport(clk,rst,load,plus_sub:instd_logic;din:instd_logic_vector(3downto0);
dout:bufferstd_logic_vector(3downto0));endcount;architecturebehaveofcountisbeginprocess(clk,rst,load,plus_sub,din)beginif(clk'eventandclk='1')thenif(rst='1')thendout<=(others=>'0');
elsif(load='1')thendout<=din;
elsif(plus_sub='1')thenif(dout=9)thendout<="0000";elsedout<=dout+1;endif;
elsif(plus_sub='0')thenif(dout=0)thendout<="1001";elsedout<=dout-1;endif;endif;endif;endprocess;endbehave;定时器设计的例子
要求:设计一个定时器,这个定时器可由用户设定时间,定时器按照设定时间进行减计数,计到0发出计满信号。定时器接4个7段码显示时间,每秒显示一次。4个7段码显示分别显示分的十位、分的个位;秒的十位、秒的个位。如:1234表示12分36秒设计:顶层设计:LibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entityTIMERisPort(clk:Instd_logic;data:Instd_logic_vector(15downto0);down:Instd_logic;load:Instd_logic;done:Outstd_logic;
min_lsb:Outstd_logic_vector(1to7);
min_msb:Outstd_logic_vector(1to7);
sec_lsb:Outstd_logic_vector(1to7);
sec_msb:Outstd_logic_vector(1to7));endTIMER;architectureBEHAVIORALofTIMERiscomponentCOUNTER4Port(clk:Instd_logic;cnt_f_5:Instd_logic;
data_in:Instd_logic_vector(3downto0);down:Instd_logic;load:Instd_logic;
segs:Outstd_logic_vector(1to7);zero:Outstd_logic);endcomponent;signalzer0,zer1,zer2,zer3,down0,down1,down2,down3:std_logic;signalis_five,is_nine:std_logic;signaldata3,data2,data1,data0:std_logic_vector(3downto0);begin
is_five<=`1`;
is_nine<=`0`;data3<=data(15downto12);data2<=data(11downto8);data1<=data(7downto4);data0<=data(3downto0);process(zer3,zer2,zer1,zer0,down)begindone<=zer3andzer2andzer1andzer0;down3<=`0`;down2<=`0`;down1<=`0`;down0<=`0`;if(down=`1`)thendown0<=`1`;if(zer0=`1`)thendown1<=`1`;if(zer1=`1`)thendown2<=`1`;if(zer2=`1`)thendown3<=`1`;endif;endif;endif;endif;endprocess;c3:COUNTER4PortMap(clk=>clk,cnt_f_5=>is_five,
data_in=>data3,down=>down3,load=>load,segs=>min_msb,zero=>zer3);c2:COUNTER4PortMap(clk=>clk,cnt_f_5=>is_nine,
data_in=>data2,down=>down2,load=>load,segs=>min_lsb,zero=>zer2);c1:COUNTER4PortMap(clk=>clk,cnt_f_5=>is_five,
data_in=>data1,down=>down1,load=>load,segs=>sec_msb,zero=>zer1);c0:COUNTER4PortMap(clk=>clk,cnt_f_5=>is_nine,
data_in=>data0,down=>down0,load=>load,segs=>sec_lsb,zero=>zer0);endBEHAVIORAL;COUNTER4的实现LibraryIEEE;useIEEE.std_logic_1164.all;useIEEE.std_logic_arith.all;entityCOUNTER4isPort(clk:Instd_logic;cnt_f_5:Instd_logic;
data_in:Instd_logic_vector(3downto0);down:Instd_logic;load:Instd_logic;zero:Outstd_logic;
segs:Outstd_logic_vector(1to7));endCOUNTER4;architectureSCHEMATICofCOUNTER4isSignalcount:std_logic_vector(3downto0);Signaltemp:std_logic_vector(3downto0);componentZERO_DETECTPort(a:Instd_logic_vector(3downto0);Zero:Outstd_logic);Endcomponent;ComponentBCD7Port(nibl:Instd_logic_vector(3downto0);Segments:Outstd_logic_vector(1to7));Endcomponent;ComponentDECR4Port(cnt_f_5:Instd_logic;
Dec_in:Instd_logic_vector(3downto0);
Dec_out:Outstd_logic_vector(3downto0));Endcomponent;ComponentDUAL_REG4Port(a:Instd_logic_vector(3downto0);b:Instd_logic_vector(3downto0);
Clk:Instd_logic;
Lda:Instd_logic;
Ldb:Instd_logic;q:Outstd_logic_vector(3downto0));Endcomponent;BeginI_3:ZERO_DETECTPortMap(a(3downto0)=>count(3downto0),zero=>zero);I_4:BCD7PortMap(nibl(3downto0)=>count(3downto0),Segments=>segs);I_2:DECR4PortMap(cnt_f_5=>cnt_f_5,dec_in(3downto0)=>count(3downto0),dec_out=>temp);I_1:DUAL_REG4PortMap(a(3downto0)=>data_in(3downto0),b(3downto0)=>temp(3downto0),clk=>clk,
lda=>load,ldb=>down,q=>count);EndSCHEMATIC;LibraryIEEE;UseIEEE.Std_logic_1164.All;UseIEEE.Std_logic_arith.All;EntityZERO_DETECTisPort(a:Instd_logic_vector(3downto0);Zero:Outstd_logic);End
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度校企联合培养国际化人才协议
- 妇幼保健员多维度评估试题及答案
- 二零二五年度大型商场销售团队劳动合同
- 二零二五年度外架搭设施工安全教育与承包协议
- 二零二五年度数据合规审查与咨询协议
- 二零二五年度商务写字楼租赁合同(含物业管理)
- 疫苗接种注意事项试题及答案
- 高职扩招计算机类考试模拟题(含答案)
- 清明节传统文化知识主题班会22
- 机械设备安全操作培训
- 6.4 生活中的圆周运动 课件 高中物理 人教版必修第二册
- 辽宁省名校联盟2024-2025学年高二下学期3月联考物理试题(含答案)
- 跨学科主题学习 认识东南亚的世界遗产课件 2024-2025学年七年级地理下册(人教版2024)
- 二零二五年度医疗健康产业贷款担保合同
- 2025年安徽医学高等专科学校单招职业适应性测试题库及答案一套
- 山洪灾害防御知识培训课件
- 个案管理系统需求说明
- 2025年赣西科技职业学院单招职业技能测试题库带答案
- 急性ST段抬高型心肌梗死溶栓治疗专家共识2024解读
- 电影《哪吒之魔童降世》主题班会
- 《睡眠的重要性》课件
评论
0/150
提交评论