网站重新上线,多谢朋友们的关心
Dec
17
如果Custom IP中有一端口要做成双向的该怎么做?
直接在User Logic中写成inout的话在重新import的时候会认不出来这个port。
答案是定义三个端口:IO_I, IO_O, IO_T。这样CIP Wizard就能认出这个端口是inout的了。
参考资料:
psf_rm.pdf --> MPD --> Design Considerations
直接在User Logic中写成inout的话在重新import的时候会认不出来这个port。
答案是定义三个端口:IO_I, IO_O, IO_T。这样CIP Wizard就能认出这个端口是inout的了。
参考资料:
psf_rm.pdf --> MPD --> Design Considerations
Dec
14
目标:GPIO - Button 产生Interrupt。Interrupt处理函数中点亮LED
HW:Spartan 3E BSB + Button + LED + UART
手工添加OPB_INTC 1.00.c
连接Button - Interrupt Port到OPB_INTC - Intr Port
连接OPB_INTC - IRQ Port到 MicroBlaze - Interrupt Port
SW:
注:
如果在MSS文件中给peripheral driver添加int_handler parameter,就可以不需要在主程序内register ISR handler了。这个过程中要注意int_port的name是peripheral的pin name,不是signal name。
参考资料:
est_rm.pdf - Appendix B: Interrupt Management
Xapp778
GPIO Datasheet
psf_rm.pdf - Char 6 MSS - INT_HANDLER
附件包含MHS, MSS, BSB, int1.c, xparameters.h
HW:Spartan 3E BSB + Button + LED + UART
手工添加OPB_INTC 1.00.c
连接Button - Interrupt Port到OPB_INTC - Intr Port
连接OPB_INTC - IRQ Port到 MicroBlaze - Interrupt Port
SW:
引用
Main:
1. Initialize LED, set LED direction
2. Initialize Button, set Button direction
3. Start interrupt controller
4. Enable button interrupt
5. Enable MicroBlaze interrupt
6. Register button ISR handler
button_int_handler:
1. Read GPIO_ISR
2. If GPIO_ISR = 1, read button status and set LED status
3. Clear interrupt
1. Initialize LED, set LED direction
2. Initialize Button, set Button direction
3. Start interrupt controller
4. Enable button interrupt
5. Enable MicroBlaze interrupt
6. Register button ISR handler
button_int_handler:
1. Read GPIO_ISR
2. If GPIO_ISR = 1, read button status and set LED status
3. Clear interrupt
注:
如果在MSS文件中给peripheral driver添加int_handler parameter,就可以不需要在主程序内register ISR handler了。这个过程中要注意int_port的name是peripheral的pin name,不是signal name。
引用
BEGIN DRIVER
PARAMETER DRIVER_NAME = gpio
PARAMETER DRIVER_VER = 2.01.a
PARAMETER HW_INSTANCE = Buttons_4Bit
PARAMETER int_handler = button_int_handler, int_port = IP2INTC_IRPT
END
PARAMETER DRIVER_NAME = gpio
PARAMETER DRIVER_VER = 2.01.a
PARAMETER HW_INSTANCE = Buttons_4Bit
PARAMETER int_handler = button_int_handler, int_port = IP2INTC_IRPT
END
参考资料:
est_rm.pdf - Appendix B: Interrupt Management
Xapp778
GPIO Datasheet
psf_rm.pdf - Char 6 MSS - INT_HANDLER
附件包含MHS, MSS, BSB, int1.c, xparameters.h
Nov
27
在EDK添加User IP主要通过IPIF Wizard。它可以帮助生成User IP模板和PLB/OPB Bus接口,使得User IP开发变得很容易。
创建UserIP流程主要分为以下几步:
1. 用IPIF Wizard创建Template
-- 只要用鼠标点几下就可以了,很方便
-- 让Wizard创建ISE Project能比较方便地修改UserIP功能
2. 修改代码,添加用户功能
-- 修改user_logic.vhd和ip_name.vhd,添加用户功能,添加外部port
-- 如有有外部接口,添加到MPD文件中。
-- 如果调用其他文件,修改PAO文件。(或者在后续的导入过程使用XST的prj文件)
3. 将完成的UserIP导入
-- 不是所有情况都需要导入,只有在修改了port, parameter属性等Import可以修改的属性时才需要重新import。
4. 连接UserIP
-- 连接Bus, Port,分配Address
-- 为External Port添加UCF LOC
5. 写相应的软件和驱动
创建UserIP流程主要分为以下几步:
1. 用IPIF Wizard创建Template
-- 只要用鼠标点几下就可以了,很方便
-- 让Wizard创建ISE Project能比较方便地修改UserIP功能
2. 修改代码,添加用户功能
-- 修改user_logic.vhd和ip_name.vhd,添加用户功能,添加外部port
-- 如有有外部接口,添加到MPD文件中。
-- 如果调用其他文件,修改PAO文件。(或者在后续的导入过程使用XST的prj文件)
3. 将完成的UserIP导入
-- 不是所有情况都需要导入,只有在修改了port, parameter属性等Import可以修改的属性时才需要重新import。
4. 连接UserIP
-- 连接Bus, Port,分配Address
-- 为External Port添加UCF LOC
5. 写相应的软件和驱动
Nov
26
调试EDK的工程一般STDIN/STDOUT必不可少。通常STDIN/STDOUT都是定向到RS232上去的。要是没有RS232该怎么办呢?
答案是可以用JTAG Terminal。
只要Project里有MDM,就可以将RS232定向到一个叫debug_module的模块上。这个Debug Module其实就是XMD。
要打开XMD的该功能,首先下载bitstream,打开XMD连接PPC/MB,dow elf,然后在XMD输入Terminal。Terminal会调用TeraTerm,这样就可以看到Print函数的输出了。如果不想用TeraTerm,也可以让XMD做一个Termianl转发服务器,它可以把数据通过TCP转发出去,这样用windows自带的超级终端也可以收到消息了。
命令行为:
terminal [-jtag_uart_server [port no]]
在MicroBlaze系统中,只要选择用H/W模式debug,MDM就会被默认加上;在PowerPC系统中,默认不会有MDM,但是如果系统已经有OPB总线,还是可以很方便地添加MDM UART的。具体方法是用Debug Configuration中的JTAG UART自动添加功能。
注意:
如果手动添加的MDM模块,需要手动连接OPB总线,并将IP设置为UART FIFO = 8。
参考资料:
Embedded System Toos Reference Manual -- XMD
MDM Datasheet
http://toolbox.xilinx.com/docsan/xilinx9/help/platform_studio/html/ps_p_dbw_using_debug_config_wizard.htm
答案是可以用JTAG Terminal。
只要Project里有MDM,就可以将RS232定向到一个叫debug_module的模块上。这个Debug Module其实就是XMD。
要打开XMD的该功能,首先下载bitstream,打开XMD连接PPC/MB,dow elf,然后在XMD输入Terminal。Terminal会调用TeraTerm,这样就可以看到Print函数的输出了。如果不想用TeraTerm,也可以让XMD做一个Termianl转发服务器,它可以把数据通过TCP转发出去,这样用windows自带的超级终端也可以收到消息了。
命令行为:
terminal [-jtag_uart_server [port no]]
在MicroBlaze系统中,只要选择用H/W模式debug,MDM就会被默认加上;在PowerPC系统中,默认不会有MDM,但是如果系统已经有OPB总线,还是可以很方便地添加MDM UART的。具体方法是用Debug Configuration中的JTAG UART自动添加功能。
注意:
如果手动添加的MDM模块,需要手动连接OPB总线,并将IP设置为UART FIFO = 8。
参考资料:
Embedded System Toos Reference Manual -- XMD
MDM Datasheet
http://toolbox.xilinx.com/docsan/xilinx9/help/platform_studio/html/ps_p_dbw_using_debug_config_wizard.htm
Nov
22
初试BFM。
用CIP新建IP到Project,自动生成BFM工程。
打开bfmsim下的工程,Simgen,报错:
把主project的vhd copy到这个project也不能解决问题。
Solution1: 用CIP时,不要将IP建到project下,而是用上面一个选项:To an EDK user repository。
将IP建到repository中,Simgen就能找到IP了,接下去仿真也没有问题。
Solution2: 在EDK --> Edit --> Preference --> Golbal Peripheral Repository中设置一个Golbal Repository,把新建的IP目录拷贝到Golbal Repository目录中去。
Repository的目录结构为:
用CIP新建IP到Project,自动生成BFM工程。
打开bfmsim下的工程,Simgen,报错:
引用
Generating simulator compile script ...
ERROR:MDT - File not found in any repository
'test_ip2_v1_00_a/hdl/vhdl/user_logic.vhd'
ERROR:MDT - File not found in any repository
'test_ip2_v1_00_a/hdl/vhdl/test_ip2.vhd'
ERROR:MDT - File not found in any repository
'test_ip2_v1_00_a/hdl/vhdl/user_logic.vhd'
ERROR:MDT - File not found in any repository
'test_ip2_v1_00_a/hdl/vhdl/test_ip2.vhd'
把主project的vhd copy到这个project也不能解决问题。
Solution1: 用CIP时,不要将IP建到project下,而是用上面一个选项:To an EDK user repository。
将IP建到repository中,Simgen就能找到IP了,接下去仿真也没有问题。
Solution2: 在EDK --> Edit --> Preference --> Golbal Peripheral Repository中设置一个Golbal Repository,把新建的IP目录拷贝到Golbal Repository目录中去。
Repository的目录结构为:
引用
EDK_REPOSITORY directory
└─MyProcessorIPLib
├─pcores
│ └─test_ip_v1_00_a
└─drivers
└─MyProcessorIPLib
├─pcores
│ └─test_ip_v1_00_a
└─drivers









