在LINUX 下使用XILINX, ModelSim 以及如何设定PCMCIA转串口卡
Dnirta
|
1#
Dnirta 发表于 2008-03-25 00:13
在LINUX 下使用XILINX, ModelSim 以及如何设定PCMCIA转串口卡
这篇文档主要是基于gentoo-wiki中如何使用XILINX这部分的,我做了一点点修改,以便适用于amd64的架构,要求gentoo配置是multilib的,因为最新版本的ise 9.2i webpack只有32位的版本,没有提供64位的支持
1.如何让你的ISE运行起来 1.1关于tcl,由于我的机子上没有安装TCL,也就免去了设定TCL这一步。一般大型EDA程序中都集成了tcl外壳。 1.2GLIBC 在这一步分,没有去按照网站所描述的去做,在gentoo-wiki中提供了两种方法,第一中要重新编译很多东西,第二中按照所描述的没能成功运行ise。现在使用中还没有出现新窗口不能显示的情况,因而对于最新的ISE 9.2i,这一步可以安全的略去。 1.3处理链接库,主要是对于openmotif而言的(要求首先要将openmotif升至2.3.0) cd /usr/lib/openmotif-2.3/ ln -s libXm.so.4 libXm.so.3 ln -s libXm.so.4.0.0 libXm.so.3.0.0 ln -s libXm.so.4 ../libXm.so.3 ln -s libXm.so.4.0.0 ../libXm.so.3.0.0 2.安装 这里我们按照教程中的描述来做 xhost + #as the regular user, to let root use the X display su #must be root to install export DISPLAY=:0 #install script needs this? 没错,对于ise来说,这一步很关键 然后进入目录中,运行安装文件就行了,有两点注意: 2.1建议安装到/opt目录下 2.2对于缺少windrv的错误可以忽略,因为后面有更好的解决办法 3.运行 wiki中建议的方法是 cp /opt/Xilinx92i/settings.sh /usr/local/bin/startise echo "export DISPLAY=:0" >> /usr/local/bin/startise #note 1 echo "exec ise" >> /usr/local/bin/startise chmod +x /usr/local/bin/startise 但是注意到在最新的ise中,没有对于amd64的支持,一定要在settings.sh中要将x86_64条件下的PLATFORM变量改为lin才行。而对于gentoo的配置,我们有更好的办法: 在/etc/env.d中创建83ise文件 PLAT="lin" XILINX="/opt/Xilinx92i" LMC_HOME="${XILINX}/smartmodel/${PLAT}/installed_${PLAT}:${LMC_HOME}" PATH="/opt/Xilinx92i/bin/lin" LD_LIBRARY_PATH="${XILINX}/bin/${PLAT}:${LD_LIBRARY_PATH}" NPX_PLUGIN_PATH="${XILINX}/java/${PLAT}/jre/plugin/i386/ns4:${NPX_PLUGIN_PATH}" 注意到,这些变量都是对于settings.sh中提取出来的,但是由于ISE只有32位版本,因而通用性还不错。这个设置文件是通用的。 然后在/usr/local/bin中创建ise的启动文件startise #!/bin/bash export DISPLAY=:0 export LD_PRELOAD=/opt/usb-driver/libusb-driver.so exec ise & 注意:如果你的烧录使用的是impact脚本方式 impact -batch impact.bat 的话,一定要在前面加上 export LD_PRELOAD=/opt/usb-driver/libusb-driver.so 这样ise就能顺利的运行,以及完成器件的配置了。 4.安装线缆支持 在wiki中提供了3中方法供选择,分别是: 内核模块 开源的烧录程序 用户级的线缆驱动程序 在amd64环境下,第3种办法是最好的。第一中方法,在原文中提到,xilinx可能考虑会提供驱动的代码,但是在那之前,每次更改都要求重新编译内核。同时在我的机子64环境上,对于驱动程序的编译总是不能顺利的完成,我尽可能在之后将这一部分搞定,那时再对本文进行更新。对于第二中方法,只能期待xup会做的更好,但在ise webpack的推出以及对于开放驱动代码的期待下,只能暂时搁置起来。这里重点介绍第三中办法,速度快而且对于64位支持良好!: 名字是usb-driver,但是广义上来说,对于各种烧录方式都是支持的,我只是在spartan III starter kit中测试了usb借口的jtag烧录方式,可以正确运行。 首先安装一些必要的包: su # root must emerge, install and change the config files. emerge libusb #install the generic user-mode usb library emerge fxload #install the generic USB firmware loader 之后是下载编译usb-driver: mkdir cd wget http://cvs.zerfleddert.de/cgi-bi ... ver.tar.gz?view=tar tar xzvf usb-driver* cd usb-driver more README # read this. It has better instructions for the steps after the make make mkdir /opt/usb-driver #or other directory of your choice mv *.so /opt/usb-driver 之后就可以编辑ise启动脚本文件 nano /usr/local/bin/startise 将下面这行加上 export LD_PRELOAD=/opt/usb-driver/libusb-driver.so 当然,如果你是按照前面一步一步来做的,这个内容已经在ISE启动脚本上了。 注意: 在amd64环境下,编译出来的连接文件是64位的,在实际使用中会出现错误,这里我采用的是下面这个办法: 下载一个32位的libusb-0.1-4_0.1.12-9_i386.deb,从debian网站上可以下载到,然后 emerge -v deb2targz 安装这个工具,解压,将里面的libusb-0.1.4_0.1.12.9.so改名为libusb.so,放在/lib32下面,之后,在上面的make这步,我们改成 make lib32 编译出32为的动态连接文件。之后按照上面介绍的的来,就可以了。 5.安装modelsim 从hit的ftp上下载来,解压modelsim-linux_x86_64.exe.gz以及其他的tar.gz文件到同一个文件夹就可以了,安装比较简单:) 然后是生成license.dat文件,要用到同时下载的keygen.exe文件。这里要注意,理论上来说是可以在linux下用wine生成的,但是wine生成的license.dat中没有host-id,解决办法就是发送到邮箱中,采用在windows环境中生成的license.dat。谁有更好的解决办法,可以给我说下:) 环境变量的设定: 在/etc/env.d中创建82modelsim文件 LM_LICENSE_FILE="/personal/modelsim/modeltech/license.dat" PATH="/personal/modelsim/modeltech/linux_x86_64" 6.PCMCIA转串口器件的使用 这个东西折腾了我两个多小时才搞定,下面介绍可以使用的解决办法: 首先要对内核中的serial串口驱动程序做一点修改,在我使用的内核版本:2.6.23中还没有提交这个补丁,具体的修改办法如下:diff文件很容易看懂的,可以自己手动修改:) diff -ru linux-2.6.16-orig/drivers/serial/8250_pci.c linux-2.6.16/drivers/serial/8250_pci.c --- linux-2.6.16-orig/drivers/serial/8250_pci.c 2006-03-23 13:32:17.000000000 +0200 +++ linux-2.6.16/drivers/serial/8250_pci.c 2006-03-23 13:39:08.000000000 +0200 @@ -2045,6 +2045,9 @@ { PCI_VENDOR_ID_OXSEMI, 0x950a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b0_2_1130000 }, + { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_CB950, + PCI_ANY_ID, PCI_ANY_ID, 0, 0, + pbn_b0_1_115200 }, { PCI_VENDOR_ID_OXSEMI, PCI_DEVICE_ID_OXSEMI_16PCI954, PCI_ANY_ID, PCI_ANY_ID, 0, 0, pbn_b0_4_115200 }, diff -ru linux-2.6.16-orig/include/linux/pci_ids.h linux-2.6.16/include/linux/pci_ids.h --- linux-2.6.16-orig/include/linux/pci_ids.h 2006-03-23 13:32:24.000000000 +0200 +++ linux-2.6.16/include/linux/pci_ids.h 2006-03-23 13:40:32.000000000 +0200 @@ -1808,6 +1808,7 @@ #define PCI_VENDOR_ID_OXSEMI 0x1415 #define PCI_DEVICE_ID_OXSEMI_12PCI840 0x8403 #define PCI_DEVICE_ID_OXSEMI_16PCI954 0x9501 +#define PCI_DEVICE_ID_OXSEMI_CB950 0x950B /* OXCB950 Cardbus 16950 UART */ #define PCI_DEVICE_ID_OXSEMI_16PCI95N 0x9511 #define PCI_DEVICE_ID_OXSEMI_16PCI954PP 0x9513 #define PCI_DEVICE_ID_OXSEMI_16PCI952 0x9521 之后重新编译内核,将pcmcia驱动下面的选项全部选中。 然后可以查看相关的信息,我的lspci -v以及dmesg | grep tty如下 03:00.0 Serial controller: Oxford Semiconductor Ltd OXCB950 Cardbus 16950 UART (prog-if 06 [16950]) Subsystem: Oxford Semiconductor Ltd Unknown device 0001 Flags: medium devsel, IRQ 20 I/O ports at 1010 Memory at 58000000 (32-bit, non-prefetchable) [size=4K] I/O ports at 1000 Memory at 58001000 (32-bit, non-prefetchable) [size=4K] Memory at 58002000 (32-bit, non-prefetchable) [size=4K] Capabilities: [40] Power Management version 1 ttyS0: detected caps 00000700 should be 00000100 0000:03:00.0: ttyS0 at I/O 0x1010 (irq = 20) is a 16C950/954 setserial sets custom speed on ttyS0. This is deprecated. 如果看到dmesg中只要生成了/dev/ttyS*,那么你的PCMCIA转串口卡基本上就可以正常使用了。 但是针对OXFORD CB950这个芯片的串口卡,还要设定一些额外的(很奇怪的)东西: 首先使用下面的命令修改串口 #!/bin/bash setserial /dev/ttyS0 spd_cust divisor 104 然后根据linux-serial论坛上的说明,该芯片的比特率需要做修正,在Xilinx Spartan III 的板子中的教程使用的是9600的波特率,在minicom中要设定针对该PCMCIA转串口芯片(CBP950),进行特定的设定: minicom -s 在port设定中,波特率要(一定要)*选择*为38400,其他的参数依照要求进行设定,这样才能保证该串口卡是以9600进行通信。之后就可以正常的使用该PCMCIA转串口,调试Xilinx板子了。 对于minicom的使用可以查看minicom的教程,这里就不详细叙述。 |