VHDL经典教程(精简快速入门版)

3 VHDL语言

VHDL: VHSIC Hardware Description Language.

3.1 VHDL语言基础

3.2 VHDL基本结构

3.3 VHDL语句

3.4 状态机在VHDL中的实现

3.5 常用电路VHDL程序

3.6 VHDL仿真

3.7 VHDL综合

HDL----Hardware Description Language

一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。

优点:

HDL设计的电路能获得非常抽象级的描述。如基于RTL(Register Transfer Level)描述的IC,可用于不同的工艺。

HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。HDL设计的电路类似于计算机编程。

常用的HDL语言:VHDL 、Verilog HDL

?VHDL 是美国国防部在20世纪80年代初为实现其高速集成电路硬件VHSIC 计划提出的描述语言;

?IEEE 从1986年开始致力于VHDL 标准化工作,融合了其它

ASIC 芯片制造商开发的硬件描述语言的优点,于93年形成了标

准版本(IEEE.std_1164)。

?1995年,我国国家技术监督局推荐VHDL 做为电子设计自动化硬件描述语言的国家标准。

VHDL 概述:

VHDL

VHSIC Hardwarter Description Language Very High speed integrated circuit VHSIC

VHDL优点:

?覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言;

?VHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解;

?VHDL语言可以与工艺无关编程;

?VHDL语言已做为一种IEEE的工业标准,便于使用、交流和推广。

VHDL语言的不足之处:

设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。

3.1 VHDL语言基础

3.1.1 标识符(Identifiers)

标识符用来定义常数、变量、信号、端口、子程序或参数的名字,由字母(A~Z,a~z)、数字(0~9)和下划线(_)字符组成。

要求:

l首字符必须是字母

l末字符不能为下划线

l不允许出现两个连续的下划线

l不区分大小写

l VHDL定义的保留字(关键字),不能用作标识符

l标识符字符最长可以是32个字符。

注释由两个连续的虚线(--)引导。

关键字(保留字):

关键字(keyword)是VHDL中具有特别含义的单词,只

能做为固定的用途,用户不能用其做为标识符。

例如:ABS,ACCESS,AFTER,ALL,AND,ARCHITECTURE,ARRAY,ATTRIBUTE,BEGIN,BODY,BUFFER,BUS,CASE ,COMPONENT,CONSTANT,DISCONNECT,DOWNTO,ELSE,ELSIF,END,ENTITY,EXIT,FILE,FOR,FUNCTION,GENERIC,GROUP,IF,INPURE,IN,INOUT,IS,LABEL,LIBRARY,LINKAGE,LOOP,MAP,MOD,NAND,NEW,NEXT,NOR ,NOT,NULL,OF,ON,OPEN ,OR ,OTHERS,OUT,PACKAGE,POUT,PROCEDURE ,PROCESS,PURE,RANGE ,RECODE,REM,REPORT,RETURN,ROL,ROR,SELECT,SHARED,SIGNAL,SLA,SLL,SRA,SUBTYPE,THEN,TRANSPORT,TO,TYPE ,UNAFFECTED,UNITS,UNTIL,USE,VARIABLE,WAIT,WHEN,WHILE,WITH,XOR ,XNOR

3.1.2 数据对象(Date Objects)

数据对象包括常量、变量、信号和文件四种类型。

?常量Constant

常量是对某一常量名赋予一个固定的值,而且只能赋值一次。通常赋值在程序开始前进行,该值的数据类型则在说明语句中指明。

Constant 常数名:数据类型:=表达式

Constant Vcc:real:=5.0;--定义Vcc的数据类型是实数,赋值为5.0V Constant bus_width:integer :=8;--定义总线宽度为常数8

常量所赋的值应和定义的数据类型一致;

常量在程序包、实体、构造体或进程的说明性区域内必须加以说明。定义在程序包内的常量可供所含的任何实体、构造体所引用,定义在实体说明内的常量只能在该实体内可见,定义在进程说明性区域中的常量只能在该进程内可见。

?变量Variable

变量只能在进程语句、函数语句和过程语句结构中使用。变

量的赋值是直接的,非预设的,分配给变量的值立即成为当前

值,变量不能表达“连线”或存储元件,不能设置传输延迟量。

变量定义语句:

Variable变量名:数据类型:=初始值;

Variable count: integer 0 to 255:=20;--定义count整数变量,变化

范围0~255,初始值为20。变量赋值语句:

目标变量名:= 表达式;

x:=10.0;--实数变量赋值为10.0

Y:=1.5+x;--运算表达式赋值,注意表达式必须与目标变量的数据类型相同A(3 to 6):=(“1101”);--位矢量赋值

?信号Signal

信号表示逻辑门的输入或输出,类似于连接线,也可以表达存

储元件的状态。信号通常在构造体、程序包和实体中说明。

信号定义语句:

Signal信号名: 数据类型:=初始值

Signal clock:bit :=‘0’;--定义时钟信号类型,初始值为0

Signal count:BIT_VECTOR(3 DOWNTO 0);--定义count为4位位矢量

信号赋值语句:

目标信号名<= 表达式;

x<=9;

Z<=x after 5 ns; --在5ns后将x的值赋予z

3.1.2 数据类型

?VHDL的预定义数据类型

在VHDL标准程序包STANDARD中定义好,实际使用过程中,已

自动包含进VHDL源文件中,不需要通过USE语句显式调用。

l布尔:(Boolean)

