nkbai的博客

配置三核EDK工程

nkbai | 04 七月, 2008 21:38

配置工程.doc 

这个文档是在上次的文档基础上,添加两个核并且各自负责不同的任何:

工程生成后如下图:

 

 

如果生成的工程和上面的不一致效果是不一样的:

添加处理器:

双击选中的Microblaze就可以在工程中添加一个处理器核,其他软核的添加都是如此.

这里一共添加两个,然后对其进行配置;

这里生成了三个Microblaze处理器,分别命名microblaze_0,microblaze_1,2.从图中可以看到两个独立的核,没有任何连接,后面为其挂接总线.

添加opb总线

处理器必须和特定的总线相连,如果有local memory的话必须添加LMB总线.

工程生成的时候就生成了一条opb总线用于挂在uart这些外设,新添加的opb总线可以挂载到这条总线上也可以选择不挂载,这里为了演示一个挂载到现有opb总线上,一个不挂载.

具体连线如下:

另一个核新建一条opb总线,双击下图中的opb,添加一条opb总线.

 

可以对其重新命名,这里就不更改了.

2的连接方式:

添加opb总线必须为其配置时钟信号以及复位 信号,如下:

由于是低电平复位必须更改下面的选项:

最后效果图如下:

 

这时核2,0,1分别用的是独立的opb总线,两者无法通信,并且核2也无法访问内存以及uart等外设.这时我们再添加一条opb-to-opb桥将两条opb总线连接起来.

效果图如下:

 

添加LMB总线

MicroBlaze处理器不能从ddr上启动(经验证,手册上好像没有提及),因此必须有LMB,大小可以根据硬件资源情况进行选择,下面都是用默认的16K,.

首先添加4LMB总线,每个核都需要两条LMB总线,一条是数据,一条是指令,因为Microblaze处理器是一个哈佛结构的处理器.

方便记忆,我对总线名称进行了改动,图中可以看出,不再是默认的名称:

Lmb总线需要为其配置时钟以及复位信号:

\

由于这个开发是低电平复位,因此LMB总线必须也是低电平复位,右键单击LMB总线,选择configure ip去掉下面的选项:

效果图如下;

  

 

添加bram控制器模块

从上面的图中可以看出四条LMB总线实际上是悬空的,而不像microblaze_0 连接到了bram.也就是说BRAM也是必须有的,否则是无法工作的.


下面为两外两个核都添加控制器,如下图:

这些控制器必须和LMB总线连接.连接方式如下:

对应的效果图如下:

 

这里如果不做任何设置也是可以的,但是最好设置想要的bram的大小,如果不设默认是16K,

 

添加bram模块

这里需要两个bram模块,每个核一个,两条LMB总线共享一个bram模块,bram的连接方式如下:

生成的效果图如下:

 

这是几个核的硬件连接才算正式完毕.最后一步生成硬件之前必须为其生成地址,否则编译不过去的.

 

地址生成方法:

点击generate address就会生成地址,如果不满意可以调整.

这时候就可以编译硬件了,如果碰到什么错误可以回头更改,知道编译通过为止,编译通过并不代表硬件可以正常工作,需要仔细分析逻辑关系.

最后生成的system.mhs如下:

# ##############################################################################

# Created by Base System Builder Wizard for Xilinx EDK 9.1.02 Build EDK_J_SP2.4

# Fri Jul 04 20:01:00 2008

# Target Board:  Xilinx XUP Virtex-II Pro Development System Rev C

# Family:       virtex2p

# Device: xc2vp30

# Package:      ff896

# Speed Grade:      -7

# Processor: Microblaze

# System clock frequency: 100.000000 MHz

# Debug interface: No Debug

# On Chip Memory :  32 KB

# Total Off Chip Memory : 256 MB

# - DDR_SDRAM_32Mx64 Single Rank = 256 MB

