gpt4 book ai didi

vhdl - "template"VHDL实体

转载 作者:行者123 更新时间:2023-12-01 14:33:54 24 4
gpt4 key购买 nike

这让我困扰了很长一段时间,但是否可以在 VHDL 中描述实体,类似于 C++ 中模板的工作方式(或较少扩展泛型?)。只是让实际端口类型仅在合成/编译期间决定?

一个例子是多路复用器,假设我有一个 4 输入多路复用器,现在我有几种总线尺寸,我使用这个多路复用器,-4,6,7,8-。目前我为每个不同的总线大小写了一个不同的多路复用器;然而,输出只是选择的转发输入之一,因此与总线的类型相同。

这似乎过于冗余且容易出错(在正确的时间选择正确的多路复用器,使它们保持一致,并在我更改总线大小时更新它们)。有没有办法参数化这个?

下面的非通用版本来展示这个想法。

entity mux_6bit_4input is
port ( input_0 : in std_logic_vector (5 downto 0);
input_1 : in std_logic_vector (5 downto 0);
input_2 : in std_logic_vector (5 downto 0);
input_3 : in std_logic_vector (5 downto 0);
sel : in std_logic_vector (1 downto 0);
output : out std_logic_vector (5 downto 0)
);
end entity mux_6bit_4input;

最佳答案

也许我误解了这个问题,但是使用泛型的常见解决方案不能解决您的问题吗?

library ieee;
use ieee.std_logic_1164.all;

entity mux_4x1 is
generic (
DATA_WIDTH: integer := 8
);
port (
input_0: in std_logic_vector(DATA_WIDTH-1 downto 0);
input_1: in std_logic_vector(DATA_WIDTH-1 downto 0);
input_2: in std_logic_vector(DATA_WIDTH-1 downto 0);
input_3: in std_logic_vector(DATA_WIDTH-1 downto 0);
sel: in std_logic_vector (1 downto 0);
output: out std_logic_vector(DATA_WIDTH-1 downto 0)
);
end;

architecture behavior of mux_4x1 is
begin
output <=
input_0 when sel = "00" else
input_1 when sel = "01" else
input_2 when sel = "10" else
input_3;
end;

另一个解决方案,如果您想真正保持通用,是使用 VHDL-2008 中很酷的泛型类型。我的模拟器还不支持这个功能,所以这里有一个来自优秀书籍 VHDL 2008: Just the New Stuff 的例子:

entity generic_mux2 is
generic (type data_type);
port (
sel: in bit;
a, b: in data_type;
z: out data_type
);
end;

architecture rtl of mux2 is
begin
z <= a when sel = '0' else b;
end;

关于vhdl - "template"VHDL实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20205073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com