TYPE BOOLEAN IS (FALSE, TRUE); --取值为FALSE和TRUE,不是数值,不

能运算,一般用于关系运算符

l位: (Bit)

TYPE BIT IS (‘0’,’1’); --取值为0和1,用于逻辑运算

l位矢量: ( Bit_Vector)

TYPE BIT_VECTOR IS ARRAY (Natural range<>) OF BIT; --基于Bit类型的数

组,用于逻辑运算SIGNAL a:Bit_Vector(0 TO 7);SIGNAL a:Bit_Vector( 7 DOWNTO0)

l 整数:(Integer )

取值范围-(231-1) ~(231-1),可用32位有符号的二进制数表示

variable a :integer range -63 to 63

在实际应用中,VHDL 仿真器将Integer 做为有符号数处理,而

VHDL 综合器将Integer 做为无符号数处理;

要求用RANGE 子句为所定义的数限定范围,以便根据范围来决定表示此

信号或变量的二进制数的位数。

l 字符:(Character )

TYPE CHARACTER IS (NUL, SOH,STX, …, ‘’, ‘!’,…); --通常用‘’引起

来,区分大小写;

l 字符串:(String )

VARIABLE string_var:STRING (1 TO 7);

string_var:=“A B C D ”; --通常用“”引起来,区分大小

写;

l实数:(Real)

取值范围-1.0E38 ~+1.0E38,仅用于仿真不可综合

1.0 --十进制浮点数

8#43.6#e+4 --八进制浮点数

43.6E-4 --十进制浮点数

l时间:(Time)

物理量数据,完整的包括整数和单位两个部分,用至少一个空格隔开,仅用于仿真不可综合;

fs,ps,ns,us,ms,sec,min,hr

l错误等级(Severity Level):

表示系统状态,仅用于仿真不可综合;

TYPE severity_level IS (NOTE、WARNING、ERROR、FAILURE);

?IEEE预定义标准逻辑位与矢量

l标准逻辑位(Std_Logic)

U:Uninitialized;X:Forcing Unkown;0:Forcing 0

1:Forcing 1 Z:High Impedance W:Weak Unknown

L:Weak 0 H:Weak 1 —:Don’t care

l标准逻辑位矢量(Std_Logic_vector)

基于Std_Logic类型的数组;

使用Std_Logic和Std_Logic_Vector要调用IEEE库中的Std_Logic_1164 程序包;就综合而言,能够在数字器件中实现的是“-、0、1、Z”四种状态。

在条件语句中,必须要全面考虑Std_Logic的所有可能取值情况,否则综合器可能会插入不希望的锁存器。

?用户自定义

l TYPE 数据类型名IS 数据类型定义OF 基本数据类型或TYPE 数据类型名IS 数据类型定义

数组:type value_type is array (127 downto0)of integer;

type matrix_type is array (0 to 15, 0 to 31)of std_logic;

枚举:type states is (idle,decision,read,write);

type boolean is (false,true);

type bit is (‘0’,‘1’);

l SUBTYPE 子类型名IS 基本数据类型定义RANGE 约束范围subtype digit is integer range 0 to 9;

3.1.3 数据类型转换

VHDL为强定义类型语言,不同类型的数据不能进行运算和直接赋值。

l类型标记法

Variable A: integer; Variable B: real;

A= integer (B); B=real (A);

l函数法

Conv_interger(A);--由std_logic转换为integer型,在std_logic_unsigned包。

l常数转换法

Signal a: bit; signal b: std_logic;

A<=table(b); --将std_logic型转换为bit型

在“STD_LOGIC_1164”、“STD_LOGIC_ARITH”和

“STD_LOGIC_UNSIGNED”的程序包中提供的数据类型变换函数。

?属性

属性提供的是关于信号、类型等的指定特性。

‘event:若属性对象有事件发生,则生成布尔值“true”,常用来检边沿是否有效。

上升沿:Clock’EVENT AND Clock=‘1’

’range:生成一个限制性数组对象的范围

’range: “0 to n”;’reverse_range:“n downto0”

’left:生成数据类型或数据子类型的左边界值;

’right , ’high, ’low, ’length

?运算符

l算术运算符:+,-,*,/ ,MOD,REM ,SLL ,SRL ,SLA,SRA ,ROL ,ROR ,**,ABS

l关系运算符:=,/=,<,> ,<=,>=

l逻辑运算符:AND,OR,NAND,NOR,XNOR,NOT,XOR

l赋值运算符:<=,:=

l关联运算符:=>

l其他运算符:+,-,&

并置操作符&

SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ; SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ;

...

a <= '1'&'0'&d(1)&'1' ; --元素与元素并置,并置后的数组长度为4 ...

IF a &d = "101011" THEN ... –-在IF条件句中可以使用并置符

?运算符优先级别

逻辑、算术运算符(NOT,**,ABS)

乘法运算符(/ ,MOD,REM,* )

正负运算符:+,-,

加减、并置运算符:+,-,&

关系运算符:=,/=,<,> ,<=,>=

逻辑运算符:AND,OR,NAND,NOR,XNOR,NOT,XOR

VHDL编程的一些心得体会(初学者必看)

