-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathforce_release.v
More file actions
59 lines (48 loc) · 902 Bytes
/
force_release.v
File metadata and controls
59 lines (48 loc) · 902 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
module force_release ();
reg clk, rst, d, preset;
wire q;
initial begin
$monitor("@%g clk %b rst %b preset %b d %b q %b",
$time, clk, rst, preset, d, q);
clk = 0;
rst = 0;
d = 0;
preset = 0;
#10 rst = 1;
#10 rst = 0;
repeat (10) begin // repeat statement is important!!
@(posedge clk);
d <=$random;
@(negedge clk);
preset <= ~preset;
end
#1 $finish;
end
// Clock generator
always #1 clk = ~clk;
// force and release of flip flop module
always @(preset) begin
if (preset) begin
force U.q = preset; // force procedural statement
end else begin
release U.q; // release procidural statement
end
end
d_ff U(clk, rst, d, q);
endmodule
// D Flip-flop model
module d_ff (clk, rst, d, q);
input clk, rst, d;
output q;
wire q;
reg q_reg;
assign q = q_reg;
always @(posedge clk) begin
if (rst) begin
// reset
q_reg <=0;
end else begin
q_reg <= d;
end
end
endmodule