Vhdl 如何设计具有额外输出的解码器?

Vhdl 如何设计具有额外输出的解码器?,vhdl,decoder,digital-logic,Vhdl,Decoder,Digital Logic,对于我正在创建的应用程序,我希望使用一个解码器,帮助写入42个寄存器中的一个。为了考虑所有可能的寄存器,我需要一个6位输入,因为lg(42)的上限是6 然而,这将创建一个6到64的解码器,给我留下额外的12个输出,我不知道如何处理。我知道我可以用VHDL编写一个案例说明: case input is when "000000" => output <= reg0; when "000001" => output <= reg1; . . .

对于我正在创建的应用程序,我希望使用一个解码器,帮助写入42个寄存器中的一个。为了考虑所有可能的寄存器,我需要一个6位输入,因为lg(42)的上限是6

然而,这将创建一个6到64的解码器,给我留下额外的12个输出,我不知道如何处理。我知道我可以用VHDL编写一个案例说明:

case input is
   when "000000" => output <= reg0;
   when "000001" => output <= reg1;
   .
   .
   .
   when others => output <= ???;
end case;
案例输入为

当“000000”=>输出41未出现时,应如何编写代码来处理该情况?有没有一种方法可以在不停止应用程序的情况下处理它?或者,作为替代方案,是否有一种方法可以编写只有42个输出的解码器?

一种更简单的编写方法是:

type regs_type is array (integer range <>) of std_logic_vector(7 downto 0);
signal regs : regs_type (0 to 41) := (others => (others => '0'));
等等。如果我这样做,我会为
regs
索引值定义常量,例如:

regs(0) <= setup_reg;
regs(1) <= data_out;
constant SETUP_REG_ADDRESS : integer := 0;
constant DATA_OUT_ADDRESS : integer := 1;


这个“不在乎”值允许工具在您认为无论如何都无法达到的情况下执行最有效的操作。如果您担心分配给
输出的未定义内容
如果
输入
以某种方式超过了41,则始终可以将
'-'
替换为
'0'

一种更简单的编写方法是:

type regs_type is array (integer range <>) of std_logic_vector(7 downto 0);
signal regs : regs_type (0 to 41) := (others => (others => '0'));
等等。如果我这样做,我会为
regs
索引值定义常量,例如:

regs(0) <= setup_reg;
regs(1) <= data_out;
constant SETUP_REG_ADDRESS : integer := 0;
constant DATA_OUT_ADDRESS : integer := 1;


这个“不在乎”值允许工具在您认为无论如何都无法达到的情况下执行最有效的操作。如果您担心分配给
输出的未定义内容
如果
输入
以某种方式超过了41,则始终可以将
'-'
替换为
'0'

一种更简单的编写方法是:

type regs_type is array (integer range <>) of std_logic_vector(7 downto 0);
signal regs : regs_type (0 to 41) := (others => (others => '0'));
等等。如果我这样做,我会为
regs
索引值定义常量,例如:

regs(0) <= setup_reg;
regs(1) <= data_out;
constant SETUP_REG_ADDRESS : integer := 0;
constant DATA_OUT_ADDRESS : integer := 1;


这个“不在乎”值允许工具在您认为无论如何都无法达到的情况下执行最有效的操作。如果您担心分配给
输出的未定义内容
如果
输入
以某种方式超过了41,则始终可以将
'-'
替换为
'0'

一种更简单的编写方法是:

type regs_type is array (integer range <>) of std_logic_vector(7 downto 0);
signal regs : regs_type (0 to 41) := (others => (others => '0'));
等等。如果我这样做,我会为
regs
索引值定义常量,例如:

regs(0) <= setup_reg;
regs(1) <= data_out;
constant SETUP_REG_ADDRESS : integer := 0;
constant DATA_OUT_ADDRESS : integer := 1;


这个“不在乎”值允许工具在您认为无论如何都无法达到的情况下执行最有效的操作。如果您担心未定义的内容被分配到
输出
如果
输入
以某种方式超过了41,您可以用
'0'
替换
-'
,我喜欢这个想法。最初,该结构的设计是为了使解码器和寄存器是独立的组件,解码器的输出决定读取哪个寄存器,但这看起来有点干净。关于您的不在乎输出注释:解码器设置为启用,如果启用值较低,它将输出所有0。如果值大于41,我想我也可以输出所有0?如果我理解正确,我认为在第一个示例中将
regs
数组的大小设置为64,或者在第二个示例中将
(其他=>'0')
设置为64,可以很容易地实现这一点。要实现
启用
,我认为这两种方法都需要和
if/then/else
输出
设置为全零。我喜欢这个想法。最初,该结构的设计是为了使解码器和寄存器是独立的组件,解码器的输出决定读取哪个寄存器,但这看起来有点干净。关于您的不在乎输出注释:解码器设置为启用,如果启用值较低,它将输出所有0。如果值大于41,我想我也可以输出所有0?如果我理解正确,我认为在第一个示例中将
regs
数组的大小设置为64,或者在第二个示例中将
(其他=>'0')
设置为64,可以很容易地实现这一点。要实现
启用
,我认为这两种方法都需要和
if/then/else
输出
设置为全零。我喜欢这个想法。最初,该结构的设计是为了使解码器和寄存器是独立的组件,解码器的输出决定读取哪个寄存器,但这看起来有点干净。关于您的不在乎输出注释:解码器设置为启用,如果启用值较低,它将输出所有0。如果值大于41,我想我也可以输出所有0?如果我理解正确,我认为在第一个示例中将
regs
数组的大小设置为64,或者在第二个示例中将
(其他=>'0')
设置为64,可以很容易地实现这一点。要实现
启用
,我认为这两种方法都需要和
if/then/else
输出
设置为全零。我喜欢这个想法。最初,该结构的设计是为了使解码器和寄存器是独立的组件,解码器的输出决定读取哪个寄存器,但这看起来有点干净。关于您的不在乎输出注释:解码器设置为启用,如果启用值较低,它将输出所有0。如果值大于41,我想我也可以输出所有0?如果我理解正确,我认为在第一个示例中将
regs
数组的大小设置为64,或者在第二个示例中将
(其他=>'0')
设置为64,可以很容易地实现这一点。要实现
启用
,我认为这两种方法都需要和
if/then/else
输出
设置为全零。