aboutsummaryrefslogtreecommitdiffstats
path: root/techlibs/intel_alm/common/abc9_model.v
blob: 8ad52e13ac01d0298060c9711b3381b1ef4325d9 (plain)
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
`ifdef cyclonev
`define SYNCPATH 262
`define SYNCSETUP 522
`define COMBPATH 0
`endif
`ifdef cyclone10gx
`define SYNCPATH 219
`define SYNCSETUP 268
`define COMBPATH 0
`endif

// fallback for when a family isn't detected (e.g. when techmapping for equivalence)
`ifndef SYNCPATH
`define SYNCPATH 0
`define SYNCSETUP 0
`define COMBPATH 0
`endif

// This is a purely-synchronous flop, that ABC9 can use for sequential synthesis.
(* abc9_flop, lib_whitebox *)
module $__MISTRAL_FF_SYNCONLY (
    input DATAIN, CLK, ENA, SCLR, SLOAD, SDATA,
    output reg Q
);

specify
    if (ENA) (posedge CLK => (Q : DATAIN)) = `SYNCPATH;
    if (ENA) (posedge CLK => (Q : SCLR)) = `SYNCPATH;
    if (ENA) (posedge CLK => (Q : SLOAD)) = `SYNCPATH;
    if (ENA) (posedge CLK => (Q : SDATA)) = `SYNCPATH;

    $setup(DATAIN, posedge CLK, `SYNCSETUP);
    $setup(ENA, posedge CLK, `SYNCSETUP);
    $setup(SCLR, posedge CLK, `SYNCSETUP);
    $setup(SLOAD, posedge CLK, `SYNCSETUP);
    $setup(SDATA, posedge CLK, `SYNCSETUP);
endspecify

initial begin
    // Altera flops initialise to zero.
	Q = 0;
end

always @(posedge CLK) begin
    // Clock-enable
	if (ENA) begin
        // Synchronous clear
        if (SCLR) Q <= 0;
        // Synchronous load
        else if (SLOAD) Q <= SDATA;
        else Q <= DATAIN;
    end
end

endmodule