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

Subversion Repositories mips789

[/] [mips789/] [tags/] [arelease/] [CTool/] [gensim.c] - Diff between revs 15 and 35

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

Rev 15 Rev 35
Line 1... Line 1...
 
/******************************************************************
 
 *                                                                *
 
 *    Author: Liwei                                               *
 
 *                                                                *
 
 *    This file is part of the "mips789" project.                 *
 
 *    Downloaded from:                                            *
 
 *    http://www.opencores.org/pdownloads.cgi/list/mips789        *
 
 *                                                                *
 
 *    If you encountered any problem, please contact me via,      *
 
 *    Email:mcupro@opencores.org  or mcupro@163.com               *
 
 *                                                                *
 
 ******************************************************************/
 
 
#include "stdio.h"
#include "stdio.h"
#include "stdlib.h"
#include "stdlib.h"
 
 
 
#define MAX_LEN (1024*2)
 
 
 
int print_module(FILE * ft){
 
    if (ft==NULL)return 0;
 
fprintf(ft,"//This file is only used for simulation.\nmodule sim_mem_array \n");
 
fprintf(ft,"    ( \n");
 
fprintf(ft,"        input clk, \n");
 
fprintf(ft,"        input [31:0] pc_i, \n");
 
fprintf(ft,"        output [31:0] ins_o, \n");
 
fprintf(ft,"        input [3:0] wren, \n");
 
fprintf(ft,"        input [31:0]din, \n");
 
fprintf(ft,"        input [31:0]data_addr_i, \n");
 
fprintf(ft,"        output [31:0]dout \n");
 
fprintf(ft,"    ); \n\n");
 
fprintf(ft,"    wire [29:0] data_addr,pc; \n");
 
fprintf(ft,"    wire [31:0]dout_w; \n");
 
fprintf(ft,"    assign dout = dout_w; \n");
 
fprintf(ft,"    assign data_addr=data_addr_i[31:2]; \n");
 
fprintf(ft,"    assign pc= pc_i[31:2]; \n\n");
 
 
 
 
 
fprintf(ft,"    sim_syn_ram3 ram3 ( \n");
 
fprintf(ft,"                     .data(din[31:24]), \n");
 
fprintf(ft,"                     .wraddress(data_addr), \n");
 
fprintf(ft,"                     .rdaddress_a(pc), \n");
 
fprintf(ft,"                     .rdaddress_b(data_addr), \n");
 
fprintf(ft,"                     .wren(wren[3]), \n");
 
fprintf(ft,"                     .clock(clk), \n");
 
fprintf(ft,"                     .qa(ins_o[31:24]), \n");
 
fprintf(ft,"                     .qb(dout_w[31:24]) \n");
 
fprintf(ft,"                 ); \n");
 
 
 
fprintf(ft,"    sim_syn_ram2 ram2( \n");
 
fprintf(ft,"                     .data(din[23:16]), \n");
 
fprintf(ft,"                     .wraddress(data_addr), \n");
 
fprintf(ft,"                     .rdaddress_a(pc), \n");
 
fprintf(ft,"                     .rdaddress_b(data_addr), \n");
 
fprintf(ft,"                     .wren(wren[2]), \n");
 
fprintf(ft,"                     .clock(clk), \n");
 
fprintf(ft,"                     .qa(ins_o[23:16]), \n");
 
fprintf(ft,"                     .qb(dout_w[23:16]) \n");
 
fprintf(ft,"                 ); \n");
 
 
 
fprintf(ft,"    sim_syn_ram1 ram1( \n");
 
fprintf(ft,"                     .data(din[15:8]), \n");
 
fprintf(ft,"                     .wraddress(data_addr), \n");
 
fprintf(ft,"                     .rdaddress_a(pc), \n");
 
fprintf(ft,"                     .rdaddress_b(data_addr), \n");
 
fprintf(ft,"                     .wren(wren[1]), \n");
 
fprintf(ft,"                     .clock(clk), \n");
 
fprintf(ft,"                     .qa(ins_o[15:8]), \n");
 
fprintf(ft,"                     .qb(dout_w[15:8]) \n");
 
fprintf(ft,"                 ); \n");
 
 
 
fprintf(ft,"    sim_syn_ram0 ram0( \n");
 
fprintf(ft,"                     .data(din[7:0]), \n");
 
fprintf(ft,"                     .wraddress(data_addr), \n");
 
fprintf(ft,"                     .rdaddress_a(pc), \n");
 
fprintf(ft,"                     .rdaddress_b(data_addr), \n");
 
fprintf(ft,"                     .wren(wren[0]), \n");
 
fprintf(ft,"                     .clock(clk), \n");
 
fprintf(ft,"                     .qa(ins_o[7:0]), \n");
 
fprintf(ft,"                     .qb(dout_w[7:0]) \n");
 
fprintf(ft,"                 ); \n");
 
fprintf(ft,"endmodule \n\n\n");
 
return 1;
 
    }
 
 
/*Liwei 2007-8-29*/
/*Liwei 2007-8-29*/
 char HEX[]="0123456789ABCDEF" ;
 char HEX[]="0123456789ABCDEF" ;
 char hex[]="0123456789abcdef" ;
 char hex[]="0123456789abcdef" ;
 
 
