vhdl中的generic

合集下载

vhdl程序的基本结构vhdl程序一般由5个部分组成

vhdl程序的基本结构vhdl程序一般由5个部分组成

块语句
块标号:BLOCK[保护表达式] [类属子句;] [端口子句;] [块说明部分;] BEGIN
<块语句部分;>
; END BLOCK 块标号
类属子句用于参数的定义;端口子句用于信号的定义; 块说明部分对该块要用到的信号、常数、元件和子程序 等进行说明;块语句部分对该块的功能进行描述,块语 句部分的语句是并行执行的,和书写顺序无关。
缺省说明: library std; use std.standard.all;
常用库及其程序包
IEEE: IEEE认可的标准库 std_logic_1164:定义了 std_logic, std_logic_vector, std_ulogic, std_ulogic_vector 等数据类型
VHDL 程序的基本结构
设计实体
实体说明
构造体
设计实体的组成
实体说明
Entity <实体名> is
[类属说明;] [端口说明;]
[实体说明部分;] [实体语句部分;] End [entity]<实体名>;
最简单的例: entity nothing is end nothing;
实体说明--类属说明
类属为设计实体和外部环境通讯的静态通信提供通道。可以定
实体说明--实体语句部分
是设计实体接口的共同部分。只能由并行断 言语句、并行过程调用语句、被动进程语 句组成,且不能在语句中给信号赋值。
设计实体
实体说明
构造体
设计实体的组成
构造体
architecture <构造体名> of <实体名> is
[构造体说明语句;]
Begin
<功能描述语句;>

VHDL第三章

VHDL第三章

