OpenCores
URL https://opencores.org/ocsvn/kiss-board/kiss-board/trunk

Subversion Repositories kiss-board

[/] [kiss-board/] [tags/] [initial/] [kiss-board_soc/] [src/] [tessera_ram_tiny.v] - Blame information for rev 3

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 fukuchi
 
2
`timescale 1ps/1ps
3
 
4
module tessera_ram_tiny (
5
        sys_wb_res,
6
        sys_wb_clk,
7
        wb_cyc_i,
8
        wb_stb_i,
9
        wb_adr_i,
10
        wb_sel_i,
11
        wb_we_i,
12
        wb_dat_i,
13
        wb_cab_i,
14
        wb_dat_o,
15
        wb_ack_o,
16
        wb_err_o
17
);
18
        // system
19
        input           sys_wb_res;
20
        input           sys_wb_clk;
21
        // WishBone Slave
22
        input           wb_cyc_i;
23
        input           wb_stb_i;
24
        input   [31:0]   wb_adr_i;
25
        input   [3:0]    wb_sel_i;
26
        input           wb_we_i;
27
        input   [31:0]   wb_dat_i;
28
        input           wb_cab_i;
29
        output  [31:0]   wb_dat_o;
30
        output          wb_ack_o;
31
        output          wb_err_o;
32
 
33
        wire            active;
34
        wire            mask;
35
        wire    [9:2]   address;
36
        wire    [3:0]    write;
37
        wire    [3:0]    read;
38
        wire    [31:0]   q;
39
 
40
// 0x0000_0000 - 0x0000_0fff 4Kbyte For Exception,so only 16inst(64Byte). phy is 1024Byte
41
 
42
        assign active   = wb_cyc_i && wb_stb_i;
43
        assign mask     = !(wb_adr_i[7:6]==2'd0);
44
        assign address  = {wb_adr_i[11:8],wb_adr_i[5:2]};
45
 
46
        assign write    = {4{(active&& wb_we_i)&&!mask}} & wb_sel_i;
47
        assign read     = {4{(active&&!wb_we_i)&&!mask}} & wb_sel_i;
48
 
49
        assign wb_err_o = 1'b0;
50
 
51
        //
52
        // 1wait(safety)
53
        //
54
        wire            clk;
55
        reg             ack;
56
        assign clk = sys_wb_clk;
57
        always @(posedge sys_wb_clk or posedge sys_wb_res)
58
                if (sys_wb_res) ack <= 1'b0;
59
                else            ack <= active && !ack;
60
        assign wb_ack_o = (active) ? ack: 1'b0;
61
 
62
        //
63
        // no-wait(fast and risky,data valid timing is negedge)
64
        //
65
//      wire            clk;
66
//      wire            ack;
67
//      assign ack = active;
68
//      assign clk = !sys_wb_clk;
69
//      assign wb_ack_o = active;
70
 
71
        assign wb_dat_o = {
72
                ((read[3]&&ack) ? q[31:24]: 8'h00),
73
                ((read[2]&&ack) ? q[23:16]: 8'h00),
74
                ((read[1]&&ack) ? q[15: 8]: 8'h00),
75
                ((read[0]&&ack) ? q[ 7: 0]: 8'h00)
76
        };
77
 
78
        // sdram_wbif(DOMAIN WinsboneClock)
79
        RAM_256 i3_RAM_INT (
80
                .address(       address), //8bit=256byte,all 1024byte
81
                .clock(         clk),
82
                .data(          wb_dat_i[31:24]),
83
                .wren(          write[3]),
84
                .q(             q[31:24])
85
        );
86
        RAM_256 i2_RAM_INT (
87
                .address(       address),
88
                .clock(         clk),
89
                .data(          wb_dat_i[23:16]),
90
                .wren(          write[2]),
91
                .q(             q[23:16])
92
        );
93
        RAM_256 i1_RAM_INT (
94
                .address(       address),
95
                .clock(         clk),
96
                .data(          wb_dat_i[15:8]),
97
                .wren(          write[1]),
98
                .q(             q[15:8])
99
        );
100
        RAM_256 i0_RAM_INT (
101
                .address(       address),
102
                .clock(         clk),
103
                .data(          wb_dat_i[7:0]),
104
                .wren(          write[0]),
105
                .q(             q[7:0])
106
        );
107
endmodule
108
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.