arrays - VHDL 问题:数组形状不匹配 - 没有匹配元素
问题描述
我是 VHDL 新手,遇到一个不知道如何解决的问题。当我进行模拟时出现问题,但代码编译正确。这是问题所在:
entity fir is
port ( clock : in STD_LOGIC;
reset : in STD_LOGIC;
X : in STD_LOGIC_VECTOR (7 downto 0); -- X = X(n)
Y : out STD_LOGIC_VECTOR (16 downto 0)); -- Y = Y(n)
end fir;
architecture Behavioral of fir is
signal X_s, XZ1, XZ2, XZ3, XZ4, XZ5, XZ6, XZ7 : signed (7 downto 0); -- XZi = X(n-i)
signal Y_s : signed (16 downto 0);
constant A : signed(7 downto 0) := "00001011"; -- A=11
(constant B,C,D,E,F,G,H similary to A)
begin
process (clock, reset)
begin
X_s <= signed(X);
if (rising_edge(clock)) then
if (reset = '1') then
X_s <= (others => '0');
Y_s <= (others => '0');
XZ1, XZ2,XZ3...XZ7 <= (others => '0'); <= (others => '0');
else
XZ1 <= X_s;
XZ2 <= XZ1;
XZ3 <= XZ2;
XZ4 <= XZ3;
XZ5 <= XZ4;
XZ6 <= XZ5;
XZ7 <= XZ6;
end if;
end if;
end process;
Y_s <= (X_s*A) + (XZ1*B) + (XZ2*C) + (XZ3*D) + (XZ4*E) + (XZ5*F) + (XZ6*G) + (XZ7*H);
Y <= std_logic_vector(Y_s);
end Behavioral;
这一行:
Y_s <= (X_s*A) + (XZ1*B) + (XZ2*C) + (XZ3*D) + (XZ4*E) + (XZ5*F) + (XZ6*G) + (XZ7*H);
返回此错误:“数组形状不匹配 - 没有匹配元素”
我首先认为这是因为它的大小,但是即使我替换了这一行,问题仍然存在:
Y_s <= (X_s*A) + (XZ1*B) + (XZ2*C) + (XZ3*D) + (XZ4*E) + (XZ5*F) + (XZ6*G) + (XZ7*H);
通过这个:
Y_s <= (X_s*A);
但是,它适用于这一行:(只是为了查看其余代码是否正确):
Y_s <= (others => '0');
我能做什么 ?
非常感谢。
解决方案
你的简单案例:
Y_s <= (X_s*A);
Y_s
- 17 根电线(16 downto 0)
。X_s
- 8 根电线(7 downto 0)
。A
- 8 根电线(7 downto 0)
。8 + 8 != 17
.
复数:
Y_s <= (X_s*A) + (XZ1*B) + (XZ2*C) + (XZ3*D) + (XZ4*E) + (XZ5*F) + (XZ6*G) + (XZ7*H);
加法和乘法的结果大小:
| Operation | Size of result |
+------------+------------------------------+
| Y <= A + B | Maximum (A'Length, B'Length) |
| V <= A * B | A'Length + B'Length |
因此,您的总和大小为 16: Maximum(8+8,8+8,8+8,8+8,8+8,8+8,8+8,8+8)
。
此页面上的““已签名”/“未签名”加法无溢出部分解释了如何解决此问题。
推荐阅读
- java - 如何正确构建具有依赖关系的 .jar 工件?
- c++ - 在 C++ 中进行类型双关语的现代、正确的方法是什么?
- c# - 动态标签栏 BG 颜色
- python - 我是否需要清理/移除在 Cloud Run 实例的部署中创建的映像?
- c# - 如何根据表 1 的结果读取表 2 中的数据
- websocket - 如何将 BSC wesocket 提供程序与 Web3J 或 Web3js 连接
- flutter - Flutter 中如何访问 List Builder 的数据
- react-redux - 动作未在 redux 中分派
- php - 此页面不工作 localhost 当前无法处理此请求。HTTP 错误 500
- c# - Polly 回退操作未引发指定的异常。发生了什么?