是否可以使用循环创建同一组件的多个实例?

2024-01-20

我有一个组件:

Component CAU is
    port 
    (
        CLK              : in std_logic;
        RESET            : in std_logic;
        START            : in std_logic;
        V_DIRECTION      : in vector_3d;
        P_ORIGIN         : in vector_3d;      
        V_NORMAL_IN      : in vector_3d;
        DOT_A            : in vector_3d;
        DOT_B            : in vector_3d;
        DOT_C            : in vector_3d;
        ID_DATA_IN       : in scalar;

        ID_DATA_OUT      : out scalar;
        V_REFLECT        : out vector_3d;          
        V_PASS           : out vector_3d;        
        P_INTERSECT      : out vector_3d;
        V_NORMAL_OUT     : out vector_3d;
        T_OUT            : out scalar;
        SUCCESS          : out std_logic; 
        FINISH           : out std_logic
    );   
end  Component; 

我想创建它的 8 个实例。每个都被称为CAU_inst0, CAU_inst1, 等等。每个实例都按以下方式连接:

CAU_inst0 : CAU
 PORT MAP
 (
    CLK              => CLK_CAU,
    RESET            => RESET,
    START            => start_0_sig,
    V_DIRECTION      => v_direction_0_sig,
    P_ORIGIN         => p_origin_0_sig,
    V_NORMAL_IN      => v_normal_in_0_sig,
    DOT_A            => dot_a_0_sig,
    DOT_B            => dot_b_0_sig,
    DOT_C            => dot_c_0_sig,
    ID_DATA_IN       => id_data_in_0_sig,

    ID_DATA_OUT      => id_data_out_0_sig
    V_REFLECT        => v_reflect_0_sig,
    V_PASS           => v_pass_0_sig,
    P_INTERSECT      => p_intersect_0_sig,
    V_NORMAL_OUT     => v_normal_out_0_sig,
    T_OUT            => t_0_sig,
    SUCCESS          => success_0_sig,
    FINISH           => finish_0_sig
 );

对于每个实例i号码0被替换为i。我所做的是创建一个 Matlab 脚本,该脚本创建了 8 个具有正确数量的不同实例。但这是一个丑陋的解决方案,因为它需要 170 行相同的代码,几乎没有任何变化。有没有一种方法可以在代码内部的循环中创建组件(如果可能的话,还可以创建适当的信号)以减少混乱和线条?


您想要使用的是 for...generate 语句。

这是一个example http://www.ics.uci.edu/~jmoorkan/vhdlref/generate.html,类似于您想要实现的目标:

architecture GEN of REG_BANK is
  component REG
    port(D,CLK,RESET : in  std_ulogic;
         Q           : out std_ulogic);
  end component;
begin
   GEN_REG: 
   for I in 0 to 3 generate
      REGX : REG port map
        (DIN(I), CLK, RESET, DOUT(I));
   end generate GEN_REG;
end GEN;

在您的情况下,您将需要制作连接到块向量和/或向量的向量的所有信号。

例如,如果您的信号当前定义为:

signal v_normal_in_0_sig : std_logic_vector(7 downto 0);

您需要将其更改为:

type vector16 is array (natural range <>) of std_logic_vector(15 downto 0);
signal v_normal_in_sig : vector16(7 downto 0);

在这种情况下,您现在可以将信号用作v_normal_in_sig(i)连接到i生成实体/组件的实例。

请注意,如果您使用的是 VHDL-2008,则可以执行以下操作...

