我需要创建一个应用程序来创建逻辑电路并查看结果。这主要用于 A-Level(英国,一般为 16-18 岁)计算机课程。
我从来没有做过这样的应用程序,所以不确定存储电路和评估结果的最佳设计(以可恢复的速度,比如 1.6Ghz 单核计算机上的 100Hz)。
而不是从基本门(和,或,nand等)构建电路,我想让这些门用于制造“芯片”,然后可以在其他电路中使用(例如,您可能想要制作一个8位寄存器芯片,或 16 位加法器)。
问题是这些电路的门数量大量增加,因此如果模拟在每个单独的门上工作,它将有 1000 个门要模拟,所以我需要简化这些可以放置在电路中的组件,以便它们可以被快速模拟。
我考虑为每个组件生成一个真值表,然后模拟可以使用查找表来查找给定输入的输出。尽管这样的表格的大小随着输入的增加而大幅增加,但我遇到了这个问题。如果一个芯片有 32 个输入,那么真值表需要 2^32 行。在许多情况下,这使用了大量的内存,因此对于非平凡的组件来说是不实用的,它也不适用于可以存储其状态的芯片(例如寄存器),因为它们不能简单地表示为输入和输出表。
我知道我可以硬编码诸如寄存器芯片之类的东西,但是由于这是出于教育目的,我想要它,以便人们可以制作自己的组件以及查看和编辑标准组件的实现。我考虑允许使用代码(例如 dll 或脚本语言)创建和编辑此类组件,例如,加法器可以表示为“输出 = 输入 A + 输入 B”,但是假设学生已经完成了足够的编程给定的语言能够理解和编写这样的插件来模仿他们电路的结果,这很可能并非如此......
是否有其他方法可以采用布尔逻辑电路并自动简化它,以便模拟可以快速确定组件的输出?
至于存储组件,我正在考虑存储某种树结构,以便在评估链接到其输入的所有组件后评估每个组件。
例如考虑: AB + C 模拟器将首先评估与门,然后使用与门和 C 的输出评估或门。
但是我突然想到,在输出链接回输入的情况下,将导致死锁,因为输入永远不会全部被评估......我该如何克服这个问题,因为程序只能评估一个门时间?