VLSI CAD: Logic to Layout Lecture 009 BDD Basics Part 2

그래서 강의 32에서는 Computational Boolean에 대한 작업을 계속할 것입니다

대수학 그리고 우리는 이진 의사 결정 다이어그램 또는 BDD 개발 마지막 강의에서 우리는 의사 결정 다이어그램이 진실한 테이블과 같은 것 그러나 단지 너무나 큰 그리고 우리가 한 첫 번째 일 중 하나는 우리가 주어진 조각에 대해 다이어그램을 모두 동일하게 만들기위한 변수들 of, of 부울 논리 우리는 계속해서 제약하고 의사 결정 다이어그램 축소

우리는 또 다른 큰 아이디어를 소개 할 것입니다 이 강의에서 우리는 다이어그램을 축소 할 것입니다 다이어그램에서 특정 중복 형태를 제거 할 것입니다 그래서 우리에게는 정말 멋진 재산이 있습니다 부울 방정식

그리고 당신은 변수가 BDD에 나타나면 항상 같은 다이어그램을 얻습니다 나는 항상 같은 그래프를 얻는다 데이터를 생성하면 이런 식으로 정식 구조는 사실상 놀랍도록 강력한 도구가됩니다 Boolean 객체를 조작하고 정말 흥미로운 질문에 대답합니다 그럼 어떻게 작동하는지 봅시다

우리는 다시 바이너리를보고 있습니다 의사 결정 다이어그램 및 리뷰를 통해 처음으로 커다란 두 가지 큰 아이디어를 얻었습니다 첫 번째 아이디어는 헤이 (Hey) 였고, 의사 결정 다이어그램을 사용할 수있게했습니다 그리고 두 번째로 큰 아이디어는 전역 변수를 주문하도록합니다 루트에서 리프까지의 모든 경로는 동일한 순서로 변수를 방문하고 우리가 가진 것이 었습니다

우리가 만드는 BDD가 여전히 존재한다는 사실 표준이 아닙니다 두 가지 다른 BDD를 사용할 수 있습니다 동일한 기능을 나타냅니다 그래서 또 다른 큰 아이디어가 필요합니다 그리고 이것이 바로 다음으로 중요한 아이디어, 즉 감축이라는 아이디어입니다

이것은 그래프에서 제거 할 수있는 중복이 있다는 아이디어입니다 불필요한 노드와 가장자리 필요없는 것들이 있습니다 우리는 일부 노드를 제거 할 수 있습니다 우리는 가장자리를 제거 할 수 있습니다

그래프를 조이면됩니다 그것을 더 작게 만드십시오 그래서 이전 강연의 끝에서 우리는 X2 노드와 그 자식을 꺼내었고 우리는 그것을 바꿨다 그것이 바로 그 예입니다 우리가 왜 이러는거야? 글쎄, 우린 2 번 매우 유용한 이유

첫 번째는 그래프 크기입니다 결과 데이터 구조를 가능한 한 작게하고 싶습니다 음, 그 말이 맞지? 왜 컴퓨터 메모리를 더 사용하지 않는가? 필요해? 하지만 두 번째는 내가 정말로 원한다는 것이다 나에게 같은 변수를 주면 같은 부울 함수에 대한 정규형 주문 나는 거기에 정확히 있기를 바란다

이 함수를 나타내는 그래프 그리고 그것은 엄청나게 강력한 아이디어, 우리가 그렇게 할 수 있다면 따라서 우리는 몇 가지 감축 규칙을 사용하려고합니다 그리고 감축 규칙은 결정 다이어그램에서 비효율적이기 때문에 노드 수를 줄이거 나 가장자리 수를 줄일 수 있습니다 따라서 첫 번째 축소 규칙은 실제로 간단합니다

