VLSI CAD: Logic to Layout Lecture 008 BDD Basics Part 1

따라서 강의 3에서 우리는 계산 형 불리언에 대해 계속 이야기 할 것입니다 대수학

그러나 우리는 현실에 초점을 맞출 것입니다 실용적인 데이터 구조와 연산자는 기본적으로 기본 모두가 대규모 산업 규모의 디자인을 수행하는 데 사용하는 방법 마지막 강좌 마지막 부분에서 Unate Recursive Paradigm에 대해 이야기했을 때, 우리는 단순한 종류의 표현과 단지 하나의 기본을 소개했습니다 운영, 동역학 Urp는 역사적으로 중요합니다

그러나 우리가 실제로 일을하는 방식은 아닙니다 따라서 제가 이야기하고자하는 것은 가장 강력한 데이터 구조 중 하나입니다 부울 우주에서 그것은 2 진 결정 다이어그램입니다 따라서 BDD라고합니다 그리고이 강연에서 우리는 의사 결정 다이어그램이 무엇인지 소개하고 우리가 그것을 조작하기 시작할 것입니다

그것을 제한하고 그것이 정말로 강력한 데이터가되도록 제한해야합니다 중요한 작업을 수행 할 수있는 구조 시작하자 그래서 여기에 다시 초점을 맞추고 있습니다 표현과 그들이 계산 부울의 연구에서 얼마나 중요한지 대수학

목표가 조작 할 수있는 곳 불린 객체는 우리가 할 수있는 연산자에 의해 조작되는 데이터 구조입니다 소프트웨어로 빌드하십시오 예를 들어, 우리가 URP 동역학이었던 마지막 강연의 마지막에서 끝난 것은 연산 그리고 당신은 이것이 정말 대단한 것임을 압니다 나, 방금 예를 들어 바로 여기에 동 토류 학 (tautology)에 내부 노드가 있습니다 큐브 b, c 및 b bar c bar가있는 계산 그래서 우리는 여기에 오기 전에 이미 1로 설정했습니다 이 특정 큐브 모음에 대한 동질주의에 대해서는 아무 것도 말할 수 없습니다 그래서 우리는 왼쪽에 1보다 작은 b set을 가야합니다

오른쪽에 b = 0으로 설정하십시오 우리가 왼쪽 편에서 볼 때, 오, 나는 그것의 동역학을 말할 수 있습니다 [UNKNOWN] 큐브가 있기 때문에 거기에 하나가 있습니다 이제 오른쪽에 우리가 다시 동역학이라고 볼 수 있습니다 단위, 두 개의 단일 변수 큐브 c 및 c 막대

그리고 우리가 함께 할 때, 우리는 1을 얻게됩니다 이것은 정말로 큰 아이디어를 보여줍니다 불리언 함수는 우리가 소프트웨어로 조작하는 것과 같은 기능을합니다 그러나 나는 URP가 당신이 알고 있다는 것을 인정해야한다 그것은 사람들이 그것을하는 실제 방법이 아니다

가장 영향력이 크고 가장 널리 배포 된 방식으로 가장 인기있는 것은 아니며, 그것들 중 하나가 아닙니다 그래서 우리는이 시퀀스에서 무엇을하고 싶습니까? 강의는이 일을 정말 중요하고 우아한 방법으로 생각합니다 정말 강력합니다 흥미로운 방법 바이너리 결정이라고하는 이러한 것들 다이어그램

그래서 그것들에 대해 이야기 해 봅시다 이제 의사 결정 다이어그램은 많은 사람들과 많은 사람들이 실제로 연구했습니다 Lee 그리고 Boute 그리고 Akers, 돌아 오는 길 그러나 그들은 카네기 멜론 대학 (Carnegie Mellon University)의 랜디 브라이언트 (Randy Bryant) 정말 놀라운 돌파구를 만들었습니다 그래서 이러한 것들은 기술적으로 불립니다

정돈 된 BDD 또는 ROBDD 축소 솔직히 모두 BDD라고 부릅니다 요즈음 이것은 정말로 획기적인 것이 었습니다 이러한 것들은 놀라운 데이터 구조로서 유용합니다

여기에 크고 흥미로운 Wikipedia 페이지가 있습니다 보고 가치 랜디가 제비를 줬다고 이 강의에서 멋진 BDD 그림과 이 강의 Randy Bryant에게 큰 감사를드립니다 그 자료를 사용하게합니다

