vhdl设计中使用元件的实例化

VHDL模块间调用COMPONENFT的使用------直接数字频率合成器       最近在使用QUARTUSII设计直接数字频率合成器,用VHDL语言编写各个模块并单独设计仿真后需要把模块综合起来使用,虽然可以将各个模块单独生成.bsf文件,再使用原理图连接,但终归违背了语言的初衷。查阅资料,发现VHDL语言的元件调用语句成分可以实现单独的模块综合调用!      一下以直接数字频率合成器为例进行说明!其中涉及到的有普通模块的调用,ROM存储器的调用! LIB... 阅读详情

感觉吧,实例化就是把已经写好的元件在新的元件中调用,从而组成更大的元件。

在vhdl设计中常常将常用、典型的功能实体放在同一个目录下面,在设计复杂的电路的时候使用这些已经设计好的实例,这样就使设计变得简单了。

1.元件声明是对VHDL模块(即底层设计,也是完整的VHDL设计)的说明,使之可在其他被调用,元件声明可放在程序包中,也可在某个设计的构造体中声明。
  元件例化指元件的调用。元件声明及元件例化的语法分别如下:
元件声明:
component
〈元件实体名〉
prot
(〈元件端口信息,同该元件实现时的实体的port部分〉);
end compnent
;
元件例化:
〈例化名〉:〈实体名,即元件名〉port map(〈端口列表〉);
  例如,在一个设计中调用一个模为10的计数器cntm10和一个七段译码器decode47构成如下电路,则该调用过程孥即元件例化。
VHDL
描述如下:
library ieee;
use ieee.std_logic_1164.all;
entity cntvh10 is
port (rd, ci, clk   : in std_logic;
          co   : out std_logic;
          qout : out std_logic_vector (6 downto 0));
end cntvh10;
architecture arch of cntvh10 is
Component decode47 is
port (adr : in std_logic_vector (3 downto 0);
    decodeout : out std_logic_vector (6 downto0));
end Component;

2.元件例化

Component cntm10 is
Port ( ci     :   in std_logic;
   nreset     :   in std_logic;
   
clk     :   in std_logic;
   
co      :   out std_logic;
   
qcnt    :    buffer std_logic_vector (3 downto 0));
end Component;
signal qa: std_logic_vector (3 downto 0);
begin
  u1 : cntm10 port map (ci, rd, clk, co, qa);       —元件例化

  u2 : decode47 port map ( decodeout=>qout, adr=>qa);
end arch;
  元件例化时的端口列表可按位置关联方法,如u1,这种方法要求的实参(该设计中连接到端口的实际信号,如ci,等)所映射的形参(元件的对外接口信号)的位置同元件声明中的一样;元件例化时的端口列表也可按名称关联方法映射实参与形参,如u2。格式为(形参1=>实参1,形参2=>实参2,···)。这种方法与位置无关。

  参数化元件可增加元件例化的灵活性。所谓参数化元件是指元件的规模(或特性)可以通过引用参数的形式指定的一类元件。例如,下面定义了一个位数可调的计数器:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
ues ieee.std_logic_unsigned.all;
entity cntnbits is
  generic (cntwidth:integer:=4);        —定义了一个可调参数
  port ( ci     : in std_logic;
     
nreset : in std_logic;
     
clk    : in std_logic;
     
co     : out std_logic;
     
qcnt    : buffer std_logic_vector (3 downto 0));
end cntmbits;
architecture behave of antnbits is
constant allis1 : std_logic_vector (cntwidth-1 downto 0) := (others=>’1’);
begin
Co <=’1’ when (qcnt=all is 1 and ci=’1’)   else’0’;
Process (clk)
      Begin
           if (nreset=’0’) then
              Qcnt<= (others=>’0’);
           elsif (clk’event   and   clk=’1’) then
                if (ci=’1’) then
                
 
Qcnt<=qcnt+1;
                end if;
           end if;
    end process;
end behave;
  可以算出,该计数器同第1部分的四位计数器相比,改动不大,其中在实体处增加了一行:

  
  generic (cntwidth:integer:=4)
  该行定义了一个整数cntwidth(计数宽度)并赋初值‘4’,用它代替原来的固定的计数器长度,若想设计的计数器位数8位,仅需将cntwidth初值赋为8:

   generic (cntwidth : integer :=8);
若以此计数器为元件,则元件声明为:

Component cntnbit is
generic (cntwidth:integer:=4);
port ( ci     : in std_logic;
   nreset : in std_logic;
   
clk    : in std_logic;
   
co     : out std_logic;
   
qcnt   : buffer std_logic_vector (cntwidth-1 downto 0));
end Component;