VHDL编程的一些心得体会 VHDL是由美国国防部为描述电子电路所开发的一种语言,其全称为(Very High Speed Integrated Circuit) Hardware Description Language。与另外一门硬件描述语言Verilog HDL相比,VHDL更善于描述高层的一些设计,包括系统级(算法、数据通路、控制)和行为级(寄存器传输级),而且VHDL具有设计重用、大型设计能力、可读性强、易于编译等优点逐渐受到硬件设计者的青睐。但是,VHDL是一门语法相当严格的语言,易学性差,特别是对于刚开始接触VHDL的设计者而言,经常会因某些小细节处理不当导致综合无法通过。为此本文就其中一些比较典型的问题展开探讨,希望对初学者有所帮助,提高学习进度。 一.关于端口 VHDL共定义了5种类型的端口,分别是In, Out,Inout, Buffer及Linkage,实际设计时只会用到前四种。In和Out 端口的使用相对简单。这里,我们主要讲述关于buffer和inout使用时的注意事项。 inout和buffer区别 INOUT为输入输出双向端口,即从端口内部看,可以对端口进行赋值,即输出数据。也可以从此端口读入数据,即输入; BUFFER为缓冲端口,功能与INOUT类似,区别在于当需要读入数据时,只允许内部回读内部产生的输出信号,即反馈。举个例子,设计一个计数器的时候可以将输出的计数信号定义为BUFFER,这样回读输出信号可以做下一计数值的初始值。 buffer顾名思义就是缓存,它是作为输出使用的,因为在模块内,是不可以将输出赋值给其他信号的,例如定义b: out std_logic;我们现在要将b赋值给信号a,就会出错,但是如果b的类型为buffer就可以执行操作; inout是双向端口,即可以作为输入也可以作为输出,跟buffer的作用完全不同,要注意的是inout 类型的数据在不作为输入使用时必须被置为高阻“Z”状态,否则它作为输出的功能将不能正确执行。 与Out端口比,Buffer端口具有回读功能,也即内部反馈,但在设计时最好不要使用buffer,因为buffer类型的端口不能连接到其他类型的端口上,无法把包含该类型端口的设计作为子模块元件例化,不利于大型设计和程序的可读性。若设计时需要实现某个输出的回读功能,可以通过增加中间信号作为缓冲,由该信号完成回读功能。 双向端口Inout是四种端口类型中最为特殊的一种,最难以学习和掌握,为此专门提供一个简单程序进行阐述,部分程序如下: ... … ①DataB<=Din when CE=’1’ and Rd=’0’ else ②(others=>’Z’); ③Dout<=DataB when CE=’1’ and Rd=’1’ else ④( others=>’1’ );

基于VHDL语言译码器的设计

基于V H D L语言译码 器的设计 公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]

《EDA技术》课程实验报告 学生姓名:黄红玉 所在班级:电信100227 指导教师:高金定老师 记分及评价: 一、实验名称 实验4:3-8译码器的设计 二、任务及要求 【基本部分】4分 1、在QuartusII平台上,采用文本输入设计方法,通过编写VHDL语 言程序,完成3-8译码器的设计并进行时序仿真。 2、设计完成后生成一个元件,以供更高层次的设计调用。 3、实验箱上选择恰当的模式进行验证,目标芯片为ACEX1K系列 EP1K30TC144-3。 【发挥部分】1分 修改设计,完成3-6译码器的设计,并进行时序仿真。 三、实验程序 library ieee;

use use entity decoder is port(en:in std_logic; a,b,c:in std_logic; y:out bit_vector(7 downto 0)); end entity decoder; architecture art4 of decoder is signal sr:std_logic_vector(2 downto 0); begin sr<=c&b&a; process(sr)is begin case sr is when"000"=>y<="00000001"; when"001"=>y<="00000010"; when"010"=>y<="00000100"; when"011"=>y<="00001000"; when"100"=>y<="00010000"; when"101"=>y<="00100000"; when"110"=>y<="01000000"; when"111"=>y<=""; when others=>y<="00000000"; end case;

VHDL语言快速入门必读

一·1.数据类型BIT与STD_LOGIC有什么区别。 BIT类型的取值只能是0或1,没有不定状态X,也没有高阻态。 STD_LOGIC类型可以有9种不同的值,包括U-初始值,X-不定,0-0,1-1,Z-高阻态,W-弱信号不定,L-弱信号0,H弱信号1.‘—’不可能情况。 2.信号和变量的异同。 信号是全局量,只要在结构体中已经定义,就可以在结构体中的所有地方使用,信号的赋值符号是”<=”,信号带入时可以附加延时,信号实际带入过程和带入语句的处理时分开进行的。 变量是局部量,只能在进程,子程序内部定义和使用,变量的赋值符号是“:=”,变量的赋值是立即执行的,不能附加延时。 3.VHDL语言的基本顺序语句和并行语句有哪些? 双性语句:信号带入语句 顺序语句:WHAT语句,断言语句,变量赋值语句,IF语句,CASE语句,LOOP语句,NEXT语句,EXIT语句,过程调用语句,NULL语句。 并行语句:进程(PROCESS)语句,条件带入语句,选择信号带入语句,并发过程调用语句,块语句。 4.用VHDL语言进行硬件设计的流程是什么? 1.分析实际的需求2确定芯片的功能3.用VHDL 语言描述改元件4.编译,如果有错误修改后再编译直至编译通过。5.仿真,如果仿真不符合设计要求,修改程序直至仿真通过。6.测试7.综合,8.下载到实际的芯片上。 5.基本的硬件描述语言的种类有哪些? 美国国防部开发的VHDL。 Verilog公司开发的Verilog-HDL. 日本电子工业振兴协会开发的UDL/I语言。 6.VHDL语言中包含的库的种类有哪些?库:是经编译后的数据的集合,它存放包集合定义,实体定义,构造体定义,和配置定义。库的种类:1.IEEE库,2.STD库,3.面向ASIC 的库,4.WORK库,5.用户定义库 7.IEEE库中所包含的基本类型转换函数有 1.包含程序所用的库 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; 2.实体声明 ENTITY fp IS PORT(); END ENTITY fp; 3.结构体,具体功能的实现 ARCHITECTURE a OF fp IS BEGIN END ARCHITECTURE a; 9.VHDL的程序子结构有哪些? 进程(PROCESS)顺序语句,块(BLOCK)并行语句,过程(PROCEDURE)顺序语句,函数(顺序语句)。 10.简述when-else和if-else的区别? If-else是顺序语句所以只能在进程内部使用,可以没有else语句,可以进行嵌套。有自身值带入的描述,能组成锁存电路。 When-else是并行语句,在结构体内使用,必须要有else语句,不能进行嵌套,没有自身值带入的描述,不能组成锁存电路。 11.什么是ASIC,ASIC的特点是什么?ASIC是Application Specific Integrated Circuit 的英文缩写,在集成电路界被认为是一种为专门目的而设计的集成电路。 ASIC的特点是面向特定用户的需求,ASIC在批量生产时与通用集成电路相比具有体积更小、功耗更低、可靠性提高、性能提高、保密性增强、成本降低等优点。 12.逻辑电平有哪些?