type vector_array is array (natural range <>) of std_logic_vector;
signal v_normal_in_sig : vector_array(7 downto 0)(15 downto 0);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以使用循环创建同一组件的多个实例? 的相关文章

  • FPGA设计:如何用半加器和全加器构成四位全加器

    今天来分享一下关于FPGA设计的文章 如何用半加器和全加器构成四位全加器 首先 我们看一位半加器的代码 1 一位半加器的程序代码及 图 library ieee use ieee std logic 1164 all entity half
  • Xilinx ISE 14.7 设置编辑器字体大小

    左上角 edit preference
  • 在 VHDL 中找到运算符“+”的“0”定义

    首先我想指出 这是我第一次尝试 VHDL 所以请客气一点 我想读取 X1 X4 输入并在输出处生成输入的总和 这是我的代码 library IEEE use IEEE STD LOGIC 1164 ALL entity counter of
  • VHDL:正式端口“portName”没有实际值或默认值

    我在实例化 VHDL 模块 PWM 的 VHDL 测试平台上收到编译错误 正式端口 Duty Cycle 没有实际或默认值 当站在 dev to test PWM 代码行时会看到该错误 在实例化的 PWM 模块中 Duty Cycle st
  • 二进制补码 VHDL

    我只是想用 VHDL 制作一个简单的二进制补码设备 但它抛出了这个非常烦人的错误 我不确定我做错了什么 可能是一些非常愚蠢的事情 错误是 错误 10327 twocompliment vhd 21 处的 VHDL 错误 无法确定运算符 na
  • ERROR:Xst:827 = 信号计数无法合成,同步描述错误

    我正在尝试模拟电梯 结果出现错误 ERROR Xst 827 Signal count cannot be synthesized bad synchronous description 我正在关注此来源的代码 https www yout
  • VHDL:按钮去抖动(或不去抖动,视情况而定)

    我已阅读其他帖子 但似乎无法修复我的 我是 VHDL 新手 所以我确信这是一个简单的修复 简而言之 按钮没有防抖 代码编译和比特流程序 在测试台中 按下按钮可以工作 但输出 LED 不会改变 在板上 按下按钮会使随机 LED 亮起 我猜是因
  • 如何在 VHDL 中读取文件时消除空格

    我的输入文件中有以下数据可供读取 10101100 11010100 10101100 11010100 11111110 10111001 11111110 10111001 我需要读取每个半字节并将它们写入数组 但由于空格 行的长度会变
  • 是否需要初始化?

    在VHDL中 创建信号或向量时是否需要初始化 如果忘记初始化信号或整数值会发生什么 In 模拟 如果你这样做not设置一个初始值 向量的每个元素都会得到default值 这是由 VHDL 语言规范定义的 对于枚举类型 这是枚举类型中定义的第
  • 信号分配在进程中如何工作?

    我了解到信号在遇到表达式时不会立即改变 而是在进程结束时立即改变 在此示例中 signal x y z bit process y begin x lt y z lt not x end process 这个例子是这样说的 如果信号 y 发
  • 使用 VHDL 实例化 FPGA 中的 RAM

    我试图按照中的指导实现双端口 RAM这篇优秀的博文 http danstrother com 2010 09 11 inferring rams in fpgas 然而 ModelSim 在编译时给出以下警告 Warning fifo ra
  • “警告 C0007:架构具有未绑定的实例”问题!

    我从 数字设计基础 一书随附的 CD 中获取了以下源代码 当我尝试运行该程序时 出现以下错误 Compiling Fig17 13 vhd C Users SPIDER Desktop EE460 The Final Project Fig
  • 在非时钟信号上使用上升沿是不好的做法吗?还有其他选择吗?

    我正在研究 VHDL 设计并且它可以工作 但是代码非常丑陋 而且我似乎正在尝试围绕语言的设计来实现我的目标 这一事实让我觉得有些事情是错误的 我对 VHDL 还很陌生 但我已经研究该项目的较小部分近一个月了 所以我有了总体想法 然而 这部分
  • 错误(10028):无法解析网络的多个常量驱动程序... VHDL 错误

    我正在尝试编写一个代码来检测 din 信号的上升沿 并在发生后将 doout 提高 5 个时钟周期 我在编译时不断收到不同的错误 但我不确定它们的含义 我认为我对 VHDL 中的一些概念缺乏基本的了解 但遗憾的是在网上查找并没有给我带来太大
  • 模拟器和合成器之间初始化状态机的差异

    我的问题是关于合成状态机中使用的第一个状态 我正在使用莱迪思 iCE40 FPGA 用于仿真的 EDA Playground 和用于综合的莱迪思 Diamond Programmer 在下面的示例中 我生成一系列信号 该示例仅显示引用状态机
  • 将库添加到 Vivado 2014.4

    我对 Vivado 和 VHDL 还很陌生 我想要一些关于基本问题的指导 我猜我可以创建自己的库并在我的项目中使用它们 就像使用默认库和基本库一样 eg library IEEE use IEEE std logic 1164 ALL us
  • 赋值语句中的“others=>'0'”是什么意思?

    cmd register process rst n clk begin if rst n 0 then cmd r lt others gt 0 elsif clk event and clk 1 then cmd r lt end if
  • VHDL - FSM 未启动(仅在时序仿真中)

    我正在写我的硕士论文 而且我对 VHDL 还很陌生 但我仍然必须实现一些复杂的东西 这是我必须编写的最简单的结构之一 但我仍然遇到了一些问题 它是一个 FSM 采用低电平有效同步信号 用于对 DAC 进行编程 实现 24 位移位寄存器 这只
  • Simulink/HDL Coder 中的反馈循环

    我有一个 Simulink HDL 编码器系统 请参见下图 我有 3 个输出和 3 个输入 我希望我的系统运行 10 次 每次迭代后 它应该选择输出并将它们用作输入 我怎样才能做到这一点 使用存储器和每个信号的初始值块构建一个循环 内存块允
  • 仅使用 std_logic_vector 包将 std_logic_vector 与常量进行比较

    我仅在 VHDL 文件中使用以下包 library IEEE use IEEE STD LOGIC 1164 ALL 在代码中 我将 std logic vector 信号 A 与常量值进行比较 例如 if A lt 00001011 th

