目录
1.驱动
首先把板子搞好,拿到了一个virtex5系列的xc5vlx110t,将jtag连接线接到电脑端口上,发现驱动无法识别
右键点击Xilinx Embedded Platform USB Fimware Loader,选择卸载设备,驱动程序一并卸载。
然后在ISE安装目录下找到install_digilent.exe和install_drivers.exe,管理员运行,install_drivers.exe运行后,可能会等一段时间。
如果还是不行,就换电脑的另一个接口。
最后会出现
驱动成功。
2.连接jtag
JTAG接口(Joint Test Action Group,联合测试工作组),是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP,FPGA器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
JTAG引脚定义
具有JTAG口的芯片都有如下JTAG引脚定义:
TCK——测试时钟输入;
TDI——测试数据输入,数据通过TDI输入JTAG口;
TDO——测试数据输出,数据通过TDO从JTAG口输出;
TMS——测试模式选择,TMS用来设置JTAG口处于某种特定的测试模式。
可选引脚TRST——测试复位,输入引脚,低电平有效。
含有JTAG口的芯片种类较多,如CPU、DSP、CPLD等。
JTAG内部有一个状态机,称为TAP控制器。TAP控制器的状态机通过TCK和TMS进行状态的改变,实现数据和指令的输入。
JTAG芯片的边界扫描寄存器
JTAG标准定义了一个串行的移位寄存器。寄存器的每一个单元分配给IC芯片的相应引脚,每一个独立的单元称为BSC(Boundary-Scan Cell)边界扫描单元。这个串联的BSC在IC内部构成JTAG回路,所有的BSR(Boundary-Scan Register)边界扫描寄存器通过JTAG测试激活,平时这些引脚保持正常的IC功能。
3.基本使用流程(工程,约束,仿真,烧写)
基于Virtex5的,其它的差不多。
直接next,不添加input和output
一样地,定义一个1秒钟变化一次的led小灯
module ISE_LED(
input sysclk,
input rst,
output led
);
reg [28:0] time_cnt;
reg led_reg;
always @ (posedge sysclk or negedge rst)
begin
if(!rst)
time_cnt<=0;
else if (time_cnt=='d50000000)
time_cnt<=0;
else
time_cnt<=time_cnt+1'b1;
end
always @ (posedge sysclk or negedge rst)
begin
if(!rst)
led_reg<=0;
else if(time_cnt=='d50000000)
led_reg<=~led_reg;
else
led_reg<=led_reg;
end
assign led=led_reg;
endmodule
点击XST可以进行综合分析,从而判断代码是否出错。
有错是正常的,没有一个人敢保证不用编译器检查,第一遍写代码就完全正确。
在ISE中,时序约束文件,被称之为UCF。其实就是user contraints file的简称。
一般来说,对于一些简单的工程,我们仅仅需要约束时钟就可以了。
在图中,第一栏TIMESPEC(Timing Specificaition,时钟说明)名称为TS_sysclk,表示创建一个时钟约束标识符“TS_sysclk”;第二栏“Clock net name”(时钟管脚名)自动设为“sysclk”,第三栏指定“TIME”(时钟周期)为20ns,“initial clockedge”(最初的时钟沿)为上升沿,“rising duty cycle”(上升沿的占空比为50%),设置完后,点击[ok]即可。
这里要说明下,其实TS_sysclk就是和timequest一样,只是一个名字而已,实际上,重要的是关联的目标sysclk。
手动分配管脚
这里,我们看电路图分配。
点击蓝色方框生成约束
然后点击implement design发现出错,发现是时钟约束错误,不是AN17,是AH17,改后正确。
下载程序,点击generate programming file生成bit流文件