OpenCores
URL https://opencores.org/ocsvn/aemb/aemb/trunk

Subversion Repositories aemb

[/] [aemb/] [trunk/] [rtl/] [verilog/] [aeMB2_gprf.v] - Diff between revs 131 and 134

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 131 Rev 134
Line 1... Line 1...
/* $Id: aeMB2_gprf.v,v 1.3 2008-04-26 01:09:06 sybreon Exp $
/* $Id: aeMB2_gprf.v,v 1.4 2008-04-26 17:57:43 sybreon Exp $
**
**
** AEMB2 EDK 6.2 COMPATIBLE CORE
** AEMB2 EDK 6.2 COMPATIBLE CORE
** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@aeste.net>
** Copyright (C) 2004-2008 Shawn Tan <shawn.tan@aeste.net>
**
**
** This file is part of AEMB.
** This file is part of AEMB.
Line 92... Line 92...
        rd_mx <= #1 rd_ex;
        rd_mx <= #1 rd_ex;
        mux_mx <= #1 mux_ex;
        mux_mx <= #1 mux_ex;
     end
     end
 
 
   // LOAD SIZER   
   // LOAD SIZER   
   always @(/*AUTOSENSE*/dwb_mx or sel_mx) begin
   always @(/*AUTOSENSE*/dwb_mx or sel_mx or xwb_mx) begin
      case (sel_mx)
      case (sel_mx)
        // 8'bits
        // 8'bits
        4'h8: mem_mx <= #1 {24'd0, dwb_mx[31:24]};
        4'h8: mem_mx <= #1 {24'd0, dwb_mx[31:24]};
        4'h4: mem_mx <= #1 {24'd0, dwb_mx[23:16]};
        4'h4: mem_mx <= #1 {24'd0, dwb_mx[23:16]};
        4'h2: mem_mx <= #1 {24'd0, dwb_mx[15:8]};
        4'h2: mem_mx <= #1 {24'd0, dwb_mx[15:8]};
Line 104... Line 104...
        // 16'bits
        // 16'bits
        4'hC: mem_mx <= #1 {16'd0, dwb_mx[31:16]};
        4'hC: mem_mx <= #1 {16'd0, dwb_mx[31:16]};
        4'h3: mem_mx <= #1 {16'd0, dwb_mx[15:0]};
        4'h3: mem_mx <= #1 {16'd0, dwb_mx[15:0]};
        // 32'bits
        // 32'bits
        4'hF: mem_mx <= #1 dwb_mx;
        4'hF: mem_mx <= #1 dwb_mx;
        //4'h0: mem_mx <= #1 xwb_mx;
        // XSL bus
 
        4'h0: mem_mx <= #1 xwb_mx;
        default: mem_mx <= 32'hX;
        default: mem_mx <= 32'hX;
      endcase // case (sel_mx)
      endcase // case (sel_mx)
   end // always @ (...
   end // always @ (...
 
 
   // SELECT SOURCE
   // SELECT SOURCE
   localparam [2:0] MUX_ALU = 3'o7,
   localparam [2:0] MUX_SFR = 3'o7,
                    MUX_SFR = 3'o5,
                    MUX_BSF = 3'o6,
                    MUX_BSF = 3'o4,
                    MUX_MUL = 3'o5,
                    MUX_MUL = 3'o3,
                    MUX_MEM = 3'o4,
                    MUX_MEM = 3'o2,
 
                    MUX_RPC = 3'o1,
                    MUX_RPC = 3'o2,
 
                    MUX_ALU = 3'o1,
                    MUX_NOP = 3'o0;
                    MUX_NOP = 3'o0;
 
 
   always @(/*AUTOSENSE*/alu_mx or bsf_mx or mem_mx or mul_mx
   always @(/*AUTOSENSE*/alu_mx or bsf_mx or mem_mx or mul_mx
            or mux_mx or rpc_mx or sfr_mx)
            or mux_mx or rpc_mx or sfr_mx)
     case (mux_mx)
     case (mux_mx)
