Я работаю над школьным проектом и имею следующий триггер объект:Как передавать сигналы STD_LOGIC на объект с сигналами STD_LOGIC_VECTOR?
-- define the width-bit flip flop entity
entity flopr is
generic (width: integer);
port (clk, reset: in STD_LOGIC;
d: in STD_LOGIC_VECTOR(width-1 downto 0);
q: out STD_LOGIC_VECTOR(width-1 downto 0));
end flopr;
-- define the width-bit flip flop architecture
architecture asynchronous of flopr is
begin
process(clk, reset)
begin
if reset ='1' then
q <= (others => '0');
elsif rising_edge(clk) then
q <= d;
end if;
end process;
end;
Мне нужно передать STD_LOGIC
сигналов (биты) для d
и q
вместо STD_LOGIC_VECTOR
(векторов).
Однако, если бы я просто передать их без какого-либо преобразования, то есть ошибка компиляции, так как тип передается (STD_LOGIC
) не совпадает с типом в flopr
сущности (STD_LOGIC_VECTOR
), даже если размер STD_LOGIC_VECTOR
равен 1.
из небольшого Googling и экспериментов, я пришел с этим:
zeroMFlopr: entity work.flopr generic map(1) port map(clk => clk, reset => reset, d => (0=>zeroE), q(0) => zeroM);
Где zeroE
и zeroM
имеют тип STD_LOGIC
.
Он компилируется, но это правильный способ сделать это?
EDIT: Я попытался компиляции в Quartus и, как я сказал, что это работало нормально, но когда я пытаюсь компиляции в ModelSim я получаю сообщение об ошибке:
Actual expression (aggregate) of formal "d" is not globally static.
Ошибка ссылающийся на линии я отправил выше.
Он выглядит хорошо для меня ... –
@KevinCadieux ModelSim дает ошибку, так что я не уверен, что это работает .. Я обновил свой вопрос с ошибкой , Кроме того, я не знаю, кто это сделал, но было бы неплохо узнать, почему. Я ученик, пытающийся выучить крайне неинтуитивный и запутанный язык, и после многих исследований и многочисленных попыток попросил о помощи здесь. Разве это не для этого сайта? – Nate
@Nate: 'port map (clk => clk, reset => reset, d (0) => zeroE, q (0) => zeroM)' –