【问题标题】:VHDL ERROR: formal port 'num' has no actual or default valueVHDL 错误:正式端口 'num' 没有实际值或默认值
【发布时间】:2022-01-19 00:36:55
【问题描述】:

尝试移植简单的测试设备以设置模拟时,我在 Vivado 中遇到此编译错误。当站在 'uut : testing_logic' 行时会发现这一点。我已经三次检查了逗号和分号,但无法弄清楚为什么我不断收到此错误。

我已经看到了这个问题 VHDL: formal port 'portName' has no actual or default value 和我的错误不一样。

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;

entity testing_logic_TB is
end testing_logic_TB;

architecture Behavioral of testing_logic_TB is
    -- Declare component to test
    component testing_logic
        port(
            -- stuff in the component
            --inputs
            num : in std_logic_vector(4 downto 0);
            btn_add : in std_logic;
            btn_sub : in std_logic;
            clk : in std_logic;
            reset : in std_logic;
            --Outputs
            led : out std_logic_vector(15 downto 0)
        );
    end component;
    
    -- Declare all signals to change inputs and check outputs
    signal num_TB : std_logic_vector(4 downto 0);
    signal btn_add_TB : std_logic := '0';
    signal btn_sub_TB : std_logic := '0';
    signal clk_TB : std_logic := '0';
    signal reset_TB : std_logic := '0';
    signal led_TB : std_logic_vector(15 downto 0);

    -- Constants needed for simulation
    constant CLK_PERIOD : time := 2 ns;

begin
    
    uut : testing_logic
        port map(
            num : num_TB,
            btn_add : btn_add_TB,
            btn_sub : btn_sub_TB,
            clk : clk_TB,
            reset : reset_TB,
            led : led_TB
        );

    --Change the clock
    clk_change : process
    begin
        clk <= '0';
        wait for CLK_PERIOD / 2;
        clk <= '1';
        wait for CLK_PERIOD / 2;
    end process;

    -- change reset
    rst_change : process
        rst <= '1';
        wait for CLK_PERIOD * 10;
        rst <= '0';
        wait for CLK_PERIOD * 10;
        rst <= '1';
        wait for CLK_PERIOD * 10;
        rst <= '0';
        wait for CLK_PERIOD * 10;
    end process;

    -- change number
    num_change : process
        num_TB <= 10;
        wait for CLK_PERIOD * 2;
        num_TB <= 5;
        wait for CLK_PERIOD * 2;
    end process;

    -- press add button
    press_btn_add : process
        btn_add_TB <= '1';
        wait for CLK_PERIOD / 10;
        btn_add_TB <= '0';
        wait for CLK_PERIOD * 3;
    end process;
    
    -- press subtract button
    press_btn_sub : process
        wait for CLK_PERIOD * 3;
        btn_sub_TB <= '1';
        wait for CLK_PERIOD / 10;
        btn_sub_TB <= '0';
    end process;

end Behavioral;

【问题讨论】:

  • 接口列表(例如端口映射方面)中的正式关联要么是位置的(按顺序列出关联的实际值,没有任何遗漏),要么是命名的(正式端口 => 实际信号)。您可以从位置关联切换到命名关联,但不能从命名关联切换(返回)到位置关联。您的进程 rst_change、num_change press_btn_add 和 press_btn_sub 都缺少保留字 begin。不能为 num_TB 分配整数文字。测试台中没有为分配的信号 clk、rst(SB clk_TB 和 reset_TB?)声明的信号。
  • 所以您报告的错误是因为端口映射中的 : 而不是 => (错别字)。还有其他语法和语义错误。
  • 天哪,谢谢!马上修好了。

标签: port vhdl


【解决方案1】:

您的问题只是您没有使用正确的语法进行端口映射,这是正确的语法

    uut : testing_logic
    port map(
        num =>num_TB,
        btn_add => btn_add_TB,
        btn_sub => btn_sub_TB,
        clk => clk_TB,
        reset => reset_TB,
        led => led_TB
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多