VHDL警告:(vcom-1263)配置规范;全部:bcd“;不适用于任何组件实例化语句

VHDL警告:(vcom-1263)配置规范;全部:bcd“;不适用于任何组件实例化语句,vhdl,compiler-warnings,bcd,Vhdl,Compiler Warnings,Bcd,这个问题困扰了我一段时间。如果有人能帮助我,我将不胜感激。已经反复阅读了大部分代码,但没有任何解决方案。有多套代码在使用中;此bcd计数器将在我的项目的其余部分中进一步使用。我在下面添加了必要的代码: 1位BCD计数器: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL; USE WORK.mypackage_p.ALL; ENTITY bcd_e IS POR

这个问题困扰了我一段时间。如果有人能帮助我,我将不胜感激。已经反复阅读了大部分代码,但没有任何解决方案。有多套代码在使用中;此bcd计数器将在我的项目的其余部分中进一步使用。我在下面添加了必要的代码:

1位BCD计数器:

    LIBRARY IEEE;
    USE IEEE.STD_LOGIC_1164.ALL;
    USE IEEE.NUMERIC_STD.ALL;
    USE WORK.mypackage_p.ALL;

    ENTITY bcd_e IS
    PORT(
    res_i, clk_i, enable_i, counter_res_i   : IN STD_LOGIC;
    bcd_o                   : OUT STD_LOGIC_VECTOR(bcd_width_c-1 DOWNTO 0);
    carry_o                 : OUT STD_LOGIC
    );
    END bcd_e;
    ARCHITECTURE bcd_a OF bcd_e IS

    SIGNAL count_s  : INTEGER RANGE bcd_cnt_c DOWNTO 0;

    BEGIN

    PROCESS(res_i, clk_i)
    BEGIN
    IF (res_i = '1') THEN
        count_s <= 0;
    ELSIF (clk_i = '1' AND clk_i'EVENT) THEN
        IF (enable_i = '1') THEN
            IF(count_s >= bcd_cnt_c) THEN
                count_s <= 0;
            ELSE
                count_s <= count_s + 1;
            END IF;
        END IF;
        IF (counter_res_i = '1') THEN
            count_s <= 0;
        END IF;
    END IF;
    END PROCESS;

    bcd_o <= STD_LOGIC_VECTOR(to_unsigned(count_s, bcd_width_c));
    carry_o <= '1' WHEN (count_s = bcd_cnt_c) ELSE '0';

    END bcd_a;
我不断收到以下警告:

警告:/home/stud/mr-131416/Desktop/VHDL_Project_Latest/src/bcd_counter 8_a.vhd(15):(vcom-1263)配置规范“all:bcd”不适用于任何组件实例化语句


由于此警告,代码未通过测试台的测试/模拟。非常感谢您的帮助

这是一个范围问题。组件配置配置组件实例化。generate语句生成块语句(或提供端口映射时的嵌套块语句)

block语句(用于内部或外部块)使用仅在配置声明中找到的块配置

绑定指示不是分层的,如果不能深入到块中指定组件实例化,则可以使用配置声明或移动配置规范:

    -- for all : bcd use entity work.bcd_e (bcd_a);

begin  

    carry_s(0) <= enable_i;

gen_carry : 
    for i in 1 to (no_of_digits_c-1) generate
        carry_s(i) <= carry_s((i-1)) and enable_s((i-1));
    end generate gen_carry;

gen_bcd : 
    for i in 0 to (no_of_digits_c-1) generate
        for all: bcd use entity work.bcd_e (bcd_a);
    begin

    digitx : bcd port map (res_i, clk_i, carry_s(i), 
                           counter_res_i, bcd_array_s(i), enable_s(i));
    end generate gen_bcd;

    bcd_array_o <= bcd_array_s;  -- CHANGED WAS MISSING SEMICOLON

end bcd_8counter_a;
——适用于所有人:bcd使用实体work.bcd_e(bcd_a);
开始

这是一个范围问题。组件配置配置组件实例化。generate语句生成块语句(或提供端口映射时的嵌套块语句)

block语句(用于内部或外部块)使用仅在配置声明中找到的块配置

绑定指示不是分层的,如果不能深入到块中指定组件实例化,则可以使用配置声明或移动配置规范:

    -- for all : bcd use entity work.bcd_e (bcd_a);

begin  

    carry_s(0) <= enable_i;

gen_carry : 
    for i in 1 to (no_of_digits_c-1) generate
        carry_s(i) <= carry_s((i-1)) and enable_s((i-1));
    end generate gen_carry;

gen_bcd : 
    for i in 0 to (no_of_digits_c-1) generate
        for all: bcd use entity work.bcd_e (bcd_a);
    begin

    digitx : bcd port map (res_i, clk_i, carry_s(i), 
                           counter_res_i, bcd_array_s(i), enable_s(i));
    end generate gen_bcd;

    bcd_array_o <= bcd_array_s;  -- CHANGED WAS MISSING SEMICOLON

end bcd_8counter_a;
——适用于所有人:bcd使用实体work.bcd_e(bcd_a);
开始

carry_s(0)它不适用于组件实例化,因为您正在将其应用于实体实例化!删除
实体工作。
并查看发生了什么。您缺少一个分号:
bcd\u array\o它不适用于组件实例化,因为您正在将它应用于实体实例化!删除
实体工作。
并查看发生了什么。您缺少一个分号:
bcd\U array\o我这样做了,编译器警告消失了,但是现在如果我使用测试台测试,它会给出U个输出,这意味着输入不会传递到bcd\U e。testbench代码太长,无法在此处输入。似乎无法对看不见的代码提供任何有见地的注释。您是否将所有输入驱动到有用的状态?U的一个常见原因是有多个驱动程序。您的输出是否也由另一个进程(可能在外部块(组件)中)驱动?我这样做了,编译器警告消失了,但现在如果我使用testbench测试,它会给出U个输出,这意味着输入不会通过bcd_e。testbench代码太长,无法在此处输入。似乎无法对看不见的代码提供任何有见地的注释。您是否将所有输入驱动到有用的状态?U的一个常见原因是有多个驱动程序。您的输出是否也由另一个进程(可能在外部块(组件)中)驱动?
    -- for all : bcd use entity work.bcd_e (bcd_a);

begin  

    carry_s(0) <= enable_i;

gen_carry : 
    for i in 1 to (no_of_digits_c-1) generate
        carry_s(i) <= carry_s((i-1)) and enable_s((i-1));
    end generate gen_carry;

gen_bcd : 
    for i in 0 to (no_of_digits_c-1) generate
        for all: bcd use entity work.bcd_e (bcd_a);
    begin

    digitx : bcd port map (res_i, clk_i, carry_s(i), 
                           counter_res_i, bcd_array_s(i), enable_s(i));
    end generate gen_bcd;

    bcd_array_o <= bcd_array_s;  -- CHANGED WAS MISSING SEMICOLON

end bcd_8counter_a;
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
use work.mypackage_p.all;

entity tb is
end entity;

architecture foo of tb is
    signal reset:       std_logic;          -- '1' for RESET
    signal clk:         std_logic := '0';
    signal en:          std_logic;          -- '1' for ENABLE
    signal syn_reset:   std_logic;          -- '1' for SYNCHRONOUS RESET
    signal bcd_array:   bcd_array_t;

begin
DUT:
    entity work.bcd_8counter_e
        port map (
            res_i => reset,
            clk_i => clk,
            enable_i => en,
            counter_res_i => syn_reset,
            bcd_array_o => bcd_array
        );
CLOCK:
    process
    begin
        wait for 5 ns;
        clk <= not clk;
        if now > 10 ms then
            wait;
        end if;
    end process;
STIMULI:
    process
    begin
        wait for 10 ns;
        reset <= '0';
        en  <= '0';
        syn_reset <= '0';
        wait for 10 ns;
        reset <= '1';
        wait for 20 ns;
        reset <= '0';
        wait for 20 ns;
        en <= '1';
        wait;
    end process;
end architecture;