Hi Leute,
ich hab heute mal wieder ein blöde Frage. Ich haben ein
Datenerzeugermodul (A) und eines welche diese Daten entgegen nimmt (B).
Die clk von A ist deutlich schneller als die von B (ca. Faktor 2), aber
die beiden sind völlig unabhängig von einander. Um den Übergang zu
realisieren, habe ich nun folgendes generisches Modul geschrieben:
1 | module clk_domain_switch #(parameter W=64)
|
2 | (
|
3 | input mclk,
|
4 | input sclk,
|
5 | input nd, //neue Daten werden von A geliefert
|
6 | input ack,//B hat die Daten genommen
|
7 | input [W-1:0] din,
|
8 | output reg nda, //neue Daten für B sind verfügbar
|
9 | output reg [W-1:0] dout
|
10 | );
|
11 |
|
12 | always @(posedge mclk)
|
13 | if(nd)
|
14 | dout <= din;
|
15 |
|
16 | always @(posedge mclk)
|
17 | if(nd)
|
18 | nda <= 1;
|
19 | else if(ack)
|
20 | nda <= 0;
|
21 |
|
22 | endmodule // clk_domain_switch
|
Mir kommt das ein wenig seltsam vor, weil es ... nunja, zu einfach
ist^^. Außerdem scheint man die sclk überhaupt nicht zu benötigen. Stehe
ich auf dem Schlauch, oder ist das wirklich so einfach?
danke
PS: Hier fehlt ein verilog-Tag =)