VHDL BCD加法器代码 - 错误:HDLCompiler:69 - <unsigned>未声明

时间:2015-05-24 05:24:05

标签: vhdl

我正在使用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了一下,看看我是否能找到解决这个错误的方法,但我没有运气。有些网站提到大多数综合工具都不支持 别名

任何人都可以指出我正确的方向来解决这个问题。

非常感谢,

林肯

1 个答案:

答案 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元素,而不使用聚合来提供数组类型。

您编码然后分析,而无需编写测试平台,详细说明和模拟(这告诉我们范围没有内部连接问题)。