unsigned char hex2byte( char hex_char)
unsigned char hex2byte( char hex_char)
{
{
    unsigned char i ;
    unsigned char i ;
    for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
    for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
    for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
    for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
Line 18... Line 95...
unsigned int par2u32(char*par)
unsigned int par2u32(char*par)
{
{
    unsigned int i,ret=0 ;
    unsigned int i,ret=0 ;
    if(par==NULL)return ;
    if(par==NULL)return ;
    if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
    if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
    for(i=2;;++i)    {if(par[i]=='\0')return ret ; ret=ret*16+hex2byte(par[i]);}
    for(i=2;;++i)    {if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ; ret=ret*16+hex2byte(par[i]);}
    else
    else
    for(i=0;;++i)    {if(par[i]=='\0')return ret ; ret=ret*10+hex2byte(par[i]);}
    for(i=0;;++i)    {if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ; ret=ret*10+hex2byte(par[i]);}
    return 0 ;
    return 0 ;
}
}
 
 
main(int argc,char*argv[])
main(int argc,char*argv[])
{
{
Line 36... Line 113...
    FILE*ff=fopen("code.txt","r");
    FILE*ff=fopen("code.txt","r");
    FILE*ft=fopen("sim_ram.v","w");
    FILE*ft=fopen("sim_ram.v","w");
 
 
    if(NULL!=argv[1])
    if(NULL!=argv[1])
    base=par2u32(argv[1])/4;
    base=par2u32(argv[1])/4;
 
    print_module(ft);
    for(j=0;j<4;++j)
    for(j=0;j<4;++j)
    {
    {
        cntr=-10 ;
        cntr=-10 ;
        fprintf(ft,"module sim_syn_ram%d(\n",j);
        fprintf(ft,"module sim_syn_ram%d(\n",j);
        fprintf(ft,"        data,\n");
        fprintf(ft,"    input   [7:0]  data,\n");
        fprintf(ft,"        wraddress,\n");
        fprintf(ft,"    input   [10:0]  wraddress,\n");
        fprintf(ft,"        rdaddress_a,\n");
        fprintf(ft,"    input   [10:0]  rdaddress_a,\n");
        fprintf(ft,"        rdaddress_b,\n");
        fprintf(ft,"    input   [10:0]  rdaddress_b,\n");
        fprintf(ft,"        wren,\n");
        fprintf(ft,"    input     wren,\n");
        fprintf(ft,"        clock,\n");
        fprintf(ft,"    input     clock,\n");
        fprintf(ft,"        qa,\n");
        fprintf(ft,"    output  [7:0]  qa,\n");
        fprintf(ft,"        qb);\n\n");
        fprintf(ft,"    output  [7:0]  qb\n");
        fprintf(ft,"    input   [7:0]  data;\n");
        fprintf(ft,"    );\n\n");
        fprintf(ft,"    input   [10:0]  wraddress;\n");
 
        fprintf(ft,"    input   [10:0]  rdaddress_a;\n");
 
        fprintf(ft,"    input   [10:0]  rdaddress_b;\n");
 
        fprintf(ft,"    input     wren;\n");
 
        fprintf(ft,"    reg [7:0]  r_data;\n");
        fprintf(ft,"    reg [7:0]  r_data;\n");
        fprintf(ft,"    reg [10:0]  r_wraddress;\n");
        fprintf(ft,"    reg [10:0]  r_wraddress;\n");
        fprintf(ft,"    reg [10:0]  r_rdaddress_a;\n");
        fprintf(ft,"    reg [10:0]  r_rdaddress_a;\n");
        fprintf(ft,"    reg [10:0]  r_rdaddress_b;\n");
        fprintf(ft,"    reg [10:0]  r_rdaddress_b;\n");
        fprintf(ft,"    reg   r_wren;\n");
        fprintf(ft,"    reg   r_wren;\n");
        fprintf(ft,"    input     clock;\n");
 
        fprintf(ft,"    output  [7:0]  qa;\n");
 
        fprintf(ft,"    output  [7:0]  qb;\n");
 
        fprintf(ft,"    reg [7:0] mem_bank  [0:2047]  ;\n");
        fprintf(ft,"    reg [7:0] mem_bank  [0:2047]  ;\n");
        if(base!=0)
        if(base!=0)
        fprintf(ft,"    integer i;\n    initial begin\n        for(i=0;i<%d;i=1+i)\n         mem_bank[i] = 'h00;\n       ",base);
        fprintf(ft,"    \ninteger i;\n    initial begin\n        for(i=0;i<%d;i=1+i)\n         mem_bank[i] = 'h00;\n       ",base);
        else
        else
        fprintf(ft,"    initial begin   \n       ");
        fprintf(ft,"    \ninitial begin   \n       ");
 
 
        rewind(ff);
        rewind(ff);
        cntr=-10 ;
        cntr=-10 ;
        i=-1 ;
        i=-1 ;
 
 
Line 136... Line 209...
        fprintf(ft,"        r_wraddress<=wraddress;\n");
        fprintf(ft,"        r_wraddress<=wraddress;\n");
        fprintf(ft,"        r_rdaddress_a<=rdaddress_a;\n");
        fprintf(ft,"        r_rdaddress_a<=rdaddress_a;\n");
        fprintf(ft,"        r_rdaddress_b<=rdaddress_b;\n");
        fprintf(ft,"        r_rdaddress_b<=rdaddress_b;\n");
        fprintf(ft,"        r_wren<=wren;\n");
        fprintf(ft,"        r_wren<=wren;\n");
        fprintf(ft,"    end\n");
        fprintf(ft,"    end\n");
        fprintf(ft,"    assign qa =mem_bank[r_rdaddress_a];\n");
        fprintf(ft,"    assign qa =(r_rdaddress_a>%d)?0:mem_bank[r_rdaddress_a];\n",base+i);
        fprintf(ft,"    assign qb =mem_bank[r_rdaddress_b];\n");
        fprintf(ft,"    assign qb =(r_rdaddress_b>%d)?0:mem_bank[r_rdaddress_b];\n",base+i);
        fprintf(ft,"endmodule\n\n\n\n");
        fprintf(ft,"endmodule\n\n\n\n");
    }
    }fclose(ft);
}
}
 
 
 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.