# ##############################################################################

  

 PARAMETER VERSION = 2.1.0

  

 PORT fpga_0_RS232_Uart_1_RX_pin = fpga_0_RS232_Uart_1_RX, DIR = I

 PORT fpga_0_RS232_Uart_1_TX_pin = fpga_0_RS232_Uart_1_TX, DIR = O

 PORT fpga_0_SysACE_CompactFlash_SysACE_CLK_pin = fpga_0_SysACE_CompactFlash_SysACE_CLK, DIR = I

 PORT fpga_0_SysACE_CompactFlash_SysACE_MPA_pin = fpga_0_SysACE_CompactFlash_SysACE_MPA, DIR = O, VEC = [6:0]

 PORT fpga_0_SysACE_CompactFlash_SysACE_MPD_pin = fpga_0_SysACE_CompactFlash_SysACE_MPD, DIR = IO, VEC = [15:0]

 PORT fpga_0_SysACE_CompactFlash_SysACE_CEN_pin = fpga_0_SysACE_CompactFlash_SysACE_CEN, DIR = O

 PORT fpga_0_SysACE_CompactFlash_SysACE_OEN_pin = fpga_0_SysACE_CompactFlash_SysACE_OEN, DIR = O

 PORT fpga_0_SysACE_CompactFlash_SysACE_WEN_pin = fpga_0_SysACE_CompactFlash_SysACE_WEN, DIR = O

 PORT fpga_0_SysACE_CompactFlash_SysACE_MPIRQ_pin = fpga_0_SysACE_CompactFlash_SysACE_MPIRQ, DIR = I

 PORT fpga_0_LEDs_4Bit_GPIO_IO_pin = fpga_0_LEDs_4Bit_GPIO_IO, DIR = IO, VEC = [0:3]

 PORT fpga_0_DIPSWs_4Bit_GPIO_IO_pin = fpga_0_DIPSWs_4Bit_GPIO_IO, DIR = IO, VEC = [0:3]

 PORT fpga_0_PushButtons_5Bit_GPIO_IO_pin = fpga_0_PushButtons_5Bit_GPIO_IO, DIR = IO, VEC = [0:4]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Clk_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Clk, DIR = O, VEC = [0:2]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Clkn_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Clkn, DIR = O, VEC = [0:2]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Addr_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_Addr, DIR = O, VEC = [0:12]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_BankAddr_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_BankAddr, DIR = O, VEC = [0:1]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CASn_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CASn, DIR = O

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_RASn_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_RASn, DIR = O

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_WEn_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_WEn, DIR = O

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DM_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DM, DIR = O, VEC = [0:7]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DQS_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DQS, DIR = IO, VEC = [0:7]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DQ_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_DQ, DIR = IO, VEC = [0:63]

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CKE_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CKE, DIR = O

 PORT fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CSn_pin = fpga_0_DDR_256MB_32MX64_rank1_row13_col10_cl2_5_DDR_CSn, DIR = O

 PORT fpga_0_net_gnd_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_1_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_2_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_3_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_4_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_5_pin = net_gnd, DIR = O

 PORT fpga_0_net_gnd_6_pin = net_gnd, DIR = O

 PORT fpga_0_DDR_CLK_FB = ddr_feedback_s, DIR = I, SIGIS = CLK, CLK_FREQ = 100000000

 PORT fpga_0_DDR_CLK_FB_OUT = ddr_clk_feedback_out_s, DIR = O

 PORT sys_clk_pin = dcm_clk_s, DIR = I, SIGIS = CLK, CLK_FREQ = 100000000

 PORT sys_rst_pin = sys_rst_s, DIR = I, RST_POLARITY = 0, SIGIS = RST

  

