modelim говорит: рядом ")": (vcom-1576) ожидает ИДЕНТИФИКАТОР. но исправление дает больше ошибок
при использовании этого кода:
library IEEE;
use IEEE.Std_logic_1164.all;
use IEEE.Numeric_STD.all;
entity CLOCKDIVIDER_TB is
end entity CLOCKDIVIDER_TB;
architecture BENCH of CLOCKDIVIDER_TB is
--declare component
component ClockDivider
Port(
CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
CLK_OUT_DIV_01 : OUT STD_LOGIC;
CLK_OUT_DIV_02 : OUT STD_LOGIC;
CLK_OUT_DIV_03 : OUT STD_LOGIC;
CLK_OUT_DIV_04 : OUT STD_LOGIC;
);
end component;
--inputs
signal CLK : IN STD_LOGIC := '0';
signal RST : IN STD_LOGIC := '0';
--outputs
signal CLK_OUT_DIV_01 : OUT STD_LOGIC;
signal CLK_OUT_DIV_02 : OUT STD_LOGIC;
signal CLK_OUT_DIV_03 : OUT STD_LOGIC;
signal CLK_OUT_DIV_04 : OUT STD_LOGIC;
--clock period
constant clk_t : time := 20 ns;
BEGIN
--uut instance
uut: ClockDivider PORT MAP (
CLK => CLK,
RST => RST,
CLK_OUT_DIV_01 => CLK_OUT_DIV_01,
CLK_OUT_DIV_02 => CLK_OUT_DIV_02,
CLK_OUT_DIV_03 => CLK_OUT_DIV_03,
CLK_OUT_DIV_04 => CLK_OUT_DIV_04
);
-- Clock definition.
clk_process: process
begin
CLK <= '0';
wait for clk_t / 2;
CLK <= '1';
wait for clk_t / 2;
end process;
-- Processing.
stim_proc: process
begin
wait for 100 ns;
reset <= '1'; -- Up
wait for 100 ns;
reset <= '0'; -- Down
wait;
end process;
end architecture BENCH;
Я получаю сообщение об ошибке:
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(27): near ")": (vcom-1576) expecting IDENTIFIER.
Однако при исправлении этой ошибки путем удаления точки с запятой в объявлении компонента:
--declare component
component ClockDivider
Port(
CLK : IN STD_LOGIC;
RST : IN STD_LOGIC;
CLK_OUT_DIV_01 : OUT STD_LOGIC;
CLK_OUT_DIV_02 : OUT STD_LOGIC;
CLK_OUT_DIV_03 : OUT STD_LOGIC;
CLK_OUT_DIV_04 : OUT STD_LOGIC
);
программа выдает следующие ошибки:
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(31): near "IN": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(32): near "IN": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(35): near "OUT": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(36): near "OUT": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(37): near "OUT": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(38): near "OUT": (vcom-1576) expecting STRING or IDENTIFIER or << or '('.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(47): (vcom-1136) Unknown identifier "CLK".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(48): (vcom-1136) Unknown identifier "RST".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(49): (vcom-1136) Unknown identifier "CLK_OUT_DIV_01".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(50): (vcom-1136) Unknown identifier "CLK_OUT_DIV_02".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(51): (vcom-1136) Unknown identifier "CLK_OUT_DIV_03".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(52): (vcom-1136) Unknown identifier "CLK_OUT_DIV_04".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(58): Illegal target for signal assignment.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(58): (vcom-1136) Unknown identifier "CLK".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(60): Illegal target for signal assignment.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(60): (vcom-1136) Unknown identifier "CLK".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(68): Illegal target for signal assignment.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(68): (vcom-1136) Unknown identifier "reset".
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(70): Illegal target for signal assignment.
** Error: D:\modelsim\week 2\ClockDivider_tb.vhd(70): (vcom-1136) Unknown identifier "reset".
Я не слишком уверен, почему программа ломается, когда я исправляю синтаксическую ошибку.
Я также довольно новичок в программе, и я не могу понять, что не так, используя другие примеры.
Кто-нибудь знает, как это исправить?