Generics 是否可以用VHDL编写一个通用解复用器(1个输入,多个输出)?

Generics 是否可以用VHDL编写一个通用解复用器(1个输入,多个输出)?,generics,vhdl,Generics,Vhdl,我的FPGA软件具有拖放功能,可用于开发元件或系统设计。它最适用于“通用”组件,允许用户设置可修改的参数,而无需进入代码并进行更改。为此,我决定创建一个具有一个输入和多个输出的通用解复用器。设计必须允许用户定义输出数量以及输入和输出端口的位宽度(两者宽度相同)。设计还必须根据所选输出端口的数量确定输出选择端口的位宽(我已经用一个函数处理了该部分)。请注意,由于我的限制,输出端口的数量可以在2到256个输出之间。是否可以在设计中为可变数量的输出编码,或者这是一个白日梦。请注意,我已经为许多固定输出

我的FPGA软件具有拖放功能,可用于开发元件或系统设计。它最适用于“通用”组件,允许用户设置可修改的参数,而无需进入代码并进行更改。为此,我决定创建一个具有一个输入和多个输出的通用解复用器。设计必须允许用户定义输出数量以及输入和输出端口的位宽度(两者宽度相同)。设计还必须根据所选输出端口的数量确定输出选择端口的位宽(我已经用一个函数处理了该部分)。请注意,由于我的限制,输出端口的数量可以在2到256个输出之间。是否可以在设计中为可变数量的输出编码,或者这是一个白日梦。请注意,我已经为许多固定输出解复用器编写了代码。

我不确定我是否完全理解您在寻找什么,但我会尝试正确回答

首先,它取决于您的工具是否支持VHDL-2008。VHDL-1993中没有许多可定制的功能

如果您这样做,可能会奏效:

您首先需要在包
中定义一个类型。vhdl

TYPE    demux_output    IS ARRAY (natural range <>) OF  std_logic_vector;
TYPE demux_输出是标准逻辑向量的数组(自然范围);
然后,您可以按如下方式定义实体:

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.NUMERIC_STD.ALL;
USE WORK.your_package.ALL;

ENTITY demux IS
    GENERIC (PORT_WIDTH : integer := 8; -- define your data width
            NB_OUTPUT : integer := 50); -- define the number of outputs needed

    PORT    (input      : IN std_logic_vector(PORT_WIDTH - 1 DOWNTO 0);
            output      : OUT demux_output(0 TO NB_OUTPUT - 1)(PORT_WIDTH - 1 DOWNTO 0);
            sel         : IN std_logic_vector(7 DOWNTO 0));

END ENTITY;

ARCHITECTURE RTL OF demux IS

SIGNAL sel_int  : integer := 0;

BEGIN

sel_int <= to_integer(unsigned(sel));

PROCESS (sel_int, input)
BEGIN
    output <= (OTHERS => (OTHERS => '0'));
    FOR i IN 0 TO (NB_OUTPUT - 1) LOOP
        IF (i = sel_int) THEN
            output(i) <= input;
        END IF;
    END LOOP;
END PROCESS;

END ARCHITECTURE;
IEEE库;
使用IEEE.STD_LOGIC_1164.ALL;
使用IEEE.NUMERIC_STD.ALL;
使用WORK.your_package.ALL;
实体demux是
通用(端口宽度:整数:=8;--定义数据宽度
NB_输出:整数:=50);--定义所需输出的数量
端口(输入:标准逻辑向量中(端口宽度-1到0);
输出:输出解复用输出(0到NB_输出-1)(端口宽度-1到0);
sel:std_逻辑_向量(7到0));
终端实体;
demux的RTL架构是
信号选择:整数:=0;
开始
(见"0"),;
对于0至(NB_输出-1)回路中的i
如果(i=sel_int),则

输出(i)给A.K和jeff,感谢您的回复。我将使用我的工具检查它是否符合VHDL-2008。正如你们所知,我对VHDL非常陌生,学习速度也很快,但我很快就进入了更复杂的设计,最终我尝试使其尽可能简单。这是我有点遵循的几行,但对我来说是新的,比如

输出:输出解复用输出(0到NB_输出-1)(端口宽度-1到0)

虽然我理解它在说什么,但在我所做的所有研究中,没有一项显示出类似的能力或例子。另一条线

输出(其他=>“0”)


同样,我从未见过任何关于关键字“others”的文档,所以这句话对我来说毫无意义。你能解释一下或者让我知道一个我可以使用的“好的”VHDL资源吗。这样,我就可以在更复杂的问题上寻求帮助,而不是问新手式的问题。再次感谢。

问这样一个问题的正常方式是包括一个你尝试过的例子,并解释它出了什么问题。如果你的工具支持VHDL2008,你可以使用类型泛型而不是包含一个包。是的,但我发现它缺乏“性感”:p终于有时间仔细阅读代码并完全理解您的建议。你几乎说对了。在您给出的示例中,将输入定向到阵列中的某个位置,而不是实际的输出端口。我的目标是将输入连接到特定的输出,并将数据锁定在该输出。我曾想过使用一个数组,但决定它不是我想要的,因为它需要我开发另一个实体来访问该数组并将其路由到一个唯一的输出。我似乎无法将输出的数量作为通用特性。这不是问题的答案。因此,这不是一个讨论论坛。如果您想澄清某个答案,请在具体答案中添加注释。你应该删除这个。