【问题标题】:VHDL: Indexing in component port mapVHDL:组件端口映射中的索引
【发布时间】:2016-06-06 13:48:55
【问题描述】:
    comp_A1: comp_A port map    (   CLK     =>  CLK,
                                    RESET_N =>  RESET_N,
                                    DATA_IN =>  DATA(to_integer(unsigned(count))),
                                    VLD_IN  =>  VLD_IN,
                                    DATA_OUT=>  DATA_OUT,
                                    VLD_OUT =>  VLD_OUT,
                                    BUSY_OUT=>  BUSY_OUT
                                );

在上面的 sn-p 中,我试图将“DATA”串行传递到测试台中组件 comp_A1 的“DATA_IN”引脚。 'DATA' 和 'count' 都是 std_logic_vectors。所有其他信号都是 std_logic。 'DATA' 是一个 64 位大小的常量向量,而 'count' 是一个在每个上升沿 (CLK) 递增的向量。

在编译期间,Model Sim 仅向我显示以下错误,

  1. (vcom-1450) 正式“DATA_IN”的实际(索引名称)不是静态信号名称。
  2. VHDL 编译器正在退出。

错误是否与“计数”是动态的有关?这样做的解决方法是什么?

【问题讨论】:

    标签: vhdl modelsim


    【解决方案1】:

    只需将使用DATA(to_integer(unsigned(count))) 行创建的多路复用器移动到使用中间信号的单独语句中,例如:

    selected_data <= DATA(to_integer(unsigned(count)));
    

    ...

    DATA_IN => selected_data
    

    【讨论】:

    • 有效!另一个问题是——现在有没有办法在 VHDL 的端口映射中传递动态索引值?我很确定这可以在 Verilog 中完成。
    • 您的建议是唯一的方法吗?因为它有声明额外信号的开销。
    • 我不明白你的“另一个问题”。也许您可以编辑原始问题,为这个新部分添加一个额外的部分。
    • 什么开销?使用信号来明确功能是一种很好的设计,而不是通过将其隐藏在端口映射中来混淆含义。
    • 我没有尝试过,但我认为如果您使用 VHDL 2008,您的原始代码会起作用,因为在 VHDL 2008 中,端口映射中允许使用表达式(而在 VHDL 2002 中,实际的 - RHS -端口映射的名称必须是名称)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多