URL
https://opencores.org/ocsvn/mips789/mips789/trunk
Subversion Repositories mips789
Compare Revisions
- This comparison shows the changes necessary to convert path
/mips789/branches/avendor/bench/calc_PI_2
- from Rev 35 to Rev 51
- ↔ Reverse comparison
Rev 35 → Rev 51
/pi_2200.GIF
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
pi_2200.GIF
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: cal_pi.c
===================================================================
--- cal_pi.c (nonexistent)
+++ cal_pi.c (revision 51)
@@ -0,0 +1,285 @@
+/******************************************************************
+ * *
+ * 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 *
+ * *
+ ******************************************************************/
+
+/* This source code is baseed on a 16bit CPU Aquarius in opencores.org */
+/* Thanks the author. */
+/* modified by Liwei 2007-10-13 */
+
+
+//#define DOS
+#define MIPS
+
+#ifdef MIPS
+#include "..\..\clib\dvc_lib.h"
+#endif
+
+#ifdef DOS
+#include "stdio.h"
+#define uart0_putc putchar
+#define uart0_putstr puts
+#endif
+
+void longadd(unsigned short *a, unsigned short *b, unsigned short *c);
+void longsub(unsigned short *a, unsigned short *b, unsigned short *c);
+int longdiv(unsigned short *a, unsigned short b, unsigned short *c);
+void calc_pi(void);
+void disp_oct4(unsigned short x);
+void disp_pi(void);
+
+#define MAXFIGURE ((1100*2/4)+2) /* should be (N*8)+2 to display correctly */
+
+unsigned short PI[MAXFIGURE];
+unsigned short T1[MAXFIGURE];
+unsigned short T2[MAXFIGURE];
+unsigned short T3[MAXFIGURE];
+
+/* ============= */
+/* Main Routine */
+/* ============= */
+void main_sh(void)
+{
+
+ uart0_putstr("Calculating..... ");
+ calc_pi();
+ disp_pi();
+}
+
+/* ------------------------------------------------- */
+/* Calculate the Circular Constant Pi */
+/* ------------------------------------------------- */
+/* (1) Matin's formula */
+/* PI/4 = 4*arctan(1/5) - arctan(1/239) */
+/* PI = 16*arctan(1/5) - 4*arctan(1/239) */
+/* Here, arctan(1/p) = 1/p - 1/(3*p^3) + 1/(5*p^5) - 1/(7*p^7) + ... */
+/* Then, */
+/* PI = (16*1/5 - 4*1/239) */
+/* - (16*1/3*5^3 - 4*1/3*239^3) */
+/* + (16*1/5*5^5 - 4*1/5*239^5) */
+/* - (16*1/7*5^7 - 4*1/7*239^7) */
+/* +... */
+/* = (1/1)*(16*5/(5*5)^1 - 4*239/(239*239)^1) */
+/* - (1/3)*(16*5/(5*5)^2 - 4*239/(239*239)^2) */
+/* + (1/5)*(16*5/(5*5)^3 - 4*239/(239*239)^3) */
+/* - (1/7)*(16*5/(5*5)^4 - 4*239/(239*239)^4) */
+/* +... */
+/* ------------------------------------------------- */
+/* (2) Define Arrays for Long Figure Number */
+/* Each element has Octal 4 figures. */
+/* PI[] : Value to be converged to Pi */
+/* T1[] : (16* 5)/( 5* 5)^n (n=1...) */
+/* T2[] : ( 4*239)/(239*239)^n (n=1...) */
+/* T3[] : (-1)*(n+1)*(1/(2n-1))*(T1[]-T2[]) */
+/* ------------------------------------------------- */
+/* (3) Example */
+/* n TI[0] TI[1] T2[0] T2[1] T3[0] T3[1] PI[0] PI[1] */
+/* 0 0080 0000 0956 0000 0000 0000 0000 0000 */
+/* 1 0003 2000 0000 0167 0003 1833 0003 1833 (+) */
+/* 2 0000 1280 0000 0000 0000 0426 0003 1407 (-) */
+/* 3 0000 0051 0000 0000 0000 0010 0003 1417 (+) */
+/* 4 0000 0002 0000 0000 0000 0000 0003 1417 (-) */
+/* ------------------------------------------------- */
+void calc_pi(void)
+{
+ int i;
+ int converged;
+ /* ----------- */
+ /* Initialize */
+ /* ----------- */
+ converged = 0;
+ for (i=0; i<=MAXFIGURE-1; i++)
+ {
+ PI[i] = 0;
+ T1[i] = 0;
+ T2[i] = 0;
+ T3[i] = 0;
+ }
+ T1[0] = 16*5;
+ T2[0] = 4*239;
+
+ /* ----------------------------- */
+ /* repeat until being converged */
+ /* ----------------------------- */
+ i = 1;
+ while (converged == 0)
+ {
+ /* ------------- */
+ /* Make T1 & T2 */
+ /* ------------- */
+ longdiv(T1, 25, T1);
+ longdiv(T2, 239, T2);
+ longdiv(T2, 239, T2);
+ /* -------- */
+ /* Make T3 */
+ /* -------- */
+ longsub(T1, T2, T3);
+ converged = longdiv(T3, (unsigned short)(2*i-1), T3);
+ /* if (converged) break; */
+ /* ----------------- */
+ /* Accumulate to PI */
+ /* ----------------- */
+ if (i%2 != 0)
+ longadd(PI, T3, PI);
+ else
+ longsub(PI, T3, PI);
+ /* ------------ */
+ /* Increment i */
+ /* ------------ */
+ i++;
+ }
+}
+
+/* --------- */
+/* Long Add */
+/* --------- */
+void longadd(unsigned short *a, unsigned short *b, unsigned short *c)
+{
+ int i;
+ unsigned short carry;
+
+ carry = 0;
+ for (i = MAXFIGURE-1; i >= 0; i--)
+ {
+ *(c+i) = *(a+i) + *(b+i) + carry;
+ if (*(c+i) < 10000)
+ carry = 0;
+ else
+ {
+ carry = 1;
+ *(c+i) = *(c+i) - 10000;
+ }
+ }
+}
+
+/* --------- */
+/* Long Sub */
+/* --------- */
+void longsub(unsigned short *a, unsigned short *b, unsigned short *c)
+{
+ int i;
+ unsigned short borrow;
+ unsigned short temp;
+
+ borrow = 0;
+ for (i = MAXFIGURE-1; i >= 0; i--)
+ {
+ temp = *(b+i) + borrow;
+ if (*(a+i) >= temp)
+ {
+ *(c+i) = *(a+i) - temp;
+ borrow = 0;
+ }
+ else
+ {
+ *(c+i) = 10000 + *(a+i) - temp;
+ borrow = 1;
+ }
+ }
+}
+
+/* --------- */
+/* Long Div */
+/* --------- */
+int longdiv(unsigned short *a, unsigned short b, unsigned short *c)
+{
+ int i;
+ int conv;
+ unsigned long al, bl, cl, dvd, rem;
+
+ conv = 1;
+ rem = 0;
+ for (i = 0; i <= MAXFIGURE-1; i++)
+ {
+ al = (unsigned long) *(a+i);
+ bl = (unsigned long) b;
+ cl = (unsigned long) *(c+i);
+
+ dvd = al + rem;
+ cl = dvd / b;
+ rem = (dvd - cl * bl) * 10000;
+ if (cl > 0) conv = 0;
+ *(c+i) = (unsigned short) cl;
+ }
+ return conv;
+}
+
+/* ----------- */
+/* Display Pi */
+/* ----------- */
+void disp_pi(void)
+{
+ int i, j;
+ uart0_putstr("Calculating DONE ");
+ uart0_putstr("Pi = 3.");
+ /* while(1)*/
+ {
+ for (i = 0; i < (MAXFIGURE - 2) / 8; i++)
+ {
+ for (j = 0; j < 8; j++)
+ {
+ /* if (j == 0) lcd_pos(0); */
+ /* if (j == 4) lcd_pos(16); */
+ disp_oct4(*(PI + i*8 + j + 1));
+ }
+ }
+ }
+}
+
+/* ------------------- */
+/* Display Oct 4 digit */
+/* ------------------- */
+
+void disp_oct4(unsigned short x)
+{
+
+ unsigned short d;
+ d = x / 1000;
+ x = x - d * 1000;
+ uart0_putc((char)(d+0x30));
+ d = x / 100;
+ x = x - d * 100;
+ uart0_putc((char)(d+0x30));
+ d = x / 10;
+ x = x - d * 10;
+ uart0_putc((char)(d+0x30));
+ uart0_putc((char)(x+0x30));
+}
+
+#ifdef MIPS
+main2()
+#endif
+
+#ifdef DOS
+main()
+#endif
+{
+
+unsigned char i=0;
+
+
+for(;;)
+{
+ uart0_putstr("Hello CPU World ,this is MIPS789...\n");
+calc_pi();
+ disp_pi();
+#ifdef MIPS
+dis_byte(i++);
+while(get_key1()==0) ;
+#endif
+
+#ifdef DOS
+getchar();
+#endif
+}
+
+
+}
Index: cal_PI.bat
===================================================================
--- cal_PI.bat (nonexistent)
+++ cal_PI.bat (revision 51)
@@ -0,0 +1,19 @@
+path;
+path=..\..\gccmips_elf
+del *.axf
+del *.txt
+as -o boot.o ..\plasmaboot.asm
+gcc -O2 -O -Wall -c -s ..\..\clib\dvc_lib.c
+gcc -O2 -O -Wall -c -s cal_pi.c
+
+ld.exe -Ttext 0 -eentry -Map test.map -s -N -o test.axf boot.o dvc_lib.o cal_pi.o
+
+objdump.exe --disassemble test.axf > list.txt
+
+convert_sp
+gensim
+genmif
+copy *.mif ..\..\quartus2\*.mif
+#copy *.v ..\MODELSIM\*.v
+
+//ser_dld 9600 COM1 N
Index: dos_clac_pi_2.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: dos_clac_pi_2.GIF
===================================================================
--- dos_clac_pi_2.GIF (nonexistent)
+++ dos_clac_pi_2.GIF (revision 51)
dos_clac_pi_2.GIF
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: clean.bat
===================================================================
--- clean.bat (nonexistent)
+++ clean.bat (revision 51)
@@ -0,0 +1,10 @@
+del *.bak
+del *.map
+del *.o
+del *.obj
+del *.axf
+del *.txt
+del *.bin
+del sim_ram.v
+del *.mif
+del transcript
\ No newline at end of file
Index: CAL_PI_DOS.EXE
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: CAL_PI_DOS.EXE
===================================================================
--- CAL_PI_DOS.EXE (nonexistent)
+++ CAL_PI_DOS.EXE (revision 51)
CAL_PI_DOS.EXE
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Index: cal_PI_2.GIF
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: cal_PI_2.GIF
===================================================================
--- cal_PI_2.GIF (nonexistent)
+++ cal_PI_2.GIF (revision 51)
cal_PI_2.GIF
Property changes :
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property