Работа с массивами в HDL

Как использовать массивы (представляющие шины) в HDL?

Например, у меня есть следующий код:

/**
 * 16-bit bitwise And:
 * for i = 0..15: out[i] = (a[i] and b[i])
 */

CHIP And16 {
    IN a[16], b[16];
    OUT out[16];

    PARTS:
    // Put your code here:
}

Предполагая, что у меня есть And уже реализовано, как я могу реализовать это?

Я бы предпочел не иметь следующее:

And(a=a[0],b=b[0],out=out[0]);
And(a=a[1],b=b[1],out=out[1]);
...
And(a=a[14],b=b[14],out=out[14]);
And(a=a[15],b=b[15],out=out[15]);

1 ответ

Решение

В HDL нет массивов. В разделе 1.3 сопутствующей книги nand2tetris он говорит

Поскольку мы уже знаем, как реализовать элементарные версии этих вентилей, реализация их n- элементных версий - это просто вопрос построения массивов из n элементарных вентилей, при котором каждый вентиль работает отдельно со своими битами. Эта задача реализации довольно скучна, но она будет нести свой вес, когда эти многоразрядные логические элементы используются в более сложных чипах, как описано в последующих главах.

Поэтому, кроме написания тривиального скрипта на Python, чтобы избежать всего этого, вы ничего не упустите.

Другие вопросы по тегам