Line 129... Line 131...
       MUX_MUL: regd <= #1 mul_mx; // MULTIPLIER
       MUX_MUL: regd <= #1 mul_mx; // MULTIPLIER
       MUX_BSF: regd <= #1 bsf_mx; // SHIFTER
       MUX_BSF: regd <= #1 bsf_mx; // SHIFTER
       MUX_NOP: regd <= #1 32'h0;
       MUX_NOP: regd <= #1 32'h0;
       MUX_SFR: regd <= #1 sfr_mx;
       MUX_SFR: regd <= #1 sfr_mx;
       default: regd <= #1 32'hX;
       default: regd <= #1 32'hX;
     endcase // case (mux_rd)
     endcase // case (mux_mx)
 
 
 
 
   // REGISTER FILE - Infer LUT memory
   // REGISTER FILE - Infer LUT memory
   wire [5:0]     wRD = {gpha, ich_dat[25:21]};
   wire [5:0]        wRD0 = {gpha, ich_dat[25:21]};
   wire [5:0]     wRA = {gpha, ich_dat[20:16]};
   wire [5:0]        wRA0 = {gpha, ich_dat[20:16]};
   wire [5:0]     wRB = {gpha, ich_dat[15:11]};
   wire [5:0]        wRB0 = {gpha, ich_dat[15:11]};
   wire [5:0]     wRW = {!gpha, rd_mx};
   wire [5:0]        wRW0 = {!gpha, rd_mx};
 
   wire             wWRE = grst | wrb_fb;
   assign        opd_wr = rMEMD[wRW];
 
   assign        opa_if = rMEMA[wRA];
   wire [31:0]       wDA0,
   assign        opb_if = rMEMB[wRB];
                    wDB0,
   assign        opd_if = rMEMD[wRD];
                    wDD0;
 
 
   always @(posedge gclk)
   assign           opa_if = wDA0;
     if (grst | (dena & wrb_fb)) begin
   assign           opb_if = wDB0;
        rMEMA[wRW] <= #1 regd;
   assign           opd_if = wDD0;
        rMEMB[wRW] <= #1 regd;
 
        rMEMD[wRW] <= #1 regd;
   /* aeMB2_dparam AUTO_TEMPLATE "_\([a-z,0-9]+\)" (
     end
    .AW(6'd6),
 
    .DW(6'd32),
   // synopsys translate_off
 
   // initialise RAM to random contents for simulation only
    .clk_i(gclk),
   integer       i;
    .ena_i(dena),
   initial begin
 
      for (i=0;i<64;i=i+1) begin
    .dat_i(regd),
         rMEMA[i] <= $random;
    .adr_i(wRW0[5:0]),
         rMEMB[i] <= $random;
    .wre_i(wWRE),
         rMEMD[i] <= $random;
    .dat_o(),
      end
 
   end
    .xwre_i(),
   // synopsys translate_on
    .xdat_i(),
 
    .xadr_i(wR@[5:0]),
 
    .xdat_o(wD@[31:0]),
 
    ) */
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd6),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_A0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDA0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW0[5:0]),              // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWRE),                  // Templated
 
      .xadr_i                           (wRA0[5:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd6),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_B0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDB0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW0[5:0]),              // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWRE),                  // Templated
 
      .xadr_i                           (wRB0[5:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd6),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_D0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDD0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW0[5:0]),              // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWRE),                  // Templated
 
      .xadr_i                           (wRD0[5:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
endmodule // aeMB2_gprf
endmodule // aeMB2_gprf
 
 
/*
/*
 $Log: not supported by cvs2svn $
 $Log: not supported by cvs2svn $
 
 Revision 1.3  2008/04/26 01:09:06  sybreon
 
 Passes basic tests. Minor documentation changes to make it compatible with iverilog pre-processor.
 
 
 Revision 1.2  2008/04/20 16:34:32  sybreon
 Revision 1.2  2008/04/20 16:34:32  sybreon
 Basic version with some features left out.
 Basic version with some features left out.
 
 
 Revision 1.1  2008/04/18 00:21:52  sybreon
 Revision 1.1  2008/04/18 00:21:52  sybreon
 Initial import.
 Initial import.
*/
*/
 
 
 No newline at end of file
 No newline at end of file
 
`ifdef XXX
 
 
 
   wire [4:0]        wRD0 = (gpha) ? ich_dat[25:21] : 5'd0;
 
   wire [4:0]        wRA0 = (gpha) ? ich_dat[20:16] : 5'd0;
 
   wire [4:0]        wRB0 = (gpha) ? ich_dat[15:11] : 5'd0;
 
 
 
   wire [4:0]        wRD1 = (!gpha) ? ich_dat[25:21] : 5'd0;
 
   wire [4:0]        wRA1 = (!gpha) ? ich_dat[20:16] : 5'd0;
 
   wire [4:0]        wRB1 = (!gpha) ? ich_dat[15:11] : 5'd0;
 
 
 
   wire [4:0]        wRW  = rd_mx;
 
 
 
   wire             wWR0 = (!gpha & dena & wrb_fb) | grst;
 
   wire             wWR1 = (gpha & dena & wrb_fb) | grst;
 
 
 
   wire             wWA0 = wWR0;
 
   wire             wWB0 = wWR0;
 
   wire             wWD0 = wWR0;
 
   wire             wWA1 = wWR1;
 
   wire             wWB1 = wWR1;
 
   wire             wWD1 = wWR1;
 
 
 
   wire [31:0]       wDA0,
 
                    wDA1,
 
                    wDB0,
 
                    wDB1,
 
                    wDD0,
 
                    wDD1;
 
 
 
   assign           opa_if = wDA0 | wDA1;
 
   assign           opb_if = wDB0 | wDB1;
 
   assign           opd_if = wDD0 | wDD1;
 
 
 
   /* aeMB2_dparam AUTO_TEMPLATE "_\([a-z,0-9]+\)" (
 
    .AW(6'd5),
 
    .DW(6'd32),
 
 
 
    .clk_i(gclk),
 
    .ena_i(dena),
 
 
 
    .dat_i(regd),
 
    .adr_i(wRW[4:0]),
 
    .wre_i(wW@),
 
    .dat_o(),
 
 
 
    .xwre_i(),
 
    .xdat_i(),
 
    .xadr_i(wR@[4:0]),
 
    .xdat_o(wD@[31:0]),
 
    ) */
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_A0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDA0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWA0),                  // Templated
 
      .xadr_i                           (wRA0[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_B0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDB0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWB0),                  // Templated
 
      .xadr_i                           (wRB0[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_D0
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDD0[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWD0),                  // Templated
 
      .xadr_i                           (wRD0[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_A1
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDA1[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWA1),                  // Templated
 
      .xadr_i                           (wRA1[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_B1
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDB1[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWB1),                  // Templated
 
      .xadr_i                           (wRB1[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
 
 
   aeMB2_dparam
 
     #(/*AUTOINSTPARAM*/
 
       // Parameters
 
       .AW                              (6'd5),                  // Templated
 
       .DW                              (6'd32))                 // Templated
 
   bank_D1
 
     (/*AUTOINST*/
 
      // Outputs
 
      .dat_o                            (),                      // Templated
 
      .xdat_o                           (wDD1[31:0]),             // Templated
 
      // Inputs
 
      .adr_i                            (wRW[4:0]),               // Templated
 
      .dat_i                            (regd),                  // Templated
 
      .wre_i                            (wWD1),                  // Templated
 
      .xadr_i                           (wRD1[4:0]),              // Templated
 
      .xdat_i                           (),                      // Templated
 
      .xwre_i                           (),                      // Templated
 
      .clk_i                            (gclk),                  // Templated
 
      .ena_i                            (dena));                         // Templated
 
`endif
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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