基于VHDL语言的EDA实验报告(附源码)

EDA 实验报告 ——多功能电子钟 姓名:张红义 班级:10级电科五班 学号:1008101143 指导老师:贾树恒

电子钟包括:主控模块,计时模块,闹钟模块,辅控模块,显示模块,蜂鸣器模块,分频器模块。 1.主控模块: 主要功能:控制整个系统,输出现在的状态,以及按键信息。 源代码: libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_arith.all; useieee.std_logic_unsigned.all; entity mc is port(functionswitch,k,set,lightkey: in std_logic; chose21,setout: out std_logic; lightswitch:bufferstd_logic; modeout,kmodeout : out std_logic_vector(1 downto 0); setcs,setcm,setch,setas,setam,setah:outstd_logic); end mc; architecture work of mc is signalmode,kmode:std_logic_vector(1 downto 0); signal light,chose21buf:std_logic; signalsetcount:std_logic_vector(5 downto 0); begin process(functionswitch,k,set,lightkey) begin iffunctionswitch'event and functionswitch='1' then mode<=mode+'1'; end if; iflightkey'event and lightkey='1' then lightswitch<=not lightswitch; end if; if mode="01" thenchose21buf<='0'; else chose21buf<='1'; end if; ifk'event and k='1' then if mode="01" or mode="11" then kmode<=kmode+'1'; end if;end if; if set='1' then if mode = "01" then ifkmode="01" then setcount<="000001"; elsifkmode="10" thensetcount<="000010"; elsifkmode="11" then setcount<="000100";

基于VHDL语言的简易洗衣机控制器

电子课程设计 ——简易洗衣机控制器设计 学院: 班级: 姓名: 学号: 指导老师: 2013年12月

目录 第一部分:设计任务与要求 (1) 第二部分:总体框图 (1) 第三部分:选择器件 (2) 第四部分:功能模块 (3) 4.1时间预置编码寄存模块(settime) (3) 4.2减法计数器模块(counter) (4) 4.3数码管显示模块(showtime) (7) 4.4时序电路模块(analyse) (9) 4.5译码器模块(move)……………………………………… 1 1 第五部分:总体设计电路图 (13) 5.1总体(顶层)设计电路图 (13) 5.2顶层文件仿真 (13) 5.3管脚分配图 (14) 5.4硬件实验效果图 (14) 第六部分:课程设计心得体会 (15)

简易洗衣机控制器设计 一、设计任务与要求 设计一个洗衣机洗涤程序控制器,控制洗衣机的电动机按下图所示的规律运 转: 时间到 用两位数码管预置洗涤时间(分钟数),洗涤过程在送入预置时间后开始运转,洗涤中按倒计时方式对洗涤过程作计时显示,用LED 表示电动机的正、反转,如果定时时间到,则停机并发出音响信号。 二、总体框图 RUN REV PAUSE time_over clk K5 start K6 load K1 K2 K3 K4 各个部分的具体功能描述如下: (一)预设时间和编码电路(settime ):接受用户通过按钮预置的时间信息,编码 译码驱动模块(move) clk out_1 out_2 start 时序电路模块(analyse) clk time_over start 十进制减法计数器模块(counter) 洗涤预置时间编码寄存电路模块(settime) 报警信号 时间显示模块(showtime ) 定时启动 停止 正转 暂停 反转 暂停

基于VHDL语言的秒表综合设计

设 计 报 告 课程名称 _______ 设计题目 _______ 指导老师 _______ 学 生 _______ 学 号 ___ 现代电子技术综合实验 数字式秒表设计与实现

