HDL语言程序的基本结构
第4章VHDL语言基础

结构体组成
结 构 体 说 明 结
数据类型说明 信号说明 例化元件说明 子程序说明
构 体 块语句 结 构 体 功 能 描 述 进程语句 信号赋值语句 子程序调用语句 元件例化语句
结构体描述风格
行为描述
描述该设计单元的功能,主要使用函数、过程和进程语
句,以算法形式描述数据的变换和传送 例4-4
Port (a,b: in std_logic_vector (3 downto 0);
Ci: in std_logic; Sum: out std_logic_vector (3 downto 0); Co: out std_logic); End add4;
4.1.3 结构体部分
结构体(ARCHITECTURE)
4.1.1 参数部分
库说明 存放已经编译的实体、结构体、程序包和配臵,用于 设计共享,是编程资源。 library <库名>; 程序包引用
使用USE子句指明要使用库中某一个设计单元。
use <库名>. <程序包名>.all; 【例4-2】 LIBRARY ieee; USE ieee.std_logic_1164.ALL;
结构体主要用来描述实体的内部结构,即 描述一个实体的功能。 描述方式 行为描述方式、数据流描述方式、结构描 述方式、混合描述方式
4.1.3 结构体部分
结构体格式
ARCHITECTURE 结构体名 OF 实体名 IS [结构体说明部分]; BEGIN 结构体描述部分; END 结构体名;
4.1.3 结构体部分
4.1 基本结构
模块结构
参数部分:库(LIBRARY)、程序包(USE); 实体(ENTITY):[类属]、端口(PORT);
fpga期末复习题(答案)知识点题型

一、填空题:1、 FPGA结构一般分为三部分:可编程逻辑块(CLB)、可编程I/O模块和可编程内部连线。
2、 CPLD的内部连线为连续式布线互连结构,任意一对输入、输出端之间的延时是固定;FPGA的内部连线为分段式布线互连结构,各功能单元间的延时不定(不可预测)。
3、大规模可编程器件主要有CPLD和FPGA两类,其中CPLD通过可编程乘积项逻辑实现其逻辑功能。
基于SRAM的FPGA器件,每次上电后必须进行一次配置。
FPGA内部阵列的配置一般采用在电路可重构技术,编程数据保存在静态存储器(SRAM) ,掉电易失。
4、目前世界上有十几家生产CPLD/FPGA的公司,最大的两家是:Altera,Xilinx。
5、硬件描述语言(HDL)是EDA技术的重要组成部分,是电子系统硬件行为描述、结构描述、数据流描述的语言,它的种类很多,如VHDL、Verilog HDL、AHDL6、 WHEN_ELSE条件信号赋值语句和 IF_ELSE顺序语句的异同:* WHEN_ELSE条件信号赋值语句中无标点,只有最后有分号;必须成对出现;是并行语句,必须放在结构体中。
* IF_ELSE顺序语句中有分号;是顺序语句,必须放在进程中7、可编程逻辑器件设计输入有原理图输入、硬件描述语言输入和波形输入三种方式。
原理图输入方式是一种最直接的设计描述方式,波形设计输入适用于时序逻辑和有重复性的逻辑函数。
硬件描述语言的突出优点是:* 语言与工艺的无关性;语言的公开可利用性,便于实现大规模系统的设计;* 具有很强逻辑描述和仿真功能,而且输入效率高,在不同设计输入库之间的转换非常方便,用不着对底层的电路和PLD结构的熟悉。
8、用VHDL/Veilog HDL语言开发可编程逻辑电路的完整流程:文本编辑→功能仿真→逻辑综合→布局布线→时序仿真。
*所谓综合,就是根据设计功能和实现该设计的约束条件(如面积、速度、功耗和成本等),将设计输入转换成满足要求的电路设计方案,该方案必须同时满足与其的功能和约束条件。
Verilog HDL