下面基础元件是一个十进制计数器,然后用三个计数器组成了一个更大的计数器。

看代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity cnt10 is
port(clk,clr,en:in std_logic;
   q:out std_logic_vector(3 downto 0);
   co:out std_logic);
end entity;

architecture rtl of cnt10 is
signal tmp:std_logic_vector(3 downto 0);
begin
process(clk,clr,en)
begin
if clr='1' then
   tmp<="0000";
elsif rising_edge(clk) then
   if en='1' then
    if tmp="1001" then
     tmp<="0000";
    else
     tmp<=tmp+'1';
    end if;
   end if;
end if;
end process;

process(tmp)
begin
   if tmp="0000" then
    co<='1';
   else
    co<='0';
   end if;
end process;
q<=tmp;
end;

生成的rtl文件如下:


然后是顶层代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;

entity watch is
port(clk0,clr0,en0:in std_logic;
   dataout:out std_logic_vector(11 downto 0));
end entity;

architecture rtl of watch is
component cnt10 is
port(clk,clr,en:in std_logic;
   q:out std_logic_vector(3 downto 0);
   co:out std_logic);
end component;

signal co1:std_logic;
signal co2:std_logic;

begin
U1:cnt10 port map(clk0,clr0,en0,dataout(3 downto 0),co1);
U2:cnt10 port map(co1, clr0,en0,dataout(7 downto 4),co2);
U3:cnt10 port map(co2, clr0,en0,dataout(11 downto 8));
end;

生成的rtl文件如下:


因为通常芯片用的晶振为50Mhz,所以肯定也是需要分频的,这次就没分频了,练习嘛

VHDL语言中的包集和原件 这次的分享就到这里吧。我感觉这部分还挺有用的。有什么问题大家留言吧,哈哈哈哈。 阅读详情

相关推荐

FPGA之道(22)VHDL基本程序框架

在介绍详细的VHDL语法之前,让我们先来了解一下VHDL代码的基本程序框架,这样可以让我们先对VHDL程序设计有一个整体的概念把握,进而在后续的VHDL语法学习中做到有的放矢。

Reborn Lee 8309

VHDL中元件(模块)的例化

**记录学习,记录成长 1.VHDL中元件的例化可分为两部分 第一部分:元件声明,声明要例化的元件。 第二部分:元件例化,声明结束之后就可以对元件进行例化或者说是调用了。 其中声明部分在结构体的说明语句部分(即architecture和begin之间)。而调用部分同一个结构体的电路描述部分(即begin之后)。 2.元件声明格式: Component 元件名称 is Port(元件端口信息); E...

qq_36143127的博客 3万+

VHDL入门基础——系统层次化设计