随机推荐

  • 在 Visual Studio 2010 中更改文本光标/插入符号

    我不小心将 Visual Studio 2010 中的文本光标 插入符号从一行更改为带有突出显示整个字符的框的光标 但不知道如何将其更改回来 谁能告诉我怎么做 谢谢 按插入键
  • 如何将可观察集合写入txt文件?

    将可观察集合写入 txt 文件的最佳方法是什么 我目前有以下内容 public ObservableCollection
  • pytqt图形线的鼠标坐标

    每当我将鼠标移动到图表顶部时 我都试图获取随机函数图的 x y 值 我正在使用 pyqtgraph SignalProxy 并将其连接到回调 mousedMoved 我收到此错误 NameError 未定义全局名称 mouseMoved 这
  • 在 Play 2.x 中覆盖 WebJar 资源

    只是想知道 是否有一种方法可以在一个文件中覆盖某些资产 确切地说是 JS 和 LESS 文件WebJars http www webjars org 资产与位于app assets 目录 说吧 我有一个引导程序 3 1 1 webjar h
  • 将 Matplotlib 图形保存为全屏图像

    我正在使用 Pandas 和 MatPlotLib 构建一个小型图形实用程序来解析工作机器中的数据和输出图形 当我使用输出图表时 plt show 我最终得到了一个不清晰的图像 其中的图例和标签就像这样相互排斥 However expand
  • 无法使用 pip 安装 Python 成像库

    尝试使用 PIP 安装 Python Imaging Library PIL 时 安装失败并出现以下错误 SyntaxError invalid syntax Complete output from command python setu
  • 没有找到类“androidx.core.widget.DrawerLayout”

    使用 Android Studio 菜单选项 Refactor gt Refactor to Androidx 迁移到 Androidx 包后 我的 build gradle 看起来像 implementation androidx app
  • facebook graph api 和 php sdk,删除事件!

    在我的一生中 我找不到一种方法来删除 取消或移除我使用 FB PHP SDK 和 Graph API 创建和更新的 Facebook 事件 我已经尝试了 facebook 文档和堆栈溢出中找到的每一个排列 以下是我在探索中发现的一些线索 h
  • 适合初学者的松耦合和面向对象实践

    保持类松散耦合是编写易于理解 修改和调试的代码的一个重要方面 我明白了 然而 作为一个新手 几乎任何时候我都很难超越最简单的例子 我或多或少地了解如何将字符串 整数和简单数据类型封装在它们自己的类中 然而 当我开始处理富文本格式等信息时 事
  • 在Linux上安装特定的adb版本

    我想使用特定的 adb 版本来连接设备 为了连接外部模拟器 我尝试使用adb connect localhost 5555 我得到这个结果 adb adb server version 36 doesn t match this clien
  • 如何在 Asp.Net Core 2.2 中禁用/启用运行时身份验证?

    网站默认只能匿名访问 管理员有一个按钮可以将站点切换到维护模式 这应该使用内置的 Cookie 身份验证启用授权 在数据库中稍微翻转一下 与本文无关 为了实现这一点 我首先配置了 cookie 身份验证 在startup cs中 publi
  • 如何在 MVC 3 中的 PartialView 加载上执行 JavaScript 函数

    code public ActionResult mapPartial DataTable dt string strEvents foreach DataRow row in dt Rows strEvents row Lat ToStr
  • dijit.byId 不适用于 IE8 和 dojo.addOnLoad

    当我使用 IE8 加载此脚本时 出现异常Object does not support this property or method 但它适用于其他浏览器 我用的是dijit 1 3 1 我不明白 dojo addOnLoad init
  • 如何将使用事务的代码包装在事务中然后回滚?

    我正在设置我的集成测试设备 我正在使用beforeEach and afterEach挂钩将每个测试包装在回滚的事务中 以便测试不会相互影响 一个简化的例子可能是这样的 const repository require library de
  • 如何从左到右解压元组?

    有没有一种干净 简单的方法来从左到右解压右侧的Python元组 例如对于 j 1 2 3 4 5 6 7 1 2 3 4 5 6 7 v b n j 4 7 我可以修改切片符号以便v j 6 b j 5 n j 4 我意识到我可以只订购左侧
  • React js:无法将数组中的第一个对象作为道具发送

    我正在尝试构建一个小型 React js 应用程序 我的组件结构如下所示 MainComponent CategoryList Category ItemsList Item 我的 MainContent 组件对其状态数据执行 ajax 请
  • 如何找到最接近的旋转

    考虑从 0 T 开始按递增顺序给出的点 Y 我们将这些点视为位于圆周 T 的圆上 现在考虑点 X 也来自 0 T 并且也位于圆周 T 的圆上 我们说 X 和 Y 之间的距离是 X 中每个点与其 Y 中最近点之间的绝对距离之和 回想一下 两者
  • 将滚动平均值与数据一起绘制

    我有一个看起来像这样的数据框 delays Worst case Avg case 2014 10 27 2 861433 0 953108 2014 10 28 2 899174 0 981917 2014 10 29 3 080738
  • 检测语言的最佳方法是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 是否可以使用循环创建同一组件的多个实例?

    我有一个组件 Component CAU is port CLK in std logic RESET in std logic START in std logic V DIRECTION in vector 3d P ORIGIN in