目录 1 引言…….......................................................................................... 1.1课程设计的内容及要求.................................................................. 2 VHDL简介…….............................................................................. 2.1硬件描述语言——VHDL……...................................................... 2.1.1 VHDL语言的特点……............................................................. 2.1.2 VHDL语言的设计流程……..................................................... 3 秒表设计过程……............................................................................ 3.1原理框图…….................................................................................. 3.2设计思路模块化….......................................................................... 3.3模块的功能简述……...................................................................... 3.3.1分频器…..................................................................................... 3.3.2计数器……................................................................................. 3.3.3数据锁存器…….......................................................................... 3.3.4显示译码模块….......................................................................... 3.3.5控制模块…….............................................................................. 3.3.6按键消抖模块……...................................................................... 3.3.7顶层文件…….............................................................................. 4 模块电路仿真……................................................................................ 4.1 分频器 4.2计数器

VHDL经典教程(精简快速入门版)

3 VHDL语言 VHDL: VHSIC Hardware Description Language. 3.1 VHDL语言基础 3.2 VHDL基本结构 3.3 VHDL语句 3.4 状态机在VHDL中的实现 3.5 常用电路VHDL程序 3.6 VHDL仿真 3.7 VHDL综合

HDL----Hardware Description Language 一种用于描述数字电路的功能或行为的语言。目的是提为电路设计效率,缩短设计周期,减小设计成本,可在芯片制造前进行有效的仿真和错误检测。 优点: HDL设计的电路能获得非常抽象级的描述。如基于RTL(Register Transfer Level)描述的IC,可用于不同的工艺。 HDL设计的电路,在设计的前期,就可以完成电路的功能级的验证。HDL设计的电路类似于计算机编程。 常用的HDL语言:VHDL 、Verilog HDL

?VHDL 是美国国防部在20世纪80年代初为实现其高速集成电路硬件VHSIC 计划提出的描述语言; ?IEEE 从1986年开始致力于VHDL 标准化工作,融合了其它 ASIC 芯片制造商开发的硬件描述语言的优点,于93年形成了标 准版本(IEEE.std_1164)。 ?1995年,我国国家技术监督局推荐VHDL 做为电子设计自动化硬件描述语言的国家标准。 VHDL 概述: VHDL VHSIC Hardwarter Description Language Very High speed integrated circuit VHSIC

VHDL优点: ?覆盖面广,系统硬件描述能力强,是一个多层次的硬件描述语言; ?VHDL语言具有良好的可读性,既可以被计算机接受,也容易被人们所理解; ?VHDL语言可以与工艺无关编程; ?VHDL语言已做为一种IEEE的工业标准,便于使用、交流和推广。 VHDL语言的不足之处: 设计的最终实现取决于针对目标器件的编程器,工具的不同会导致综合质量不一样。

基于VHDL语言38译码器

3-8译码器的设计 1 设计目的与要求 随着社会的进一步发展,我们的生活各个地方都需要计算机的参与,有了计算机,我们的生活有了很大的便利,很多事情都不需要我们人为的参与了,只需要通过计算机就可以实现自动控制。由此,计算机对我们的社会对我们每个人都是很重要的。所以我们要了解计算机得组成,内部各种硬件,只有了解了计算机基本器件已经相应的软件,才能促进社会的发展。编码器和译码器的设计是计算机的一些很基础的知识,通过本次对于编码器和译码器的设计,可以让我知道究竟这种设计是如何实现的,这种设计对我们的生活有什么帮助,这种设计可以用到我们生活的哪些方面,对我们的各种生活有什么重大的意义。 1.1 设计的目的 本次设计的目的是通过简单的译码器的设计掌握基本的计算机的一些有关的知识,通过查资料已经自己的动手设计去掌握EDA技术的基本原理已经设计方法,并掌握VHDL硬件描述语言的设计方法和思想。以计算机组成原理为指导,通过将理论知识,各种原理方法与实际结合起来,切实的亲手设计,才能掌握这些非常有用的知识。通过对编码器和译码器的设计,巩固和综合运用所学知识,提高IC设

计能力,提高分析、解决计算机技术实际问题的独立工作能力。也能通过这种自主设计,增强自己的动手能力,将理论知识切实应用的能力,这对我们将来的发展是很有帮助的。 1.2 设计要求 根据计算机组成原理中组合逻辑电路设计的原理,利用VHDL设计计算机电路中译码器的各个模块,并使用EDA 工具对各模块进行仿真验证和分析。译码器由三-八译码器为实例代表。 关键词:输入、输出、译码 2 VHDL的简单介绍 2.1 VHDL的简介 VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言。 VHDL翻译成中文就是超高速集成电路硬件描述语言,主要是应用在数字电路的设计中。目前,它在我过的应用多数是用在FPGA/CPLD/EPLD的设计中。当然在一些实力较为雄厚的单位,它也被用来设计ASIC。VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式、描述风格以及语法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部

VHDL基础入门学习

第二章 VHDL基本数据类型与命令语句 第二章 VHDL基本数据类型与命令语句
2.1 VHDL基本数据类型 2.2 VHDL数据对象定义 2.3 并行同时语句( When-Else, With-Select ) 2.4 顺序语句一(Process,If-Else,Wait) 2.5 顺序语句二(Case-When,Null)
1

2.1 基本数据类型 (逻辑信号、数值信号) 在VHDL中每一个数据对象都必须具有确 定的数据类型。只有在相同数据类型的数据对 象之间,才能进行数据交换。 ⑴ ⑵ ⑶ ⑷ ⑸ 布尔代数数据类型(BOOLEAN); 位逻辑数据类型(BIT); 位逻辑序列数据类型(BIT_VECTOR); 标准逻辑数据类型(STD_LOGIC); 标准逻辑序列数据类型(STD_LOGIC _VECTOR);
2

