13.8样机的调试办法和技巧
不管是杂乱的电子体系仍是简略的电路,样机的调试都是有一些根本进程的。关于本事例的信号收集设备相同如此。
最早进行的便是电源体系的调试,包括是否有短路、断路,是否有虚焊,各电压体系是否正常,电源模块输出电流是否满足驱动负载等。只要电源体系正常作业,才干谈得上完结体系功用。
完结了电源体系的调试后,PCI信号收集卡的下一个作业便是对PCI954进行装备。用户可以经过编程器或许PLXMon东西在线进行烧写。这个装备进程确保主机操作体系可以辨认出硬件设备。
主机可以正确地辨认硬件设备后,需求进行设备驱动程序的装置。
经过上述进程,主机现已可以正确地辨认设备,并为用户供给了可供操作的API接口。接下来要做的调试作业便是硬件工程师要完结的FPGA逻辑规划和软件工程师要完结的运用软件规划。但这两部分并不能肯定分隔进行规划,由于不管是对设备的I/O操作仍是DMA操作都需求进行地址空间映射,因而都需求在软件和硬件进步行相应的规划。
在本体系的FPGA调试和软件联调中,咱们运用了两个简略的例子来验证体系是否可以正常的作业。一个是直接用FPGA操控的跑马灯实例,另一个是经过运用软件操控的跑马灯实例。
13.8.1没有PCI操控的跑马灯
本实例仅用FPGA内部逻辑对LED进行操控,完结跑马灯。经过本实例可以查验FPGA的两种装备形式是否正常作业,一起可以学习运用QuartusII软件开发和装备FPGA的流程。
如图13.23是本实例的体系框图。
图13.23跑马灯体系框图
其间计数分频器是经过计数器将晶振的40MHz时钟进行分频,发生的低频时钟作为LED状况机的操控时钟。LED状况机运用4个状况别离表明4个LED的亮灭,状况转化经过状况机的时钟上升沿触发,完结跑马灯。
下面是这个实例FPGA内的首要Verilog源代码。
//–计数分频————————————-
always@(posedgeclkin)
count=count+1; //分频计数器
assignclk=count[24]; //状况机时钟
//–LED操控——————————–
always@(posedgeclk)begin
case(state)//跑马灯状况操控量
2d0: led=4b0001; //D1亮
2d1: led=4b0010; //D2亮
2d2: led=4b0100; //D3亮
2d3: led=4b1000; //D4亮
endcase
state=state+1;//跑马灯状况改变
end
13.8.2根据PCI操控的跑马灯
本实例运用运用程序经过PCI总线(PCI9054)来对FPGA内部逻辑参数进行装备,完结对LED的操控。经过本实例可以查验开发板的驱动以及PCI的实时操控,一起学习运用程序和PCI9054进行通讯的办法。
如图13.24所示为本实例的体系框图。
图13.24根据PCI操控的跑马灯体系框图
其间PCI本地操控器完结与PCI9054的接口通讯,获取LED操控运用程序宣布的触发信号。LED操控器包括LED状况机并承受PCI本地操控器的触发信号,经过判别LED触发的类型决议发动单个LED操控或LED状况机。
下面是这个典范FPGA内的首要Verilog源代码。
//–计数分频————————————-
always@(posedgeclkin)
count=count+1; //分频计数器
assignclk=count[24]; //状况机时钟
//–LED操控——————————–
always@(posedgeclk)begin
case(LEDByControl) //状况操控量
8d1: led=4b0001; //PCI操控D1亮
8d2: led=4b0010; //PCI操控D2亮
8d3: led=4b0100; //PCI操控D3亮
8d4: led=4b1000; //PCI操控D4亮
8d5: case(state) //跑马灯状况操控量
2b00: led=4b0001; //跑马灯D1亮
2b01: led=4b0010; //跑马灯D2亮
2b10: led=4b0100; //跑马灯D3亮
2b11: led=4b1000; //跑马灯D4亮
endcase
default:led=4b0000; //跑马灯全灭
endcase
state=state+1; //跑马灯状况改变
end
//–PCI本地操控器——————————-
always@(posedgeclkin)
lholda=lhold; //PCI本地总线占用恳求及应对
always@(posedgeclkinornegedgelrst)begin
if(!lrst)begin//PCI9054复位
readyflag=1b0;
LEDByControl[7:0]=8b0;
end
elseif(!adslwrblastla[13:0]==14b1)
readyflag=1b1;//开端建议LED操控字IO装备
elseif(adslwrblastreadyflag==1b1la[13:0]==14b1)
readyflag=1b1;//捕获建议操作
elseif(adslwr!blastreadyflag==1b1la[13:0]==14b1)begin
LEDByControl[7:0]=ld[31:24];//进行LED操控字IO装备操作
readyflag=1b0;
end
else begin
LEDByControl[7:0]=LEDByControl[7:0];//坚持LED操控字
readyflag=1b0;
end
end
在进行FPGA的逻辑规划时,选用一种叫做虚拟逻辑分析仪的技能,可以增强咱们诊断体系的才能。AlteraFPGA供给的虚拟逻辑分析仪称为SignalTap,Xilinx中也有相同功用的产品称为ChipScope。
SignalTapII逻辑分析仪是Altera第二代体系级调试东西,可以获取、显现可编程片上体系(SOPC)的实时信号,协助工程师在其体系规划中调查硬件和软件的交互作用。在可编程逻辑市场上,SignalTapII逻辑分析仪专用于QuartusII软件,与其他嵌入式逻辑分析仪比较,它支撑的通道数最多,抽样深度最大,时钟速率最高。
如图13.25所示为操控其间一个LED时的PCI本地时序图。
图13.25操控1个LED的PCI本地时序图
如图13.26所示为操控4个LED进行跑马灯时的PCI本地时序图。
图13.26操控4个LED跑马灯的PCI本地时序图