double_clock.v 777 Bytes
Newer Older
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
`default_nettype none

module Device(
    input wire clock, clear,
    output wire [3:0] data
);

    SharedMemory memory(
        .clock1(clock),
        .clock2(clock),
        .clear(clear), // Verilog doesn't support inferred ports
        .data1(data[1:0]),
        .data2(data[3:2])
    );

endmodule

module SharedMemory(
    input wire clock1, clock2, clear,
    output reg [1:0] data1, data2
);

    reg [3:0] memory;

    // Just a dumb example to generate interesting values
    always @(posedge clock1) begin
        if(clear)
            memory <= 4'b0;
        else
            memory <= {~memory[2:0], 1'b0};
    end

    always @(posedge clock1)
        data1 <= memory[1:0];

    always @(posedge clock2) begin
        data2 <= memory[3:2];
    end


endmodule