⑹ ⑺ ⑻ ⑼ ⑽
整数数据类型(INTEGER); 实数数据类型(REAL); 字符串数据类型(STRING); 字符数据类型(CHARACTER); 无符号整数数据类型(UNSIGNED);
今后在逻辑设计中最常用到两种:标准逻辑 数据类型 STD_LOGIC 和标准逻辑序列数据类型 STD_LOGIC _VECTOR。 其语法格式:在实体中是跟在端口模式 (方 向) 后面,在结构体中是跟在数据对象后面。
3

2.1.1 逻辑信号的数据类型 ⑴ 布尔代数数据类型(BOOLEAN) 布尔代数数据类型(BOOLEAN)属于双值数据 类型,其值只有“TRUE”(真)、“FALSE”(假) 两种 状态,常用来表示关系运算和关系运算的结果。 ⑵ 位逻辑数据类型(BIT) 位逻辑数据类型(BIT)也属于双值数据类型, 其值只有 ‘ 1 ’、 ' 0 ' (用单引号表示)两种状态,常 用来表示某一管脚的逻辑值。
4

基于VHDL语言的VGA程序

library ieee; use ieee.std_logic_1164.all; entity vgactr is port( c lk:in std_logic; rst:in std_logic; red:out std_logic; green:out std_logic; blue:out std_logic; H_Sync:out std_logic; V_Sync:out std_logic); end vgactr; architecture behavioral of vgactr is signal cnt_H:integer range 0 to 799; signal cnt_V:integer range 0 to 520; signal clk_H:std_logic:='0'; signal clk_V:std_logic:='0'; signal colorbuf:std_logic_vector(0 to 2); begin red<=colorbuf(0); green<=colorbuf(1); blue<=colorbuf(2); --50MHz分频为25MHz,作为水平扫描信号的时钟process(clk) variable n:integer range 0 to 1; begin if rising_edge(clk)then clk_H<=not clk_H; end if; end process; --水平扫描计数,并产生竖直扫描计数的时钟 process(clk_H,Rst) begin if rst='1' then cnt_H<=0; clk_V<='1'; elsif rising_edge(clk_H)then if cnt_H=799 then cnt_H<=cnt_H+1; end if;

#基于VHDL语言的数据采集系统

用VHDL语言设计数据采集系统 摘要 随着计算机技术的发展和普及,数字设备正越来越多地取代模拟设备,将模拟信号 转换成数字信号以及将数字信号转换成模拟信号就成了重要环节。本系统以多路数据的 采集及监测为例,介绍了可编程逻辑器件在模数转换、数模转换及数据监控及处理中的 设计方法。实现数据采集的方法有很多,如单片机、CPLD、C语言等,但相比各种方法,运用VHDL硬件描述语言开发的数据采集系统具有具有设计方便高效、体积小、功耗低、可靠性高、易于修改、设计周期短等特点。VHDL硬件描述语言采用自顶而下的设计方法 可以对模型进行及时修改,以改进系统或子系统的功能,更正设计错误,从而提高目标 系统的工作速度,减小面积耗用,降低功耗和成本等。本文介绍了基于Altera公司的 集成开发环境MaxplusII,使用VHDL设计开发数据采集系统的基本方法。 [关键词] VHDL ADC0809 DAC0832 EDA 数据采集; Abstract With the development of computer technology and popularization, Digital devices are increasingly replacing analog equipment,and converted the analog signals into digital signals, as well as digital signal into analog signal will become an important link.for example,this syestem depend on one multi-channel data acquisition and monitoring,introduce a programmable logic device in the analog-digital conversion, digital-analog conversion and data monitoring with handling methods in the design. There are many ways to collect data, such as SCM, CPLD, C language,and so on. But compared with various methods,using the VHDL hardware description language to design the data acquisition system is the best. Because of its facilitate ,efficient, small size, low power consumption, high reliability, easy to modify, and shorter design cycle characteristics. VHDL hardware description language using the top-down design method ,that can be the model for timely changes to improve the system or subsystem functions, design error correction, so as to enhance the work of the target system’s speed, reducing the area of cons umption, and lower the power consumption costs. In this paper,we introduce a integrated development environment which based on Altera's MaxplusII,and the basic method to develop a data acquisition system design by using VHDL language. [Key words]:VHDL EDA ADC0809 DAC0832 Data Acquisition 目录 前言 (1) 1 EDA技术及开发环境 (3) 1.1 EDA技术 (3) 1.2 VHDL (4)

