




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、微型计算机系统接口技术实验 实验目标:PDIUSBD12FPGA实现usb接口,完成枚举和驱动程序并实现简单的应用。 实验内容:1 方案选择。接口协议芯片选择PDIUSBD12,控制器由FPGA实现,控制器的具体实现(1) 可以用VHDL语言编程实现状态机实现一个简单的针对d12的控制器。(2) 可以利用EDK提供的Microblaze核实现一个单片机作为控制器。对于第一种方法需要对VHDL语言比较熟悉,而且能够熟练应用集成开发环境的仿真功能;第二种方法需要熟悉C编程,并能够熟练应用EDK提供的各种IP包。项目开发流程。(1) 实现Microblaze核,并通过完成显示实验验证其可用性;(2)
2、 在(1)的硬件基础上利用EDK提供的EMC实现Microblaze与PDIUSBD12的控制接口;(3) 完成PDIUSBD12的固件开发从而完成枚举;实现底层数据通讯移植philips公司提供的firmwareMicroblaze中断的配置介绍XMD Debug的配置和使用(4) 结合(3)完成驱动程序的开发;(5) 实现一个简单的应用2 方案的具体实现。(1) 实现Microblaze核,并通过完成显示实验验证其可用性。 步骤概要:a. 在XPS中创建项目文件;b. 定义系统硬件;c. 定义软件设计: c1.设置驱动interface level; c2.完成源程序; c3.编译代码;
3、c4.Debug.(可选)d. 下载代码。具体步骤参照附件中mb_6.1.pdf的P13P36,实验用例在文件夹testled中,源程序参照testled/code/testled.c。我主要介绍一下针对我们这个实验需要进行的参数配置和实验的注意事项。参数配置:a. 定义系统硬件部分:Board Vendor:Memec Design Board Name:SpartanII300E LC Develop Board Board: 1 Select a processor:Microblaze Configure Processor:Processor Clock:100MhzDebug I/
4、F:XMD with S/W debug Local data and instruction Memory:8k Cache:disable Configure IO Interfaces:only choose LEDs_4Bit Add Internal Peripherals:no choiceb. 设置驱动interface level部分除了debug_module为0,其余均为1。c. data/system.usf:Net sys_clk PERIOD = 10000 ps; Net LED_4Bit_GPIO_IO LOC= P86; Net LED_4Bit_GPIO_IO
5、 LOC= P87; Net LED_4Bit_GPIO_IO LOC= P88; Net LED_4Bit_GPIO_IO LOC= P89; Net sys_clk LOC=P80;Net sys_rst LOC=P107;注意事项:a. 工程建好后,在Device package选项中要选择pq208不是fg456;b. 生成工程文件后(Export to Project),在Project Navigator中要先添加完.usf文件后再进行Generate Programming File,同时注意要在Generate Programming File属性窗口中将属性修改为JTAG C
6、lock(Generate Programming File-Properties-Startup Options-FPGA Start-Up Clock = JTAG Clock);c. 在Generate Programming File过程中若出现错误,注意看错误的提示信息,若是环境变量没有设置,可以在“我的电脑”-属性-高级-环境变量中设置相应的用户变量就可以了;如果是提示“Could not find net(s) XXXX in the design.”,则是因为你的.mhs文件中的PORT名与你的.ucf文件中的名字不一致,或者.ucf中的名字与XPS-Project-Add/E
7、dit Cores-Ports中的Net name不一致,只要修改一致便可;d. 如果你的代码所在文件夹如code独立于你的项目文件夹中的microblaze_0文件,那么在Generate Liberaries后要手工对code中的xparameters.h进行更新;e. 若代码不能正常下载可能是你没有修改etc文件夹中的download脚本(老师会提供一个可用版本),也可能是数据线有问题,拔下来重新插便可。如果小灯不亮,可能是你在执行Import from ProjNav时没有指向正确的.bit和.bmm文件;f. 在这个验证实验中,我们可以通过观察小灯显示的数值结合定义的.ucf文件判断
8、出FPGA的数据输出格式是高位在先的。(2) 在(1)的硬件基础上利用EDK提供的EMC实现Microblaze与PDIUSBD12的控制接口。EMC是外部存储器芯片控制器,支持sdram 和 flash,接口符合通用的存储器芯片的访问协议,我们把PDIUSBD12看作为一个存储器芯片,经过一定裁剪就可利用EMC实现Microblaze与PDIUSBD12之间的通信接口。模块的添加可以通过写.mhs文件,可以在.pbd文件中添加,也可以在XPS-Project-Add/Edit Cores里面添加。在这里我只简单介绍在.pbd中添加的方法,另两个方法请参考EDK_lab.pdf的P2b-64P
9、2b-85。a. 双击system.pbd在打开的窗口左侧components中选择opb_emc,将其添加到右侧窗口中的mb_opb总线上;b. 双击添加好的opb_emc模块,在出现的Object Properties对话框中 这几个填写项我分别介绍一下:Instance Name:opb_emc_0 实例名,我们可以根据需要任意修改;Hardware Version:1.10.b 硬件版本号,这个会涉及到EMC底层硬件的实现,选择默认;Base Address:0x High Address:0xff这些模块对于Microblaze来讲都属于外围设备,一般设备都有内部寄存器,因此就有一个
10、地址范围,在EDK里面规定必须要符合2x的范围才可以,例如不能出现这样的地址范围0x0x,所以即使我们用不了那么多的地址空间也必须要符合规定。这里我们把opb_emc_0的地址范围设为0x0xff,是因为opb_emc_0内部有一定数量的寄存器。最后这个窗口的参数填写成功后要点击一下Apply才能够记住,后面的设置也要注意这一点;c. 在Object Properties窗口中继续选择Parameters项,会出现各种EMC特有的参数,各种参数的具体含义见opb_emc.pdf的P2P5。想要修改其默认值的参数我们可以将其Add到右部窗口,我们添加的参数为:C_INCLUDE_DATAWIDT
11、H_MATCH0C_MAX_MEM_WIDTH8C_MEM0_WIDTH8C_READ_ADDR_TO_OUT_SLOW_PS_040000C_WRITE_MIN_PULSE_WIDTH_PS_040000C_WRITE_RECOVERY_BEFORE_READ_PS_0 40000C_MEM0_BASEADDR0xFFFFFF00C_MEM0_HIGHADDR0xFFFFFFFF特别说明:这里面添加的C_MEM0_BASEADDR和C_MEM0_HIGHADDR是外部存储器芯片占用的地址范围,之所以定义在后面是因为这些不同于模块的外围设备在EDK里面的地址分配是有一定规定的。Peripher
12、als0xFFFF_FFFF(终)OPB MemoryLMB Memory0x0000_0018(始)Interrupt Address0x0000_0010(始)Exception Address0x0000_0008(始)Reset Address0x0000_0000(始)d. 在Object Properties窗口中继续选择Ports项,这是EMC与外部存储器的接口,各个I/O signals的具体含义见opb_emc.pdf的P6P7。因为我们要访问的是特殊的“寄存器”PDIUSBD12,因此只需要选择下面几个端口: e. Apply后关掉窗口选择保存文件,然后检查XPS-Proj
13、ect-Add/Edit Cores中的内容是不是与我们已经设置的一致,尤其要注意的是Ports窗口中各项内容。Instance下面是我们创建的各种实例的名字,其中system实例是系统所有对外(FPGA与外部器件)接口的一个抽象实例,或许可以理解为FPGA;Port Name 是我们选择的各种实例的各个接口;Net Name 定义了各个接口之间的不同的物理连接关系,这个是我们定义.ucf文件内容的依据;Polarity 是端口属性;Scope 表明了此端口是对外(FPGA以外)的还是内部的(FPGA以内);Range 表明了端口位数,我们要将宏定义修改为整数,比如将0:C_MAX_MEM_W
14、IDTH-1改为0:7,否则会在Generate Netlist时出错,当然也可以在.mhs或者.pbd文件中修改;f. 按照需要在.ucf中定义各个端口:Net sys_clk PERIOD = 10000 ps;Net sys_clk LOC=P80;Net sys_rst LOC=P107;Net LED_4Bit_GPIO_IO LOC=P86;/P148Net LED_4Bit_GPIO_IO LOC=P150;/P87; RESET#=1Net LED_4Bit_GPIO_IO LOC=P151;/P88; ALE=0Net LED_4Bit_GPIO_IO LOC=P164;/P
15、89; SUSPEND=0Net Mem_CEN LOC=P148;/CS#Net Mem_QWEN LOC=P162;/WD#Net Mem_A LOC=P83;/0xffffff0f 0xffffff8f A0Net Mem_OEN LOC=P163;/RD#Net Mem_DQ LOC=P165; /Mem_DQ7-0:d12_D0-D7Net Mem_DQ LOC=P166;Net Mem_DQ LOC=P167;Net Mem_DQ LOC=P168;Net Mem_DQ LOC=P169;Net Mem_DQ LOC=P173;Net Mem_DQ LOC=P174;Net Mem
16、_DQ LOC=P175; /emcs data is MSB in the frontNet LED_8_BITS_GPIO_IO LOC=P154;/PBD0Net LED_8_BITS_GPIO_IO LOC=P145;Net LED_8_BITS_GPIO_IO LOC=P141;Net LED_8_BITS_GPIO_IO LOC=P135;Net LED_8_BITS_GPIO_IO LOC=P126;Net LED_8_BITS_GPIO_IO LOC=P120;Net LED_8_BITS_GPIO_IO LOC=P116;Net LED_8_BITS_GPIO_IO LOC=
17、P108;/PBD7特别说明:a. 因为PDIUSBD12的RESET、ALE 和SUSPEND我们不希望它们有效所以选择用GPIO口与它们相连接,直接将它们设为非使能状态; b. EMC的数据输出格式是高位在先,所以为了与PDIUSBD12能够进行正确的数据传输,必须将EMC的Mem_DQ的高低位与PDIUSBD12的高低位反接; c. 我们的地址线设定了32位,因为地址范围设定的是0xffffff000xffffffff,所以只有地址输出的高8位对我们有用,而PDIUSBD12只需要一位地址线,因此我们选择Mem_A与PDIUSBD12的A0相接,那么对应的地址就可以理解为0xffffff
18、0f和0xffffff8f,当然只要保证第24位有变化,其它位的变化在不超出整个地址范围的情况下可以任意制定,如0xffff7f和0xffff80这一对也可以; d. LED_8_BITS是我们为了测试而添加的一个模块,方法可以采用在.pbd文件中复制一个LED_4Bit然后将C_GPIO_WIDTH改为8。 g. 再依次完成Generate Netlist,Export to ProjNav, Generate Programming File,Import from ProjNav,Generate Liberaries各步,这个新添加的硬件模块就OK了。h. 对新添加的模块进行可靠性测试
19、,测试的工程项目位于testemc文件夹,程序见testemc/code/testemc.c,如果测试通过就证明EMC和LED_8BIT都添加成功了。注意事项:a.注意不同模块的地址空间不能冲突,否则在Generate Programming File时会出错,要注意opb_emc的地址范围和opb_emc内部参数C_MEMX的地址范围是不同的两个概念,前者属于OPB Memory空间,后者属于Peripherals空间; b.mhs文件、.pbd文件以及在XPS-Project-Add/Edit Cores中的修改是等价的,修改其中的一个都会同时修改了另两个的内容; c. 在opb_emc_
20、0的Peripheral Options的Driver Configuration里面将Device设置为emc,同时新添加模块后在Generate Liberaries前不要忘记指定interface level,这里的opb_emc和LED_8BITS的interface level都是1。(3) 进行PDIUSBD12的固件开发并完成枚举。实现底层数据通讯,即能够完成对PDIUSBD12的简单读写。EMC的读写时序与D12的读写时序并不是完全匹配的,同样对于特定的存储器芯片EMC的缺省读写时序也不一定符合,这也是在EMC属性里面提供各种时序参数设置的原因。为了实现EMC和D12时序的匹配
21、,我们按照下面的过程进行实验(测试工程项目文件为testd12文件夹):a. 首先确定EMC的输出时序的情况,用示波器测试EMC的QWEN输出,即D12的WD#脚,仔细观测示波器中波形,记下一个写周期时间(Twc)和有效写脉宽长度(Twl)(即WD#为低时脉宽)两个参数;用示波器的另一个探头接入D12的CS#,记下CS#为低到WD#为低时间(Tclwl)和WD#为高到CS#为高时间(Twhch)两个参数;将测量CS#的探头改接D12的A0,再记下A0有效到WD#为低时间(Tavwl)和WD#为高到A0转换时间(Twhrx)两个参数;将测量A0的探头改接一个在写周期内会变化的D12的数据位(设为
22、DQ_X),记下写数据建立时间即DQ_X有效到WD#为高的时间(Twdsu)和写数据保持时间即WD#为高到DQ_X无效的时间(Twdh)(程序为testd12/code/testd12write);b. 将记下的这些参数与PDIUSBD12器件指南.pdf中的D12并行接口时序进行比较,并根据AC特性表中的的各个最小值进行比较,如果不符合则需要调整opb_emc的对象属性中的时间参数。比如表中规定Twl不能小于20ns,如果我们实测的EMC的Twl小于这个值,就要修改C_WRITE_MIN_PULSE_WIDTH_PS_0使其符合要求。一般情况下,EMC中信号之间的时序关系(如Tclwl)与D
23、12是符合的,而单独的信号时序(如Twc)是需要调整的。当我们调整了某个单独信号的时序,和它有时序关系的其它信号的宽度也会发生相应的变化,从而保持了它们之间的相对时序关系,比如我们不用担心提高Twc会使Twhch变成负值。c. 接下来我们就需要验证写入D12内部的数据是否正确了,通过D12的设置模式命令设置SoftConnect和时钟分频数,查看主机是否出现未知设备符号或者示波器中D12的时钟输出都可以判断出对D12的写操作是否正确。d. 同样的方法,记录下与读有关的时序参数Trc,Trl,Tclrl,Trhch,Tavrl,Trldd(RD#低到数据驱动时间),Trhdz(RD#高到数据高阻
24、时间),进行类似写命令的读操作的建立并验证读操作的可靠性(推荐写DMA与读DMA的操作来验证)。从而完成底层数据通讯(程序为testd12/code/testd12read);e. 最后将读写一起测试一遍,程序见testd12/code/testd12_rw。注意事项:a. 时序关系的测定要耐心和认真,为了能够在示波器中捕捉到时序关系,程序中要使用循环,为了确保能够满足D12的时序关系,可以适当的调大一些EMC的时间参数;b. 在程序刚开始时若发现不使用无限循环时无法正确的完成读写操作,那是因为起始时EMC的各个端口输出信号有不确定的情况,我们可以在进行第一次读写操作前适当延时,这样以后都可以
25、正确读写了;c. 因为测试时我们使用的读写命令只有几条,这实际上并不能确保进行大量连续的读写操作时也能够正确,我们在实验中发现,如果连续读写操作间隔的时间不够就会出现错误,毕竟FPGA的工作频率要远快于D12,所以我们后来又在底层的读写操作中添加了额外的延时;d. 我们设定的EMC的端口中,可能存在某个端口没有正常工作,比如我们在开始时读操作不能正常完成,发现是EMC的OEN输出信号不对,出现这种情况时可以考虑将这个端口重做一遍;移植philips公司提供的firmware。这里主要考虑枚举部分的移植。枚举分为以下几步:第一次读设备描述符,分配地址,第二次读设备描述符,读配置描述符,读描述符集
26、合以及设置配置,后面的读配置和读接口状态是可选项。具体实现的流程参考PDIUSBD12固件编程指南.pdf,我们在这里只介绍针对我们的硬件平台所需要做的一些移植工作以及注意事项。移植工作:a.首先需要修改的就是EPPHAL.H中的数据与命令地址,针对我们的设计将其改为#define D12_COMMAND0xffffff8f /command#define D12_DATA0xffffff0f /datab.其次为了便于调试缩减源代码,将无用的头文件引用,打印命令和宏定义等去掉;c.在调试过程中发现FPGA的存储数据由于对齐的原因,CODE区的内容如各个描述符之间以及描述符内部的数据在物理上并
27、不是连续的,而原来的程序在描述符发送过程中要求这些数据都必须是物理上连续的,可以采用修改描述符数据结构的方法如将变量都定义为unsigned char类型或者将要发送的数据预先写到一个缓冲区中再发出去的方法。这个问题主要出现在CHAP_9.C中的读取配置描述符部分,相应的数据结构定义在USB100.H,相应的数据结构实例在CHAP_9.C;d.因为FPGA的速度快于普通单片机,所以为了是数据能够可靠的传输,要在原来EPPHAL.C中的outportb和inportb函数中加入延时;e.我们使用的是查询D12中断寄存器的方式来完成枚举过程的,所以在MAINLOOP.C里加入了查询中断寄存器的命令
28、,并在中断处理程序fn_usb_isr中将读中断寄存器改为传递一个包含中断寄存器内容的参数;注意事项:a. 我们的程序中出现执行移位操作程序跑丢的问题,进而导致无法进行换位操作(SWAP)只能修改DEVICE_REQUEST的数据结构,将里面的变量全部改为unsigned char类型;b. 当枚举过程没有顺利完成时,主机就会重新复位总线开始新一轮枚举尝试,最多3次,然后挂起;c. 枚举过程中完成读取描述符集合后,主机就会显示USB设备图标,然后要求安装驱动程序,当驱动程序成功安装后接下来的设备配置才能成功,这时Goodlink LED就会一直亮表示枚举成功。Microblaze中断的配置。我
29、们在最初枚举失败时没有意识到底层数据通讯的不可靠导致了不成功,而是怀疑因为采用了查询方式可能遗漏了中断信号,于是便考虑采用中断的模式再尝试一次。具体的Microblaze中断管理机制请参考est_guide.pdf的Microblaze Interrupt Management部分,我们在这里主要介绍如何完成一个中断控制器的添加,为了配合中断的测试我们还将引入一个定时器,硬件平台是前面的工程项目testled。a. 在XPS中打开.pbd文件添加opb_intc和opb_timer两个component到mb_opb总线,设置参数如下:opb_timer:Instance Name:delay
30、 Base Address: 0x High Address:0xff Parameters:C_COUNT_WIDTH32 C_GEN0_ASSERT 1 C_ONE_TIMER_ONLY0 C_TRIG0_ASSERT1 Ports: CaptureTrig0Internalnet_gnd InterruptInternaltimer1 OPB_ClockInternalsys_clk_sopb_intc:Instance Name:opb_intc_0 Base Address: 0x High Address:0xff Parameters: no choice Ports:IrqIn
31、ternalinterrupt IntrInternaltimer1 OPB_ClkInternalsys_clk_sMicroblaze:添加 Ports: INTERRUPTInternalinterruptb. data/system.usf:Net sys_clk PERIOD = 10000 ps; Net LED_4Bit_GPIO_IO LOC= P86; Net LED_4Bit_GPIO_IO LOC= P87; Net LED_4Bit_GPIO_IO LOC= P88; Net LED_4Bit_GPIO_IO LOC= P89; Net sys_clk LOC=P80;Net sys_rst LOC=P107;特别说明:a. 我们的参数设定建立的硬件上的关系是opb_timer的中断输出Interrupt接入opb_intc的中断输入Intr,o
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学前教育音乐开学第一课:乘着音乐的翅膀
- 剃须刀包装设计核心要素
- 2025订购电动车合同模板
- 病毒的作用与防治课件
- 2025居民房屋租赁合同
- 创意绘画《献给祖国妈妈的花篮》课件
- 幼儿园全民安全日教育教案
- 2025城乡劳动者短期务工合同范本下载
- 2024-2025春统编版道德与法治二年级下册第二单元《7 我们有新玩法》说课稿(二篇)
- 儿童护理培训
- 5G-Advanced通感融合仿真评估方法研究报告
- DB33 860-2012 危险化学品重大危险源安全监控管理规范
- 隐蔽工程影像资料采集要求和拍摄方法(网络版)
- DB37T 1913-2011 金属非金属地下矿山特种作业人员配置
- 2025年日历(日程安排-可直接打印)
- 大单元教学学历案4 《现代诗二首》(略读实践课) 统编版语文四年级上册
- 3.1 农业区位因素及其变化-看《种地吧》思考 课件 高一下学期 地理 人教版(2019)必修二
- 《保护板培训教材》课件
- 绿色医疗器械设计
- 用电协议书范文双方简单一致
- DB11T 2155-2023 建设工程消防验收现场检查评定规程
评论
0/150
提交评论