我正在使用Charles H. Roth和Lizy Kurian John撰写的使用VHDL(第2版)的数字系统设计教科书。我一直在关注本书中提供的VHDL代码示例,但我尝试了一个产生错误的段。
下面给出了VHDL代码示例(它直接来自教科书)。
library ieee;
use IEEE.NUMERIC_STD.ALL;
entity BCD_Adder is
Port (
X : in unsigned(7 downto 0);
Y : in unsigned(7 downto 0);
Z : out unsigned(11 downto 0)
);
end BCD_Adder;
architecture BCDadd of BCD_add is
alias Xdig1 : unsigned(3 downto 0) is X(7 downto 4);
alias Xdig0 : unsigned(3 downto 0) is X(3 downto 0);
alias Ydig1 : unsigned(3 downto 0) is Y(7 downto 4);
alias Ydig0 : unsigned(3 downto 0) is Y(3 downto 0);
alias Zdig2 : unsigned(3 downto 0) is Z(11 downto 8);
alias Zdig1 : unsigned(3 downto 0) is Z(7 downto 4);
alias Zdig0 : unsigned(3 downto 0) is Z(3 downto 0);
signal S0 : unsigned(4 downto 0);
signal S1 : unsigned(4 downto 0);
signal C : bit;
begin
S0 <= '0' & Xdig0 + Ydig0; --overloaded +
Zdig0 <= S0(3 downto 0) + 6 when (S0 > 9) else S0(3 downto 0); --add 6 if needed
C <= '1' when (S0 > 9) else '0';
S1 <= '0' & Xdig1 + Ydig1 + unsigned'(0=>C); --type conversion done on C before adding
Zdig1 <= S1(3 downto 0) + 6 when (S1 > 9) else S1(3 downto 0);
Zdig2 <= "0001" when (S1 > 9) else "0000";
end BCDadd;
我正在使用Xilinx的ISE Project Navigator来模拟VHDL代码。当我对VHDL代码运行语法检查时,会产生以下错误: -
错误:HDLC编译器:374 - 第14行:实体尚未编译。 错误:HDLCompiler:69 - 第16行:未声明。 错误:HDLCompiler:69 - 第17行:未声明。 错误:HDLCompiler:69 - 第19行:未声明。 错误:HDLCompiler:69 - 第20行:未声明。 错误:HDLCompiler:69 - 第22行:未声明。 错误:HDLCompiler:69 - 第23行:未声明。 错误:HDLCompiler:69 - 第24行:未声明。 错误:HDLCompiler:69 - 第26行:未声明。 错误:HDLCompiler:69 - 第27行:未声明。
错误是指以 别名 开头的行。我已经google了一下,看看我是否能找到解决这个错误的方法,但我没有运气。有些网站提到大多数综合工具都不支持 别名 。
任何人都可以指出我正确的方向来解决这个问题。
非常感谢,
林肯
答案 0 :(得分:3)
架构声明中主要单元的名称与实体简单名称不匹配:
entity bcd_adder is
VS
architecture bcdadd of bcd_add is
将其转换为:
architecture bcdadd of bcd_adder is
您还需要添加
use ieee.std_logic_1164.all;
到你的context子句,使std_ulogic对于字符文字的隐式类型转换是可见的。
同时更改c
的类型,以便您不需要其他类型转换:
signal c : std_ulogic;
您可以在作业中找到
S1 <= '0' & Xdig1 + Ydig1 + unsigned'(0=>C); --type conversion done on C before adding
C
(位)的类型不是由限定表达式指定的无符号(std_ulogic)元素的基本类型。在-2008包中,numeric_std“+”还支持一个操作数,该操作数是unsigned元素,而不使用聚合来提供数组类型。
您编码然后分析,而无需编写测试平台,详细说明和模拟(这告诉我们范围没有内部连接问题)。