모든 기능이 작동하지만 증분 기능은 작동합니다. 0에서 1, 1에서 2로 증가 할 수 있고, 2에서 "1111111111"로 증가합니다. 나는 혼란 스럽다.프로그램 카운터의 증분이 작동하지 않습니다.
PC_OE의 데이터 :
변수 :
D_IN 높은 활성. PC_TRI 출력을 구동합니다.
PC_LD : Active high는 D_IN을 PC에 동기식으로로드합니다.
PC_INC : 활성 하이는 PC에서 동기로 값을 증가시킵니다.
RST : 액티브 하이 비동기 리셋.
PC_COUNT : PC의 현재 값입니다. 주소.
PC_TRI : 트라이 상태 제어하에있는 PC의 현재 값. 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"이 아니라는 것입니다. 나는 그것이 그 가치를 얻고 있는지 전혀 모른다. –
아키텍처 본문에는''0000000000 "'과's_count'의 동시 할당이 있습니다. 'proc' 프로세스에 추가 드라이버가 있습니다. "+"는 s_count's (0), '0'과'1'을 해결 한 후''X ''를 전파합니다. 테스트 케이스가 증상을 재현 할 수 있습니까? – user1155120