Simple MB Interrupt using GPIO
[
2007/12/14 11:32 | by RickySu ]
2007/12/14 11:32 | by RickySu ]
目标: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
ModelSim -novopt
[
2007/12/13 14:53 | by RickySu ]
2007/12/13 14:53 | by RickySu ]
ModelSim 6.2 以后默认给vsim, vcom, vlog都加了-vopt选项进行优化。但是算法可能还不是非常完美,经常把以前没问题的project弄得不能仿真。所以有时要给他加-novopt的选项禁止优化。
相关资料:
http://www.xilinx.com/support/answers/25311.htm
http://www.xilinx.com/support/answers/24293.htm
http://www.xilinx.com/support/answers/24776.htm
相关资料:
http://www.xilinx.com/support/answers/25311.htm
http://www.xilinx.com/support/answers/24293.htm
http://www.xilinx.com/support/answers/24776.htm
User IP 流程
[
2007/11/27 16:39 | by RickySu ]
2007/11/27 16:39 | by RickySu ]
在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. 写相应的软件和驱动
EDK - 板上没有RS232但是想用print怎么办
[
2007/11/26 17:40 | by RickySu ]
2007/11/26 17:40 | by RickySu ]
调试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/plat...
答案是可以用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/plat...
BFM Simgen找不到user logic
[
2007/11/22 11:48 | by RickySu ]
2007/11/22 11:48 | by RickySu ]
初试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







