vhdl学习笔记
VHDL学习笔记
VHDL学习笔记一、VHDL简介VHDLVHDL(Very High Speed Hardware Description Language)超高速硬件描述语言。
VHDL是工业标准的文本格式语言,支持仿真和综合,是一种并发执行的语言。
VHDL支持结构化设计和TOP-DOWN设计方法。
其描述与工艺无关,支持多风格的描述方法。
VHDL的历史:•1982年,诞生于美国国防部赞助的VHSIC(Very High Speed Integrated Circuit)项目。
•1987年底,VHDL被IEEE和美国国防部确认无标准硬件描述语言,即IEEE-1076(简称87版)•1993年,IEEE对VHDL进行了修订,共不了新版本的VHDL,即IEEE标准的1076-1993(1164)版•1996年,IEEE-1076.3成为VHDL综合标准。
VHDL的基本设计单元1.Library和Package(库和程序包) --库主要存放已经编译过的实体、结构体、程序包和配置; --程序包主要用来存放各个设计都能共享的数据类型、子程序说明、属性说明、元件说明等部分。
2.Entity(实体)--用来说明模型的外部特征3.Architecture(结构体/构造体)--来定义模型的功能VHDL基本设计单元(例子)例:用VHDL语言设计一个2选1的数据选择器--实体声明 entity mux21 is port(a,b:in bit;--输入-数据(bit类型) s:in bit;--输入-选择信号(bit类型) y:out bit--输出(bit类型) ); end entity mux21; --结构体(实体内部逻辑) architecture one of mux21 is signal d,e:bit;--临时中间变量 begin d<=a and (not s); --左边三行可以用下面的语句代替。
e<= b and s; --y<= a when s=’0’ else y<= d or e; -- b; end architecture one;二、VHDL结构库和程序包•库库是专门用于存放预先编译好的程序包的地方,对应一个文件目录,程序包的文件就放在此目录中,其功能相当于共享资源的仓库,所有已完成的设计资源只有存入一些“库”内才可以被其他实体共享。
最新VHDL必须掌握的知识点和相关例题整理
VHDL总复习之必须要掌握的知识点和相关例题目录VHDL总复习之必须要掌握的知识点和相关例题 (1)1.VHDL语言的基本设计实体和完整的VHDL语言程序的结构 (2)2.进程(PROCESS)语句的结构 (2)3.VHDL语言子程序的结构 (2)(1).过程(Procedure) (2)(2).函数(Function) (2)4.过程与函数的主要区别 (3)5.进程和子程序中使用的语句 (3)6.VHDL语言中客体的概念及使用范围 (3)7.信号和变量的区别及作用范围 (3)8.VHDL语言的数据类型和运算操作 (4)9.VHDL语言构造体的三种描述方式 (4)PONENT(元件)语句和COMPONENT—INSTANT(元件例示)语句的功能和书写格式 (5)11.VHDL语言的主要描述语句的功能、使用场合和语法格式 (5)12.VHDL语言的命名规则 (6)13.VHDL语言的数值类属性描述 (6)14.VHDL语言的信号属性函数 (7)15.数值系统的定义方法,各种状态的含义 (7)16.采用有限状态机进行电路设计的基本方法 (7)17.仿真Δ延时引入的原因和对并发语句仿真结果的影响 (8)18.逻辑综合的概念与主要步骤 (8)19.运用VHDL语言和FPGA进行电路设计的主要步骤 (8)VHDL的全称以及利用VHDL设计硬件电路所具有的特点Very High Speed Integrated Circuit Hardware Description Language (超高速集成电路硬件描述语言)(1)设计文件齐全、方法灵活、支持广泛(2)系统硬件描述能力强(3)VHDL语言可以与工艺无关编程(4) VHDL语言标准、规范、易于共享和复用1.VHDL语言的基本设计实体和完整的VHDL语言程序的结构一个VHDL语言的基本设计实体由实体说明和构造体两个部分构成;一个完整的VHDL 语言程序包含5个部分:实体、构造体、配置、包集合(程序包)和库。
VHDL笔记
VHDL笔记1.Error: Run Generate Functional Simulation Netlist (quartus_map newadd --generate_functional_sim_netlist) to generate fun这个是因为运行了功能仿真,默认是时序仿真。
在进行功能仿真前,要生成功能仿真网表的。
在processing菜单下,有个Generate Functional Simulation Netlist 选项,运行下这个之后,在点击开始仿真的按钮就不会报错了2.Error: Can't simulate mismatched node types是由于在两个vhdl文件之间发生重名,而且修改后要重新建立波形文件。
因为原来的变量并未随着程序中修改而改变。
3.在quartus中一个工程包含多个文件时,要仿真一个文件时,把该文件设置成顶层文件!(project中)4.vhdl中变量(variable)和信号(signal)的区别信号(signal)变量(variable)赋值: <= :=定义:在结构体中在进程中适用范围:全局某个进程中延迟:有无赋值:在进程结束时立即赋值注意几点:1、变量是在进程结束的时候赋值,所以你在进程中多次赋值只取最后一次2、因为fpga是个process并行处理,所以一个变量只能在一个进程中赋值,否则会出错。
3、: = 是变量的赋值方式,<=是信号的赋值方式5.VHDL语言怎么生成原理图quartus ii中,当你编写好某一元件的代码后(譬如是一个2选1选择器)按如下操作:①file→New,选block diagram/schematic创建原理图文件,用save as保存一下②回到编写的代码(譬如一个2选1选择器的VHDL代码)页面,选file→create/update→create symbol files for current file,把你编写的代码封装成一个元件。
VHDL学习笔记
第二章语法基础1、基本标识符不区分大小写2、扩展标识符与基本标识符不同,例如:\COMPUTER\与Computer和computer都不相同。
3、VHDL语言中的对象有4类:常量(Constant)、信号(Signal)、变量(Variable)和文件(File)。
4、VHDL语言中的数据类型有5类:标量类型(Scalar Types)、复合类型(Composite Types)、存取类型(Access Types)、文件类型(File Types)和隐含类型(Protected Types)。
5、package封装库的时候可以将所有的程序包封装放在单独的一个.vhd文件内。
(而不是直接单独编译这个.vhd文件)这样操作也是可以调用封装库的。
6、在信号赋值中,当在同一个进程中同一个信号赋值目标有多个赋值源时,信号赋值目标获得的是最后一个赋值源的赋值,其前面相同的赋值目标不作任何变化;特别注意:信号赋值发生在一个进程结束时。
7、VGA使用时要把不用的Blank_n和sync_n都默认接地,不然会出现叠影。
8、时钟PLL的不合理使用会影响到其他区域功能块的数据。
9、网口经88e1111在未接收到数据的时候,在RGMII模式下默认为”1101”输出,即x‘D’;复位的状态下是x’5’;10、VGA显示时,要严格按照VGA的显示标准要求;例如:640*480@60Hz的输入频率必须为25Mhz左右,以满足显示要求,频率过低VGA将没有响应,频率过高将显示输入信号超过范围。
11、vhdl中信号和变量在描述和使用时有哪些主要区别:符号不同:变量:=信号<=延时:变量无延时信号有延时位置:娈量在PROCESS信号ARCHITECTUUE SIGNAL BEGIN信号可以是全局量,只要在构造体中已定义,那么构造体内的所有地方都可以使用;变量是局部量,只能在进程、子程序中定义和使用。
如果将结果带出外部,则必须将变量付给一个信号量才行。
VHDL读书笔记
读书笔记本论文用VHDL硬件描述语言在MAX+PLUSⅡ的开发环境中进行所要设计的数字频率计。
使设计更加简单,易于调试和修改。
MAX+PLUSⅡ和QuartusⅡ都是支持VHDL语言计输入形式的软件,内嵌自有的综合器以及仿真器,可以完成从设计输入到硬件配置的完整PLD设计流程。
MAX+PLUSⅡ(Multiple Array and Programming Logic User System)开发工具是Altera公司推出的一种EDA工具,具有灵活高效、使用便捷和易学易用等特点。
Altera公司在推出各种CPLD的同时,也在不断地升级相应的开发工具软件,已从早起的第一代A+PLUS、第二代MAX+PLUS发展到第三代MAX+PLUSⅡ和第四代Quartus。
使用MAX+PLUSⅡ软件,设计者无需精通器件内部的复杂结构,只需用业已熟悉的设计输入工具,如硬件描述语言、原理图等进行输入即可,MAX+PLUSⅡ就会自动将设计转换成目标文件下载到器件中去。
在Max+plusⅡ上可以完成设计输入、元件适配、时序仿真和功能仿真、编程下载整个流程,它提供了一种与结构无关的设计环境,是设计者能方便地进行设计输入、快速处理和器件编程。
Quartus II 是最高级和复杂的,用于system-on-a-programmable-chip (SOPC)的设计环境。
QuartusII提供完善的 timing closure 和LogicLock™ 基于块的设计流程。
QuartusII design是唯一一个包括以timing closure 和基于块的设计流为基本特征的programmable logic device (PLD)的软件。
Quartus II 设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmed devices开发的统一工作流程。
Quartus II可以在XP、Linux以及Unix上使用,除了可以使用Tcl脚本完成设计流程外,提供了完善的用户图形界面设计方式。
《EDA技术与VHDL》课程学习笔记
姓名:胡海侠学号:200920212036 班级:SJ0931《EDA技术与VHDL》课程学习笔记在学习本课程之前,我了解到这门课程是与数字电路有关,考虑到数字电路方面的知识已经忘得差不多了,再加上大学学习时候基础本来就不牢靠,所以就恶补了一下数字电路方面的知识。
通过对数字电路的学习,我能够基本上回想起老师上课讲的内容,对数字电路方面有了一个系统的认识,尽管还不是尽善尽美,但是对后期课程的学习已经没有什么障碍了。
那么经过不到一个星期的复习,我基本掌握了以下内容:1:逻辑代数的基本公式和定理,逻辑函数的化简方法和逻辑函数的基本表示方法(1)逻辑函数的基本公式和定理是进行公式化简的依据(2)逻辑函数的基本化简方法是公式化简法和图形化简法,其中图形化简方法中主要应用卡诺图化简的方法。
化简的结果通常为标准与或式(3)逻辑函数的基本表示方法有六种:真值表,卡诺图,函数式,逻辑图,波形图和VHDL 描述2:半导体二极管,三极管和MOS管是数字电路中的基本开关元件,半导体二极管是不可控的;半导体三极管是一种电流控制且具有放大特性的开关元件;MOS管是用电压进行控制的,也具有放大功能。
了解了CMOS和TTL集成门电路的外部特征——逻辑特性和电器特性。
逻辑特性即逻辑功能,如与门,或门,非门,与非门,或非门,与或非门等;电器特性有静态特性(主要是输入特性和输出特性)和动态特性(主要是传输延迟时间)。
3:通过对组合逻辑电路的学习,我知道组合逻辑电路是输出信号仅取决于当时的输入信号,而与原来所处的状态无关。
了解了组合逻辑电路的分析设计的方法。
并通过对加法器,数值比较器,译码器,数据选择器和分配器,只读存储器的学习,对设计过程有了更深的了解。
4:触发器的学习(1)基本触发器:把两个与非门或者或非门交叉连接起来,边构成了基本触发器(2)同步触发器:在基本触发器基础上,增加两个控制门和一个控制信号,就构成了同步触发器。
他的显著特征就是时钟电平直接控制(3)边沿触发器:把两个D触发器级联起来,便构成边沿D触发器,再加以改进就可以得到边沿JK触发器。
VHDL语言的学习
关于VHDL语言的学习一.一个系统用VHDL描述,整体上包括库,程序包,实体和结构体。
实体:就是整个系统,如果给整个系统取个名字的话,那么这个名字就是实体名。
实体描述有固定的语句:entity 实体名isPort(端口表);end 实体名;结构体:就是描述实体所完成的功能,整个系统所要完成的功能,在结构中描述出来。
结构也有固定的语句:architecture 结构名of 实体名is【说明语句】begin【功能描述】end 结构名;备注:这一项是VHDL语言的一个整体概括,每一个用VHDL描述出来的工程都是这种模式:实体,结构。
实例:二.库IEEE是最常见的一个库,每个VHDL程序开头都要调用该库:调用语句:library 库名;库里又有一些程序包,IEEE库中的4个程序包:①std_logic_1164;②std_logic_arith;③std_logic_signed;④std_logic_unsigned;调用程序包的语句:调用语句:use 库名.程序包名.all例如调用IEEE库中的std_logic_1164程序包:use ieee.std_logic_1164.all;三.端口共有5种类型的端口:分别是In, Out, Inout, Buffer及Linkage。
常用的是前3个,buffer最好不要使用,Linkage几乎不用。
端口这一块的重点和难点是inout模式。
(上次发的资料里的“文件夹4”里有一个“双向口问题小节”的pdf文档,讲的很详细,要详细阅读)四.VHDL的语言要素1.VHDL语言中的:①文字规则;②数据对象;③数据类型;④操作运算符等基础知识。
(这些都是最基本的东西,可自己看资料消化)这一部分知识里有一个数据类型转换:数据类型转换都是调用转换函数,程序包提供转换函数。
std_logic_1164程序包的转换函数有:to_std_logic_vector(a) --由bit_vector转成std_logic_vector;to_bit_vector(a) --由std_logic_vector转成bit_vector;to_std_logic(a) --由bit转成std_logic;to_bit(a) --由std_logic转成bit;std_logic_arith程序包的转换函数有:conv_std_logic_vector(a,位长)--由integer, signed, unsigned转成std_logic_vector;conv_integer(a) --由signed,unsigned转成integer;conv_unsigned(a) --由signed,integer转成unsigned;std_logic_unsigned程序包的转换函数有:conv_integer(a) --由std_logic_vector转成integer;备注:如果程序中用到了相关的转换函数,必须要调用相应的程序包。
VHDL重点学习
✓在VHDL 中有四类操作符即逻辑操作符(Logical Operator)关系操作符(Relational Operator) 算术操作符(Arithmetic Operator)和符号操作符(Sign Operator) 此外还有重载操作符(Overloading Operator)✓通常在一个表达式中有两个以上的算符时需要使用括号将这些运算分组如果一串运算中的算符相同且是AND OR XOR 这三个算符中的一种则不需使用括号如果一串运算中的算符不同或有除这三种算符之外的算符则必须使用括号例如A andB andC and D(A or B) xor C✓对于VHDL 中的操作符与操作数间的运算有两点需要特别注意严格遵循在基本操作符间操作数是同数据类型的规则严格遵循操作数的数据类型必须与操作符所要求的数据类型完全一致✓以下是一组逻辑运算操作示例请注意它们的运算表达方式和不加括弧的条件程序4-20SIGNAL a b c : STD_LOGIC_VECTOR (3 DOWNTO 0)SIGNAL d e f g : STD_LOGIC_VECTOR (1 DOWNTO 0)SIGNAL h I j k : STD_LOGICSIGNAL l m n o p : BOOLEAN...a<=b AND c ; -- b c 相与后向a 赋值a b c-- 的数据类型同属4 位长的位矢量d<=e OR f OR g ; -- 两个操作符OR 相同不需括号h<=(i NAND j)NAND k -- NAND 不属上述三种算符中的一种必须加括号l<=(m XOR n)AND(o XOR p); -- 操作符不同必须加括号h<=i AND j AND k ; -- 两个操作符都是AND 不必加括号h<=i AND j OR k ; -- 两个操作符不同未加括号表达错误a<=b AND e ; -- 操作数b 与e 的位矢长度不一致表达错误h<=i OR l ; -- i的数据类型是位STD_LOGIC 而l 的数据类型是... -- 布尔量BOOLEAN 因而不能相互作用表达错误✓'0'&c <= e ; -- 错误不能在赋置号的左边置并置符...IF a & d = "10100011" THEN ... –-在IF 条件句中可以使用并置符✓减法可以将减数优化成补码形式即将减数取反然后将加法器的最低进位位置1 这时的加法器就相当于一个减法器了而它所耗费的资源只比加法器多了一个对减数的取反操作✓混合操作符包括乘方** 操作符和取绝对值ABS 操作符两种VHDL 规定它们的操作数数据类型一般为整数类型乘方(**)运算的左边可以是整数或浮点数但右边必须为整数而且只有在左边为浮点时其右边才可以为负数✓注意MAX+plus II 不支持混合操作符ABS 和**算符FUNDATION FPGA Express 限定** 算符左边的操作数必须为2✓程序4-35 利用移位操作符SLL 和程序包STD_LOGIC_UNSIGNED 中的数据类型转换函数CONV_INTEGER 十分简洁地完成了3-8 译码器的设计程序4-35LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder3to8 ISport ( input: IN STD_LOGIC_VECTOR (2 DOWNTO 0);output: OUT BIT_VECTOR (7 DOWNTO 0));END decoder3to8;ARCHITECTURE behave OF decoder3to8 ISBEGINoutput<= "00000001" SLL CONV_INTEGER(input);END behave✓顺序语句只能出现在进程(Process)和子程序中子程序包括函数(Function)和过程(Procedure)。
vhdl初步设计知识点
vhdl初步设计知识点VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,用于描述和模拟数字电路。
在VHDL的初步设计阶段,掌握一些基本的知识点非常重要。
本文将介绍VHDL初步设计的几个关键知识点。
一、VHDL简介VHDL是一种硬件描述语言,广泛应用于数字集成电路(ASIC)和可编程逻辑器件(FPGA)的设计过程中。
它允许工程师使用代码来描述数字电路的结构和行为,从而实现电路的仿真、综合和布局布线。
二、VHDL的基本结构在VHDL中,一个完整的设计单元由实体(entity)、体系结构(architecture)和配置(configuration)组成。
实体定义了电路的接口,体系结构定义了电路的内部行为,而配置描述了如何将实体和体系结构相互关联。
三、实体和端口实体是VHDL中的顶层设计单元,类似于一个模块。
一个实体可以有多个输入输出端口,每个端口都有一个名称、数据类型和方向。
使用实体和端口的定义,可以将整个电路分解为更小的功能块,便于模块化设计和复用。
四、信号和过程在VHDL中,信号用于传递数据和状态。
信号可以是标量(单个值)或矢量(多个值),可以是时序信号(在不同时间点上发生变化)或组合信号(即时发生变化)。
过程是一段可执行的代码,用于描述组合逻辑的行为。
五、建立模块间连接在VHDL设计中,模块之间的连接需要使用信号来完成。
通过将一个模块的输出信号连接到另一个模块的输入信号,实现了模块间的数据传输。
在设计阶段需要注意确保信号的方向和宽度匹配,以避免数据传输错误或冲突。
六、仿真和测试VHDL设计完成后,需要进行仿真和测试来验证电路的功能和性能。
仿真是通过对设计代码进行计算机模拟,以检查设计是否满足预期行为。
测试是通过向电路输入不同的测试向量,检查输出是否符合预期结果。
七、时序和时钟在数字电路设计中,时序是一个重要的概念。
时序信号在特定的时间点上发生变化,而时钟信号则用于同步电路的操作。
VHDL学习笔记
1.赋值:信号使用<=,变量使用:=2.常量表示:单个使用’’,多个使用””,这是对于STD_LOTIC和STD_LOGIC_VECTIOR3.BIT一种数据类型,取值范围0和14.关系运算符:XOR异或AND 与OR 或5.标识符:由数字、字母、下划线(前后必须有字母和数字,_A、B_都是错误);在VHDL语言中,是不区别大小写的6.信号模式缺省为IN模式。
7.信号类型即数据类型。
8.在PROCESS和子程序中,代码是顺序执行的,但在其他处是并行执行的,并发结构9.VHDL的数据类型:标量类型(整数、实数、枚举、物理)、复合类型(数组、记录)、存取类型(等价于指针类型:少用)、文件类型10.信号赋值只在进程结束时更新,所以在一个进程中对一个信号进行多次赋值是没有意义的。
11.整数文字10E5 = 10*10^52E8 = 2*10^82#11111111#二进制整数2#1111_1111与上等价8#777#八进制16#FF#十六进制整数实数文字123456.999999 = 123456.999_99916#F.FFFF#+2 十六进制12.字符文字:单引号括起来的单个ASCII字符,’A’、’/’字符串文字:双引号,”abc”、”1234”位串字符以进制声明符B、O、X为前导,用双引号括起来的二、八、十六进制序列。
位串文字:B”1010_1010”O”377” = B”011_111_111”X”5F5” = B”0101_1111_0101”物理文字:整数/实数+物理单位的标识符3.5ns、20pf、15.0kOhm13.TYPE address IS RANGE 15DOWNTO 0;TYPE analog IS RANGE 0.0 TO 5.0;TYPE Bit IS (‘0’,’1’);TYPE Week IS (Sun, Mon, Web, Thu, Fri, Sat);TYPE Voltage IS RANGE 0 TO 10E12;UINTSUv; --基本单位mv = 1000uv;v = 1 000 mv;kv = 1000v;END UNITS;14.变量的定义在STANDARD标准程序包中。
VHDL语言学习总结
VHDL语言学习总结jackhuan@(初学VHDL,欢迎批评指正)1 VHDL的程序结构一个VHDL程序包含实体entity、结构体architecture、配置configuration、包集package 和库library五部分。
实体,用于描述设计系统的外部接口信号;结构体,用于描述系统的行为,系统数据的流程或系统组织结构形式;实体+结构体=设计实体;实体是设计实体的表层设计单元,其功能是对这个设计实体与外部的电路接口进行描述,它规定了设计单元的输入、输出接口信号和引脚,是设计实体与外界的一个通信界面;结构体是用于描述设计实体的内部结构以及实体端口间的逻辑关系,结构体具体实现一个实体。
一个电路系统的程序设计只有一个实体,可以有多个结构体。
在实体中类属说明放在端口说明上端,而其他说明类型说明如数据的定义说明则放在端口定义的下面。
配置一般用来为实体指定结构体,由于在设计中没有用到配置,故没有做深入研究。
包集是库的一部分,用来存放库中具有类似功能或在某一个部件中使用的元件、函数或过程。
库是一个设计中封装所有元器件的总和。
2 VHDL与C++的结构类比上述部分可以和C++的工程管理方式做一简单比较。
C++中有类的声明部分(一般为.H文件)和实现部分(一般为.CPP文件)。
在程序的编写过程中,我们首先在一个.H文件中将类的成员变量和成员函数做定义,然后在.CPP中使用具体的代码实现它。
这样在应用这个类的其他程序代码中,一般在引用文件的开始加入如下语句:#include “***.h” //***代表我们要包含的文件名称就可以随意使用其内部的类和函数了。
VHDL有类似之处。
首先我们编写了*.VHD文件,内有实体entity和结构体architecture,开始还要引入库library和包package。
在我们使用其他元件时,通常在architecture中做元件例化。
例如要在myexp中例化元件myand,则:Architecture behave of myexp isSignal mysig1 : bit_vector(7 downto 0);…component myandport( din1: in bit;din2: in bit;dout:out bit);end component;begin…p1: myand port map(din1,din2,dout);…end behave;实际上元件例化就是对元件的包含,相当于在C++中#include的功能。
《EDA技术与VHDL》学习课程学习笔记
姓名:胡海侠学号:200920212036 班级:SJ0931《EDA技术与VHDL》课程学习笔记在学习本课程之前,我了解到这门课程是与数字电路有关,考虑到数字电路方面的知识已经忘得差不多了,再加上大学学习时候基础本来就不牢靠,所以就恶补了一下数字电路方面的知识。
通过对数字电路的学习,我能够基本上回想起老师上课讲的内容,对数字电路方面有了一个系统的认识,尽管还不是尽善尽美,但是对后期课程的学习已经没有什么障碍了。
那么经过不到一个星期的复习,我基本掌握了以下内容:1:逻辑代数的基本公式和定理,逻辑函数的化简方法和逻辑函数的基本表示方法(1)逻辑函数的基本公式和定理是进行公式化简的依据(2)逻辑函数的基本化简方法是公式化简法和图形化简法,其中图形化简方法中主要应用卡诺图化简的方法。
化简的结果通常为标准与或式(3)逻辑函数的基本表示方法有六种:真值表,卡诺图,函数式,逻辑图,波形图和VHDL描述2:半导体二极管,三极管和MOS管是数字电路中的基本开关元件,半导体二极管是不可控的;半导体三极管是一种电流控制且具有放大特性的开关元件;MOS管是用电压进行控制的,也具有放大功能。
了解了CMOS和TTL集成门电路的外部特征——逻辑特性和电器特性。
逻辑特性即逻辑功能,如与门,或门,非门,与非门,或非门,与或非门等;电器特性有静态特性(主要是输入特性和输出特性)和动态特性(主要是传输延迟时间)。
3:通过对组合逻辑电路的学习,我知道组合逻辑电路是输出信号仅取决于当时的输入信号,而与原来所处的状态无关。
了解了组合逻辑电路的分析设计的方法。
并通过对加法器,数值比较器,译码器,数据选择器和分配器,只读存储器的学习,对设计过程有了更深的了解。
4:触发器的学习(1)基本触发器:把两个与非门或者或非门交叉连接起来,边构成了基本触发器(2)同步触发器:在基本触发器基础上,增加两个控制门和一个控制信号,就构成了同步触发器。
他的显著特征就是时钟电平直接控制(3)边沿触发器:把两个D触发器级联起来,便构成边沿D触发器,再加以改进就可以得到边沿JK触发器。
VHDL笔记
1 std_logic拥有九种逻辑:U(未设置)、X(浮接不定)、1(高电平)、0(低电平)、Z(高阻态)、W(弱浮接)、L(弱低电平)、H(弱高电平)、—(随意)而bit只有0、1两种逻辑,一般都用std_logic来代替bit因为它包含的逻辑更多,更符合硬件电路的特性2 变量只能在进程语句中说明和使用(是一个局部变量,该变量若要从进程内输出就必须将其代入信号量,信号量是全局变量,通过输出信号带出进程);信号、常量可以在结构体和进程语句中使用。
信号通常在实体、结构体和程序包中说明,但不能在进程中说明,只能在进程中使用。
3 当时钟信号作为进程的敏感信号时,在敏感信号表中不能出现一个以上的时钟信号,除时钟信号以外,复位信号等是可以与时钟信号一起出现在敏感信号表中的。
4 所谓同步复位,就是当复位信号有效且在给定的时钟边沿到来时,触发器才被复位;而非同步复位则是,一旦复位信号有效,触发器就被复位。
非同步触发器也称为异步复位。
5 同步复位:process(clk)异步复位:process(clk,clr)6 算术运算符+ - <><= >=仅对integer类型有效。
逻辑运算符and or not仅对bit类型有效。
7 U+=u-虚短I+=i-虚断8 如果没有others分支条件存在,则分支条件必须覆盖表达式所有可能的值。
对std_logic,std_logic_vector数据类型要特别注意使用others分支。
9beginTmp:=’1’; --jixiaoyan tmp:=’0’;--oujiaoyanFor i in 0 to 7 loopTmp:=tmp xor a(i);End loop;Y=tmp;For 循环变量是loop内部自动声明的局部变量,仅在loop内部可见;不需要指。
VHDL语言的基本知识点罗列
VHDL语言的基本知识点罗列1 VHDL语言的标识符VHDL中的标识符可以是常数、变量、信号、端口、子程序或参数的名字。
使用标识符要遵守如下法则:a)标识符由字母(A…Z;a…z)、数字和下划线字符组成。
任何标识符必须以英文字母开头。
λ末字符不能为下划线。
λb)不允许出现两个连续下划线。
标识符中不区分大小写字母。
λVHDL定义的保留子或称关键字,不能用作标识符。
λc) VHDL中的注释由两个连续的短线(--)开始,直到行尾。
以下是非法标识符:-Decoder —起始不能为非英文字母3DOP —起始不能为数字Large#number —“#”不能成为标识符的构成符号Data__bus —不能有双下划线Copper_ —最后字符不能为下划线On —关键字不能用作标识符。
注:在AHDL语言中标识符要区分大小写,但在VHDL语言中不区分大小写。
所以写程序时,一定要养成良好的书写习惯,应用关键字时用大写,自己定义的标识符用小写。
标识符表示的几种数据对象的详细说明如下:1) 常数(Constant )常数是一个固定的值,主要是为了使设计实体中的常数更容易阅读和修改。
常数一被赋值就不能在改变。
一般格式:CONSTANT 常数名:数据类型:=表达式;例:CONSTANT Vcc: REAL: =5.0;—设计实体的电源电压指定常数所赋得值应与定义的数据类型一致。
常量的使用范围取决于它被定义的位置。
程序包中定义的常量具有最大的全局化特性,可以用在调用此程序包的所有设计实体中;设计实体中某一结构体中定义的常量只能用于此结构体;结构体中某一单元定义的常量,如一个进程中,这个常量只能用在这一进程中。
2) 变量(Variable)变量是一个局部变量,它只能在进程语句、函数语句和进程语句结构中使用。
用作局部数据存储。
在仿真过程中。
它不像信号那样,到了规定的仿真时间才进行赋值,变量的赋值是立即生效的。
变量常用在实现某种算法的赋值语句中。
FPGA学习笔记05-VHDL语法基础-类属语句(GENERIC)
FPGA学习笔记05-VHDL语法基础-类属语句(GENERIC)⼀、概述 类属参量是⼀种端⼝界⾯常数,常以⼀种说明的形式放在实体或块结构体前的说明部分。
类属为所说明的环境提供了⼀种静态信息通道。
类属与常数不同,常数只能从设计实体的内部得到赋值,且不能再改变,⽽类属的值可以由设计实体外部提供。
使⽤GENERIC 语句易于模块化和通⽤化。
有些模块的逻辑关系是明确的,但是由于半导体⼯艺、半导体材料的不同,⽽使器件具有不同的延迟。
为了简化设计,对该模块进⾏通⽤设计,参数根据不同材料、⼯艺待定。
因此,设计者可以从外⾯通过类属参量的重新设定⽽容易地改变⼀个设计实体或元件地内部电路结构和规模。
⼆、书写格式 GENERIC(常数名数据类型 := 设定值);三、应⽤实例1. 定义实体的端⼝⼤⼩;2. 设计实体的物理特征;传输延迟,上升和下降延迟等;3. 结构体的总线宽度;4. 设计实体中底层中同种原件的例化数量;四、程序与仿真1entity and2 is2generic (rise,fall:TIME);3port(a,b:IN bit;c:OUT bit);4end and2;56architecture generic_example of and2 is7signal internal_signal : BIT;8begin9 internal_signal <= a and b;10 c <= internal_signal AFTER(rise) when internal_signal = '1'ELSE internal_signal AFTER(fall);11end architecture generic_example;激励⽂件程序:1library ieee;2use ieee.std_logic_1164.all;3use ieee.std_logic_arith.all;4use ieee.std_logic_unsigned.all;56entity tb_and2 is7end entity;89architecture a of tb_and2 is10component and2 is11generic (rise,fall:TIME);12port(a,b:IN bit;c:OUT bit);13end component;1415signal a_t : bit;16signal b_t : bit;17signal c_t : bit;1819begin20 a_t <= '0','1'after10 ns;21 b_t <= '0','1'after10 ns;22 u0: and223generic map(5 ns,7 ns)24port map25 ( a => a_t,26 b => b_t,27 c => c_t28 );29end a;仿真:说明:10ns时,internal_signal已经拉⾼,但是c要延迟5 ns再拉⾼,即为参数说明的⽰例结果。
VHDL语言的基本知识点罗列
其它语句end process;* 敏感表中只能有一个时钟信号* wait on 语句只能放在进程的最前面或者最后面* 时钟的边沿描述描述时钟一定要指明是上升沿还是下降沿上升沿到来的条件:IF clk=’1’ AND clk’LAST_VALUE=’0’ AND clk’EVENT 下降沿到来的条件:IF clk=’0’ AND clk’LAST_VALUE=’1’ AND clk’EVENT 关于时钟信号的总结:IF clock_signal=current_value ANDclock_signal’LAST ANDclock_siganl’EVENT可以简单写为:IF clock_signal=clock_siganl’EVENT AND current_value. 复位信号*同步复位当复位信号有效且在给定的时钟边沿到来时,触发器才被复位. 例1:process (clock)beginif (clock_edge_condition) thenif (reset_condition) thensignal_out<=reset_value;elsesignal_out=signal_in;:其它语句:end if;end if;end process;例2:process(clock)if (clock’event and clock=’1’) thenif reset=’1’ thencount<=’0’;elsecount<=count+1;end if;end if;end process;此例中,敏感表中只有时钟信号,因为只有时钟到来时才能复位.* 异步复位只要复位信号有效,触发器就被复位,所以敏感表中除时钟信号外,还需要复位信号例1:process(reset_signal,clock_signal)beginif (reset_signal) thensignal_out<=reset_value;elsif (clock_event and clock_edge_condition) thensignal_out<=signal_in;:其它语句:end if;end process;例2:process(clock,reset)beginif reset=’1’ thencount<=’0’;elsif clock’event and clock=’1’ thencount<=count+1;end if;end process;。
VHDL之状态机学习笔记
VHDL之状态机学习笔记由于平时比较忙,没有时间系统的学习,所以一般情况下只能周末稍微系统的学习一下。
前几周主要学习了一下如何用VHDL来实现一个状态机。
因为状态机的应用实在是太广泛了,例如各种存储器的控制,AD的控制外部器件的控制,也包括内部电路的控制,到了非学不可的地步了。
对于状态机的理论没有涉及太多,只有几点需要注意:(1)moore和mealy的区别在于输出是否只和当前状态有关。
(2)状态机的两种基本操作:一是状态机内部状态的转换,另一是产生输出信号序列。
(3)状态机的分析可以从状态图入手,同样,状态机的设计也可以从状态图入手。
在集成电路设计时,通常可以将整个系统划分为两部分,一部分是数据单元,另一部分是控制单元。
数据单元包含保存运算数据和运算结果的数据寄存器,也包括完成数据运算的组合逻辑。
控制单元用来产生信号序列,以决定何时进行何种数据运算,控制单元要从数据单元得到条件信号,以决定继续进行那些数据运算。
数据单元要产生输出信号,数据运算状态等有用信号。
数据单元和控制单元中,有两个非常重要的信号,即复位信号和时钟信号。
复位信号保证了系统初始状态的确定性,时钟信号则是时序系统工作的必要条件。
状态机通常在复位信号到来的时候恢复到初始状态,每个时钟到来的时候内部状态发生变化。
正如上面的(3)提到的,设计状态机时一般先构造出状态图。
构造状态图的一般方法是从一个比较容易描述的状态开始,通常初始态是一个很好开始的状态,也就是状态机复位以后开始的状态。
在建立每个状态时最好都清楚的写出关于这个状态的文字描述,为硬件设计过程提供清晰的参考资料,也为最后完成的设计提供完整的设计文档。
下面给出一个用VHDL实现ADC0804控制器的完整设计过程。
首先根据ADC0804的时序图分析所有可能的状态,并且建立起来状态图。
时序图:/album_pic/2005/09/12/b15fe2073e48e1bb3780e 6431f695e8c?%75%4e%6f%44%6a%77%49%71%6d%744个状态如下:idle: CS="0",WR=0,RD=1 启动AD0804开始转换convert:CS=1,WR=1,RD=1,AD0804进行数据转换read1: CS="1",WR=1,RD=1,INTR,转换结束,开始读read2: CS="1",WR=1,RD=0,读取数据。
第3部分VHDL基本知识-精品
9
数字逻辑
3.1 硬件描述语言VHDL介绍
3. 逻辑综合 所谓综合就是将较高层次的抽象描述转化为低层
次描述的过程,是将软件设计转化为硬件电路的 关键步骤。在完成设计输入后,根据硬件结构和 约束条件进行编译、优化、综合,最终得到门级 甚至更低层次的电路描述网表文件。网表文件就 将软件描述和给定的硬件结构形成对应逻辑连接 关系。
11
数字逻辑
3.1 硬件描述语言VHDL介绍
5. 仿真测试
仿真是EDA设计过程中的重要步骤,通常EDA软件中会 提供仿真工具,也可以使用第三方的专业仿真工具。根 据不同的实施阶段,分为功能仿真和时序仿真:
功能仿真:在采用不同方式完成设计输入后,即可进行 逻辑功能的仿真测试,以了解功能是否满足设计要求。 这个阶段的仿真测试不涉及具体的硬件结构、特性。
时序仿真:又称后仿真,是最接近硬件真实运行的仿真。 利用布局布线后生成的包含硬件特性参数的仿真文件, 对系统和各个模块进行时序仿真,分析其时序关系和延 迟信息。
12
数字逻辑
3.1 硬件描述语言VHDL介绍
6. 编程下载 将适配后生成的下载或配置文件,通过编程器或
下载线缆下载到目标器件中。一般将对CPLD的 下载称为编程,对FPGA的下载称为配置。最后 将整个系统进行统一的测试,验证设计在目标系 统上的实际工作情况。
4
数字逻辑
3.1 硬件描述语言VHDL介绍
3.1.2 VHDL语言简介
硬件描述语言(HDL: Hardware Description Language)是一种 用形式化方法来描述数字电路和设计数字逻辑系统的语言,是EDA 技术的重要组成部分。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子系统设计学习笔记
经过一个学期的数字逻辑电路实验以及电子系统设计学习,我对VHDL语言的知识从无到有,从少到多,其中要归因于多次试验以及设计时间。
现将学习过程中得到的一些经验积累如下:
1、关于设计方法
可以将传统的自下而上方法和VHDL的至上而下方法综合。
先使用maxplus的原理图设计功能画出原理图,进行波形仿真。
再综合图中的各接口和原件进行行为描述。
以一个时序脉冲与整形电路为例:
分析如下:
输入端:clk,prnclrn,ent,enp,ldn,其中使能端prn与清除段clrn在实验中不发挥作用,可省略。
74161中的两个使能端和读取功能多余,也可以省略。
输出端:与图相同。
接线:三个计数器输出Q3,Q4,Q4b,Q5,,74641输出Q6,三周期输出Q7,Q8
图中包含五进制、四进制、三进制和二进制计数器各一
代码如下:
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY exp5tx IS
PORT(clk : IN STD_LOGIC;
CP1,CP2,CP3,CP4,CP5,CP6 : OUT STD_LOGIC;
Q3,Q4,Q4b,Q5,Q6,Q7,Q8 : BUFFER STD_LOGIC);//接线均使用buffer,方便调试,波形模拟成功后再改回signal END exp5tx;
ARCHITECTURE DISTRIBUTER OF exp5tx IS
BEGIN
PROCESS(clk,Q3,Q5)
VARIABLE count_5 : STD_LOGIC_VECTOR(2 DOWNTO 0);
VARIABLE count_2 : STD_LOGIC;
VARIABLE count_4 : STD_LOGIC_VECTOR(1 DOWNTO 0);
VARIABLE count_3 : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
IF(clk'EVENT AND clk='1')THEN
IF(count_5="000")THEN
count_5 := "001";Q3 <= '1';
ELSIF(count_5="001")THEN
count_5 := "010";Q3 <= '0';
ELSIF(count_5="010")THEN
count_5 := "011";Q3 <= '0';
ELSIF(count_5="011")THEN
count_5 := "100";Q3 <= '0';
ELSIF(count_5="100")THEN
count_5 := "000";Q3 <= '0';
END IF;
END IF; //五进制计数器
IF(Q3'EVENT AND Q3='1')THEN
IF(count_2='0')THEN
count_2 := '1'; Q4 <= '1';Q4b <= '0';
ELSIF(count_2='1')THEN
count_2 := '0'; Q4 <= '0';Q4b <= '1';
END IF;
END IF; //二进制计数器
IF(Q3'EVENT AND Q3='1')THEN
IF(count_4="00")THEN
count_4 := "01";Q5 <= '1';
ELSIF(count_4="01")THEN
count_4 := "10";Q5 <= '1';
ELSIF(count_4="10")THEN
count_4 := "11";Q5 <= '0';
ELSIF(count_4="11")THEN
count_4 := "00";Q5 <= '0';
END IF;
END IF; //四进制计数器
IF(Q5'EVENT AND Q5='1')THEN
IF(count_3="00")THEN
count_3 := "01"; Q6 <= '1';Q7 <= '0';Q8 <= '0';
ELSIF(count_3="01")THEN
count_3 := "10"; Q6 <= '0';Q7 <= '1';Q8 <= '0';
ELSIF(count_3="10")THEN
count_3 := "00"; Q6 <= '0';Q7 <= '0';Q8 <= '1';
END IF;
END IF; //三进制计数器
END PROCESS;
CP1 <= Q4b AND Q5 AND Q6;
CP2 <= Q4b AND NOT Q5 AND Q6;
CP3 <= Q4b AND Q5 AND Q7;
CP4 <= Q4b AND NOT Q5 AND Q7;
CP5 <= Q4b AND Q5 AND Q8;
CP6 <= Q4b AND NOT Q5 AND Q8;
//组合逻辑
END DISTRIBUTER;
这是学习vhdl过程中的一个程序,其中还有些缺点,比如没将每个模块分成单独的process等。
这就是我的大致的设计习惯。
2、实验中常见错误
总结编译中的常见错误也很重要,能使代码修改更快更有效率。