Verilog HDL基本程序结构用Verilog HDL描述的电路设计就是该电路的Verilog HDL模型,也称为模块,是Verilog 的基本描述单位。
模块描述某个设计的功能或结构以及与其他模块通信的外部接口,一般来说一个文件就是一个模块,但并不绝对如此。
模块是并行运行的,通常需要一个高层模块通过调用其他模块的实例来定义一个封闭的系统,包括测试数据和硬件描述。
一个模块的基本架构如下:module module_name (port_list)//声明各种变量、信号reg //寄存器wire//线网parameter//参数input//输入信号output/输出信号inout//输入输出信号function//函数task//任务……//程序代码initial assignmentalways assignmentmodule assignmentgate assignmentUDP assignmentcontinous assignmentendmodule说明部分用于定义不同的项,例如模块描述中使用的寄存器和参数。
语句用于定义设计的功能和结构。
说明部分可以分散于模块的任何地方,但是变量、寄存器、线网和参数等的说明必须在使用前出现。
一般的模块结构如下:module <模块名> (<端口列表>)<定义><模块条目>endmodule其中,<定义>用来指定数据对象为寄存器型、存储器型、线型以及过程块。
<模块条目>可以是initial结构、always结构、连续赋值或模块实例。
下面给出一个简单的Verilog模块,实现了一个二选一选择器。
例2-1 二选一选择器(见图2-1)的Verilog实现图2-1 例2-1所示的二选一电路module muxtwo(out, a, b, s1);input a, b, s1;output out;reg out;always @ (s1 or a or b)if (!s1) out = a;else out = b;endmodule模块的名字是muxtwo,模块有4个端口:三个输入端口a、b和s1,一个输出端口out。
EDA技术复习题

一、填空1、ASIC的中文含义是__专用集成电路_____;2、EDA的中文含义是_电子设计自动化;3、PROM的中文含义是_______4、EEPROM的中文含义是_______5、SOPC的中文含义是_______6、PLD的中文含义是______可编程逻辑器件_____________;7、HDL的中文含义是_硬件描述语言;8、CPLD的中文含义是_复杂可编程逻辑器件;9、FPGA 的中文含义是_现场可编程门阵列。
10、LUT的中文含义是__查找表_______________。
11、RTL的中文含义是_寄存器传输级(Register Transfer Level)12、PAR的中文含义是_布局布线13、UUT的中文含义是_被测单元(Unit Under Test)14、JTAG的中文含义是_联合测试行动小组(Joint Test Action Group)15、在ISE软件中的原理图输入时,用元件符号INV表示非门。
16、目前应用最广泛的HDL(硬件描述语言)有__VHDL语言,_Verilog HDL_语言。
17、FPGA在结构上主要分成三个部分:可编程逻辑单元,可编程输入输出单元,可编程连线.CPLD在结构上主要分成三个部分:可编程逻辑宏单元,可编程输入输出单元,可编程内部连线18、目前主流的FPGA都采用了基于SRAM 工艺的查找表结构。
FPGA芯片主要由6部分构成,分别是可编程I/O单元、基本可编程逻辑单元、完整的时钟管理、嵌入块式RAM、丰富的布线资源、内嵌的底层功能单元和内嵌专用硬件模块。
19、CPLD由可编程的与/或阵列以及宏单元库构成,CPLD主要由可编程I/O单元、基本逻辑块、互连资源和其它辅助功能模块构成。
20、Xilinx 公司器件主要包括Xilinx CPLD 芯片、FPGA 芯片、PROM 芯片,其中,XC9500系列是属于CPLD 芯片,而Spartan 类和Virtex 类是属于FPGA芯片,在这两大类芯片中Virtex 类是高端产品。
VerilogHDL语法基础

VerilogHDL语法基础⼀个复杂电路的完整Verilog HDL模型是由若个Verilog HDL 模块构成的,每⼀个模块⼜可以由若⼲个⼦模块构成。
利⽤Verilog HDL语⾔结构所提供的这种功能就可以构造⼀个模块间的清晰层次结构来描述极其复杂的⼤型设计。
每个模块的内容都是嵌在module和endmodule两个语句之间,每个模块实现特定的功能,模块是可以进⾏层次嵌套的。
每个模块⾸先要进⾏端⼝定义.并说明输⼊(input)和输出(output),然后对模块的功能进⾏逻辑描述。
Verilog HDL程序的书写格式⾃由,⼀⾏可以写⼏个语句,⼀个语句也可以分多⾏写。
除了endmodule语句外,每个语句的最后必须有分号。
⼀个模块是由两部分组成的,⼀部分描述接⼝;另⼀部分描述逻辑功能,即定义输⼊是如何影响输出的。
模块(block)的组成Verilog HDL结构完全嵌在module和endmodule声明语句之间,每个Verilog程序包括4个主要部分:端⼝定义,I/O说明,信号类型声明和功能描述。
module<模块名>(<端⼝列表>);端⼝说明(input,output,inout)参数定义(可选)数据类型定义连续赋值语句(assign)过程块(initial 和 always)⾏为描述语句低层模块实例任务和函数延时说明块endmodule模块声明模块声明包括模块名和端⼝列表。
其格式如下:module 模块名(端⼝1,端⼝2,端⼝3,…);模块结束的标志为关键字:endmodule。
端⼝定义input(输⼊端⼝),output(输出端⼝)和inout(双向端⼝)。
格式如下:input 端⼝名1,端⼝名2,………,端⼝名N; //输⼊端⼝output 端⼝名1,端⼝名2,………,端⼝名N; //输出端⼝inout 端⼝名1,端⼝名2,………,端⼝名N; //输⼊输出端⼝也可以写在端⼝声明语句⾥,其格式如下(为了代码的可读性,⼀般不这么写):module module_name(input port1,input port2,…output port1,output port2… );信号类型说明信号可以分为端⼝信号和内部信号;1. 所有信号都必须进⾏数据类型的定义,如寄存器类型(reg等),连线类型(wire等);2. 如果信号没有定义数据类型,则综合器将其默认为wire型;3. 端⼝的位宽最好定义在端⼝定义中,不要放在数据类型定义中;4. 不能将input和inout类型声明为reg型;模块的端⼝表⽰的是模块的输⼊和输出⼝名,也就是说,它与别的模块联系端⼝的标识。
hdl语言的层次概念

