AD-/DA-Wandler mit unterschiedlichen Taktdomänen?

Gast #4577638
Lesenswert?

Hallo

bin noch bisschen neu in FPGA und frage mich ob meine Logik in 
nachfolgendem Code bzgl. synchronem Design richtig ist?

Der A/D-Wandler sampelt mit der pos. Taktflanke, bei der neg. Flanke 
stehen die Daten am Ausgang bereit.
Der D/A-Wandler übernimmt mit der pos. Taktflanke die Eingangsdaten und 
gibt sie aus.

Ist der Code nun so richtig gedacht oder wäre es sinnvoller überall 
@posedge zu verwenden und stattdessen die CLK-Signale einfach in der 
assign-Anweisung invertieren?

Ich hoffe man versteht den Code trotz Verilog, die Hardware versteht 
ihn.
1
/* 
2
  CLK  Oscillator 50 MHz
3
  ADCLK  Clock für AD-Wandler, L-H Sample, H-L Daten bereit
4
  DACLK  Clock für DA-Wandler, L-H Latch
5
  clk_50  50 MHz Clock für AD-Wandler
6
  clk_200  200 MHz Clock für DA-Wandler, Sys
7
*/
8

9
module top(
10
  input CLK,
11
  output ADCLK,
12
  output DACLK,
13
  input [7:0] AD,
14
  output [11:0] DA
15
  );
16

17
reg [7:0] data_in;   // Eingangsregister
18
reg [11:0] data_out; // Ausgangsregister
19
reg [11:0] data_tmp; // Temporäres Register
20

21
wire clk_50;
22
wire clk_200;
23

24
pll p1 (.inclk0(CLK), .c0(clk_50), .c1(clk_200));
25

26
assign ADCLK = clk_50;
27
assign DACLK = clk_200;
28

29
assign DA = data_out;
30

31
// AD-Wandler mit fallender Flanke AD-Clk einlesen
32

33
always @(negedge clk_50)  
34
  begin
35
    data_in <= AD;
36
  end
37

38
// DA-Ausgangsregister mit fallender Flanke DA-Clk beschreiben  
39
  
40
always @(negedge clk_200)
41
  begin  
42
    data_out <= data_tmp;
43
  end
44

45
// Daten aus Eingangsregister in temp. Register übernehmen, evtl. manipulieren
46
  
47
always @(posedge clk_200)
48
  begin
49
    data_tmp <= data_in >> 4; // Von 8 -> 12 bit
50
  end
51
  
52
endmodule

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren