(原創)LEON3入門教程(三):基於LEON3的SOPC設計以及HELLOWORLD和流水燈


摘要:通過前兩篇博客的介紹,Windows下基本的LEON3開發環境就已經搭建好了。這篇博客將要介紹LEON3 SOPC平台的搭建(使用Cygwin+GRLIB)和 LEON3 IDE(eclipse)的使用,並編寫我們的第一個LEON3程序 HelloWord +流水燈。

 更多更新請關注我的博客:@超群天晴 http://www.cnblogs.com/surpassal/

相關閱讀

(原創)LEON3入門教程(一):什么是LEON3?需要哪些開發工具和軟件?

(原創)LEON3入門教程(二):Cygwin和GRtools的安裝與配置

(原創)LEON3入門教程(四):基於AMBA APB總線的七段數碼管IP核設計

 

一、LEON3的SOPC硬件配置

1 安裝GRLIB

通過下面的方式安裝GRLIB。

1. 啟動Cygwin。

2. 進入grlib-gpl-1.1.0-b4104.zip所在的目錄E:\LEON3\

這里需要用到兩個重要的命令 cdls

cd: 即 Change Directory 切換目錄;

ls:  即 List,列出目錄內容。

 

輸入 cd .. 返回到home(注:cd 后有兩點);

輸入 cd .. 返回到根目錄,輸入 ls 可以查看當前目錄下的子目錄和文件;

輸入 cd cygdrive ,進入cygdrive目錄,輸入 ls 查看本地磁盤驅動器;

由於grlib-gpl-1.1.0-b4104.zip在e盤的LEON3下,故再輸入cd e,進入e盤,再cd LEON3。如圖 1所示。 

圖 1 cd和ls 命令的應用

 

此時輸入ls 命令,可以看到E:\LEON3\下有grlib-gpl-1.1.0-b4104.zip。如圖2所示。 

圖 2 查看LEON3文件夾下的內容

 

3安裝GRLIB。使用 unzip命令: unzip grlib-gpl-1.1.0-b4104.zip。如圖3所示。 

圖 3 安裝GRLIB 

安裝結束。

可以看到,之前的LEON3目錄下生成了新的文件夾grlib-gpl-1.1.0-b4104,在Windows的資源管理器中可以看到如圖4所示的內容。 

圖 4 grlib-gpl-1.1.0-b4104中的內容

 

2 配置LEON3

LEON3的硬件移植最重要的一部分就是根據所需要移植的目標芯片和目標測試板對LEON3的配置文件進行修改和配置。本次移植是在GRLIB發布的grlib-gpl-1.1.0-b4104.版本上進行修改的,修改的源文件是ep3c25,在designs目錄下新建leon3-altera-ep2c70-sdr文件夾,作為設計文件文件夾,並將leon3-altera-ep3c25文件夾下內容全部拷貝過去;同樣,在boards目錄下新建altera-ep2c70文件夾,將altera-ep3c25文件夾下的所有文件拷貝過去。

                                  

 

圖 5 designs 目錄下新建的DE2-70的boards和designs文件夾

2.1修改文件

在正式配置前需要對表1所列出的文件進行修改:

