Все работает, кроме функции приращения. Он может увеличиваться от 0 до 1, от 1 до 2, а затем от 2 до 1111111111. Я в тупике.Приращение счетчика программы не работает
Переменные:
D_IN: Данные в
PC_OE: Активный высокий. Привод вывода PC_TRI.
PC_LD: Активный высокий синхронно загружает D_IN в ПК.
PC_INC: Активно высокий синхронно увеличивает значение на ПК.
RST: активный высокий асинхронный сброс.
PC_COUNT: Текущее значение на ПК. Адрес.
PC_TRI: Текущее значение на ПК под управлением трех состояний. Когда PC_OE = '1', PC_TRI < = PC_COUNT, иначе высокий импеданс.
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
entity ProgramCounter is
Port (D_IN : in STD_LOGIC_VECTOR (9 downto 0);
PC_OE : in STD_LOGIC;
PC_LD : in STD_LOGIC;
PC_INC : in STD_LOGIC;
RST : in STD_LOGIC;
CLK : in STD_LOGIC;
PC_COUNT : out STD_LOGIC_VECTOR (9 downto 0);
PC_TRI : out STD_LOGIC_VECTOR (9 downto 0));
end ProgramCounter;
architecture Behavioral of ProgramCounter is
signal s_COUNT : STD_LOGIC_VECTOR (9 downto 0);
begin
s_COUNT <= "0000000000";
proc: process(RST, CLK, PC_LD, D_IN, s_COUNT, PC_INC, PC_OE)
begin
if (RST = '1') then
s_COUNT <= "0000000000";
elsif (rising_edge(CLK)) then
if (PC_LD = '1') then
s_COUNT <= D_IN;
elsif (PC_INC = '1') then
s_COUNT <= s_COUNT + 1;
else
end if;
else
end if;
if (PC_OE = '1') then
PC_TRI <= s_COUNT;
else
PC_TRI <= "ZZZZZZZZZZ";
end if;
PC_COUNT <= s_COUNT;
end process proc;
end Behavioral;
Вы уверены, что PC_LD не ошибочно установлен? –
Я уверен. Я использую симулятор, чтобы проверить его. Он говорит, что PC_LD - «0». Что странно, так это то, что ни одна из данных, которые я вводил, это «1111111111». Я понятия не имею, где он получает эту ценность. – 2014-10-01 07:18:16
В теле архитектуры есть параллельное назначение '' 0000000000 '' '' s_count'. В процессе «proc» есть дополнительный драйвер. «+» Будет распространять «X» после разрешения 's_count' (0), '0' и' 1'. Является ли ваш тестовый пример способным воспроизводить ваши симптомы? – user1155120