2014-01-29 15 views
1

현재 vhdl로 작업 중이며 7 세그먼트 디스플레이에 문제가 있습니다. 나는이 코드를 온라인에서 발견했는데 정확히 무슨 뜻인지 이해하는데 어려움을 겪고있다. 일부는 내가 다음 코드를 사용하여 무슨 일이 일어나고 있는지 이해하는 데 도움이 수 :VHDL을 사용하는 세그먼트 디스플레이

ARCHITECTURE Structure OF multi IS 
SIGNAL C : STD_LOGIC_VECTOR(2 DOWNTO 0); 
BEGIN 
LEDR <= SW; 
C(2 DOWNTO 0) <= SW(2 DOWNTO 0); 

HEX0(0) <= NOT((NOT(C(2)) AND NOT(C(1)) AND C(0)) OR 
(NOT(C(2)) AND C(1) AND C(0))); 
HEX0(1) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND C(1) AND C(0))); 
HEX0(2) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND C(1) AND C(0))); 
HEX0(3) <= NOT((NOT(C(2)) AND NOT(C(1)) AND C(0)) OR 
(NOT(C(2)) AND C(1) AND NOT(C(0))) OR 
(NOT(C(2)) AND C(1) AND C(0))); 
HEX0(4) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND NOT(C(1)) AND C(0)) OR 
(NOT(C(2)) AND C(1) AND NOT(C(0))) OR (NOT(C(2)) AND C(1) AND C(0))); 
HEX0(5) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND NOT(C(1)) AND C(0)) OR 
(NOT(C(2)) AND C(1) AND NOT(C(0))) OR (NOT(C(2)) AND C(1) AND C(0))); 
HEX0(6) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND NOT(C(1)) AND C(0))); 
END Structure; 

내가 모든 NOT 및 OR 문에서 논리를 이해하지 않습니다.

고맙습니다.

답변

5

코드가 난독 화 된 VHDL 경연 대회에서 온라인으로 탈출 할 때 발생합니다.

아마도 더 많은 자선 단체에서 누군가는 8 진수에서 7 세그먼트로 된 디코더 칩 (또는 회로 보드!)에 대한 1970 년대 초의 설계도를 전달 받았으며 원래 구성 요소가 더 이상 존재하지 않기 때문에 VHDL로 다시 작성하라고 요청했습니다. 유효한. 그/그녀는 고전적인 "제품 합"형태로 그것을 작성하고 그것을 최소화하려고 시도하지 않았습니다 ...

나는 당신이 할 수있는 최선의 일은 조회 테이블로 전체를 작성하는 것이라고 생각합니다. 비트와 논리의 세부 사항에 대해 걱정하지 마십시오.

각 표현식과

시작 ...

HEX0(6) <= NOT((NOT(C(2)) AND NOT(C(1)) AND NOT(C(0))) OR 
(NOT(C(2)) AND NOT(C(1)) AND C(0))); 

그리고

HEX0(6) <= NOT((NOT(C(2)) AND NOT(C(1))); 

그것을 최소화하고 각 값에 대해 그것을 쓰기

C C2 C1 C0 H6 H5 H4 H3 H2 H1 H0 HEX0 
0 0 0 0 0 0 0 1 0 0 1 0001001 = 09 
1 0 0 1 0 
2 0 1 0 1 
3 0 1 1 1 
4 1 0 0 1 
5 1 0 1 1 
6 1 1 0 1 
7 1 1 1 1 

(완료되지 및 중 올바른 보장되지 ...)

다음 줄에있는 내용을 다시 작성하십시오.

subtype Seven_Seg is std_logic_vector(6 downto 0); 

constant Lookup : array(0 to 7) of Seven_Seg := (0 => "0001001", 
                1 => ... 
                ... 
                7 => ...); 

Hex0 <= Lookup(to_integer(unsigned(C))); 

이 작업을 완료하십시오.

관련 문제