그리고 말하기를, 우리는 단지 각각의 일정한 잎 하나를 쉽게 지켜야 만합니다 그리고 이것은 등가의 잎 노드를 합치는 규칙입니다 그리고 정말로 말하고있는 것, 나는 정말로 이것의 맨 아래에 하나의 0 노드 만 필요합니다 이진 결정 다이어그램 그리고 맨 아래에 하나의 노드 만 필요합니다

이 결정 도표의 그리고 나는이 모든 것을 정말로 제거 할 수 있습니다 다른 별도의 사본 그리고 나는 그 모든 모서리를 매우 큰 초기 다이어그램 그리고 변수를 리디렉션 할 수 있습니다

노드는 상수 노드로의 에지를 갖는다 나는 그것을 하나의 복사본으로 리디렉션 할 수 있습니다 0과 1의 단일 사본 그리고 만약 우리가 그 모든 모서리를 감당한다면 그것은 축소되지 않은 버전의 맨 밑에있는 네 개의 X3 노드에서 나온 것입니다

이진 결정 다이어그램 그리고 그것들을 하나의 0으로 리디렉션하면됩니다 노드와 단일 1 노드로 구성됩니다 그것이 우리가 얻는 것입니다 그리고 오, 봐요

훨씬 나아 졌어요 하지만 내가 말했듯이, 당신은 100 개의 변수를 사용하면 아래쪽에 100 개 중 2 개가 100 개 있습니다 자, 두 개있어 좋습니다 하지만 아시다시피 아시다시피, 우리는 여전히 훨씬 더 잘 할 수 있습니다

상단에 물건 이 삼각형으로 여기를 돌면서 BDD의 상단 부분 글쎄요, 아직도 하나의 X1 노드가 있습니다 두 개의 X2 노드, 네 개의 X3 노드가 있습니다 나는 정말로 물건을 더 좋게 만들지 않았지만 적어도 상수 노드에 대해서는

이것은 바보가 아닙니다 이것은 덜 비효율적입니다 이것은 많은 의미가 있습니다 그러나 더 재미있는 것을 보자 감소 규칙

뭔가 실제로, In 강력한 방법은 이러한 의사 결정 다이어그램의 내부를 감소시킵니다 그래서 여기에 두 번째 축소 규칙이 있습니다이 이름은 더 흥미로운 이름입니다 그것은, isomorphic 노드를 병합 말한다 좋아, 동형 노드 란 무엇입니까? 동형 노드는 두 가지 중요한 특성을 갖는 두 개의 이름입니다

그것들은 동일한 변수이며, 동일한 자식을가집니다 자, 같은 변수, 그것은 일종의 쉬운 변수입니다 x와 y, 또는 x와 q를 절대로 병합하지 않을 것입니다 자, x와 x를 병합 할 수 있습니다 그러나 동일한 아이들은 그들이 동일하다는 것을 의미합니다

똑같은 육체의 아이들 그들은 똑같은 아이들이 아닙니다 상표 그래서 여기에 예제가 있습니다 동형 노드

x 노드는 동형이다 좋구나 자, x 노드는 같은 변수를 가지고 있습니다 괜찮아 둘 다 x 노드입니다

그리고 x 노드에도 동일한 자식이 있습니다 그리고 저의 말은 저들이 제로 자녀들을 가르키고 있다는 것을 의미합니다 ay 노드와 높은 포인터로 이동하십시오 어느 것이 값이 1로 설정되면, 둘 다 z 노드로 이동합니다 그리고 그들은 늙은 y, 무작위 y에 가지 않습니다 노드 또는 z 노드의 경우 둘 다 동일하게 이동합니다

X y 노드와이 동일한 z 노드 똑같은 노드 그리고 여기서 일어나는 일은 제가 둘 다 필요하지 않습니다 나는 그들 중 하나를 제거 할 수있다 그래서 저는 그것을 하나, 어떤 것으로 든 간단하게 대체 할 수 있습니다

그것은 중요하지 않습니다 그리고 나는 아이들을 지킬 수있다 권리? 내가 여기서 그림을 그리는 것처럼, 맞아 그래서 x 노드가 있습니다 그 낮은 자식은 y로 이동하고, 높은 자식은 z로 이동 한 다음 y와 z는 z로 이동합니다

영향을받지는 않지만이 경우에는 x로 들어가는 두 개의 포인터가 있습니다 노드 그 중 하나가 왼쪽 x 노드로 들어가고 그 중 하나가 오른쪽 x 노드로 이동합니다 그리고 지금 일어나는 것은 당신이 단순히 둘 다 리디렉션하십시오 x 노드로 이동합니다

그래서이 BDD에서 x 노드 위에 어떤 일이 일어나고 있었는지, 맞습니까? 그리고 x에 이르기까지 다양한 결정을 내린 일부 장벽을 뛰어 넘었습니다 그 포인터들은 단지 x의 단일 사본을 가리킨다 그리고 옆에 작은 회색 상자가 있습니다 그냥 조리법을 제공합니다 중복 노드를 제거합니다

이 경우는 추가 x 노드입니다 들어간 모든 가장자리를 리디렉션합니다 중복 된 노드를 보관 한 복사본으로 만듭니다 따라서이 경우 오른쪽 x 노드로의 가장자리는 왼쪽 x 노드로 들어 가지 않습니다 잘

그것은 동형이 합쳐진 예입니다 노드를 사용하여 BDD의 복잡성을 줄입니다 그러므로 우리의 규칙에 규칙 2를 적용 해 봅시다 그리고 우리가 잠시 그것을 보았을 때, 우리가 찾아야 만하는 큰 것이 있습니다 동일한 변수 레이블을 가진 노드는 무엇입니까? 그리고 똑같은 아이들

그래서, 다른 노드가 없습니다 x1이므로 x1이 될 수 없습니다 그리고 우리가 x2를 보면, 그들은 x2를 보지 않습니다 동일한 자녀가 있습니다 하지만 우리가 x3을 조금이라도 쳐다 보지 않으면 동안

우리가 발견 할 수있는 것은, 가장 오른쪽 x3은 모두 동형입니다 그들은 모두 낮은 자녀로 0, 높은 자녀로 1을가집니다 그래서 저는 그 중 하나만 필요로합니다 나는 그들 모두를 필요로하지 않는다 그래서이 BDD를 다시 그릴 수 있습니다

x1이 있어요 좋아요, 정상에요 그리고 다음 순위에 올랐습니다 두 개의 x2 노드가 있죠 맞죠? 그리고 낮은 아이가 왼쪽 x2로 간다

마디 그리고 높은 아이가 오른쪽 x2로 간다 마디 그런 다음 오른쪽에 싱글 x3 아이 맞지? 그리고 x2의 높은 아이가 있고 x2의 하위 하위 노드는 모두 단일 x3 노드로 이동합니다 그것들은 새로운 가장자리이기 때문에 작은 별들을 넣을 것입니다

왼쪽에서 x2 노드도 이동하고 하위 노드는 x3 노드로 이동합니다 아래쪽에는 하나의 상수와 하나의 상수가 있습니다 왼쪽의 x3 하위 노드 (하위 노드와 하위 노드 모두)는 0 노드로 이동합니다 오른쪽의 x3 노드, 하위 하위 노드는 0 노드로 이동하지만 상위 하위 노드 1 노드로 이동합니다 그리고 왼쪽의 x2 노드는 다음과 같이 씁니다

높은 아이는 x3으로 간다 나는 그걸로 작은 별을 넣을거야 괜찮아? 그래서, 그것들은 모든 것들입니다 재 소송, 맞지? 두 사람을 죽인 결과 세 개의 x3 노드 그리고 그것들을 하나의 x3 노드로 대체합니다

그리고 당신이 즉시 볼 수있는 것들 중 하나는이 그래프에 더 적은 것이 있다는 것입니다 그 중 일부는 적고 복잡하지 않으며 좋은 것입니다 더 단순한 것이 더 낫다는 것을 알고 있습니다 그러나 기다려라, 더있다, 또 다른 것이있다 중복 노드를 제거하는 데 사용할 수있는 규칙 그리고 이것은 불리는 규칙이며, 중복 테스트를 제거합니다

이것은 당신이 그것을 볼 때, 단순하게 느껴지는 것들 이 경우의 테스트는 변수 노드를 의미합니다 맞습니까? 그래서 x가 1이면 내가 무엇을해야합니까? x가 0이면 나는 무엇을해야합니까? 중복 테스트는 변수에 자식이 둘 다있는 상황입니다 같은 노드로 그리고 그건 바보 일 뿐이야, 그렇지? 위의 다이어그램에서 x가 무엇인지 알 필요가 없습니다 x가 0이면 y 노드에 무엇을해야하는지 묻습니다

x가 1이면 y 노드에게 무엇을해야하는지 묻습니다 그럴 필요는 없습니다 권리? 그래서 저는 x 노드를 죽일 수 있습니다 y 노드를 유지할 수 있습니다 권리? 그리고 다시 내가 이것을 볼 때,이 예를 들어, x 노드에 들어가는 가장자리는 많지만 거기에 있습니다

간단히 y 노드로 이동하도록 리디렉션합니다 대신 x 노드를 우회합니다 x 노드가 사라집니다 나는 그것이 어떤 가치가 있는지 신경 쓰지 않는다 내 출력에 영향을주지 않습니다

기능과 그래서 나는 그것을 제거합니다 그리고 다시, 작은 회색 상자가 있습니다 오른쪽 상단에 약간의 수식을 제공하고, 중복 노드를 제거하고, 모든 에지를이 경우 x 인 중복 노드로 리디렉션합니다 자식,이 경우 제거 된 노드의 y 그것은 그것이 조리법이지만, 단순한 것입니다 그래서 우리가 진화하는 BDD로 돌아가서 규칙 3을 적용한다면, 내가 그린 것 왼쪽은 같은 예였다

내가 전에 손으로 몇 개의 슬라이드를 만들었다 X1은 낮은 하위 노드와 높은 하위 x2를 가진 최상위 순위 노드입니다 권리? 다음 순위는 2 x3입니다 맞습니까? 왼쪽의 x2에는 x3으로 이동하는 하위 하위가 있습니다 높은 아이가 맞는 x3입니다

오른쪽의 x2, 두 어린이, 오른쪽 x3으로 가십시오 왼쪽의 x3은 둘 다 0으로 이동합니다 그리고 오른쪽의 x3은 0으로, 높은 값은 1로갑니다 우리는 이것을 즉시 볼 수 있으며 왼쪽의 x3이 중복됨을 볼 수 있습니다 두 자식 모두 0 노드로 이동하기 때문입니다 그리고 오른쪽에있는 x2는 중복됩니다

왜냐하면 둘 다 자식이 x3 마디 그래서 나는 둘 다 죽일 수있다 둘 다 죽일 수 있고 가장자리를 방향 재 지정할 수 있습니다 나는 그들에 의해 작은 별들을 넣을 것이다 들어가는 가장자리를 리디렉션 할 수 있습니다

내가 죽이는 노드 나는 그 아이들을 아이들에게 보낼 수 있습니다 권리? 오른쪽 그림에서 저는 리디렉션 된 이러한 각 가장자리별로 작은 별을 넣을 것입니다 그리고 우리는 훨씬 더 단순한 BDD를 가지고 있습니다 맨 위에는 x1 노드가 있습니다

두 번째 순위에서 단일 x2 노드 X1의 하위 노드는이 x2 노드입니다 세 번째 순위에는 단일 x3 노드가 있습니다 X1의 상위 하위 노드는 해당 노드입니다 X2의 자식 노드가 x3 노드입니다 그리고 바닥에 상수가 있습니다

X2의 하위 하위 요소는 0입니다 하위 요소 하위 요소는 0입니다 X3의 높은 자녀는 1입니다 와우, 이것은 시작한 것보다 BDD가 적습니다 와

이것은 내가 시작한 것보다 그래프가 적다 이 이것은 적은 수의 노드와 적은 수의 노드입니다 가장자리 자, 당신이 물을지도 모르겠다면

이 규칙을 어떻게 적용합니까? 그리고 지금은 그냥 말할 것입니다 반복적으로 다른 그래프 일치를 찾을 수없는 경우, 그래프가 축소됩니다 프로그램이 실제로 그렇게하는 것입니까? 아닙니다 아니오, 아니오, 두 개의 느낌표가 표시됩니다

내가 당신에게 100 개의 변수가있는 함수를 제공한다면, 방금 전에 보여준 방식대로 당신은 당신이 알고있는 100 개의 노드와 2 개의 노드로 의사 결정 다이어그램을 만들어야합니다 하단에 그런 다음이 감면을 적용해야합니다 그게 미친 짓이야 네가 할 수있는 방법이 없어

사실 훨씬 똑똑한 방법이 있습니다 우리는 매우 높은 수준의 작업을 수행 할 것입니다 그 방법의 개요 그러나 지금과 숙제를 위해 문제 및 일종의 지적인 종류의 물건을이 물건 위에 세 개 또는 네 개의 변수가있는 함수를 제공하고 BDD를 수행하도록 요청하면 손으로이 작업을 완벽하게 수행 할 수 있습니다

당신은 옳은 대답을 얻을 것이고 당신은이 물건이 어떻게 작동하는지에 대해 약간의 통찰력을 얻을 것입니다 자, 여기에서 가장 중요한 것은 우리가 의사 결정 다이어그램으로 시작했고 정말 컸습니다 그리고 우리는 변수를 주문했고 우리는 말했다 그것이 우리가 정규화 된 그래프를 만들 수 있는지 봅시다 우리가 항상 같은 그래프를 얻는다면 대답은 '아니오'일 것입니다

중복 항상 모든 변수를 방문하더라도 루트에서 리프까지 같은 순서로 결정을 내릴 때 다른 그래프를 얻으십시오 그러면 우리는 다이어그램을 모두 축소합니다 이러한 병합 작업 그리고 우리는 새로운 것을 얻었습니다

Reduced Ordered BDD라는 것이 있습니다 그리고 그 결과는 정말 멋진 결과입니다 그리고 정말 멋진 결과는 축소 된 BDD가 표준 형식이라는 것입니다 권리? 그래서 저는 데이터 구조를 말할 것입니다 부울 함수

나는 그걸 막을거야 느낌표 우리의 축소 주문 BDD는 정규형입니다 동일한 함수는 항상 정확히 동일한 그래프를 생성하고 정확히 동일한 노드를 생성하며, 똑같은 가장자리와 똑같은 아이를 가진 네가 나에게 동일한 변수 주문을 주었다면 두 개의 부울 함수는 그들의 축소 된 BDD 그래프가 동형 인 경우에만 그들은 동일하다고 말했습니다

이제, 당신은 생각할지도 모릅니다 체크 할거야? 그리고 대답은 놀랍게도 될 것입니다 하찮은 그것은 놀라운 결과입니다 그리고 이것은 가지고있는 정말 아름다운 재산입니다

그 그래프의 가장 간단한 형태, 그래프의 가장 효율적인 형태 최소한의 컴퓨터 리소스를 사용하는 그래프의 형태는 정식 형태 그건, 그냥 사랑스러운, 사랑스러운 전체 BDD 개발의 예상치 못한 일종의 결과 따라서 이것은 축소 된 BDD 감소입니다 알다시피, 우리는, 우리는 그것을 어떻게 만드는지

우리가 다음에하고 싶은 것은 말하기 시작하는 것입니다 우리가 어떻게, 어떻게 우리가이 일을 어떻게 할 것인가에 대한 현실 세계