2015-02-05 15 views
-1

모두 안녕하세요. 나는 VHDL에 대해 아주 새로운 것이라고 말함으로써 시작할 것입니다. VHDL (호기심 많은 MC14510B)에서 Motorola가 만든 updown 카운터를 모델링 해달라고 요청하는 프로젝트가 있습니다.VHDL 업/다운 카운터

데이터 시트에서 입력 PE (프리셋 활성화)가 하이로 토글되면 입력 핀 p4 ... p1의 4 개의 사전 설정 값이 곧바로 출력 q4 ... q1로 전달된다는 것을 알 수 있습니다.

내 코드가 컴파일을 거부하여 오류 : COMP96_0143 : MC14510B.vhd : (56, 13) : Object "p"를 쓸 수 없습니다.. 나는 Aldec을 컴파일러로 사용하고 있으며 무엇을 잘못하고 있는지 전혀 모른다. 나는 p에 입력을 쓰고 싶지 않습니다. p에 저장된 값으로 qtemp에 쓰려고합니다.

누구나 내가 엉망인 것을 볼 수 있습니까? 프로세스 문에서 주 if-else의 else 문은 문제를 일으키는 것입니다 (p < = qtemp 줄). 어떤 도움이라도 대단히 감사하겠습니다.

library IEEE; 
use IEEE.STD_LOGIC_1164.all; 
use IEEE.std_logic_unsigned.all; 

entity MC14510B is 
    port (
    signal pe  : in std_logic; 
    signal ci_not : inout std_logic; 
    signal reset : in std_logic; 
    signal updown : in std_logic; 
    signal clk : in std_logic; 
    signal p  : in std_logic_vector (3 downto 0); 
    signal q  : out std_logic_vector(3 downto 0); 
    signal co_not : inout std_logic 
    ); 
end; 

architecture myarch of MC14510B is 
begin 

    process(pe, ci_not, reset, updown, clk) 
    variable qtemp : std_logic_vector(3 downto 0); 
    variable cotemp : std_logic; 
    begin 
    if reset = '1' then          --reset condition 
     qtemp := "0000"; 
    elsif clk'event and updown = '1' and ci_not = '1' then --count up 
     if qtemp < 15 then 
     qtemp := qtemp + 1; 
     cotemp := '1'; 
     else 
     qtemp := "0000"; 
     cotemp := '0'; 
     end if; 
    elsif clk'event and updown = '0' and ci_not = '1' then --count down 
     if qtemp > 0 then 
     qtemp := qtemp - 1; 
     cotemp := '1'; 
     else 
     qtemp := "0000"; 
     cotemp := '0'; 
     end if; 
    elsif ci_not = '0' then 
     qtemp := "1010"; 
     cotemp := '1'; 
    else 
     if pe = '1' then          --enable preset 
     p  <= qtemp;         --output = input presets 
     cotemp := '1'; 
     else 
     qtemp := qtemp;         --output = output 
     cotemp := '1'; 
     end if; 
    end if; 
    q  <= qtemp; 
    co_not <= cotemp; 
    end process; 
end myarch; 

답변

0

당신은 당신이 p := qtemp을 가지고 qtemp <= p을해야하는 위치 주위에 설정 QTEMP하는 과제를 갖고있는 것 같다. 또한 p가 해당 프로세스의 민감도 목록에 있어야합니다.

코드가 분석됩니다. 그렇지 않으면 그것이 올바른지 보장하지 않습니다.

p은 (는) 모드로 선언되었으므로 쓸 수 없습니다.

+0

감도 목록? 그게 무슨 뜻인지 모르겠다./ –

+0

기본적인 VHDL 개념을 배울 수있는 좋은 기회. 여기에서 시도하십시오 : [Google VHDL 민감도 목록] (http://www.google.dk/#q=vhdl%20sensitivity%20list) –

+0

괄호 안의 비트 :'process (pe, ci_not, reset, updown, clk)'is 감도리스트 프로세스가 끝나면 묵시적인 'wait on pe, ci_not, reset, updown, clk;'문장이 있습니다. 트랜잭션이 해당 신호 중 하나에서 발생할 때까지 프로세스 실행을 일시 중단합니다. 시계와 함께 비동기 할당에 영향을주는 것은 민감도 목록에 있어야합니다. 이 경우 PE가 '1'인 동안 P가 변경되면 어떻게됩니까? 감도 목록에 P가 없으면 변경 사항이 누락됩니다. – user1155120