그래서, 우리의 발달 단계는, 감소 된 주문 BDD는 의사 결정 다이어그램이 무엇인지에 대해 이야기하는 것입니다 따라서 첫 번째 아이디어는 부울 함수를 결정 다이어그램으로 바꾸는 것입니다 그리고 당신은 진실성 표를 가지고 있다고 생각할 수 있습니다 그리고 왼쪽 상단에 하나를 표시했습니다 그리고 그것의 측면에서 그것을 돌리는 종류와 그것을 나무의 형태로 두었습니다

이것은 3 진법에 대한 진리표입니다 변수 X1 x2 x3이므로 8 개의 행이 있습니다 처음 네 개는 0001이고 두 번째 네 개는 0101입니다 의사 결정 트리에 대한 큰 아이디어는 그것이 무엇인지에 대한 질문에 답하는 것입니다

결정의 순서로서의 기능의 가치 따라서 모든 정점은 변수를 나타내므로 여기서 정점입니다 변수 x1, 방금 여기에 표시했습니다 그리고 그것들에서 나오는 가장자리 정점은 해당 변수를 값으로 설정하기위한 결정입니다 따라서 점선으로 된 녹색 선을 따라 가면 값을 0으로 설정하기로 결정했습니다 여기 x1은 0이라고 말할 수 있습니다

그리고 만약 당신이 단색 선을 사용한다면, 당신은 값을 1로 설정하기로 결정 했으므로 여기에 x1 = 1을 쓸 수 있습니다 자,이 모든 화살들은 실제로 지시됩니다 그들은 진짜, 그들은 정말로, 모두 다 내려갔습니다 그러나 관습에 따라 우리는 그 (것)들을 그리지 않는다 왜냐하면 우리는 그들이 어디로 가는지 알기 때문이다

대답은 그들 모두가 가리킨다는 것입니다 맞아, 그리기는 정말 필요 없어 그 그리고 나서 아이디어는 당신이 변수를 이동하면서 그 변수의 가장자리까지 결정을 내리는 데 필요한 모든 변수를 방문했습니다 그리고 예를 들어, 진리표의 첫 번째 행과 나는 이것을 강조하면 진리표의 첫 번째 줄에, 당신은 말할 것입니다

음, x1 0은 이제 무엇입니까? 좋아, 이제 뭔가를 알아야 해 그밖에 좋아, 그럼 x2가 0이면, 지금 뭐야? 그래서 지금은 다른 것을 알 필요가 있습니다 x3가 0이면 어떨까요? 오, 사실 나는 충분히 알고 있습니다 이 함수의 값을 말해 준다

이 함수의 값은 0입니다 그것은 바로 진리표의 행입니다 그리고이 매우 간단한 의사 결정 나무는 진리표의 모든 단일 행을 고유 한 경로로 완전히 정의합니다 결정 트리 진실을 밝혀내는 것뿐입니다

그래서 그것은 실제로 0, 0, 0, 1이 될 것입니다 진실의 처음 네 행과 같습니다 테이블 0, 1, 0, 1은 진리표의 다음 네 줄과 같습니다 결정 트리 아웃 그래서 그것은 정말로 거기에있는 모든 것입니다

결정 트리 그것은 사실 진리표가 켜져있는 것과 같습니다 변수 값, 변수 값의 순서로 표현 된면 함수의 가치가 무엇인지 알 수있을 때까지 그래서 약간의 용어가 있습니다 우리는 여기를 그냥 지나칠 수 있습니다 꼭지점에 대해 이야기했지만 변수를 변수로 부르는 경우가 많습니다

변수가 모두 관련되어 있기 때문에 삶이 더 쉬워집니다 그리고 우리는 흔히 노드의 가장자리에서 나오는 것으로 말합니다 그들이 있기 때문에 포인터 그리고 때때로 우리는 낮은 것에 대해서 이야기합니다 포인터를 포인터로 사용하면 그 값을 우리는 또한 높은 지점이나 높은 아이는 1에 값을 할당 할 때 일어나는 것과 같습니다

변수 순서는 변수에 대한 결정의 순서입니다 만들어집니다 그래서 나는 그 큰 것 하나를 돌고 있습니다 이리 X1이 결정을 내린다

그리고 x2가 결정을 내립니다 그리고 x3가 결정을 내린 다음 우리는 함수의 가치가 무엇인지 당신에게 실제로 알려줄만큼 충분히 알고 있어야합니다 이 경우 그것은 1입니다 변수 순서라고합니다 그리고 바닥에있는 것들을 상수라고합니다

맞죠? 변수가 아니기 때문에 놀랄 일도 아니며 또한 변수의 잎이기도합니다 나무 그것들은 당신이 얻는 것들입니다 더 이상 갈 수 없어 더 이상 방문 할 필요가없는 하단 변수 이제 주목할 사항 중 하나는 다른 변수 주문이 가능합니다