(注意:本小節所涉及的修改文件都可以從http://files.cnblogs.com/surpassal/leon3-de2.rar下載,解壓密碼是 neurcq ) 

表 1 修要修改的文件

需要修改的文件

文件說明

boards/Makefile.inc

所用FPGA芯片具體信息

boards/leon3mp.qsf

包含了一個Quartus工程的所有約束,包括工程信息、器件信息、引腳約束、編譯約束和用於Classic Timing Analyzer的時序約束

designs/config.in

配置信息文件

designs/leonemp.vhd

頂層文件

 1.Makefile.inc 

表2 Makefile.inc文件修改內容

文件名

Makefile.inc

位  置

E:\LEON3\grlib-gpl-1.1.0-b4104\boards\altera-ep2c70

修改前的內容

修改后的內容

修改說明

TECHNOLOGY=CYCLONEIII

PART= EP3C25

PACKAGE= FC324

SPEED=-8

SYNFREQ=60

QSFDEV=EP3C25F324C8

 

MANUFACTURER=Altera

MGCPART=$(PART)F324C

MGCTECHNOLOGY=CycloneIII

MGCPACKAGE=F324C

 

TECHNOLOGY= CYCLONEII

PART= EP2C70

PACKAGE= F896

SPEED=-6

SYNFREQ=50

QSFDEV=EP2C70F896C6

 

MANUFACTURER=Altera

MGCPART=$(PART)F896C6

MGCTECHNOLOGY=CYCLONEII

MGCPACKAGE=F896

 

將使用的芯片更改為EP2C70F896C6

       
 

2. leon3mp.qsf

這個文件需要修改很多了,需要將約束信息修改為配套的開發板,包括引腳、工程、器件、引腳、編譯等。由於篇幅限制,這里不提供修改后的文件內容。如有需要可以通過http://files.cnblogs.com/surpassal/leon3-de2.rar進行下載,文件的解壓密碼是 neurcq。

 

3. config.in

配置界面文件,在Cygwin中輸入make xconfig啟動配置界面就是通過對config.in文件進行讀取實現的。需要修改的有兩個地方:

12行:

mainmenu_name "LEON3 Altera EP3C25 Design Configuration"

修改為:

mainmenu_name "LEON3 Altera EP2C70-sdr Design Configuration"

作用:將界面的標題欄改為“LEON3 Altera EP2C70-sdr Design Configuration”

39、40行:   

source lib/gaisler/memctrl/ssrctrl.in

    source lib/gaisler/ddr/ddrsp.in

修改為:

source lib/gaisler/memctrl/sdctrl.in

作用:本次設計使用的片外的SDRAM,需要在SOPC上添加SDRAM的控制器。

 4. leon3mp.vhd

         leon3mp.vhd是頂層文件,由於ep3c25使用了DDRAM等這樣DE2-70沒有的外設或者存儲器,而且使用的SDRAM型號也不一樣,導致很多地方引腳的聲明是多余或者不夠的。所以需要按照DE2-70上實際擁有硬件連接關系對頂層文件修改或者重新編寫。由於修改較多,篇幅限制,這里只對重要的幾個部分的修改作以說明。如有需要可以通過http://files.cnblogs.com/surpassal/leon3-de2.rar進行下載,文件的解壓密碼是 neurcq。

①      SDRAM 的端口說明

由於DE2-70使用了兩片16位的SDRAM,而LEON3的SDRAM控制器使用的是32位或者64位的SDRAM,所以采用兩片SDRAM共用地址總線,將數據總線拼接成32位的方式實現32數據寬度。端口說明如下:

 1     sd     : inout std_logic_vector(31 downto 0);
 2     sddqm  : out std_logic_vector (7 downto 0);  -- sdram dqm    
 3     
 4     sa_0     : out std_logic_vector(12 downto 0);    
 5     sdba_0   : out std_logic_vector(1 downto 0);   -- sdram bank address
 6     
 7     sdclk_0    : out std_logic;                       -- sdram clk output
 8     sdcke_0    : out std_logic_vector ( 1 downto 0);  -- clk en
 9     sdcsn_0    : out std_logic_vector ( 1 downto 0);  -- chip sel
10     sdwen_0  : out std_logic;                     -- sdram write enable
11     sdrasn_0 : out std_logic;                     -- sdram ras row addr stb
12     sdcasn_0 : out std_logic;                     -- sdram cas col addr stb
13 
14  
15     sa_1     : out std_logic_vector(12 downto 0);    
16     sdba_1   : out std_logic_vector(1 downto 0);   -- sdram bank address
17     
18     sdclk_1    : out std_logic;                       -- sdram clk output
19     sdcke_1    : out std_logic_vector ( 1 downto 0);  -- clk en
20     sdcsn_1    : out std_logic_vector ( 1 downto 0);  -- chip sel
21     sdwen_1  : out std_logic;                     -- sdram write enable
22     sdrasn_1 : out std_logic;                     -- sdram ras row addr stb
23     sdcasn_1 : out std_logic                     -- sdram cas col addr stb

②      SDRAM的實例化

         使用的是gaisler提供的sdctrl控制器實例化本設計中的SDRAM控制器,使用元件例化的方式

 1 sdc : sdctrl 
 2             generic map (
 3                             hindex => 3, 
 4                             haddr => 16#400#, 
 5                             hmask => 16#F00#, 
 6                             ioaddr => 1, fast => 0, pwron => 0, 
 7                             invclk => CFG_SDCTRL_INVCLK, 
 8                             sdbits => 32 + 32*CFG_SDCTRL_SD64, 
 9                             pageburst => CFG_SDCTRL_PAGE
10                         )
11             port map     (
12                             rstn, clkm, ahbsi, ahbso(3), sdi, sdo2
13                         );

         hindex => 3,指明SDRAM控制在AHB總線的索引是3,haddr => 16#400#,指明的是SDRAM的地址空間從0x4000 0000開始,hmask => 16#F00#,表明SDRAM所占用的空間大小是256M

2.2 配置LEON3系統結構信息

通過下面的方法可以配置所需要的LEON3系統結構信息,並將所配置的信息保存在config.vhd文件中。

1. 還是使用cd命令進入目錄:

E:\LEON3\grlib-gpl-1.1.0-b4104\designs\leon3-altera-ep2c70-sdr

 

2. 運行make xgrlib命令,圖形配置界面如圖6所示: 

圖 6 GRLIB 的可視化配置界面

 

        3. 點擊xconfig按鈕,彈出設計的配置界面,如圖7所示。 

圖 7 設計配置界面

 

4. 在這里可以對LEON3基本單元進行配置,本次設計需要對目標技術、鎖相環、調試方式以及外設等進行配置,其他選項保持默認值即可。

目標技術(Target Technology):打開綜合(Synthesis)界面,將目標技術跟改為Altera-Others。如圖8 所示。 

圖 8目標技術選擇 Altera-Others

鎖相環設置:在Clock generation選項中,由於板子上的系統時鍾是50M,現在將處理器和總線時鍾配置成50M。如圖9所示。 

圖 9 鎖相環設置

       調試方式:Debug Link選項可以對處理器支持的調試功能進行配置,這里選擇Jtag調試,不使用串口調試。如圖 10所示。 

圖 10 調試方式設置 

外設和存儲器管理:在Peripherals選項中可以配置Memory controller,並可以對系統的各種內存控制器進行配置對片內RAM/ROM、以太網、UART、中斷控制器等基本設備進行配置。如圖11  所示。 

圖 11外設選項

       其中的存儲器控制器選項界面如圖12所示。

圖 12 存儲器控制器選項

       再點開 Leon2 memory controller選項,打Leon2 memory controller選項界面。由於本次設計只是用SDRAM,沒有使用其他存儲器,故不需要使能Leon2 memory controller。

圖 13 不使能Leon2 memory controller

       SDRAM控制器:gaisler提供了符合PC133標准接口的SDRAM控制器。配置如圖 14所示,使用32位數據總線。

 

圖 14 使用PC133SDRAM控制器

       片上RAM和ROM:不需要使用片上的ROM和RAM。

圖 15不使用片上的ROM和RAM

       其他外設:其他外設可以任意選擇,這次設計中使用了UART、TIMER、32位的GPIO和中斷控制器。 其中GPIO是作為外設連接到DE2_70板上的17個LED作為流水燈,UART是作為控制台調試輸出,系統初始化后默認波特率為38400,數據位為8位,停止位1位,無校驗位

圖 16 其他外設的配置

       至此,外設配置結束。最后,在完成配置后點Save and Exit項即可保存退出配置界面。至此,LEON3系統結構配置已完成,配置文件默認保存在config.vhd中。如圖17所示。 

圖 17 結束配置

2.3 生成可綜合的工程文件

LEON3的系統結構信息配置結束后,接下來需要生成可綜合的工程文件並使用Quartus II 軟件對生成的工程進行綜合、布線和下載。

1. 單擊主面板的 scripts 按鈕,生成所需要的文件

 1 make scripts
 2 Scanning libraries
 3   grlib: stdlib util sparc modgen amba
 4   altera: simprims
 5   altera_mf: simprims
 6   cycloneiii: simprims
 7   synplify: sim
 8   techmap: gencomp inferred altera_mf cycloneiii maps
 9   opencores: occomp i2c spi ac97
10   gaisler: arith memctrl leon3 misc uart sim jtag ddr
11   esa: memoryctrl
12   cypress: ssram
13   hynix: ddr2
14   micron: sdram ddr
15   work: debug
16 testbench.mpf
17 leon3mp_synplify.prj
18 leon3mp_dc.tcl
19 leon3mp.rc
20 leon3mp.xst

 出現以上信息,則生成了Quartus綜合布線所需要的所有工程文件。按quit 退出 GRLIB的GUI界面。 

2. 啟動Quartus II ,對E:\LEON3\grlib-gpl-1.1.0-b4104\designs\leon3-altera-ep2c70-sdr下生成的工程進行編譯綜合。如圖 18所示。 

圖 18  Quartus II的編譯綜合

 

3. 完成后下載,如圖 19所示。 

圖 19 下載

 

二、 使用LEON IDE建立軟件應用程序

       下面將詳細介紹使用LEON 的LEON IDE進行軟件開發。

       啟動 LEON IDE 的方法有以下幾種:

  • 選擇開始菜單->所有程序->Eclipse->Eclipse。
  • 運行桌面上的Eclipse圖標。

1 創建 C 工程

LEON IDE 提供了 New Project 向導,用於自動建立C或者C++應用程序工程。使用New Project 向導,能輕松地在LEON IDE 中創建新工程。

創建新的C應用工程的步驟如下:

1.新建工程。在LEON IDE中,選擇File->New->C Project,開啟C工程創建對話框。如圖20所示。

 

圖 20 新建C工程

 

2. 對新工程進行設定。在C工程創建對話框中,用戶可以指定需要建立的工程名、工程的類型模本以及所需要使用的工具鏈。本例中,新建工程名為Test_1,類型為Empty Project,工具鏈選擇 SPARC Bare C。點擊 Next ,打開工程調試配置對話框。如圖 21所示。注意:工程名和文件名中不能有空格,所在的路徑也不能有空格,以免影響編譯。 

 

圖 21新工程模板和工具鏈選擇

 

3.配置。在新工程調試配置對話框中,用戶可以選擇需要的調試平台和相應的配置。這里將Debug 和 Release 均選擇。點擊 Finish ,結束工程的建立。如圖 22所示。 

圖 22 配置

 

4. 至此,新工程建立結束。圖 23 所示為LEON IDE的工程設計界面。 

圖 23 工程設計界面

2 配置新工程系統屬性

新工程建立后,還需要對工程做一些配置:

1.點擊菜單欄里的 Project 選項,在彈出的菜單中點擊Build Automatically ,將其前的勾去掉。如圖 24所示。 

圖 24 取消Build Automatically 

2. 右擊工程管理窗口中的工程Test_1,在彈出的菜單中選擇 Properties ,點擊打開如圖25所示的工程屬性設置(Properties for Test_1)對話框,找到C/C++ Build->Discovery Options,點擊打開,在右側的Configuration中選擇Debug,即對調試模式的配置進行修改和設置。將Discovery profiles scope選擇為 Configuration-wide ;再點擊Complier invocation command 下的Browse…按鈕,找到C:\opt\sparc-elf-4.4.2-mingw\bin路徑下的的sparc-elf-gcc-4.4.2.exe,點擊打開 。再點擊Apply按鈕。之后對Release模式采用同樣的方法進行配置,配置好后點擊 Apply按鈕。最后點擊 Ok 按鈕,退出工程屬性設置頁面。

圖 25工程屬性設置

3. 右擊工程管理窗口中的工程Test_1,在彈出的菜單中選擇Build Configurations -> Set Active -> Debug,激活編譯為Debug模式。

至此,工程配置結束。

3 給工程添加源文件

同樣LEON IDE 提供了 New File 向導,用於自動建立C或者C++等源程序。使用New File向導,能輕松地給工程添加源文件。

1.添加文件。右擊工程管理窗口中的工程Test_1,在彈出的菜單中選擇New -> Source File,在打開如圖4-26所示的New Source File 對話框中,選擇模板為 Default C Source template ,並給源文件取名為main.c。 

圖 26給工程添加源文件

2.編寫軟件代碼。雙擊工程管理器中的main.c,程序編輯窗口會將main.c的內容顯示出來。將下面的代碼后寫入后保存main.c文件。

 1 /*
 2  * main.c
 3  *
 4  *  Created on: 2011-3-27
 5  *      Author: 超群天晴
 6  */
 7 
 8 
 9 #include "stdio.h"
10 #include "stdlib.h"
11 
12 #define LEDG_BASE 0x80000600
13 
14 // REG LEDG
15 #define LEDG_DATA_IN      (*(unsigned int volatile *)(LEDG_BASE            ))
16 #define LEDG_DATA_OUT      (*(unsigned int volatile *)(LEDG_BASE + 4        ))
17 #define LEDG_DIR          (*(unsigned int volatile *)(LEDG_BASE + 8        ))
18 #define LEDG_INT_MASK      (*(unsigned int volatile *)(LEDG_BASE + 0xC    ))
19 #define LEDG_INT_POL      (*(unsigned int volatile *)(LEDG_BASE + 0x10    ))
20 #define LEDG_INT_EDGE      (*(unsigned int volatile *)(LEDG_BASE + 0x14    ))
21 #define LEDG_BYPASS      (*(unsigned int volatile *)(LEDG_BASE + 0x18    ))
22 
23 
24 void GPIO_init(void);
25 void delay1s(void);
26 
27 
28 int main(void)
29 {
30     unsigned char led1;
31 
32 
33     printf("This is Test_1 of LEON3 SOPC !");
34     led1=0xf0;
35 
36     LEDG_DIR=0xff;//output mode
37 
38     while(1)
39     {
40         LEDG_DATA_OUT=led1;
41 
42         delay1s();
43 
44         led1=~led1;//    取反
45     }
46 
47     return 1;
48 }
49 
50 
51 
52 void GPIO_init(void)
53 {
54     LEDG_DIR=0xff;//output mode
55 }
56 
57 
58 void delay1s(void)
59 {
60     int i,j;
61     for(i=0;i<1000;i++)
62         for(j=0;j<500;j++);
63 }

4 編譯工程

右擊工程管理窗口中的工程Test_1,在彈出的菜單中選擇Build Project,LEON IDE便開始編譯工程。如果沒有錯誤,信息窗口會提示Build completed信息,表示軟件編譯成功。

如果有錯誤,則會提示錯誤的原因以及代碼的行號,並在程序編輯窗口中只是錯誤出現的位置。需要設計者修改錯誤並重新編譯,直至編譯成功。

 1 **** Rebuild of configuration Debug for project Test_1 ****
 2 
 3  
 4 
 5 **** Internal Builder is used for build               ****
 6 
 7 sparc-elf-gcc -O0 -g3 -Wall -msoft-float -c -fmessage-length=0 -omain.o ..\main.c
 8 
 9 sparc-elf-gcc -msoft-float -oTest_1 main.o
10 
11 Build complete for project Test_1
12 
13 Time consumed: 1500  ms. 

注意:如果沒有將 Build Automatically 前的勾去掉,右鍵工程是看不到 Build Project選項的,這時候需要點擊 Build Configurations->Build->Select。

5 運行程序

工程編譯成功后,就可運行程序了。LEON IDE 提供了四種運行模式:

 

這里我們要使用到的是 LEON C/C++ application。以下為詳細的操作步驟。

1. 修改系統時間。這一步很關鍵,在正式運行之前需要確保系統時間是“合適”的。

由於GRTools安裝和使用受時間限制,所以如果當前的系統時間超出使用限制時間的話,GRTools的某些功能將不再被支持。本次試驗所使用的GRTools版本的使用權限到2010年5月27日,所以為了讓GRTools能正常使用,可以將系統時間調至較前一點時間如2010年5月14日。

2. 新建LEON C/C++ application配置。右擊工程管理窗口中的工程Test_1,在彈出的菜單中選擇Debug As->Debug Configurations,打開Debug Configurations 設置對話框,如圖27所示。雙擊左側 LEON C/C++ application ,新建一個LEON C/C++ application的配置。 

圖 27 新建LEON C/C++ application配置 

3. 設置Target為LEON類型。在右側的Debugger選項卡中,選擇Debugger為LEON Debugger,並點擊External Target右側的New…,新建一個外部目標。在彈出的Target Settings 界面中,可以自定義目標名字,如LEON3_Target;再將Target修改成GRMON,並將Interface選擇為Altera Jtag。如圖28所示。 

圖 28目標設置 

       4. 點擊 Finish ,結束Target Settings,返回Debug Configurations主界面,點擊Apply 按鈕,應用設置。然后點擊 Debug 按鈕,開始將程序下載到目標開發板上。

       5. 下載過程中,LEON IDE會提示如下信息

 1  
 2 
 3  GRMONLEONdebug monitor v1.1.39 evaluation version
 4 
 5  
 6 
 7  Copyright (C) 2004-2008 Aeroflex Gaisler - all rights reserved.
 8 
 9  For latest updates, go to http://www.gaisler.com/
10 
11  Comments or bug-reports to support@gaisler.com
12 
13  
14 
15 gdb interface: using port 2222
16 
17 connected to port 2222
18 
19  This evaluation version will expire on 2/11/2010
20 
21  using Altera JTAG cable
22 
23  Selected cable 1 - USB-Blaster [USB-0]
24 
25 JTAG chain:
26 
27 @1: EP2C70 (0x020B60DD)
28 
29  
30 
31  GRLIB build version: 4104
32 
33  
34 
35  initialising ..........
36 
37  detected frequency:  50 MHz
38 
39  
40 
41  Component                            Vendor
42 
43  LEON3 SPARC V8 Processor             Gaisler Research
44 
45  Unknown device                       Gaisler Research
46 
47  AHB/APB Bridge                       Gaisler Research
48 
49  LEON3 Debug Support Unit             Gaisler Research
50 
51  32-bit PC133 SDRAM Controller        Gaisler Research
52 
53  Generic APB UART                     Gaisler Research
54 
55  Multi-processor Interrupt Ctrl       Gaisler Research
56 
57  Modular Timer Unit                   Gaisler Research
58 
59  General purpose I/O port             Gaisler Research
60 
61  General purpose I/O port             Gaisler Research
62 
63  
64 
65  Use command 'info sys' to print a detailed report of attached cores

表明連接成功,識別到目標開發板中的LEON3了。這實際上是GRMON連接信息。從這些信息中可以看出,系統的主頻是50M,有PC133SDRAM控制器,已經 APB UART、中斷控制器、定時器已經GPIO。系統會自動切換至Debug視圖,如圖29所示。 

圖 29下載成功 

       6. 運行。將電腦的串口連接到目標開發板上,打開串口調試工助手,選擇好串口,設置波特率為38400,數據位為8位,停止位1位,無校驗位。運行LEON IDE工具欄上的按鈕,開始運行程序。 通過串口助手可以看到從目標板上發送“This is Test_1 of LEON3 SOPC !”,並能看到開發板上的8個綠色LED交替亮滅。程序運行成功。 

圖 30測試結果 

===============================================================

注意:

1、Gaisler官網不建議使用Windows下的其他軟件如WinRAR對其解壓,以免破壞文件的結構。但是實際測試使用Windows下的解壓軟件直接解壓,硬件的配置也能正常完成。

2、為了避免每次都通過cd 命令一層一層的進入目錄帶來的麻煩,Cygwin支持多重目錄進入,如現在根目錄下,可以通過

$ cd E:/LEON3/grlib-gpl-1.1.0-b4104/designs/leon3-altera-ep2c70-sdr

直接進入目標E:\LEON3\grlib-gpl-1.1.0-b4104\designs\leon3-altera-ep2c70-sdr,注意命令行中是 / 而非 \ 。

3. 在軟件測試時,需要修改系統時間。但是在運行Cygwin對硬件進行配置的時候,系統時間需要修改回來!這樣帶來的問題就是在修改硬件軟的同時需要來回修改系統時間,很是麻煩。所以建議先將硬件配置好后,再配置軟件,這樣就不需要將系統時間反復地修改了

4、對於一個新建工程,第一次需要進行Debug Configurations,之后每次可以直接通過點擊LEON IDE的主界面上的工具欄上的Debug圖標右側的下拉三角形,選擇剛剛建立的LEON C/C++ application 圖標即可下載運行,不需要再重新配置。如圖31所示。 

圖 31 使用LEON C/C++ application 圖標下載

 

===============================================================

配置好的DE2_70 SOPC可以從這獲取到:

http://files.cnblogs.com/surpassal/leon3-de2.rar 

測試通過的硬件、軟件下可以從這獲取到:

http://files.cnblogs.com/surpassal/LEON3-lab1.rar

解壓均為密碼:neurcq

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM