Нда... Количество советов по вариантам цифровой генерации синуса скоро превысит число доказательств теоремы Пифагора

Вот самый простой способ, описан тут:
http://www.ti.com/lit/an/spra096a/spra096a.pdf, раздел A.1 на странице 16.
Для совсем ленивых описываю суть алгоритма:
y(i+1) = 2*cos(phi)*y(i) - y(i-1), где:
y(i) - последовательность целочисленных значений синусоиды
cos(phi) - отвечает за частоту, phi - это приращение фазы синусоиды за один период частоты дискретизации. phi = 2*pi*f / f0.
начальные значения y(0) и y(-1) определяют фазу и амплитуду генерируемого сигнала. Если на начальную фазу плевать, то подойдут такие значения: y(0) = 0, y(-1) = -A * sin(phi), где А - амплитуда синусоиды.
Вы можете выбрать любую разрядность, какую потянут умножители. Единственное, нужно так выбрать частоту дискретизации, чтобы ошибка от округления косинуса до ближайшего целого была не очень большой. например, для очень малого приращения фазы косинус может быть очень близок к 1, и после перевода на целочисленную арифметику ограниченной разрядности давать заметный сдвиг частоты.
Если Вам будет жалко тратить целый умножитель на каждый из 18 каналов, то Вы можете организовать конвейер и контексты на большей частоте, которые будут кормить общий умножитель. Контекст каждого канала полностью определяется тремя величинами y(i), y(i-1) и cos(phi), последняя, впрочем, константа и допускает некоторую оптимизацию.
Успехов!