本文主要是介绍VHDL语言中的包集和原件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
介绍
在学习这部分之前,我一直感觉VHDL语言特别没有层次,代码一坨一坨的,让人看着很不舒服。学习了包集和原件,感觉好太多了。
原件(component)
一个元件就是一段结构完整的代码(包括库声明,实体和结构体)组成。将这个完整的结构声明为元件,就可以供其他电路使用,这样代码看起来就有层次化了。
我举一个与门的例子:
library ieee;
use ieee.std_logic_1164.all;
entity and_2 is
port (a,b : in std_logic;
and_2_out : out std_logic);
end entity;
architecture behavior of and_2 is
begin
and_2_out <= a and b;
end architecture;
丛上面可以看到,这就是一个与门结构的代码。但是我们如果将这个与门在其他代码或者包集(下面介绍)中进行声明后,然后对这个原件进行实例化,就可以直接使用了,就不用用到一个写一个,就很麻烦。
元件声明
我简单说一下元件声明的格式吧,如果还是不清楚使用方法的,可以去查其他网上的资料,网上资料应该很多。
格式:component 元件名 is
port(
端口名 : 信号模式 信号类型 );
end component;
其实port里面的内容和实体里的内容就是一样的。
在这我举个例子吧,很多时候可能看个例子就顿悟了。对上面说到的与门进行声明。
component and_2 is
port( a,b : in std_logic;
and_2_out: out std_logic);
end component;
元件的实例化
现在已经完成对元件的声明了,但是我们要怎样使用这个元件呢,这当然就要用到元件的实例化了。我们要在使用到这个元件的文件中对这个元件进行实例化,简单说就是连线吧,我也不知道我这么说恰当不恰当,哈哈哈哈,不恰当的话再改吧。
实例化的格式
标签: component 元件名
port map();
我还是以上面与门来举一个例子。
u1: component and_2 port map(a,b,and_out);
port map就是端口映射,我还是简单的介绍一下。
端口映射
端口映射有两种方式,分别是位置映射和名称映射。直接举例吧。
位置映射:port map(a,b,and_out);
名称映射:port map(a=>a,b=>b,and_out=>and_out);
包集(package)
在包集中,可以存放元件声明的部分,让整体看着很有层次。下面我会说明包集定义的格式,并举例子说明。
包集的格式
package 包集名
元件的声明部分
end package;
我还用上面的与门举例吧。
library ieee;
use ieee.std_logic_1164.all;
package my_component is
component and_2 is
port( a,b : in std_logic;
and_2_out: out std_logic);
end component;
接下来如果想要在哪个文件中调用这个与门元件。就在开头写上use.work_my_component.all就可以了。
结语
这次的分享就到这里吧。我感觉这部分还挺有用的。有什么问题大家留言吧,哈哈哈哈。
这篇关于VHDL语言中的包集和原件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!