VHDL基础——系统层次化设计篇 元件例化 目的:是将已设计好的实体当作一个元件来使用,用VHDL语言描述各元件之间的关系。因此元件例化=元件定义(已有元件调用)+连接关系映射(各元件连接关系)。 Conponent 元件名 is [generic(属类表)]; port(端口名表); end conpenent; --元件定义 例化名1:元件名1 port map(元件端口名=>连接端口名); 例化名2:元件名2 port map(元

vinyjh的博客 4156

VHDL语句&基本概念

VHDL的并行语句 ①模块例化(component) 先声明在例化 ②赋值语句 ③进程语句(process) ④条件选择语句 when/else对应if/else with/select/when 对应case语句 ⑤generate语句

m0_46560857的博客 5583

LVI-SAM适配KITTI数据集避坑指南:IMU频率与数据同步问题解析

本文深入解析了将LVI-SAM框架适配KITTI数据集时,在IMU频率与多传感器数据同步方面遇到的核心挑战与解决方案。针对KITTI数据集中sync与extract两种数据包的差异,文章提供了从数据选择、参数调优到时间戳诊断与修复的完整避坑指南,帮助开发者实现稳定高效的SLAM系统部署。

7z8x2c4v6b9的博客 250

别再为EPI形变头疼了!FSL的topup+eddy实战保姆级教程(含AP/PA数据采集要点)

本文详细介绍了如何使用FSL的topup和eddy工具解决EPI形变问题,包括数据采集要点、参数设置和实战操作步骤。通过AP/PA双编码数据和精确的形变场估计,有效矫正MRI图像中的几何畸变,提升弥散数据质量。特别适合需要处理高场强MRI数据的研究人员和技术人员。

weixin_28725949的博客 401

基于VHDL语言的全加器的设计

基于VHDL语言的全加器的设计 全加器可以由两个半加器和一个或门连接而成,这样得到的半加器电路称为顶层文件。 设计原理图如下: 下面全加器的设计采用层次结构的VHDL程序设计方法,采用元件例化语句。 工程文件名与顶层文件(全加器)文件名一样; 把全加器、半加器、或门的vhdl文件都要包含到工程中; 在全加器文件中声明半加器、或门为元件; 然后例化三个元件:两个半加器和一个或门。 软件说明:Mo...

俯κǎń迗倥 1万+

保姆级教程:用YOLOv5s搞定钢材表面缺陷检测,从数据集NEU-DET到模型部署全流程

本文提供了一份详细的YOLOv5s钢材表面缺陷检测教程,涵盖从NEU-DET数据集处理到模型部署的全流程。针对工业环境中的实际限制,如计算资源有限和标注样本少等问题,提供了优化方案和实用技巧,帮助开发者快速实现高效的钢材缺陷检测系统。

weixin_30568591的博客 465

基于VHDL奇偶校验发生器程序设计

基于VHDL奇偶校验发生器程序设计 知识点梳理: GENERIC参数的映射 在元件进行实例化时如果需要传递参数,则须使用关键字generic,来进行generic参数的映射。语法结构: label:元件名称 generic map(参数列表) port map (端口列表);--进行generic参数的说明和传递 通用属性语句(GENERIC)的一种用法 用于指定常规参数,所指定的参数是静态的,方便设计人员进行参数修改,可增加代码的灵活性和可重用性。 generic语句须在ENTITY中进行声明;

俯κǎń迗倥 5087

从零搭建UVM验证环境:新手入门实践指南

在数字芯片验证领域,SystemVerilog和UVM(Universal Verification Methodology)是构建高效验证环境的核心技术。其原理基于面向对象编程和事务级建模,通过组件化架构实现验证的复用性和自动化。这一方法学的技术价值在于显著提升验证效率与质量,广泛应用于处理器、通信芯片等复杂设计的验证场景。本文聚焦于UVM验证环境的搭建实践,通过一个加法器实例,详细解析了uvm_driver、uvm_monitor、uvm_sequence等关键组件的协同工作机制,并提供了基于Quest

weixin_30015371的博客 446

用Cadence IC618和TSMC 180nm工艺,从零仿真一个2.4GHz双平衡吉尔伯特混频器

本文详细介绍了使用Cadence IC618和TSMC 180nm工艺从零开始仿真2.4GHz双平衡吉尔伯特混频器的完整流程。涵盖设计环境搭建、原理图设计、仿真配置、性能验证及版图设计等关键步骤,特别适合射频集成电路设计的学习者和实践者参考。通过实操技巧与工艺库结合的工程实践,帮助读者掌握混频器设计的核心技术。

weixin_30328063的博客 551

Xilinx FPFA中LUT4_L 元件的使用

最近看关于FPGA的结构,发现LUT实际上是可以使用原语或者原理图中添加symbol调用。symbol information中有关于这个元件的例化原语。 ---------------------------------------------------------------------------------------------------------------------

liu33853的专栏 2783

YOLO26改进策略【Neck】| CVPR 2024 MFM(Modulation Fusion Module,调制融合模块):动态特征加权融合,突出关键特征抑制冗余

本文主要利用DCMPNet中的 MFM 模块优化 YOLO26 的目标检测网络模型。模块通过动态调制特征融合过程,实现了对多尺度、跨层级特征的智能聚合。将其应用于的改进过程中,针对目标检测中边界特征与语义信息的互补性需求,缓解网络中浅层细节与深层语义融合不足的问题。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image Dehazing在图像去雾网络中,不同层级和类型的特征包含着互补的信息(如浅层的

Limiiiing的博客 224

VHDL语法入门 (七) 包集和元件

component和entity的声明格式一样,必须指出端口名称以及端口模式(in,out,buffer或inout)以及数据类型(std_logic_vector,interger和boolean等)。元件(component),函数(function)以及过程(procedure)等部分的使用往往是为了实现常用代码的共享。一个元件(component)是一段结构完整的常用代码(包括库声明,实体和结构体这些基本组成部分)。package的声明部分包括以下内容:元件,函数,过程,类型和常量说明等。

EfunStudy的博客 4608

YOLO系列算法改进 | C2PSA改进篇 | 融合BinaryAttention二值化注意力 | 轻量化与效率双提升,适用于高分辨率图像检测与边缘部署场景 | CVPR 2026

YOLO系列算法改进 | C2PSA改进篇 | 融合BinaryAttention二值化注意力 | 轻量化与效率双提升,适用于高分辨率图像检测与边缘部署场景 | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用C2PSA_BinaryAttention创新模块进行改进)

2502_91881744的博客 165

国社科“选题设计论证”部分不再难!用AI快速梳理五大核心板块,轻松撰写出高质量的基金申报书(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 934

vhdl_用 VHDL 的行为描述方式设计 1 位 BCD 码加法器.

元件例化法和行为描述法: LIBRARY ieee; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY BCDadder_xuchaoxin IS PORT (--基于四位全加器的8421BCD码全加器 AA, BB : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CIN : IN STD_LOGIC; SS : OUT STD_LOGIC_VECTOR(3 DOWNTO 0

xuchaoxin1375的博客 4100

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

VHDL数字电路设计教程

VHDL数字电路设计教程

qq_42959171的博客 2032

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

generate语句实例化元件(HDLbits)

generate语句实例化元件(HDLbits) Created: November 23, 2021 8:11 PM Last Edited Time: November 23, 2021 8:26 PM 给定一个16位全加器add16,自行编写1位全加器元件add1,完成下图中所示的32位全加器: module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output,cout); module top_mod

qq_43583549的博客 533

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

VHDL元件例化

课设又要用到VHDL了,自学了一下元件例化,还是比较简单的 正文开始 一、写好需要用到的元件 这里我用一个简单的12进制计数器和7段数码管显示程序 -------------------------12进制计数器------------------------------------------------- LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; U...

qq_40033089的博客 1万+

VHDL的元件例化

VHDL的元件例化元件声明元件例化三种关联方式两种调用方式生成语句 元件声明 COMPONENT 元件名 [GENERIC<参数说明>;] PORT<端口说明>; END COMPONENT; 元件例化 三种关联方式 1.位置关联 这种方式中,信号要放在原件定义中所对应的位置上。 元件名 port map(信号1, 信号2, ……); 2.名字关联 信号关联式形如: a => a1 意思是将元件的引脚a与调用该元件的端口a1相关联。这种情况下,位置可以是任意的。 元件名

冷夜 4865

quartus——使用vhdl语言实现层次化设计

层次化设计——元件例化语句的整理 背景 这是我上周的作业,做的过程中遇到很多问题,我想要是不及时整理下来很快就会忘记,上题目(很简单的一个问题,怪我没在课上好好听): “用VHDL语言输入方法在Quaruts软件上设计二输入与门和二输入或门逻辑,并尝用元件例化语句进行层次化设计,实现顶层异或设计。” (整理过程中不时地会插入我的碎碎念,请自动忽略) 过程(以作业题为例) 1、新建工作库目录用于存储...

一桔子的博客 9146

VHDL学习-元件例化

在VHDL设计中,常需要将自己设计的子模块或者实体进行组合,设计复杂的数字电路。在quartus中既可以采用原理图设计方式,对设计实体进行连线,也可以采用VHDL程序实现,采用元器件例化语句。下面以一个利用两个四位加法器设计一个八位加法器的例子,介绍元件例化的方法。 如下是四位加法器的代码,实体输入为四位的a、b两个端口、上一级进位信号cin,输出为四位的运算结果s以及进位信号cout。 library ieee; use ieee.std_logic_1164.all; use ieee.std_logi

weixin_43570886的博客 9212

VHDL入门

VHDL入门学习-程序组成 一个完整的VHDL程序是以下五部分组成的: 1.库(LIBRARY):比较好理解,调用系统已有的库,WORK库就是用户当前编辑文件所在的文件夹, IEEE库:由IEEE(美国电子电机工程师学会)制定的标准库 LPM库 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.math_real.all; use IEEE.s...

zhao_hong_liang的博客 5963

VHDL实现全加器

VHDL实现全加器 1.一位全加器 全加器是能够计算低位进位的二进制加法电路,一位全加器(FA)的逻辑表达式为: F=A⊕B⊕Ci Co=Ci(A⊕B)+AB 其中A,B为要相加的数,Ci为进位输入;F为和,Co是进位输出 真值表如下: 原理图如下: 因此在设计实体时,选定三输入二输出: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED; ENTITY homework5 IS PORT( a,b,ci:

ws15168689087的博客 4万+

在verilog设计中实例化VHDL单元

在verilog设计中实例化VHDL单元。 如果是实例化一个VHDL实体,首先声明一个与你要实例化的VHDL实体同名的module名字,形成一个一般的verilog实例。只有一个实例化的VHDL结构在verilog中构建,没有其他的VHDL结构在verilog中可见。当如此做时,XST使用entity和architecture对作为verilog或VHDL的边界。 XST在verilog设计中实例...

weixin_30617737的博客 1279
上一篇: ARM及ZigBee技术实现智能家居控制器的设计
下一篇: VHDL中inout的使用
ghjk014
博客等级 码龄16年 113粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值