modelsim使用入门(VHDL_

modelsim使用实例(VHDL) 标签: modelsim仿真testbench FPGA 看了几天的modelsim以及如何在quartusII中调用,浏览了N个网页,尝试了N次,......终于初步完成。下面是入门部分介绍。 modelsim是专业的仿真软件,仿真运行速度比同类的其他仿真软件都要快很多。Quartus 自己都不再做仿真器了,普遍使用modelsim,自有其缘由。 这里用的是modelsim-altera(6.6d)版本,与quartus II 11.0搭配。据说Altera公司推出的Quartus软件不同版本对应不同的modelsim,相互之间不兼容。某些功能齐全的modelsim版本可以进行两种语言的混合编程, modelsim-altera只能支持一种语言进行编程(VHDL或者Verilog选其一)。 1、新建工程 打开modelsim-->file-->new-->project 新建工程,输入工程名,文件存放路径后(不可直接放在某盘下,必须放入文件夹中),进入下一步。 在主体窗口下方出现project标签。见下图。

2、新建文件 --create new file:输入名称div10,选择语言VHDL --关闭对话框 新的工程文件将会在工程窗口出现。 3、写入源程序(VHDL) 双击div10.vhd,打开文本编辑器。 实例代码如下(一个十分频的VHDL源代码):library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; use ieee.std_logic_unsigned.all; entity div10 is --实体要与工程名相同 port(clk :in std_logic;

基于VHDL语言的电子表毕业设计

目录 一、设计要求 (1) 二、设计思路 (1) 三、程序设计 (2) 1.置数还是计数 (2) 2.在哪一位置数 (2) 3.计数单位 (2) 4.秒 (3) 5.分 (4) 6.时 (4) 7.数码管显示 (5) 四、仿真结果 (6) 五、实验结果 (8) 1.连线 (8) 2.设计结果 (8) 六、实验心得 (9) 电子表源程序 (10)

设计制作电子表 一、设计要求 利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。 二、设计思路 电子表其实质为计数器,计数单位为1秒。由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。要让结果显示出来,则用七段式数码管输出显示计数值。此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。设计思路如下图所示:

三、程序设计 1.置数还是计数 电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。 2.在哪一位置数 该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。 ①当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数,不 置数。 ②当p2p1p0为“001”时,秒低位置数。 ③当p2p1p0为“010”时,秒高位置数。 ④当p2p1p0为“011”时,分低位置数。 ⑤当p2p1p0为“100”时,分高位置数。 ⑥当p2p1p0为“101”时,时低位置数。 ⑦当p2p1p0为“110”时,时高位置数。 关键程序: if t'event and t='1' then if en='0' then 计数语句 elsif en='1' and p="001" then s0<=num; end if; end if; 3.计数单位 首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。程序中对clk进行512分频,所以需要一个相近的脉冲,试验箱上的CLK4的频

vhdl基础复习题

一、名词解释 1. VHDL(Very high speed intergated circuit Hardware Description Language):非常高速集成电路的硬件描述语言。 2.实体说明:用来描述电路器件的外部情况及各信号端口的基本性质。 3.结构体:通过若干并行语句来描述设计实体的逻辑功能(行为描述)或内部电路结构(结构描述),从而建立设计实体输出与输入之间的关系。 4.类属表:用来确定设计实体中定义的局部常数,用以将信息参数传递到实体,用类属表指明器件的一些特征。最常用的是上升沿和下降沿之类的延迟时间,负载电容、驱动能力和功耗等。 5.数据对象:数据对象是数据类型的载体,共有三种形式的对象:Constant(常量)、Variable(变量)、Signal(信号)。 6.并行语句:并行语句有五种类型,可以把它们看成结构体的五种子结构。这五种语句结构本身是并行语句,但内部可能含有并行运行的逻辑描述语句或顺序运行的逻辑描述语句,如进程内部包含的即为顺序语句。五种语句结构分别为块语句、进程语句、信号赋值语句、子程序调用语句和元件例化语句。 7.程序包:程序包可定义一些公用的子程序、常量以及自定义数据类型等。各种VHDL编译系统都含有多个标准程序包,如Std-Logic-1164和Standard程序包。用户也可已自行设计程序包。程序包由两个独立的单元组成:程序包声明单元和程序包体单元构成。 二、写出下列缩写的中文(或者英文)含义 1.ASIC 专用集成电路 2.FPGA 现场可编程门阵列 页脚内容1

3.IP 知识产权核(软件包) 4.JTAG 联合测试行动小组 5.VHDL 超高速集成电路硬件描述语言 6.FPGA 现场可编程门阵列 7.RTL 寄存器传输级 8.SOPC 可编程片上系统 EAB 嵌入式阵列块 HDL 硬件描述语言 9.LPM 参数可定制宏模块库 10.RTL 寄存器传输级 11.UART 串口(通用异步收发器) 12.ISP 在系统编程 13.IEEE 电子电气工程师协会 14.ASIC 专用集成电路 https://www.360docs.net/doc/5b3377027.html,B 逻辑阵列块 16.IP核:是指完成某种功能的设计模块。 17.FPGA:现场可编程门阵列。 18.SOC:系统芯片,是指把一个完整的系统集成在一个芯片上。 19.HDL:硬件描述语言,是一种用文本形式来描述和设计电路的语言。 20.综合:指的是将较高层次的设计描述自动转化为较低层次描述的过程。能够将原理图 页脚内容2

#基于VHDL语言的数字钟设计

一.程序代码及其仿真: 1.cnt60子模块代码: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; ENTITY V_cnt60 IS PORT ( clk :IN std_logic; Q0,Q1,Q2,Q3,Q4,Q5,Q6,QC :OUT std_logic); END V_cnt60; ARCHITECTURE func OF V_cnt60 IS SIGNAL count1 :std_logic_vector(3 downto 0); SIGNAL count2 :std_logic_vector(3 downto 0); SIGNAL carryin:std_logic; BEGIN Q0 <= count1(0); Q1 <= count1(1); Q2 <= count1(2); Q3 <= count1(3); Q4 <= count2(0); Q5 <= count2(1); Q6 <= count2(2); QC <= carryin; process(clk) BEGIN if (clk'event AND clk='1') then carryin<='0'; if(count1="1001")then count1<="0000"; count2<=count2+1; else count1<=count1+1; END if; if(count2="0101"AND count1="1001")then count2<="0000"; count1<="0000"; carryin<='1'; END if; END if; END process; END func; cnt60仿真波形:

基于VHDL语言的电子表

基于VHDL语言的电子表

1.上述三题任选一题,采用标准的作业考核类封面,A4打印。 2.第一题40分,液晶+3分,个性化界面+3分。 3.第二题45分,幅度调整+3分,频率测量及显示+5分。 4.第三题48分,频率分段设置+3分,频率微调+5分,频率范围酌情加分。 5.雷同的程序和算法满分值只计原题分值的三分之二,将依据设计报告 的质量和实验结果的描述计分。设计上的创新会酌情加分,实现上的 偏离会酌情扣分。 6.本门课程成绩中,实验操作和实验报告占50%,本次作业考核占50%。

目录 一、设计要求 (1) 二、设计思路 (1) 三、程序设计 (2) 1.置数还是计数 (2) 2.在哪一位置数 (2) 3.计数单位 (2) 4.秒 (3) 5.分 (4) 6.时 (4) 7.数码管显示 (5) 四、仿真结果 (6) 五、实验结果 (8) 1.连线 (8) 2.设计结果 (8) 六、实验心得 (9) 电子表源程序 (10)

设计制作电子表 一、设计要求 利用VHDL语言设计一个电子时钟,可以显示时、分、秒,具有时间设置功能,要求走时误差不大于每天10秒。可采用数码管或液晶显示,最好设计出个性化显示界面。 二、设计思路 电子表其实质为计数器,计数单位为1秒。由秒,分,时组成,秒和分是60进制,用十进制和六进制组成,时是24进制,直接设计一个24进制计数器即可。要让结果显示出来,则用七段式数码管输出显示计数值。此电子表需要有置数功能,加一个控制开关,当开关为低电平时计数,当开关为高电平时置数。设计思路如下图所示:

三、程序设计 1.置数还是计数 电子表有计数和指数两种状态,工作时执行计数还是执行置数则由一控制使能端EN决定,当EN为低电平时,电子表计数,当EN为高电平时,电子表置数。 2.在哪一位置数 该电子表有秒低位,秒高位,分低位,分高位,时低位,时高位组成,共有六位,置数由位选决定给哪一位置数。设置一个三位的二进制开关p2,p1,p0,通过编码电路实现选择置数位。 ①当p2p1p0为“000”时,不选择任何位,此时电子表只是停止计数, 不置数。 ②当p2p1p0为“001”时,秒低位置数。 ③当p2p1p0为“010”时,秒高位置数。 ④当p2p1p0为“011”时,分低位置数。 ⑤当p2p1p0为“100”时,分高位置数。 ⑥当p2p1p0为“101”时,时低位置数。 ⑦当p2p1p0为“110”时,时高位置数。 关键程序: if t'event and t='1' then if en='0' then 计数语句 elsif en='1' and p="001" then s0<=num; end if; end if; 3.计数单位 首先脉冲频率要足够大,提供一个较快的扫描频率,时数码管稳定地显示计数值。计数单位为1秒,对脉冲clk 进行分频,得到周期为1秒的计数单位t。

基于VHDL语言的数字钟设计

信息与通信工程学院 数字电路与逻辑设计 实验题目:基于VHDL语言的数字钟设计 班级: 姓名: 学号: 日期: 指导教师:

一.摘要 数字钟是一个将“时”、“分”、“秒”显示于人的视觉器官的计时装置。它的基本功能是计时,计时周期为24小时,显示满刻度23时59分59秒;或者计时周期为12小时并配有上下午指示,显示满刻度为11时59分59秒,通过六个七段数码管显示出来。 本实验主要在理论分析和具体的软硬件实现上,基于VHDL语言编写源代码,使用软件Quartus II 进行处理,再配合具体电路连接,实现一个多功能的数字钟。 关键词:数字钟;VHDL语言;七段数码管 二.设计任务要求 设计实现一个数字钟。 1.24小时制,显示刻度从0:0:0到23:59:59 。 2.12小时制,显示刻度从0:0:0到11:59:59 。 3.12/24小时制可切换,12小时制下上下午有不同显示(上午发光二极管不亮, 下午发光二极管亮)。 4.可手动校对时间,能对时和分进行校正。 5.整点报时功能。 6.闹铃功能,可设置闹铃时间,当计时到预定时间时,蜂鸣器发出闹铃信号, 闹铃时间为5秒,可提前终止闹铃。 7.可认为设置时间为倒计时模式 8.可切到屏保模式,六个数码管显示为“supper”字样。 三.设计思路和总体设计框图 1.设计思路 程序设计主要分为四个模块,第一部分,做分频器,分出一秒的时钟用来计数,再分出一个中频时钟用来扫描显示数码管,我选择的频率是50kHZ;第二部分,做计数器,秒随时钟沿计数进1,分钟随着秒计数60次进一,而小时,由于有12/24小时制的切换,时的计数有两个信号来进行,一个信号hour1是分60进一在0到23循环计数,另一个信号hour2是分60进一在0到11循环计数;第三部分,做扫描显示六个七段数码管,通过选通信号6矢量cat来依次使六个数码管亮,数码管每两位对应相应的时分秒;第四部分,其他输入输出单元,比如数字钟的时间修正,闹铃等,这些都是基于前三个部分,做起来难度不大。 设计的关键是做好计数器和数码管显示,这是本实验最核心的部分。

相关文档
最新文档