未使用循环计数器定义的 VHDL 比较操作

用户10011538

我一直在尝试使用泛型在 vhdl 中制作具有任意数量的寄存器和寄存器大小的 SRAM 芯片,除了寻址部分外,我几乎让它工作了。

为了制作任意大小的 SRAM 芯片,我首先使用以下端口映射制作了一个单元 SRAM 单元(我对其进行了测试以确认其工作正常)。

component SRAM_Cell_vhdl
port (
        IN : in std_ulogic;
        Select_Chip : in std_ulogic;
        Write_Enable : in std_ulogic;
        Out1 : out std_ulogic
);

通用 SRAM 芯片具有以下端口映射:

port (
    Datain : in std_logic_vector(m-1 downto 0);
    address: in std_logic_vector(n-1 downto 0);
    Chip_Select: in std_logic;
    Output_Enable: in std_logic;
    Write_Enable: in std_logic;
    Out2: out std_logic_vector(m-1 downto 0)
);

我尝试进行寻址的方式是,当它生成 SRAM 时,它会检查循环计数器是否等于地址。如果是,它将将该位写入 SRAM 单元,否则不会。

  loop1: for I in 0 to n-1 generate
    loop2: for J in 0 to m-1 generate
            SRAM_Cell_vhdl1 : SRAM_Cell_vhdl port map
                (Datain(J), Chip_Select and (I = to_integer(unsigned(address))), Write_Enable and Chip_Select, intermediate_out(I, J));
        end generate loop2;
    end generate loop1;

但是,我收到一个错误,I = to_integer(unsigned(address)))告诉我它无法确定操作的定义"="我认为循环计数器是一个整数,我将地址转换为整数的方式应该是在两个整数之间进行比较。我想到的另一种方法是使用 if 语句比较 I 和地址,但我担心它不会生成所有所需的 SRAM 单元。

有没有办法解决这个问题?

马修·泰勒

=运营商将返回一个布尔值。所以,表达式

Chip_Select and (I = to_integer(unsigned(address)))

与 type 的输入端口关联时std_ulogic需要具有andtypestd_ulogic输入、type 输入和 typeboolean返回值运算符版本std_ulogic(这个类型列表称为它的签名)。and存在这种版本的运算符。

有一个and运算符版本,它具有两个 type 输入std_ulogic和一个type返回值std_ulogic因此,为了使用它,您的编译器正在尝试查找=返回std_ulogic. 不存在这样的版本。因此你的错误。

解决这个问题并不简单,因为您需要一系列芯片选择信号。所以,你需要这样的东西(因为没有 MCVE,我还没有测试过):

loop1: for I in 0 to n-1 generate
  loop2: for J in 0 to m-1 generate
    if Chip_Select = '1' and (I = to_integer(unsigned(address))) then
      CS(I)(J) <= '1';
    else
      CS(I)(J) <= '0';
    end if;
    SRAM_Cell_vhdl1 : SRAM_Cell_vhdl port map (Datain(J), CS(I)(J), Write_Enable and Chip_Select, intermediate_out(I, J));
  end generate loop2;
end generate loop1;

. 的CS某种数组在哪里std_ulogic

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章