| `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 |