hdl语言的层次概念
VHDL语言的层次概念指的是VHDL代码的结构,包括实体、部件、组件、过程和程序结构。
实体是VHDL代码的顶级结构,它提供了一个完整的模型,描述了其中的所有细节。
部件是实体的基本组成部分,它们描述了不同的模型组件,如外设、存储器和多位运算器等。
组件是部件的抽象,用于简化VHDL模型。
它们不涉及具体模型中部件之间的连接,而只关注模型中各部分如何工作。
过程是VHDL中的一种指令,它指定了特定结构的操作。
程序结构是VHDL中执行特定任务的指令顺序,它决定了VHDL模型中各部分如何工作。
;。
Verilog-HDL中的基本语法

一个完整的源程序都应当加上需要的注释, 以加强程序的可读性。
2.2 Verilog HDL的语法
2.2.1 空白符和注释
Verilog HDL的空白符包括空格、tab符号、换行 和换页。
空白符如果不是出现在字符串中,编译源程序 时将被忽略。
8. 条件操作符(Conditional operators)
条件操作符为:?:
条件操作符的操作数有3个,其使用格式为
操作数 = 条件 ? 表达式1:表达式2;
即当条件为真(条件结果值为1)时,操作数 = 表达式1;为假(条件结果值为0)时,操作数 = 表达 式2。
9. 位并接操作符(Concatenation operators) 并接操作符为:{} 并接操作符的使用格式: {操作数1的某些位,操作数2的某些位,…,操作数n 的某些位};
位运算操作符包括:~(按位取反)、&(按位与)、 |(按位或)、^(按位异或)、^~或~^(按位同或)。
在进行位运算时,当两个操作数的位宽不同时, 计算机会自动将两个操作数按右端对齐,位数少的操 作数会在高位用0补齐。
4. 关系操作符(Pelational operators)
关系操作符有:
<(小于)、<=(小于等于)、>(大于)、>=(大 于等于)。
② 每个模块首先要进行端口定义,并说明输入 (input)、输出(output)或双向(inouts),然 后对模块的功能进行逻辑描述。
③ Verilog HDL程序的书写格式自由,一行可以一 条或多条语句,一条语句也可以分为多行写。
④ 除了endmodule语句外,每条语句后必须要有 分号“;”。
VerilogHDL语言(PDF)

