| /* Data read from RAM and displayed on one LED while others are a |
| * binary counter |
| */ |
| module top ( |
| input clk, |
| output LED1, |
| output LED2, |
| output LED3, |
| output LED4, |
| output LED5 |
| ); |
| |
| parameter LOG2RAMDELAY = 20; |
| |
| localparam BITS = 4; |
| localparam LOG2DELAY = LOG2RAMDELAY + 7; |
| |
| reg [BITS+LOG2DELAY-1:0] counter = 0; |
| reg [BITS-1:0] outcnt; |
| |
| wire bout; |
| reg enable = 0; |
| |
| always @(posedge clk) begin |
| counter <= counter + 1; |
| outcnt <= counter >> LOG2DELAY; |
| enable <= counter[LOG2RAMDELAY]; |
| end |
| |
| memory m1 (clk, enable, bout); |
| |
| assign LED1 = bout; |
| assign {LED2, LED3, LED4, LED5} = outcnt; |
| |
| endmodule |
| |
| module memory ( |
| input clk, |
| input inc, |
| output bout |
| ); |
| |
| localparam DEPTH = 6; |
| localparam LEN = 1<<(DEPTH-1); |
| |
| wire [15:0] data; |
| reg [DEPTH-1:0] cnt = 0; |
| |
| // Morse code for "hello" |
| SB_RAM40_4K #( |
| .INIT_0(256'h0000000100000000000000010000000000000001000000010000000100000001), |
| .INIT_1(256'h0000000100010001000000010000000000000001000000010000000100010001), |
| .INIT_2(256'h0001000100000001000100010000000100010001000000000000000100000001), |
| .INIT_3(256'h0000000000000000000000000000000000000000000000000000000000000001), |
| .INIT_4(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_5(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_6(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_7(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_8(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_9(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_A(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_B(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_C(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_D(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_E(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .INIT_F(256'hxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx), |
| .READ_MODE(2'b01), |
| .WRITE_MODE(2'b01) |
| ) |
| mem |
| ( |
| .RADDR({ 5'b0, cnt}), |
| .RCLK(clk), |
| .RCLKE(1'b1), |
| .RDATA(data), |
| .RE(1'b1), |
| .WCLK(clk), |
| .WCLKE(1'b0) |
| ); |
| |
| always @(posedge inc) begin |
| cnt <= cnt + 1; |
| end |
| |
| assign bout = data[0]; |
| |
| endmodule // memory |