В моем коде VHDL у меня есть ошибка в sig_out_real <= X"00" & sig_in when sig_in(7)='0' else X"ff" & sig_in;
.
Я не думаю, что это синтаксическая ошибка. Но Quartus показывает ошибку в этот момент.
Я не понимаю, почему это ошибка.
Кто-нибудь может предоставить информацию:
-- Ошибка--
Ошибка (10500): синтаксическая ошибка VHDL в S8BT16B.vhd(35) рядом с текстом «когда»; ожидание ";"
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_signed.all;
use ieee.std_logic_arith.all;
use work.fft_package.all;
entity S8BT16B is
port(
clk_50 : in std_logic;
clk_baud : in std_logic;
main_reset : in std_logic;
enable : in std_logic;
sig_in : in signed (7 downto 0);
sig_out : out complex;
valid_output : out std_logic
);
end S8BT16B;
architecture Behavioral of S8BT16B is
type state is (idle,start);
signal state_reg, next_state_reg : state;
signal sig_out_real : signed(15 downto 0);
begin
state_change : process(clk_50, main_reset)
begin
if (main_reset = '1' or enable = '0') then
state_reg <= idle;
elsif (main_reset ='0' and enable = '1') then
state_reg <= next_state_reg;
end if;
end process;
S8BT16B_active : process(clk_baud, state_reg)
begin
if (state_reg = idle) then
sig_out_real <="0000000000000000";
sig_out <=(sig_out_real,"0000000000000000");
next_state_reg <= start;
valid_output <= '0';
elsif (state_reg = start and enable = '1') then
sig_out_real <= X"00" & sig_in when sig_in(7)='0' else X"ff" & sig_in;
sig_out <= (signed_converted_input, "0000000000000000");
next_state_reg <= idle;
valid_output <= '1';
end if;
end process;
end Behavioral;
when...else
, в операторах процесса. Это поддерживается в Quartus, когда вы включаете VHDL'08 для синтеза в своем проекте. Но другие функции VHDL'08 могут не поддерживаться, что приводит к сообщениям об ошибках. Также всегда старайтесь создать минимальный, полный и проверяемый пример, когда спрашиваете здесь. - person Martin Zabel   schedule 14.02.2016