Verilog 讲义(二)1)续Verilog 基础2)Verilog 形为描述3.4 运算符九类运算符分类包含运算符算术运算符+ - * / %位运算符~ & | ^ ^~or~^缩位运算符& ~& | ~| ^ ^~or~^逻辑运算符! && ||关系运算符> < <= >=相等与全等运算符== != === !==逻辑移位运算符 <<>> 连接运算符 {}: 条件运算符 ?根据操作数的不同,又可分为三类:1)单目运算符只有一个操作数,且运算符位于操作数的左边如:~clk &a ~& 缩位运算符wire [7:0] aparity=^a (奇校验)2)双目运算符a+b a%b {a,b,c}3)三目运算符out=(sel)?a:b;运算符的优先级参:P443.4.1 算术运算符1)减法亦可用作单目运算符,取补运算2)除法运算符:整型类数据小数部分被截去: integer a=7/2=33)% 取余运算 7%2=13.4.2 位运算符1)~a 按位取反2)a&b 按位相与若a,b 位数不同,短的高位补0,(x者补x)3)^ ^~ 双目3.4.3 缩位运算符单目运算符,按位进行逻辑运算,结果产生一位的逻辑值。
A=4’b1001&a ~&a |a ~|a ^a ~^a0 1 1 0 1 0 3.4.3 逻辑运算符a&&b结果为一位的逻辑值若操作数为多位,只要有一位为1,整个操作数看作逻辑1;若有不定态,结果亦为不定态。
3.4.5关系运算符结果为一位的逻辑值。
3.4.6 相等与全等运算符结果为一位逻辑值相等:比较每一位,所有相等,关系满足,若有不定态或高阻态,不定态结果。
全等:与相等比较过程相同,亦将不定态及高阻态作为逻辑状态比较。
3.4.7 逻辑移位运算符<< >> 以0补位。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
HDL语言程序的基本结构2.1 VHDL语言设计的基本单元及其构成2.2 语言结构体的子结构描述2.3 包集合、库与配置2.1 VHDL语言设计的基本单元及其构成●一个完整的VHDL语言程序通常包含实体(Entity)、构造体(Architecture)、配置(Configuration)、包集合(Package)和库(Library):●功能:实体 -—- 用于描述所设计的系统的外部接口信号;构造体——用于描述系统内部的结构和行为;包集合——存放各设计模块都能共享的数据类型、常数和子程序库;配置——用于从库中选取所需单元来组成系统设计的不同版本;库——存放已经编译的实体、构造体、包集合和配置。
●基本组成:实体说明和构造体两部分实体说明(接口)构造体(实现)1.实体说明:规定此实体输入与输出的数目与类型。
●结构:entity 实体名 is[generic(类属参数说明)];[port(端口说明)];end 实体名;●类属参数说明:generic (常数名:数据类型:=数值);在端口说明前,用于指定参数。
●端口说明:在entity语句的实体说明部分,常用port语句描述实体对外界连接的端口(数目、方向和数据类型)。
port (端口名:端口方向端口数据类型;...端口名:端口方向端口数据类型;);端口方向:in (输入),只能读,用于:时钟输入、控制输入(装入、复位、使能)、单向数据输入;out (输出),只能被赋值,用于不能反馈的输出;inout(输入输出) ,既可读又可被赋值,被读的值是端口输入值而不是被赋值,作为双向端口。
buffer(缓冲),类似于输出,但可以读,读的值是被赋值,用做内部反馈用,不能作为双向端口使用。
●例1):entity NAND2 isport(A,B: in BIT;Z: out BIT);end NAND2;●例2):--Define an entity (design) called COMP--that has 2 N-bit input and one output.entity COMP isgeneric(N : INTEGER :=8 ) ; -- default is 8 bitsport ( x, y : in BIT_VECTOR ( 0 to N-1);equal : out BOOLEAN );end COMP;2. 构造体构造体定义实体功能的一种实现。
●构造体的结构:architecture 构造体名of 实体名 is{块说明项}begin{并发语句}end 构造体名;●块说明项(或定义语句),位于architecture 和begin之间,对构造体内部的使用信号、常数、数据类型和函数进行说明,包括:使用语句子程序说明子程序体类型说明子类型说明常数说明信号说明元件说明●并行语句处于begin 与end之间,描述构造体的行为与连接关系。
●构造体的描述方法:行为描述(按算法的路径来描述);数据流描述或RTL描述(采用寄存器传输描述);结构化描述(采用例化元件)例化(instantiation ):在高层次的设计中调用低层次的实体作为元件的过程。
●构造体的组织●例entity COUNTER3 isport( clk: in bit;reset : in bit;count: out integer range 0 to 7);end COUNTER3;architecture MY_ARCH of COUNTER3 issignal count_tmp : integer range 0 to 7;beginprocessbeginwait until (clk'event and clk='1');if reset='1' or count_tmp =7 thencount_tmp<=0;elsecount_tmp<=count_tmp + 1;end if;end process;count<=count_tmp;end MY_ARCH;注:构造体中的信号和常数名不能与实体端口名相同。
52.2 语言结构体的子结构描述1.block语句结构●语句结构:块结构名:blockbegin...end block 块结构名;2. 进程(process)语句结构●进程语句的结构:[进程名]:process(信号1,信号2,……){说明内部变量}begin{顺序语句}end process;●进程的组织●功能独立的电路可用进程来描述●进程中语句的顺序性●进程的启动*敏感表*敏感表中信号的变化将启动进程语句*启动后,语句从上到下逐句执行,最后一个语句执行完毕后,返回进程开始的语句,等待下一次敏感表的变化。
●进程的同步描述同一结构体中有多个进程存在时,进程之间可一边进行通信,一边并行同步执行。
3.子程序(subprogram)语句结构描述两种类型:过程(procedure)函数 (function)●过程语句结构:procedure 过程名(参数1,参数2,…) is[定义语句];begin[顺序处理语句];end 过程名;*参数可以是输入也可以是输出*例:将位矢量转换为整数procedure vector_to_int(z : in std_logic_vector;x_flag : out boolean;q : inout integer) isbeginq:=0;x_flag:=false;for i in z' range loopq:=q*2;if (z(i)=1) thenq:=q+1;elsif(z(i)/=0) thenx_flag:=true;end if;end loop;end vector_to_int;循环次数由z的位数决定,z(0)为最高位。
●函数语句结构:function 函数名(参数1,参数2,…)return 数据类型名 is[定义语句];begin[顺序处理语句];return 返回变量名end 函数名;*参数为输入参数*通常集中在包集合中*例:将boolean型信号转换到 bit型function b12bit(a: Boolean) return BIT isbeginif a thenreturn '1';elsereturn '0';end if;end b12bit;2.3 包集合、库与配置1.库库(Library)是经编译后的数据的集合,库说明总是放在设计单元的最前面。
1)库的种类:●IEEE 库包含:STD_LOGIC_1164STD_LOGIC_ARITHSTD_LOGIC_UNSIGNED●STD库包含:STANDARD包集合TEXTIO 包集合TEXTIO 包集合使用例:LIBRARY STD;USE STD.TEXTIO. ALL;●ASIC矢量库各公司提供的ASIC称逻辑门库●WORK 库为现行作业库,存放设计者的VHDL语言程序●用户定义的库用户为自身设计需要所开发的共用包集合和实体。
2)库的使用●除WORK、STD库外,首先要说明。
格式:library [库名];use [库名.包名.项目名];例:library ieee;use ieee.std_logic_1164.all;●库说明的作用范围:从实体开始到其所属构造体、配置为止。
2.包集合●包集合用于封装属于多个设计单元分享的公共信息。
●包集合由包说明(说明数据类型、子程序和常量等)和包体(它含有子程序体与现有的延时常数)所组成。
子程序由执行公共操作的过程和函数组成。
包集合是分享属于实体数据的一种机制,把子程序、数据类型和元件说明看成建立设计的工具,则包集合可看成工具箱。
1)包集合的结构:package 包集合名 is[包集合说明语句];end 包集合名;package body 包集合名 is[包集合体说明语句];end 包集合名;注:包集合体为可选项。
3)包集合的使用:use work.[包集合名].all;例:●建一个包集合。
此例中,用字母符号代表用于控制的二进编码序列。
library ieee;use ieee.std_logic_1164.all;--ALU source operand control mnemonicspackage mnemonics0 isconstant aq: std_logic_vector(2 downto 0) :="000";constant ab: std_logic_vector(2 downto 0) :="001";constant zq: std_logic_vector(2 downto 0) :="010";constant zb: std_logic_vector(2 downto 0) :="011";constant za: std_logic_vector(2 downto 0) :="100";constant da: std_logic_vector(2 downto 0) :="101";constant dq: std_logic_vector(2 downto 0) :="110";constant dz: std_logic_vector(2 downto 0) :="111";end mnemonics0;●编译通过后即可使用。
注:maxplus2在编译此package时,报告: "…does not contain an architecture body—stopping compilation",但此package 将被正确分析,并可成功地编译使用此package的其他设计。
●用于其他使用此包集合的程序:--由控制信号控制两个多路选择器library ieee;use ieee.std_logic_1164.all;use work.mnemonics0.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity src_op is port(d,ad,bd,q: in unsigned(3 downto 0);src_ctl: in std_logic_vector(2 downto 0);r,s: buffer unsigned(3 downto 0));end src_op;architecture src_op of src_op isbeginwith src_ctl selectr <= ad when aq | ab,"0000" when zq | zb | za,d when others;with src_ctl selects <= q when aq | zq | dq,bd when ab | zb ,ad when za |da,"0000" when others;end src_op;3.配置描述层与层之间的连接关系以及实体与构造体之间的连接关系。