cache_bram_wrap.v

来自「基于4个mips核的noc设计」· Verilog 代码 · 共 208 行

V
208
字号
module CACHE_BRAM_WRAP(clk, din, valid_in, tagi, index, offset, we, en, dout, tago, valid, DOA0, DOB0, DOA1, DOB1, DOPA0, DOPB0, DOPA1, DOPB1, ADDRA0, ADDRB0, ADDRA1, ADDRB1, DIA0, DIB0, DIA1, DIB1, DIPA0, DIPB0, DIPA1, DIPB1, ENA0, ENB0, ENA1, ENB1, CLKA0, CLKB0, CLKA1, CLKB1, WEA0, WEB0, WEA1, WEB1, SSRA0, SSRB0, SSRA1, SSRB1);    input clk;    wire clk;    input [31:0] din;    wire [31:0] din;    input valid_in;    wire valid_in;    input [19:0] tagi;    wire [19:0] tagi;    input [7:0] index;    wire [7:0] index;    input [1:0] offset;    wire [1:0] offset;    input we;    wire we;    input en;    wire en;    output [31:0] dout;    reg [31:0] dout;    output [19:0] tago;    reg [19:0] tago;    output valid;    reg valid;    input signed  [31:0] DOA0;    wire signed [31:0] DOA0;    input signed  [31:0] DOB0;    wire signed [31:0] DOB0;    input signed  [31:0] DOA1;    wire signed [31:0] DOA1;    input signed  [31:0] DOB1;    wire signed [31:0] DOB1;    input signed  [3:0] DOPA0;    wire signed [3:0] DOPA0;    input signed  [3:0] DOPB0;    wire signed [3:0] DOPB0;    input signed  [3:0] DOPA1;    wire signed [3:0] DOPA1;    input signed  [3:0] DOPB1;    wire signed [3:0] DOPB1;    output [8:0] ADDRA0;    reg [8:0] ADDRA0;    output [8:0] ADDRB0;    reg [8:0] ADDRB0;    output [8:0] ADDRA1;    reg [8:0] ADDRA1;    output [8:0] ADDRB1;    reg [8:0] ADDRB1;    output signed  [31:0] DIA0;    reg signed [31:0] DIA0;    output signed  [31:0] DIB0;    reg signed [31:0] DIB0;    output signed  [31:0] DIA1;    reg signed [31:0] DIA1;    output signed  [31:0] DIB1;    reg signed [31:0] DIB1;    output signed  [3:0] DIPA0;    reg signed [3:0] DIPA0;    output signed  [3:0] DIPB0;    reg signed [3:0] DIPB0;    output signed  [3:0] DIPA1;    reg signed [3:0] DIPA1;    output signed  [3:0] DIPB1;    reg signed [3:0] DIPB1;    output ENA0;    reg ENA0;    output ENB0;    reg ENB0;    output ENA1;    reg ENA1;    output ENB1;    reg ENB1;    output CLKA0;    reg CLKA0;    output CLKB0;    reg CLKB0;    output CLKA1;    reg CLKA1;    output CLKB1;    reg CLKB1;    output WEA0;    reg WEA0;    output WEB0;    reg WEB0;    output WEA1;    reg WEA1;    output WEB1;    reg WEB1;    output SSRA0;    reg SSRA0;    output SSRB0;    reg SSRB0;    output SSRA1;    reg SSRA1;    output SSRB1;    reg SSRB1;    reg [1:0] word;    reg clk_v;    reg en_v;    reg we_v;    reg [1:0] off;    reg signed [31:0] din_v;    reg [19:0] tag_in_v;    reg [7:0] ix;    reg [0:0] zero;    reg [0:0] one;    reg [8:0] addr0;    reg [8:0] addr1;    reg [3:0] tag3;    reg [3:0] tag2;    reg [3:0] tag1;    reg [3:0] tag0;    reg [4:0] zerofill;    reg [31:0] data;    reg vld;    reg [2:0] t3;    reg [3:0] t2;    reg [3:0] t1;    reg [3:0] t0;    reg [19:0] tag;        always @(posedge clk)        begin : reg__17            if (en)                word <= offset;        end        always @(clk or din or valid_in or tagi or index or offset or we or en)        begin : in            clk_v = clk;            en_v = en;            we_v = we;            off = offset;            din_v = din;            tag_in_v = tagi;            ix = index;            zero = 1'b0;            one = 1'b1;            addr0 = {ix, zero};            addr1 = {ix, one};            ADDRA0 = addr0;            ADDRB0 = addr1;            ADDRA1 = addr0;            ADDRB1 = addr1;            DIA0 = din_v;            DIB0 = din_v;            DIA1 = din_v;            DIB1 = din_v;            WEA0 = 0;            WEB0 = 0;            WEA1 = 0;            WEB1 = 0;            case (off) //synopsys parallel_case            1:              WEB0 = we_v;            2:              WEA1 = we_v;            3:              WEB1 = we_v;            default : begin                 WEA0 = we_v;                end            endcase            tag3[2'b11] = valid_in;            tag3[2:0] = tag_in_v[14:12];            tag2 = tag_in_v[11:8];            tag1 = tag_in_v[7:4];            tag0 = tag_in_v[3:0];            DIPB1 = tag3;            DIPA1 = tag2;            DIPB0 = tag1;            DIPA0 = tag0;            ENA0 = en_v;            ENB0 = en_v;            ENA1 = en_v;            ENB1 = en_v;            CLKA0 = clk_v;            CLKB0 = clk_v;            CLKA1 = clk_v;            CLKB1 = clk_v;            SSRA0 = 0;            SSRB0 = 0;            SSRA1 = 0;            SSRB1 = 0;        end        always @(word or DOA0 or DOPA0 or DOB0 or DOPB0 or DOA1 or DOPA1 or DOB1 or DOPB1)        begin : out            zerofill = 5'b00000;            case (word) //synopsys parallel_case            1:              data = DOB0;            2:              data = DOA1;            3:              data = DOB1;            default : begin                 data = DOA0;                end            endcase            vld = DOPB1[2'b11] != 0;            t3 = DOPB1[2:0];            t2 = DOPA1;            t1 = DOPB0;            t0 = DOPA0;            tag = {zerofill, t3, t2, t1, t0};            dout = data;            valid = vld;            tago = tag;        endendmodule

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?