BEGIN microblaze

 PARAMETER INSTANCE = microblaze_0

 PARAMETER HW_VER = 6.00.b

 PARAMETER C_USE_FPU = 0

 PARAMETER C_USE_ICACHE = 1

 PARAMETER C_CACHE_BYTE_SIZE = 2048

 PARAMETER C_USE_DCACHE = 1

 PARAMETER C_DCACHE_BYTE_SIZE = 8192

 PARAMETER C_ICACHE_BASEADDR = 0x50000000

 PARAMETER C_ICACHE_HIGHADDR = 0x5fffffff

 PARAMETER C_DCACHE_BASEADDR = 0x50000000

 PARAMETER C_DCACHE_HIGHADDR = 0x5fffffff

 BUS_INTERFACE DLMB = dlmb

 BUS_INTERFACE ILMB = ilmb

 BUS_INTERFACE DOPB = mb_opb

 BUS_INTERFACE IOPB = mb_opb

 BUS_INTERFACE IXCL = ixcl

 BUS_INTERFACE DXCL = dxcl

END

 

BEGIN lmb_v10

 PARAMETER INSTANCE = ilmb

 PARAMETER HW_VER = 1.00.a

 PARAMETER C_EXT_RESET_HIGH = 0

 PORT SYS_Rst = sys_rst_s

 PORT LMB_Clk = sys_clk_s

END

 

BEGIN lmb_v10

 PARAMETER INSTANCE = dlmb

 PARAMETER HW_VER = 1.00.a

 PARAMETER C_EXT_RESET_HIGH = 0

 PORT SYS_Rst = sys_rst_s

 PORT LMB_Clk = sys_clk_s

END

 

BEGIN lmb_bram_if_cntlr

 PARAMETER INSTANCE = dlmb_cntlr

 PARAMETER HW_VER = 2.00.a

 PARAMETER C_BASEADDR = 0x00000000

 PARAMETER C_HIGHADDR = 0x00007fff

 BUS_INTERFACE SLMB = dlmb

 BUS_INTERFACE BRAM_PORT = dlmb_port

END

 

BEGIN lmb_bram_if_cntlr

 PARAMETER INSTANCE = ilmb_cntlr

 PARAMETER HW_VER = 2.00.a

 PARAMETER C_BASEADDR = 0x00000000

 PARAMETER C_HIGHADDR = 0x00007fff

 BUS_INTERFACE SLMB = ilmb

 BUS_INTERFACE BRAM_PORT = ilmb_port

END

 

BEGIN bram_block

 PARAMETER INSTANCE = lmb_bram

 PARAMETER HW_VER = 1.00.a

 BUS_INTERFACE PORTA = ilmb_port

 BUS_INTERFACE PORTB = dlmb_port

END

 

BEGIN opb_v20

 PARAMETER INSTANCE = mb_opb

 PARAMETER HW_VER = 1.10.c

 PARAMETER C_EXT_RESET_HIGH = 0

 PORT SYS_Rst = sys_rst_s

 PORT OPB_Clk = sys_clk_s

END

 

BEGIN opb_uartlite

 PARAMETER INSTANCE = RS232_Uart_1

 PARAMETER HW_VER = 1.00.b

 PARAMETER C_BAUDRATE = 9600

 PARAMETER C_DATA_BITS = 8

 PARAMETER C_ODD_PARITY = 0

 PARAMETER C_USE_PARITY = 0

 PARAMETER C_CLK_FREQ = 100000000

 PARAMETER C_BASEADDR = 0x40600000

 PARAMETER C_HIGHADDR = 0x4060ffff

 BUS_INTERFACE SOPB = mb_opb

 PORT RX = fpga_0_RS232_Uart_1_RX

 PORT TX = fpga_0_RS232_Uart_1_TX

END

 

BEGIN opb_sysace

 PARAMETER INSTANCE = SysACE_CompactFlash

 PARAMETER HW_VER = 1.00.c

 PARAMETER C_MEM_WIDTH = 16

 PARAMETER C_BASEADDR = 0x41800000

 PARAMETER C_HIGHADDR = 0x4180ffff

 BUS_INTERFACE SOPB = mb_opb

 PORT SysACE_CLK = fpga_0_SysACE_CompactFlash_SysACE_CLK

 PORT SysACE_MPA = fpga_0_SysACE_CompactFlash_SysACE_MPA

 PORT SysACE_MPD = fpga_0_SysACE_CompactFlash_SysACE_MPD

 PORT SysACE_CEN = fpga_0_SysACE_CompactFlash_SysACE_CEN

 PORT SysACE_OEN = fpga_0_SysACE_CompactFlash_SysACE_OEN

 PORT SysACE_WEN = fpga_0_SysACE_CompactFlash_SysACE_WEN

 PORT SysACE_MPIRQ = fpga_0_SysACE_CompactFlash_SysACE_MPIRQ

