【问题标题】:Generic vector in VHDL, with position of assignment determined by variableVHDL 中的通用向量,分配位置由变量确定
【发布时间】:2016-06-10 11:51:36
【问题描述】:

我有一个用 VHDL 编写的简单状态机。每个向量和变量的大小由通用常数“n”确定。这个想法是:当我改变“n”时,我希望立即能够合成。部分设计是“1 of N”代码中的向量。

端口和信号定义:

tester: out std_logic_vector(n-1 downto 0); -- port
signal I: integer range 0 to n-1:=0;  -- signal

我有什么:

process(I)
begin
    if I=0 then
        tester<="0001";
        elsif I=1 then
        tester<="0010";
        elsif I=2 then
        tester<="0100";
        else
        tester<="1000";
    end if;
end process;

这显然只适用于 n=4。 我想要什么:

process(I)
begin
    tester<=(I=>'1', others=>'0');
end process;

但是,由于“选择不是恒定的”错误,这不会合成。 I 被其中一种状态改变,它可以以任何模式改变,因此出现了问题。

【问题讨论】:

    标签: vhdl


    【解决方案1】:

    您可以这样做:

    process(I)
    begin
        tester    <= (others => '0');
        tester(I) <= '1';
    end process;
    

    【讨论】:

    • 完美运行!谢谢你。我觉得有点愚蠢,没有早点尝试过。出于好奇-为什么这种语法有效,而另一个“ tester'1', others=>'0');”没有?
    • 索引必须是常数,可能是为了简化;比如如果做(a =&gt; '1', b =&gt; '0', ...),和a和b有时候是一样的怎么处理;那么应该定义优先级。编写为顺序语句使用其他定义的结构来处理优先级问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-24
    • 2018-01-28
    相关资源
    最近更新 更多