내 말은, 왜 그런 말을하지 않았는가? 하나는 특정 변수 순서를 선택합니다 내 말은, 나는 여기에있는 x1s의 모든 것이 여기에 다소 명백한 방식으로 수행되었음을 의미한다 트리의 상단과 다음 레벨은 x2s입니다 그리고 나서 다음 단계는 x3이지만, 그렇게해야만하는 이유는 없습니다 나는 그것을 뒤집을 수 있었다

그래서이 특별한 예에서, 나는 예를 들어 x1을 0으로 설정하도록 선택하면 x3이 그 다음 변수 인 것으로 결정할 수 있습니다 나는보고 싶다 그리고 x2 그리고이 경우 저는 다른 나무를 갖게 될 것입니다 이 경우 x3이 0 일 때 x2가 함수는 0입니다

그리고 x3이 1 일 때도 중요하지 않습니다 함수의 값이 미안하다는 것은 x2의 값이 무엇인지 상관하지 않습니다 함수의 값은 1입니다 그래서 이것은 다른 트리입니다 놀랄 일도 아니고 그것은 문제가 될 것입니다

자, 이에 대해 몇 가지 관찰을 해봅시다 첫째, 루트에서 리프까지의 모든 경로는 순서에 따라 변수를 가로 지르고, 그것은 큰 놀라움이 아닙니다 이러한 각 경로는 진실표, 그래서 그것은 출력이 무엇인지, 출력이 무엇인지에 대한 결정입니다 변수는 특정 값을가집니다 그래서 재미 있습니다

진리표의 행을 평가할 때와는 아주 다른 방식이지만, 우리는 결정의 순서에 관해 아직 아무 것도 지정하지 않았다 나는, 나는 어떤 식 으로든 자신을 제한하지 않았다 결과적으로 큰 일이 발생하고 그다지 좋지 않은 것으로 판명됩니다 맡은 일 의사 결정 다이어그램은 이 기능은 도움이되지 않습니다

그리고 우리가 가진 큰 것들 중 하나 실제로 여기서 촬영하게 될 것은 Canonical 형태 이제는 의존하지 않는 표현 부울 함수의 게이트 레벨 구현 이것이 정식 의미입니다 그래서, 당신이 나에게 같은 기능을 주면 동일한 변수를 사용하면 항상 똑같은 표현을 생성합니다 이 경우 데이터 구조

예를 들어 진리표는 정식으로, 나는 이것을 명령 할 것이다 맞습니다 그리고 그것이 정말로 의미하는 바는 당신이 저의 진리표 맨 윗줄의 변수 a가있는 동안 나에게 말해주는 한 b가 있고 그 다음 c가있다 왼쪽에서 오른쪽으로

함수를 진리표로 만들면 당신이 진리표로 기능을 만들면, 우리는 똑같은 진리표를 만들었습니다 정식입니다 우리가 정말로 원하는 것은 정식입니다 양식 데이터 구조, 그래서 만약 우리 둘 다 부울 함수에 동의한다면 우리는 둘 다 그것을 빌드, 우리는 정확히 같은 데이터 구조를 얻을 그렇다면이 다이어그램 표현의 문제점은 무엇입니까? 음, 몇 가지

그것은 표준이 아닙니다 그것은 큰 것입니다 하지만 솔직히 말해서 가장 먼저 정말 잘못하면 유용하기에 너무 큽니다 내 말은 진리 표만큼이나 큰 것입니다 당신이 100의 기능을 가진다면 변수는 2, 2 ~ 100 번째 행을가집니다

그것은 단지 일어나지 않는 것입니다 그리고이 특정한 결정 다이어그램에서, 당신은 아래쪽에있는 100 번째 잎 노드 2 개를 가지고 있습니다 그리고 그것은 일어나지 않습니다 더 나은 질서가 필요하다 나는 더 좋은 생각이 필요하다

그리고 저는 그렇게 할 것입니다 나는 어떤 것에 구조를 부과 할 것이고, 우리는 가고 있습니다 그것이 우리를 어디로 데려가는지 알기 위해서, 첫 번째 아이디어 이후의 다음 큰 아이디어 의사 결정 다이어그램이 주문하게 만들었습니다 그리고이 특별한 경우에 우리는 세계 질서를 제한 할 것입니다

변수 그래서, 그것이 의미하는 것은, 루트에서 리프까지의 모든 경로를 변수 In으로 방문한 다음 그것을 똑같은 순서로 쓰려고합니다 이제 여기에 약간의 기술적 인 포인트가 있습니다 변수를 확인하지 않아도 변수를 생략해도 괜찮습니까? 어떤 리프 노드가 함수의 최종 값에 도달 할 것인가 따라서 순서대로 변수를 방문해야합니다

그러나 일부를 건너 뛴다면 그건 괜찮아 그건 나쁜 것이 아니야 그리고 우리는 그것을 빠른 예로서 보여줄 것입니다 다음 것 그래서, 그것은 무엇을 의미합니까? BDD에서 변수의 전역 정렬? 즉, 우리는 그들에게 총 질서를 할당 할 것입니다

예를 들어,이 경우, 변수가 x 1, x 2, x 3, 그리고 그것보다 적은 기호가 의미하는 것입니다 그것은 순서대로 의미합니다 X1은 X2 앞에 나타납니다 X2는 X3 앞에 나타납니다 변수는 모든 경로를 따라이 특정 순서로 나타나야하지만 그럴 수도 있습니다

변수를 건너 뛰려면 확인을 클릭하십시오 그래서 왼쪽에서 볼 수 있습니다 좋은, 좋은 간단한 예 X1이 나타난 다음 X2가 나타난 다음 X3 나타납니다 그래서 완벽하게 OK입니다

그러나 오른쪽에있는 것도 괜찮습니다 거기에 X2가 없으므로 X1이 나타나고 뿌리부터 잎까지의 경로에 나타납니다 잎에 X2가 없다 괜찮아 X, x1은 x3 앞에 나오고 모든 것이 좋다

더 가벼운 것들에 대한 예는 나쁜 것들의 예입니다 그래서, 당신도 알다시피, 이것, 이건 그냥 꼴통입니다, 이건 틀 렸습니다, 맞습니다 x3은 x2보다 먼저 올 수 없으며 x2는 x1보다 먼저 올 수 없습니다 무엇을 말하기위한 다른 방법은 없습니다 오른쪽에있는 것이 바로 이것입니다

바보 맞습니다 어떻게 의사 결정 다이어그램을 만들 수 있습니까? 여기서 내가 만든,이 경우 X1은 하나와 같고, 그리고 나서 내 마음을 바꾸고 X1을 만든다 2는 0과 같다 그건 바보 같은 짓이야

맞습니다 여기에있는 특성들은 우리가 상충되지 않는 것을 찾고 있다는 것입니다 경로를 따라 할당 그게 가장 적절한 예입니다 방금 보여 줬어

그것은 상충되는 과제입니다 한 번에 각 가변성을보아야합니다 길에서, 결코 두 번이나, 당신은 항상 같은 순서로 보게 될 것입니다 그래서 우리가 돌아가서 X1, X2, X3 순서를 고집한다고 가정 해 봅시다 자, 맞아

여기에있는이 결정 다이어그램은 여전히 괜찮아 맞아, 아무것도 안하고있어 불법 그러나 오른쪽 다이어그램도 괜찮습니다 권리? 그리고 그것은 동등합니다

그것은 같은 기능이지만 다른, 그리고 그것은 문제입니다 맞았 어 여기서 무슨 일이 있었는지 기록해 둬 여기서 일어난 일은 관측 만약 x 2가 0이라면, 여기에 가면 x 2 0이면, 우리는 x 3을보고 함수의 값은 x 3입니다

X 3 0 함수는 0을 만듭니다 X 3 1 함수는 1을 만듭니다 x 2의 값이 1이면 똑같은 일이 일어나고, x3은 0, x3은 1, 함수는 0입니다

1 x2, x, x2는 실제로 필요하지 않습니다 정말로 저에게 어떤 가치를 제공합니다 내가 가버린다면 나는 이것을 대체 할 수있다 매우 다른 다이어그램

왼쪽에는 여전히 전체 원본의 종류가 있습니다 나무 그 중, 나는 매우 간단한 버전의 결정 다이어그램을 사용하지만 3 개의 노드, 이 x3과 x3이 0인지 1인지를 결정합니다 이것은 분명히 정식 구조는 아닙니다 왜냐하면이 두 가지 결정 다이어그램은 동일한 부울 함수를 나타냅니다

그리고 전에 말했듯이, 큰 것 우리가 찾고 있던 것이 었습니다 같은 부울 함수를 나타냅니다 그래서 나는 다른 생각이 필요해 나는 또 다른 생각이 필요해 강제

다음 번 이야기에서 우리는 또 다른 제약 조건과 우리가 바이너리를 만드는 데 얼마나 효과가 있는지 살펴 보겠습니다 결정 선도는 표준이다 [음악]