Цитата(SFx @ Jun 9 2011, 21:27)

если очень хочется их убрать - просто замените все " : std_logic;" на " : std_logic:='0';" и аналогично с std_logic_vector (как рекомендовал Kuzmi4 в п.1)
Это я попробовал первым делом, по аналогии с Verilog; не получилось, потому и задал вопрос.
Цитата(Kuzmi4 @ Jun 9 2011, 19:28)

Код
...
quietly set StdArithNoWarning 1
quietly set NumericStdNoWarnings 1
...
(убираете вывод этих ошибок на экран, в принципе не желательно так делать, но если ядро отлажено и интересно просто посмотреть то можно

)
Спасибо, опции запомню.
Я и написал в первом сообщении - что-то подобное видел, но не хочется терять эти проверки для остального проекта.
Цитата(Maksim @ Jun 9 2011, 19:29)

Наверно, из-за std_logic_vector
у мультиплексора появляются не определённые состояния. Надо попробовать через case описать его
+ in_port <= in_port_nx when rising_edge(clk); такая запись не имеет начального состояния
Наверное (не пробовал), сработало бы с использованием процесса с wait until rising_edge(clk_flashpb) - первый выбор происходил бы только на фронте clk, когда port_id уже проинициализирован - но в основном проекте есть критичные по латентности входы, которые мультиплексируются прямо на in_port, без регистра и, соответственно, без ожидания фронта.
Через case - попробоавл потом, всё работает; кстати, именно так и сделано в проектах-примерах, которые я смотрел. Но делать хотелось записывать варианты через целые, а не B"??" для единообразия с номерами выходов - они целые, как индексы бит регистра декодированного port_id (для повышения тактовой, как рекомендовано в UG). А при этом сохранялись предупреждения от conv_integer.
В итоге, "победила Дружба - которая пила"

- остановился на самом прямолинейном варианте изменений исходного проекта: явно доопределять значение port_id при наличии в нём "X":
(логика изменена в сравнении с исходным проектом, со входа убрана регистровая стадия)
Код
--************** Эксперимент по предупреждениям от вспомогательной логики **************************
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;
----------------------------------------------------------------------------------------------------
entity pb_warings is port (
clk, reset : in std_logic;
e_in_i_one, e_in_i_two : in std_logic_vector(7 downto 0); -- Отладочный 8-бит вход.
out_port : out std_logic_vector(7 downto 0)); end pb_warings;
architecture rtl of pb_warings is
signal address : std_logic_vector(9 downto 0);
signal instruction : std_logic_vector(17 downto 0);
signal port_id_no_x : std_logic_vector(7 downto 0) := X"00";
signal port_id, in_port : std_logic_vector(7 downto 0);
signal write_strobe, read_strobe, interrupt_r, interrupt_ack : std_logic;
begin
kcpsm3_is : entity work.kcpsm3 port map(address => address, -- Ядро PicoBlaze.
instruction => instruction, port_id => port_id, write_strobe => write_strobe,
out_port => out_port, read_strobe => read_strobe, in_port => in_port,
interrupt => interrupt_r, interrupt_ack => interrupt_ack, reset => reset,
clk => clk);
instr_rom_is : entity work.instr_rom -- ПЗУ инструкций.
port map (address => address, instruction => instruction, clk => clk);
port_id_no_x <= X"00" when is_x(port_id) else port_id;
with conv_integer(port_id_no_x) select -- Чтоб синтезировалось в паралл. мультиплексор.
in_port <= e_in_i_one when 16#03#,
e_in_i_two when others;
end rtl; --================================================================================
=========
XST (ISE) синтезировал, post-translate модель проверил - входы переключаются правильно.