2、格式
块标号:BLOCK [ (块保护表达式)] 接口说明 类属说明 BEGIN 并行语句 END BLOCK 块标号
3、例子
USE work.Types.all; USE work.Mvl7_functions.all; USE work.synthesis_types.all; ENTITY Q_reg IS PORT ( F : IN mvl7_vector(3 downto 0);
定义函数首
PACKAGE BODY packexp IS FUNCTION max (a,b : IN STD-LOGIC-VECTOR ) RETURN STD-LOGIC-VECTOR IS BEGIN SIGNAL X: STD-LOGIC-VECTOR IF (a >b) THEN x<= a; ELSE x<= b; END IF END FUNCTION max
结构体(ARCHITECTURE)
说明语句
第一层
功能描述语句 块语句 (BLOCK) 第二层
进程语句(PROCESS)
信号赋值语句
子程序调用语句 元件例化语句
3、结构体说明语句——第一层
信号 (SIGNAL) 加以说明 数据类型 (TYPE) 对 常数 (CONSTANT)
函数
(FUNCTION)
D触发器的例子 Entity test1 IS PORT (clk, d : IN BIT; q : OUT BIT); END test1; ARCHITECTURE test1_body OF test1 IS BEGIN PROCESS (clk) BEGIN IF (clk = „1‟) THEN q <= d; END IF; END PROCESS; END test1_body;

VHDL语言的主要描述语句

VHDL语言的主要描述语句

VHDL语言的主要描述语句按照语句的执行顺序对VHDL语言进行分类,包含两类语句:●并行描述语句该语句的执行与书写顺序无关,总是同时被执行●顺序描述语句从仿真的角度,该语句是顺序执行的进程语句(PROCESS)是最典型的并行语句,一个构造体可以有几个进程语句同时存在,而且并发执行。

但是进程部的所有语句都是顺序语句。

一、顺序描述语句顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。

如下分别介绍有关的顺序描述语句.1.WAIT语句进程在执行过程中总是处于两种状态:执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.等待语句的格式:*WAIT 无限等待*WAIT ON 敏感信号变化*WAIT UNTIL 条件满足*WAIT FOR 时间到(1)WAIT ON格式:WAIT ON 信号[,信号]例5-1PROCESS(a,b)BEGINy<=a AND b;END PROCESS;该例中的进程与下例中进程相同:例5-1PROCESSBEGINy<=a AND b;WAIT ON a,b;END PROCESS;例5-2PROCESS(a,b)BEGINy<=a AND b;WAIT ON a,b;END PROCESS;(2)WAIT UNTIL 直到条件满足格式: WAIT UNTIL 布尔表达式当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被启动.例: WAIT UNTIL ((x*10)<100)(3)WAIT FOR 等到时间到格式: WAIT FOR 时间表达式当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.例: WAIT FOR 20 ns;WAIT FOR (a*(b+c);(4)多条件WAIT 语句例: WAIT ON nmi,interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5 us 该等待有三个条件:第一,信号nmi和interrupt 任何一个有一次刷新动作第二, 信号nmi和interrupt 任何一个为真第三, 已等待5 us只要一个以上的条件被满足,进程就被启动.*注意:多条件等待时,表达式的值至少应包含一个信号量的值。

第八章VHDL结构与要素

第八章VHDL结构与要素

FUNCTION max (a,b : IN STD-LOGIC-VECTOR )函数首 RETURN STD-LOGIC-VECTOR ; FUNCTION max (a,b : IN BIT-VECTOR ) RETURN BIT-VECTOR; FUNCTION max (a,b : IN INTEGER ) RETURN INTEGER; END; 函数首 函数首
(3) 例 ENTITY MCU1 IS GENERIC(addrwidth:INTEGER:=16); PORT(add_bus:OUT STD_LOGIC_VECTOR( addrwidth-1 DOWNTO 0); …
(4) 特点 A、 与常数不同,类属的值可以由设计体 外部提供,常数只能从实体内部得到 赋值 B、 在一个实体中定义的、来自外部赋入 类属的值可以在实体内部或与之相应 的结构体中读到 C、 数据类型通常取INTEGER或TIME等类 型,但是VHDL综合器只支持数据类型 为整数的类属值
8-3 子程序
顺序语句定义和完成算法的程序模块; 定义和完成算法的程序模块 用顺序语句定义和完成算法的程序模块; 可以在三个不同的位置定义:程序包、结构体、进程; 可以在三个不同的位置定义:程序包、结构体、进程; 具有可重载性,每一次调用将在综合后的硬件中产生相应的模块; 具有可重载性,每一次调用将在综合后的硬件中产生相应的模块; 可重载性 有过程和函数两种类型 8-3-1 函数 自定义函数 预定义函数 函数的表达格式——由函数首和函数体组成 由函数首和函数体组成 函数的表达格式 FUNCTION 函数名 (参数表) RETURN 数据类型 参数表) 函数首 函数体
程序包(体) 定义函数体
结束FUNCTION语句 结束PACKAGE BODY语句

vhdl中generic的分频用法

vhdl中generic的分频用法

vhdl中generic的分频用法在VHDL中,generic是一种允许用户在实例化时动态地指定数值的机制。

它可以用于分频电路的设计,允许用户指定分频器的分频比。

分频器是一个电路,将输入时钟信号分频为一个较低频率的输出信号。

通常情况下,分频比是一个整数数值。

在VHDL中,可以使用generic将分频比作为参数传递给分频器的实例化。

例如,假设我们要设计一个4分频器,将输入时钟信号分频为输入时钟的1/4。

我们可以使用一个generic来指定这个分频比。

下面是一个使用generic实现的4分频器的伪代码示例:```vhdlentity Divider isgeneric(divide_ratio : positive := 4);port (clk_in : in std_logic;clk_out : out std_logic);end entity Divider;architecture Behavioral of Divider isbeginprocess(clk_in)variable counter : positive range 0 to divide_ratio-1 := 0;beginif rising_edge(clk_in) thencounter := counter + 1;if counter = divide_ratio-1 thenclk_out <= not clk_out;counter := 0;end if;end if;end process;end architecture;```在这个例子中,我们定义了一个名为divide_ratio的generic,它的默认值为4。

这个generic确定了分频比。

在实例化时,用户可以选择不同的值来改变分频比。

在架构区,一个进程使用了一个变量counter来计数输入时钟的上升沿。

当counter达到divide_ratio-1时,表示已经达到了所需的分频比,然后将输出时钟信号取反,并重置counter为0。

VHDL知识点

VHDL知识点

VHDL程序的基本结构一个完整的VHDL语言程序通常包含库(Library):如ieee, std, work等程序包(Package)实体(Entity):I/O 端口结构体或构造体(Architecture):具体描述电路所要实现的功能配置(Configuration)实体:用于描述所设计系统的外部接口特性;即该设计实体对外的输入、输出端口数量和端口特性。

结构体:用于描述实体所代表的系统内部的结构和行为;它描述设计实体的结构、行为、元件及内部连接关系。

库:存放已经编译的实体、结构体、程序包集合和配置。

程序包:存放各设计模块都能共享的数据类型、常数和子程序库;配置:实体对应多个结构体时,从与某个实体对应的多个结构体中选定一个作为具体实现。

保存的文件名与实体名字应该一致PORT(端口)说明PORT ( 端口名: 端口模式数据类型;端口名: 端口模式数据类型;…………) ;端口模式out (输出):只能被赋值,用于不能反馈的输出;in (输入):只能读,用于时钟输入、控制输入单向数据输入;inout(输入输出) :既可读又可被赋值,被读的值是端口输入值而不是被赋值,作为双向端口。

buffer(缓冲):类似于输出,但可以读,读的值是被赋值,用做内部反馈用,不能作为双向端口使用结构体的一般表达如下:ARCHITECTURE 结构体名称OF 实体名称IS[说明语句]可以不要BEGIN(功能描述语句)END ARCHITECTURE 结构体名称;功能描述语句:处于begin 与end 之间,描述结构体的行为与连接关系,它是构成结构体的主体。

描述实体的逻辑行为、以各种不同的描述风格表达的功能描述语句,或针对层次设计中,以元件例化语句为特征的外部元件(设计实体)端口间的连接。

库:是一些常用代码的集合。

库说明总是放在设计单元的最前面将常用代码存放到库中有利于设计的复用和代码共享,也可使代码结构更清晰;(1)IEEE 库IEEE 库定义了四个常用的程序包:std_logic_1164 (std_logic (8值)& std_ulogic (9值)逻辑值的逻辑运算) std_logic_arith (signed 、unsigned 数据类型的(算术、比较运算函数)std_logic_signed (std_logic_vector 类型数据的进行有符号算术、比较运算操作函数) std_logic_unsigned (std_logic_vector 类型数据进行无符号算术、比较运算操作函数)(2)STD 库(默认库)VHDL 的标准资源库,包括数据类型和输入/输出文本等内容。

VHDL语法简单情况总结

VHDL语法简单情况总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。

一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。

2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。

VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。

子类型定义使用SUBTYPE关键字。

3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。

TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。

VHDL语法简单总结

VHDL语法简单总结

VHDL语法简单总结一个VHDL程序代码包含实体(entity)、结构体(architecture)、配置(configuration)、程序包(package)、库(library)等。

一、数据类型1.用户自定义数据类型使用关键字TYPE,例如:TYPE my_integer IS RANGE -32 TO 32;–用户自定义的整数类型的子集TYPE student_grade IS RANGE 0 TO 100;–用户自定义的自然数类型的子集TYPE state IS (idle, forward, backward, stop);–枚举数据类型,常用于有限状态机的状态定义一般来说,枚举类型的数据自动按顺序依次编码。

2.子类型在原有已定义数据类型上加一些约束条件,可以定义该数据类型的子类型。

VHDL不允许不同类型的数据直接进行操作运算,而某个数据类型的子类型则可以和原有类型数据直接进行操作运算。

子类型定义使用SUBTYPE关键字。

3.数组(ARRAY)ARRAY是将相同数据类型的数据集合在一起形成的一种新的数据类型。

TYPE type_name IS ARRAY (specification) OF data_type;–定义新的数组类型语法结构SIGNAL signal_name: type_name [:= initial_value];–使用新的数组类型对SIGNAL,CONSTANT, VARIABLE进行声明例如:TYPE delay_lines IS ARRAY (L-2 DOWNTO 0) OF SIGNED (W_IN-1 DOWNTO 0);–滤波器输入延迟链类型定义TYPE coeffs IS ARRAY (L-1 DOWNTO 0) OF SIGNED (W_COEF-1 DOWNTO 0);–滤波器系数类型定义SIGNAL delay_regs: delay_lines; –信号延迟寄存器声明CONSTANT coef: coeffs := ( ); –常量系数声明并赋初值4.端口数组在定义电路的输入/输出端口时,有时需把端口定义为矢量阵列,而在ENTITY中不允许使用TYPE进行类型定义,所以必须在包集(PACKAGE)中根据端口的具体信号特征建立用户自定义的数据类型,该数据类型可以供包括ENTITY在内的整个设计使用。

VHDL的元件例化语句

VHDL的元件例化语句
port(a,b:in std_logic; y:out std_logic);
end nand_2; architecture one of nand_2 is begin
process(a,b) begin
y<=a nand b; end process; end one;
library ieee; use ieee.std_logic_1164.all; entity nand_4 is
(1)完成各种元件的设计。 (2)元件声明。 (3)通过元件例化语句调用这些元件, 产生需要的设计电路。
元件声明语句的格式
COMPONENT 元件名 [GENERIC <参数说明>;] PORT <端口说明>;
END COMPONENT;
元件例化语句的格式
元件例化就是将元件的引脚与调用该元件 的端口的引脚相关联。关联方法有位置关 联,名字关联,混合关联。
用将元件声明放在程序包里的设计方法设计4输入的与非 与非门,详见演示实例mynand_4.qpf。 (1)在QuartusII 的根目录下新建工程mynand_4. (2)编辑VHDL源程序文件 nand_2.vhd,mypkg.vhd,mynand_4.vhd. nand_2.vhd用来描述2输入与非门。 mypkg.vhd用来进行元件声明。 mynand_4.vhd实现元件例化。
u1:nand_2 port map(a,b,y1);--元件例化 u2:nand_2 port map(c,d,y2); u3:nand_2 port map(y1,y2,y); end one;
例1:利用2输入与非门元件,设计4输入的与 非与非电路。
方法2:将元件声明放在程序包里进行说明

VHDL语言的结构

VHDL语言的结构

BEGIN
[功能描述语句]
END 结构体名;
2.1 结构体名 结构体名由设计者自行定义,OF后面的 实体名指明了该结构体所对应的是哪个实体。 有些设计实体有多个结构体,这些结构体的 结构体名不可相同,通常用dataflow(数据 流)、behavior(行为)、structural(结构)
命名。这3个名称体现了3种不同结构体的描
实体语句结构如下:
ENTITY 实体名 IS [GENERIC(类属表);] [PORT(端口表);]
END ENTITY 实体名;
例: ENTITY or2 IS
PORT(a,b:IN STD_LOGIC;
C: OUT STD_LOGIC);
END ENTITY or2;
注意:实体应以语句“ENTITY 实体名 IS”开始,语句“END ENTITY 实体名;” 结束。 在层次化系统设计中,实体说明是整个 模块或整个系统的输入输出(I/O)接口; 在一个器件级的设计中,实体说明是一个 芯片的输入输出(I/O)。
图中5种功能描述语句的基本组成和功能分别 是:
块语句是由一系列并行语句构成的组合体, 它的功能是将结构体中的并行语句组成一个 或多个子模块。
进程语句定义顺序语句模块,用以将从外部 获得的信号值或内部运算数据向其他的信号 进行赋值。
信号赋值语句将设计实体内的处理结果向定 义的信号或界面端口进行赋值。 子程序调用语句可以调用进程或参数,并将 获得的结果赋值于信号。 元件例化语句对其他的设计实体做元件调用 说明,并将此元件的端口与其他元件、信号 或高层实体的界面端口进行连接。 各语句后面将介绍
PROCESS语句的结构
[进程标号] PROCESS [(敏感信号表)] [IS] [进程说明语句] BEGIN 顺序描述语句

vhdl的名词解释

vhdl的名词解释

vhdl的名词解释VHDL,即VHSIC(Very High-Speed Integrated Circuits) Hardware Description Language,是硬件描述语言的一种。

它是一种用于描述数字电路和系统的语言,广泛应用于电子设计自动化(EDA)领域,特别是在数字电路设计、验证和仿真上。

VHDL的设计初衷是为了提供一种高层次的抽象,使设计人员能够更容易地描述复杂的硬件系统。

在VHDL中,主要有以下几个概念和关键词需要理解和解释。

1. 实体(entity)实体是VHDL代码中描述设计组件的顶层概念。

它类似于面向对象编程中的类定义,定义了一个模块的接口特性,包括输入、输出、信号和配置等。

实体在设计中起到了模块化的作用,能够将整个电路划分为相互独立且可复用的部分。

2. 体系结构(architecture)体系结构是对实体的具体实现描述。

它包含了实体中组件的结构和行为信息,以及内部信号和寄存器等。

体系结构中定义了组件的内部逻辑,以及如何将输入转换为输出。

一个实体可以有多个体系结构,用于实现不同的功能或优化设计。

3. 信号(signal)信号是数据在VHDL设计中的基本单元。

它类似于编程语言中的变量,用于在不同的组件之间传递数据。

在VHDL中,信号可以是标量(单个值)或向量(多个值)。

通过信号的赋值和传输,不同的组件能够进行数据的交互和处理。

4. 进程(process)进程是VHDL中的一种行为描述方式。

它类似于软件中的线程,可以定义一个并发执行的代码块。

进程可以响应信号的变化、执行逻辑操作、进行状态转换等。

通过进程,设计者可以描述顺序逻辑和组合逻辑的行为。

5. 泛型(generic)泛型是VHDL中的一种参数化机制。

它类似于编程语言中的函数模板或宏定义,用于在实体或体系结构中定义一组可配置的属性。

通过泛型,可以实现各种配置的复用,使得设计更加灵活和可扩展。

6. 测试台(testbench)测试台是用于验证和仿真VHDL设计的环境。

VHDL程序设计教程习题解答

VHDL程序设计教程习题解答

VHDL程序设计教程习题参考解答第1章思考题解答1.什么是VHDL?简述VHDL的发展史。

答:VHDL是美国国防部为电子项目设计承包商提供的,签定合同使用的,电子系统硬件描述语言。

1983年成立VHDL语言开发组,1987年推广实施,1993年扩充改版。

VHDL 是IEEE标准语言,广泛用于数字集成电路逻辑设计。

2.简述VHDL设计实体的结构。

答:实体由实体名、类型表、端口表、实体说明部分和实体语句部分组成。

根据IEEE标准,实体组织的一般格式为:ENTITY 实体名 IS[GENERIC(类型表);] --可选项[PORT(端口表);] --必需项实体说明部分; --可选项[BEGIN实体语句部分;]END [ENTITY] [实体名];3.分别用结构体的3种描述法设计一个4位计数器。

答:用行为描述方法设计一个4位计数器如下,其它描述方法,读者可自行设计。

LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;use ieee.std_logic_unsigned.all;ENTITY countA ISPORT (clk,clr,en:IN STD_LOGIC;Qa,qb,qc,qd:OUT STD_LOGIC);END countA;ARCHITECTURE example OF countA ISSIGNAL count_4:STD_LOGIC_vector (3 DOWNTO 0);BEGINQa <= count_4(0);Qb <= count_4(1);Qc <= count_4(2);Qd <= count_4(3);PROCESS (clk,clr)BEGINIF (clr = '1' ) THENCount_4 <= "0000";ELSIF (clk'EVENT AND clk = '1' ) THENIF (en = '1' ) THENIF (count_4 = "1111") THENcount_4 <= "0000";ELSEcount_4 <= count_4+ '1';END IF;END IF;END IF;END PROCESS;END example;第2章思考题解答1.什么叫对象?对象有哪几个类型?答:在VHDL语言中,凡是可以赋于一个值的客体叫对象(object)。

FPGA学习笔记05-VHDL语法基础-类属语句(GENERIC)

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 entity用法

vhdl entity用法

vhdl entity用法VHDL entity用法在VHDL设计语言中,entity是用来定义硬件模块的基本组成单元。

一个entity可以认为是一个顶层模块或一个子模块。

在这篇文章中,我们将详细讲解VHDL entity的用法。

以下是一些常见的用法示例:定义entityentity MyEntity isport (clk : in std_logic;rst : in std_logic;data : in std_logic_vector(7 downto 0);result : out std_logic_vector(3 downto 0));end entity MyEntity;在上面的示例中,我们定义了一个名为”MyEntity”的entity,它有一些输入和输出端口。

输入端口包括”clk”(时钟信号),“rst”(复位信号)和”data”(数据信号),输出端口为”result”(结果信号)。

通过使用这个定义,我们可以创建一个模块来使用这些端口。

设置entity属性entity MyEntity isgeneric (WIDTH : integer := 8);port (clk : in std_logic;rst : in std_logic;data : in std_logic_vector(WIDTH-1 downto 0);result : out std_logic_vector(WIDTH/2-1 downto 0));end entity MyEntity;在上面的示例中,我们使用了一个泛型属性来定义输入和输出端口的宽度。

通过这种方式,我们可以在实例化entity时根据需要设置端口宽度,使其更加灵活。

使用复杂数据类型entity MyEntity isport (clk : in std_logic;rst : in std_logic;data : in std_logic_vector(7 downto 0);result : out complex_type);end entity MyEntity;type complex_type isrecordreal : std_logic_vector(7 downto 0);imag : std_logic_vector(7 downto 0);end record;在上面的示例中,我们使用了VHDL的record类型定义了一个复杂的数据类型”complex_type”,然后在entity中使用了这个复杂数据类型作为输出端口的类型。

VHDL程序实体

VHDL程序实体

VHDL程序实体实体说明有类属性说明和端口说明两个部分组成。

实体的一般格式为:entity<entity_name> isgeneric (——类属性说明<generic_name> :<type> := <value>;<other generic> ........);port ( ——端口说明<port_name> : <mode> <type>;<other ports> .......);end <entity_name>;1.类属说明类属说明是实体说明中的可选项,放在端口说明之前,用于指定参数,其一般书写格式为:generic (<generic_name> :<type> := <value>;<other generic> ........);类属说明常用来定义实体端口的大小、设计实体的物理特性、总线宽度、元件例化的数量等。

2.端口说明实体的一组端口定义称作端口说明。

端口说明是对设计实体与外部接口的描述,是设计实体和外部环境动态通信的通道,其功能对应于电路图符号的引脚。

实体说明中的每一个I/O信号称为端口,一个端口就是一个数据对象。

端口可以被赋值,也可以当作变量在逻辑表达式中。

端口说明结构必须有端口名、端口方向和数据类型,一般格式为:port (<port_name> : <mode> <type>;<other ports> .......);端口名端口名是赋予每个外部引脚的名称,名称的含义要明确,端口名通常用几个英文字母或者一个英文字母加数字表示。

模式模式用来说明数据、信号通过该端口的传输方向。

端口模式有in(输入)、out(输出)、buffer(缓冲)、inout(双向)输入模式下,输入仅允许数据流入端口。

VHDL是一种硬件描述语言(课程总结)

VHDL是一种硬件描述语言(课程总结)

VHDL是一种硬件描述语言,用于对电子电路和系统的行为进行描述。

VHDL是VHSIC Hardware Description Language的缩写。

所有的VHDL代码都可以仿真,但不是所有的VHDL代码都可以综合。

V ery high speed integrated circuitVHDL和V erilog HDL都与工艺和工具无关,可以方便的进行移植和重用。

可编程逻辑器件包括:复杂可编程逻辑器件(CPLD:Complex Programmable Logic Devices),现场可编程门阵列(FPGA:Field Programmable Gate Arrays)。

VHDL语言从根本上讲是并发执行的。

因此常称之为代码,而不是程序。

VHDL中,只有在进程(PROCESS)、函数(FUNCTION)、和过程(PROCEDURE)内部的语句才是顺序执行的。

第二章VHDL代码结构VHDL代码的三个基本组成部分:库(LIBRARY)声明、实体(ENTITY)、构造体(ARCHITECTURE)库声明:列出当前设计中需要的所有库文件实体:定义电路的I/O引脚;构造体:包含的代码描述电路要实现的功能。

库的建立有利于设计重用和代码共享同时使代码结构更加清晰常用库:IEEE库,Std库,work库std_logic_1164:当用到std_logic及其衍生类型时,需要声明;std_logic_arith:定义了signed和unsigned类型和相关算数运算和比较运算。

std_logic_signed:使std_logic_vector 类型的数据同signed一样执行。

std_logic_unsigned:std ,work库在程序中都是默认可见的,直接使用就可,不需要再对其进行声明;只有ieee库在使用前需要声明。

实体(ENTITY)用来描述电路所有的输入/输出引脚,端口的信号模式4种:IN,OUT,INOUT,BUFFER。

vhdl不同位宽数据相加

vhdl不同位宽数据相加

VHDL不同位宽数据相加1. 背景介绍VHDL(VHSIC Hardware Description Language)是一种硬件描述语言,广泛用于数字电路的设计和验证。

在数字电路中,经常需要对不同位宽的数据进行加法运算。

本文将介绍在VHDL中如何实现不同位宽数据的相加。

2. 数据位宽的概念数据位宽指的是一个数据的二进制表示中的位数。

例如,一个8位的数据可以表示0-255的整数。

在VHDL中,我们需要明确每个数据的位宽,以便正确地进行运算。

3. VHDL的基本语法在VHDL中,我们使用entity和architecture两个关键字来定义电路的外部接口和内部实现。

接下来,我们将使用一个例子来说明如何实现不同位宽数据的相加。

entity adder isgeneric(width1 : positive := 8; -- 第一个数据的位宽width2 : positive := 8 -- 第二个数据的位宽);port(a : in std_logic_vector(width1-1 downto 0); -- 第一个输入数据b : in std_logic_vector(width2-1 downto 0); -- 第二个输入数据sum : out std_logic_vector(max(width1, width2)-1 downto 0) -- 结果数据);end entity adder;architecture rtl of adder isbeginsum <= std_logic_vector(unsigned(a) + unsigned(b)); -- 进行相加运算end architecture rtl;在上面的例子中,我们定义了一个名为adder的电路,它包含了两个输入端口a和b,以及一个输出端口sum。

输入端口a和b的位宽可通过generic关键字进行配置,默认为8位。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VHDL语言中generic(类属)
类属GENERIC 参量是一种端口界面常数,常以一种说明的形式放在实体或块结构体前的说明部分。

类属为所说明的环境提供了一种静态信息通道,类属与常数不同,常数只能从设计实体的内部得到赋值且不能再改变,而类属的值可以由设计实体外部提供。

因此设计者可以从外面通过类属参量的重新设定而容易地改变一个设计实体或一个元件的内部电路结构和规模。

类属参量以关键词GENERIC 引导一个类属参量表,在表中提供时间参数或总线宽度等静态信息。

类属表说明用于设计实体和其外部环境通信的参数,传递静态的信息。

类属在所定义的环境中的地位与常数十分接近,但却能从环境,如设计实体,外部动态地接受赋值,其行为又有点类似于端口PORT,因此常如以上的实体定义语句那样将类属说明放在其中,且放在端口说明语句的前面。

在一个实体中定义的来自外部赋入类属的值可以在实体内部或与之相应的结构体中读到,对于同一个设计实体,可以通过GENERIC 参数类属的说明,为它创建多个行为不同的逻辑结构,比较常见的情况是利用类属来动态规定一个实体的端口的大小,或设计实体的物理特性,或结构体中的总线宽度,或设计实体中底层中同种元件的例化数量等等。

一般在结构体中,类属的应用与常数是一样的,例如:当用实体例化一个设计实体的器件时,可以用类属表中的参数项定制这个器件,如可以将一个实体的传输延迟,上升和下降延时等参数加到类属参数表中,然后根据这些参数进行定制,这对于系统仿真控制是十分方便的。

其中的常数名是由设计者确定的类属常数名,数据类型通常取INTEGER 或TIME 等类型,设定值即为常数名所代表的数值,但需注意VHDL 综合器仅支持数据类型为整数的类属值。

程序3-2和3-3是两个使用了类属说明的实例描述
程序3-2
ENTITY mcu1 IS
GENERIC (addrwidth : INTEGER := 16);
PORT(
add_bus : OUT STD_LOGIC_VECTOR(addrwidth-1 DOWNTO 0) );
...
在这里GENERIC 语句对实体mcu1 作为地址总线的端口add_bus 的数据类型和宽
度作了定义即定义add_bus 为一个16 位的标准位矢量定义addrwidth 的数据类型是
整数INTEGER 其中常数名addrwidth减 1 即为15 所以这类似于将上例端口表写成PORT (add_bus : OUT STD_LOGIC_VECTOR (15 DOWNTO 0));
由程序3-2 可见对于类属值addrwidth 的改变将对结构体中所有相关的总线的
定义同时作了改变由此将改变整个设计实体的硬件结构
程序3-3 2输入与门的实体描述VHDL实用教程22
ENTITY PGAND2 IS
GENERIC ( trise : TIME := 1 ns;
tfall : TIME := 1 ns ) ;
PORT ( a1 : IN STD_LOGIC ;
a0 : IN STD_LOGIC ;
z0 : OUT STD_LOGIC );
END ENTITY PGAND2;
这是一个准备作为 2 输入与门的设计实体的实体描述在类属说明中定义参数trise 为
上沿宽度tfall为下沿宽度它们分别为1ns 这两个参数用于仿真模块的设计以下的程序3-5 是一个顶层设计文件它在例化语句中调用了程序3-4 读者应注
意到在程序3-4 中的类属变量n 并没有如程序3-2 那样明确规定了它的取值n 的具
体取值是在程序3-5 中的类属映射语句GENERIC MAP ( )中指定的并在两个不同的
类属映射语句中作了不同的赋值
程序3-4 和3-5 给出了类属语句的一种典型应用。

显然,类属语句的应用,为方便而迅速地改变电路的结构和规模提供了极便利的条件。

程序3-4
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY andn IS
GENERIC ( n : INTEGER );
PORT(a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);
c : OUT STD_LOGIC);
END;
ARCHITECTURE behav OF andn IS
BEGIN
PROCESS (a)
V ARIABLE int : STD_LOGIC;
BEGIN
int := '1';
FOR i IN a'LENGTH - 1 DOWNTO 0 LOOP
IF a(i)='0' THEN
int := '0';
END IF;
END LOOP;
c <=int ;
END PROCESS;
END;
程序3-5
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY exn IS
PORT(d1,d2,d3,d4,d5,d6,d7 : IN STD_LOGIC;
q1,q2 : OUT STD_LOGIC);
END;
ARCHITECTURE exn_behav OF exn IS
COMPONENT andn
GENERIC ( n : INTEGER);
PORT(a: IN STD_LOGIC_VECTOR(n-1 DOWNTO 0);
c: OUT STD_LOGIC);
END COMPONENT ;
BEGIN
u1: andn GENERIC MAP (n =>2)
PORT MAP (a(0)=>d1,a(1)=>d2,c=>q1);
第3章VHDL程序结构
23
u2: andn GENERIC MAP (n =>5)
PORT MAP (a(0)=>d3,a(1)=>d4,a(2)=>d5,
a(3)=>d6,a(4)=>d7, c=>q2);
END;
程序3-5 给出了类属映射语句GENERIC MAP ( )配合端口映射语句PORT MAP ( ) 语句的使用范例端口映射语句是本结构体对外部元件调用和连接过程中描述元件间端口的衔接方式的而类属映射语句具有相似的功能它描述相应元件类属参数间的衔接和传送方式读者不妨利用程序3-5 中GENERIC MAP ( )的使用方法作一些相关的练习。

相关文档
最新文档