我的代码出现以下错误,我不知道它们是什么意思,也不知道如何修复它们
I have the following errors appearing on my code, I don't know what they mean neither know how to fix them
所以我正在尝试在 EDA PLayground 上为 32 位 ALU 编写 VHDL,但是我收到了一些我不太明白的错误消息,而且我不知道如何修复它们,有人可以吗请帮忙?
我不明白错误在哪里,也不知道要更改我的代码以修复它们。
VHDL代码如下:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_signed.ALL;
entity alu is
port(
A, B: in std_logic_vector(31 downto 0);
opcode: in std_logic_vector(2 downto 0);
Result: in std_logic_vector(31 downto 0)
);
end entity alu;
architecture dataoperations of alu is
begin
Result <= A + B when opcode="1010"
else A - B when opcode="1000"
else abs(A) when opcode="1011"
else -A when opcode="1101"
else abs(B) when opcode="0001"
else -B when opcode="1001"
else A or B when opcode="0110"
else not A when opcode="1111"
else not B when opcode="0101"
else A and B when opcode="1100"
else A xor B when opcode="0010";
end architecture dataoperations;
这是测试平台代码:
library IEEE;
use IEEE.std_logic_1164.all;
entity mytestbench is
end entity mytestbench;
architecture test of mytestbench is
signal in1, in2, out1: std_logic_vector (31 downto 0);
signal in3: std_logic_vector (2 downto 0);
begin
g1: entity work.alu(dataoperations)
port map (A <= in1, B <= in2; opcode <= in3, Result <= out1);
in1 <= "0001", "0FAF" after 20 ns, "F000" after 40 ns;
in2 <= "0100", "7FFF" after 10 ns, "FFFF" after 30 ns;
in3 <= "00";
end architecture test;
错误信息如下:
COMP96 File: design.vhd
COMP96 Compile Architecture "dataoperations" of Entity "alu"
COMP96 ERROR COMP96_0143: "Object "Result" cannot be written." "design.vhd" 15 2
COMP96 File: testbench.vhd
COMP96 ERROR COMP96_0724: "',' or ')' expected." "testbench.vhd" 12 28
COMP96 ERROR COMP96_0015: "';' expected." "testbench.vhd" 12 31
COMP96 ERROR COMP96_0019: "Keyword 'when' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0015: "';' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0019: "Keyword 'end' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0016: "Design unit declaration expected." "testbench.vhd" 12 66
COMP96 ERROR COMP96_0019: "Keyword 'of' expected." "testbench.vhd" 16 22
COMP96 ERROR COMP96_0018: "Identifier expected." "testbench.vhd" 16 22
最后 8 个错误是在 g1 端口映射中应该使用逗号分隔符的地方使用的分号。
-- port map (A <= in1, B <= in2; opcode <= in3, Result <= out1);
port map (A => in1, B => in2, opcode => in3, Result => out1);
列表以逗号分隔,但接口声明列表以分号分隔。这是端口映射方面的端口关联丢失(这不是声明,而端口子句是)。
(注意端口映射关联在正式端口和实际信号之间使用复合定界符 =>
而不是 <=
。这将是另外十几个错误。)
第一个错误是alu port Result的mode错误(应该是mode out)
这些是印刷错误。
mytestbench 中存在尚未公开的错误。
分配给 in1、in2 的字符串值应该是位串(例如 x"7FFF"),其中十六进制数字分别代表 4 个元素,当应该有 32 个元素时却显示了 16 个元素(例如 x"00007FFF")。分配给 in3 的值没有足够的元素。作为糟糕的例子:
-- in1 <= "0001", "0FAF" after 20 ns, "F000" after 40 ns;
-- in2 <= "0100", "7FFF" after 10 ns, "FFFF" after 30 ns;
-- in3 <= "00";
in1 <= x"00000001", x"00000FAF" after 20 ns, x"0000F000" after 40 ns;
in2 <= x"00000100", x"00007FFF" after 10 ns, x"0000FFFF" after 30 ns;
in3 <= "000";
第一次尝试不错。预期逗号所在的分号的错误数量令人惊讶,并反映在 ALDEC 工具中发现的解析器架构上。前瞻性为 1 的解析器会(应该)早点退出。语法错误可能很难提供有用的错误消息,因为它们在任何语义分析之前就被检测到了。您最后的办法可能是检查语法(在 LRM、IEEE 标准 1076 中描述)。
同一行的第一个错误:
OMP96 ERROR COMP96_0724: "',' or ')' expected." "testbench.vhd" 12 28
其中最后两个数字是行号,字符位置是首先需要注意的。您几乎会认为在第一个错误后退出对 'teach' 语言语法更好。
还有一个未公开的模拟错误,例如 when opcode="1010"
字符串文字长度与操作码中的元素数量不匹配(3、2 到 0)。相等运算符的计算结果始终为 FALSE。修复字符串文字或在操作码中具有匹配数量的元素。
所以我正在尝试在 EDA PLayground 上为 32 位 ALU 编写 VHDL,但是我收到了一些我不太明白的错误消息,而且我不知道如何修复它们,有人可以吗请帮忙? 我不明白错误在哪里,也不知道要更改我的代码以修复它们。
VHDL代码如下:
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_signed.ALL;
entity alu is
port(
A, B: in std_logic_vector(31 downto 0);
opcode: in std_logic_vector(2 downto 0);
Result: in std_logic_vector(31 downto 0)
);
end entity alu;
architecture dataoperations of alu is
begin
Result <= A + B when opcode="1010"
else A - B when opcode="1000"
else abs(A) when opcode="1011"
else -A when opcode="1101"
else abs(B) when opcode="0001"
else -B when opcode="1001"
else A or B when opcode="0110"
else not A when opcode="1111"
else not B when opcode="0101"
else A and B when opcode="1100"
else A xor B when opcode="0010";
end architecture dataoperations;
这是测试平台代码:
library IEEE;
use IEEE.std_logic_1164.all;
entity mytestbench is
end entity mytestbench;
architecture test of mytestbench is
signal in1, in2, out1: std_logic_vector (31 downto 0);
signal in3: std_logic_vector (2 downto 0);
begin
g1: entity work.alu(dataoperations)
port map (A <= in1, B <= in2; opcode <= in3, Result <= out1);
in1 <= "0001", "0FAF" after 20 ns, "F000" after 40 ns;
in2 <= "0100", "7FFF" after 10 ns, "FFFF" after 30 ns;
in3 <= "00";
end architecture test;
错误信息如下:
COMP96 File: design.vhd
COMP96 Compile Architecture "dataoperations" of Entity "alu"
COMP96 ERROR COMP96_0143: "Object "Result" cannot be written." "design.vhd" 15 2
COMP96 File: testbench.vhd
COMP96 ERROR COMP96_0724: "',' or ')' expected." "testbench.vhd" 12 28
COMP96 ERROR COMP96_0015: "';' expected." "testbench.vhd" 12 31
COMP96 ERROR COMP96_0019: "Keyword 'when' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0015: "';' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0019: "Keyword 'end' expected." "testbench.vhd" 12 65
COMP96 ERROR COMP96_0016: "Design unit declaration expected." "testbench.vhd" 12 66
COMP96 ERROR COMP96_0019: "Keyword 'of' expected." "testbench.vhd" 16 22
COMP96 ERROR COMP96_0018: "Identifier expected." "testbench.vhd" 16 22
最后 8 个错误是在 g1 端口映射中应该使用逗号分隔符的地方使用的分号。
-- port map (A <= in1, B <= in2; opcode <= in3, Result <= out1);
port map (A => in1, B => in2, opcode => in3, Result => out1);
列表以逗号分隔,但接口声明列表以分号分隔。这是端口映射方面的端口关联丢失(这不是声明,而端口子句是)。
(注意端口映射关联在正式端口和实际信号之间使用复合定界符 =>
而不是 <=
。这将是另外十几个错误。)
第一个错误是alu port Result的mode错误(应该是mode out)
这些是印刷错误。
mytestbench 中存在尚未公开的错误。
分配给 in1、in2 的字符串值应该是位串(例如 x"7FFF"),其中十六进制数字分别代表 4 个元素,当应该有 32 个元素时却显示了 16 个元素(例如 x"00007FFF")。分配给 in3 的值没有足够的元素。作为糟糕的例子:
-- in1 <= "0001", "0FAF" after 20 ns, "F000" after 40 ns;
-- in2 <= "0100", "7FFF" after 10 ns, "FFFF" after 30 ns;
-- in3 <= "00";
in1 <= x"00000001", x"00000FAF" after 20 ns, x"0000F000" after 40 ns;
in2 <= x"00000100", x"00007FFF" after 10 ns, x"0000FFFF" after 30 ns;
in3 <= "000";
第一次尝试不错。预期逗号所在的分号的错误数量令人惊讶,并反映在 ALDEC 工具中发现的解析器架构上。前瞻性为 1 的解析器会(应该)早点退出。语法错误可能很难提供有用的错误消息,因为它们在任何语义分析之前就被检测到了。您最后的办法可能是检查语法(在 LRM、IEEE 标准 1076 中描述)。
同一行的第一个错误:
OMP96 ERROR COMP96_0724: "',' or ')' expected." "testbench.vhd" 12 28
其中最后两个数字是行号,字符位置是首先需要注意的。您几乎会认为在第一个错误后退出对 'teach' 语言语法更好。
还有一个未公开的模拟错误,例如 when opcode="1010"
字符串文字长度与操作码中的元素数量不匹配(3、2 到 0)。相等运算符的计算结果始终为 FALSE。修复字符串文字或在操作码中具有匹配数量的元素。