Работа с массивами в 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, чтобы избежать всего этого, вы ничего не упустите.