2016-07-13 29 views
0

Ich habe derzeit einen sehr, sehr grundlegenden DDS-Kern (?) Mit einem Zähler, Tuning-Wort und Sinus-LUT, der 16 Bit-Werte ausgibt, um mit einem Sinus-Wert für einen DAC zu korrelieren. Ich benutze die Nexys 4 DDR board und meine DAC ist ein Peripheriemodul, das ausschließlich für FPGAs entwickelt wurde. Wenn es ein 16-Bit-DAC ist, warum hat es 6 Pins, von denen nur 4 für Daten sind? Und wie sollte ich die binären Informationen von meinem 16-Bit erzeugten Sin-Wert an den DAC senden, damit der DAC eine erfolgreiche Konvertierung durchführen kann?Wie wird der digitale Ausgang von FPGA an einen DAC angeschlossen?

Hier ist mein Code (ich seine rudimentären wissen, bitte vergib die Fehler, ich werde sie trainieren, wenn ich richtig wissen, wie mit dem DAC interact!)

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 

Antwort

4

Das Datenblatt für dieses DAC Board sagt es eine Analog Devices AD5541 DAC verwendet:

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

die Produktseite hat auch einen Link zu dem DAC Datenblatt. Aus diesem Datenblatt habe ich folgende Information gezogen: Dieses Ding benutzt eine SPI-Schnittstelle. A Wählen Sie Zeile (CS), die Sie niedrig ziehen, um den DAC anzuzeigen, dem Sie Daten senden möchten. A Daten Zeile (DIN), an der jedes einzelne Bit dargestellt wird. Und eine Uhr Zeile (SCLK), die den DAC ein wenig von der Datenleitung in dem Moment liest, in dem es von niedrig nach hoch geht.

Hier ist das Timing-Diagramm AD5541 SPI timing

Der LDAC Eingang, wenn unten gezogen, die DAC-Ausgang mit jedem Update des seriellen Datenregisters erzählt.


Bei der Entwicklung von Elektronik ist es wichtig, Dokumentation und Lesen zu erhalten. Ich habe bereits einige verschiedene SPI DACs in verschiedenen Projekten verwendet, auch einige von AD. Aber nicht die AD5541. Aber die ganze obige Antwort benutzte ich Informationen, die ich durch Lesen der relevanten Datenblätter für ein paar Minuten erhalten hatte. Wenn Sie FPGAs programmieren müssen, müssen Sie unbedingt die Fähigkeit dazu entwickeln.