从头开始设计HDL部件的逻辑:DM

The logic of designing a HDL parts from the beginning : DM

我正在学习 nand2tetris coursera 课程。 我想了解你们如何设计寻找 HDL 核心部分的潜在心理过程。 例如,让我们采用 DMUX4 方式。 完成这些部分的完整心理过程是什么?我一看到结果就明白背后的逻辑,但我很难自己找出 谢谢

    * {a,b,c,d} = {in,0,0,0} if sel==00
     *             {0,in,0,0} if sel==01
     *             {0,0,in,0} if sel==10
     *             {0,0,0,in} if sel==11
     */
    
    CHIP DMux4Way {
        IN in, sel[2];
        OUT a, b, c, d;
    
        PARTS:
        DMux(in=in,sel=sel[1],a=ao,b=bo);
        DMux(in=ao,sel=sel[0],a=a,b=b);
        DMux(in=bo,sel=sel[0],a=c,b=d);
}

我发现它有助于分解事物,在复杂的情况下,写下各种信号(包括中间信号)的真相table。有时这会导致“啊哈”时刻,您会看到可以用来简化事情的连接。

您可能还会发现绘制一张图来描绘电路中信号的流动情况会很有帮助。

最后,“先让它工作,然后再让它漂亮”这句格言适用。一旦你有一些工作,你可以查看设计并找到简化和优化。一个很好的例子是构建 XOR 电路。一旦你有了直截了当的版本,如果你仔细看,你会发现巧妙的优化。

我想这只是您必须练习直到掌握诀窍的事情之一。您可能会发现重新审视早期的项目很有用,着眼于使它们更清晰,更容易让 理解。通常有多种方法可以构建所需的电路,但有些方法对您来说可能更容易理解。另外,我建议您养成评论设计的习惯;当你做某事时,提醒你在想什么是很有帮助的。