END

 

BEGIN opb_gpio

 PARAMETER INSTANCE = LEDs_4Bit

 PARAMETER HW_VER = 3.01.b

 PARAMETER C_GPIO_WIDTH = 4

 PARAMETER C_IS_DUAL = 0

 PARAMETER C_IS_BIDIR = 0

 PARAMETER C_ALL_INPUTS = 0

 PARAMETER C_BASEADDR = 0x40020000

 PARAMETER C_HIGHADDR = 0x4002ffff

 BUS_INTERFACE SOPB = mb_opb

 PORT GPIO_IO = fpga_0_LEDs_4Bit_GPIO_IO

END

 

BEGIN opb_gpio

 PARAMETER INSTANCE = DIPSWs_4Bit

 PARAMETER HW_VER = 3.01.b

 PARAMETER C_GPIO_WIDTH = 4

 PARAMETER C_IS_DUAL = 0

 PARAMETER C_IS_BIDIR = 1

 PARAMETER C_ALL_INPUTS = 1

 PARAMETER C_BASEADDR = 0x40040000

 PARAMETER C_HIGHADDR = 0x4004ffff

 BUS_INTERFACE SOPB = mb_opb

 PORT GPIO_IO = fpga_0_DIPSWs_4Bit_GPIO_IO

END

 

BEGIN opb_gpio

 PARAMETER INSTANCE = PushButtons_5Bit

 PARAMETER HW_VER = 3.01.b

 PARAMETER C_GPIO_WIDTH = 5

 PARAMETER C_IS_DUAL = 0

 PARAMETER C_IS_BIDIR = 1

 PARAMETER C_ALL_INPUTS = 1

 PARAMETER C_BASEADDR = 0x40000000

 PARAMETER C_HIGHADDR = 0x4000ffff

 BUS_INTERFACE SOPB = mb_opb

 PORT GPIO_IO = fpga_0_PushButtons_5Bit_GPIO_IO

END

 

一般 | 静态链接网址 | 发表评论 | 引用 (0)

一步一步使用edk

nkbai | 04 七月, 2008 21:26

首先新建一个工程,选择第一项:

第二步,选择工程位置,注意只能是英文路径,中文路径工作不正常.:

 

选择如下开发板,前提是要把 复制到EDK制定的user目录下:

这里是C:\edk_user_repository\Memec_Design\boards\Xilinx_XUP_V2P\data.

 

接下来选择处理器:,这里选择Microblaze,注意一点就是Microblaze的图片必须是彩色的,否则可能会出错,如果图像是一团黑的话建议重新建一个工程.

然后处理器的主频只能是100M,这里可以选择总线频率,不要选调试,调试本身会占用一定资源,尤其是H/w debug module.如果该处理器要做比较多的浮点计算就选上FPU,

 

下一步选择外设,RS232用于调试,必选;如果需要DDR的话一定要这时选上,工程建成以后再配置DDR相当麻烦,不易成功.如果需要使用CF,需要选上SYSACE_compactflash,否则无法访问.

 

 

 

 

在生成工程时会选择标准输入输出设备以及两个测试工程样例:

如果两个测试工程都选的话后面会有各自的配置选项,主要是指令,数据的存放位置:

 

最后会生成报告,说明当前工程都配置了什么硬件.

一步一步使用edk

   

恭喜!

nkbai | 04 七月, 2008 21:06

如果你可以看到这篇文章,表示注册过程已经顺利完成。现在你可以开始blogging了!
 
Powered by LifeType - Design by BalearWeb