Как подключить цифровой выход ПЛИС к ЦАП?

В настоящее время у меня есть очень, очень базовое ядро ​​DDS (?) Со счетчиком, словом настройки и синусоидальным LUT, которое выводит 16-битные значения для корреляции со значением sin для ЦАП. Я использую плату Nexys 4 DDR, а мой ЦАП - это периферийный модуль, предназначенный исключительно для FPGA. Если это 16-битный ЦАП, то почему у него 6 контактов, только 4 из которых предназначены для данных? И как я должен отправить двоичную информацию из моего 16-разрядного сгенерированного значения sin в ЦАП, чтобы ЦАП выполнил успешное преобразование?

Вот мой код (я знаю его элементарный, пожалуйста, прости ошибки, я исправлю их, как только я правильно знаю, как взаимодействовать с ЦАП!)

module sin_LUT(
  input clk,
  input [0:3] M,
  input rst,
  output reg [16:0] data_out,
  output reg [32:0]test
);

//counter

//declaring constant
integer i;
integer int_M;

always @(M)
  int_M = M;

always @(posedge(clk))
begin
if (rst)
  i <= 0;
else if (i >= 29)
  i <= 0;
else
  i <= i + M;
end

//testing purposes
always @(i)
  test = i;

//sine LUT
always @(i) begin
  case (i)
    0: data_out = 16'D32768;
    1: data_out = 16'D39812;
    2: data_out = 16'D46526;
    3: data_out = 16'D52598;
    4: data_out = 16'D57742;
    5: data_out = 16'D61718;
    6: data_out = 16'D64341;
    7: data_out = 16'D65487;
    8: data_out = 16'D65103;
    9: data_out = 16'D63208;
    10: data_out = 16'D59889;
    11: data_out = 16'D55302;
    12: data_out = 16'D49661;
    13: data_out = 16'D43230;
    14: data_out = 16'D36310;
    15: data_out = 16'D29225;
    16: data_out = 16'D22305;
    17: data_out = 16'D15874;
    18: data_out = 16'D10233;
    19: data_out = 16'D5646;
    20: data_out = 16'D2327;
    21: data_out = 16'D432;
    22: data_out = 16'D48;
    23: data_out = 16'D1194;
    24: data_out = 16'D3817;
    25: data_out = 16'D7793;
    26: data_out = 16'D12937;
    27: data_out = 16'D19009;
    28: data_out = 16'D25723;
    29: data_out = 16'D32768;
    default: data_out = 16'b0000111100001111;
  endcase
end

endmodule

1 ответ

Решение

Лист данных для этой платы ЦАП говорит, что она использует ЦАП Analog Devices AD5541:

http://www.analog.com/en/products/digital-to-analog-converters/da-converters/ad5541a.html

На странице продукта также есть ссылка на таблицу данных DAC. Из этой таблицы данных я извлек следующую информацию: эта вещь использует интерфейс SPI. Выделите линию (CS), которую вы нажимаете низко, чтобы указать ЦАП, для которого вы хотите отправить ему данные. Строка данных (DIN), в которой представлен каждый отдельный бит. И линия синхронизации (SCLK), которая заставляет ЦАП немного читать данные из линии данных в тот момент, когда он переходит от низкого к высокому уровню.

Вот временная диаграмма AD5541 SPI синхронизация

Вход LDAC, если он установлен на низком уровне, сообщает ЦАП о выходе при каждом обновлении регистра последовательных данных.


При разработке электроники первостепенное значение имеет возможность получать и читать документацию. Я уже использовал несколько разных ЦАПов SPI в различных проектах, в том числе и из AD. Но не AD5541. Но весь ответ выше я использовал информацию, которую я получил, прочитав соответствующие таблицы в течение нескольких минут. Если программирование ПЛИС - это ваша вещь, которую вы обязательно должны развивать в себе, как таковой.

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