L
leongch
Guest
Hei fyrene,
Jeg må modellen n designe BCK 2 BCK DFFs som fungerer som samtidighet for asynkrone kretser.Det spesiell er som følger:
1.Oppsettet og å holde tiden er 0.5ns hver.Når oppsett eller hold brudd skjedde på input av 1. DFF, vil Dout fra 1. DFF gå om "xx" for 1ns og verdien blir oppdatert med tilfeldig verdi med $ random ();
2.Dette syncrhonizers bør kunne parameteriserte inne i modulen og NEI "Foor loop" og "generere og endgenerate" bør brukes
modul demeta (
input clk_d2, / / clk domene 2
input reset,
input [3:0] Din, / / innspill fra clk domene 1
output reg [3:0] Dout / / output som synkroniseres ved clk domain2
);
reg [3:0] D1;
wire [3:0] Di;
wire [3:0] Di_xor;
tildele # 5 Di = Din;
tildele Di_xor = Di ^ Din;
heltall arg, i, j;
reg setup_vio, hold_vio;
spesifisere
$ oppsett (Din, posedge clk_d2, `setup_time, setup_vio);
$ hold (posedge clk_d2, Din, `hold_time, hold_vio);
endspecify
alltid @ (posedge setup_vio eller posedge hold_vio eller posedge clk_d2)
begynne
if (reset)
D1 <= 4'h0;
else if (hold_vio)
begynne
if (Di_xor! = 0)
begynne
D1 <= 'hx;
# 1 D1 <= $ random (arg);
slutt
slutt
else if (setup_vio)
begynne
if (Di_xor! = 0)
begynne
D1 <= 'hx;
# 1 D1 <= $ random (arg);
slutt
slutt
ellers
D1 <= Din;
slutt
alltid @ (posedge clk_d2)
begynne
if (reset)
Dout <= 4'h0;
ellers
Dout <= D1;
slutt
endmodule
Jeg må modellen n designe BCK 2 BCK DFFs som fungerer som samtidighet for asynkrone kretser.Det spesiell er som følger:
1.Oppsettet og å holde tiden er 0.5ns hver.Når oppsett eller hold brudd skjedde på input av 1. DFF, vil Dout fra 1. DFF gå om "xx" for 1ns og verdien blir oppdatert med tilfeldig verdi med $ random ();
2.Dette syncrhonizers bør kunne parameteriserte inne i modulen og NEI "Foor loop" og "generere og endgenerate" bør brukes
modul demeta (
input clk_d2, / / clk domene 2
input reset,
input [3:0] Din, / / innspill fra clk domene 1
output reg [3:0] Dout / / output som synkroniseres ved clk domain2
);
reg [3:0] D1;
wire [3:0] Di;
wire [3:0] Di_xor;
tildele # 5 Di = Din;
tildele Di_xor = Di ^ Din;
heltall arg, i, j;
reg setup_vio, hold_vio;
spesifisere
$ oppsett (Din, posedge clk_d2, `setup_time, setup_vio);
$ hold (posedge clk_d2, Din, `hold_time, hold_vio);
endspecify
alltid @ (posedge setup_vio eller posedge hold_vio eller posedge clk_d2)
begynne
if (reset)
D1 <= 4'h0;
else if (hold_vio)
begynne
if (Di_xor! = 0)
begynne
D1 <= 'hx;
# 1 D1 <= $ random (arg);
slutt
slutt
else if (setup_vio)
begynne
if (Di_xor! = 0)
begynne
D1 <= 'hx;
# 1 D1 <= $ random (arg);
slutt
slutt
ellers
D1 <= Din;
slutt
alltid @ (posedge clk_d2)
begynne
if (reset)
Dout <= 4'h0;
ellers
Dout <= D1;
slutt
endmodule