比如说Altera FPGA,对于大部分芯片都可以同时采用2种编程方法,即AS+配置芯片方式以及JTAG方式,下载电缆都可以通用,比如ByteBlasterII;
用AS+配置芯片方式,就是可以将程序下载到配置芯片中,配置芯片(如EPCS系列)就是一块EPROM,它可以在每次系统上电的时候,都自动将程序烧写到FPGA中,这样一来FPGA就用不着每次上电都重新烧写了,跟使用CPLD时是一样的。这种方式下采用的下载文件时POF文件。
用JTAG方式的话,就是直接将程序下载到FPGA中,由于FPGA中是基于SRAM结构的,所以每次断电之后程序就没有了,所以必须每次上电都重新下载。用JTAG方式的好处在于便于调试,比如我们可以用QuartusII中的SignalTapII嵌入式逻辑分析仪进行FPGA I/0引脚上信号的实时观测,非常的方便。这种方式下采用的下载文件时SOF文件。
另外,如果使用了某些没有License的IP Core资源的话,那么必须在JTAG方式下,把下载线连在FPGA上才能使用,而且通常有时间限制,超过时限之后,就需要重新编译程序,产生新的SOF下载文件。
如果以上2种方式同时使用,需要2跟接线柱,一根下载线,一套配置成AS方式,一套配置成JTAG方式。前期使用JTAG方式调试,待FPGA功能成型之后,就可以用AS方式将程序固化到配置芯片中去,以后就不用每次上电都重新下载了。
2种方式具体的连接图,看看Altera官方发布的配置手册就可以了,很简单的
altera altera 对JTAG电缆、器件上电有顺序要求!另外,按照参考手册,jtag都是25V供电。你的jtag电缆是否支持25V?还有,你的程序里面双向IO口有没有可能没控制好,和外面的ASIC发生冲突造成短路?以前用过ep3c80,插拔电缆时很容易把jtag口烧掉,那次运气,只是jtag坏掉了,芯片没烧
PHY芯片的MII接口(发往FPGA)的差分信号线上没有限流电阻,因为FPGA的IO口电流范围为10uA,而PHY的输出电路为微安级mA的,这在长时间情况下会不会造成FPGA芯片损坏
1 可以在vivado中通过block diagram生成microblaze的硬件,注意Xilinx提供了一个microblaze的例子,如果有问题可以参考这个例子来实现;
2 画好bd以后,先保存,然后verify,然后保存,然后点“生成bitstram”Vivado会自动按照综合——实现——生成bit文件的顺序执行;
如果其中出现错误,一定要仔细参考message的提示,然后从网上和Xilinx的文档中寻找解决的办法;
3 输出到SDK的时候要特别注意,一般第一次的时候他会帮你输出bmm文件,后面就只有bit文件和xml文件了;但是实际上bmm文件对打包生成最后的downloadbit文件很重要,如果bit文件和bmm不对应的话,你生成的downloadbit文件下载到FPGA之后可能会起不来。
4 Microblaze的IC/DC总线接口去连接一块内存时,这块内存的地址必须在cache的地址范围内,比如cache范围为0x0000_0000~0x7FFF_FFFF,否则可能无法写入;
5 Microblaze的IP/DP总线接口去连接一块内存时,这块内存的地址必须在cache的地址范围外,比如cache范围为0x0000_0000~0x7FFF_FFFF,该内存地址范围为0x8000_0000~0xFFFF_FFFF,否则也可能访问不正常;
首先第一步,需要把想要观测的信号标记出来,即mark_debug,有两种mark_debug的方法,我用verilog写了一个简单的流水灯程序,只有几行代码,如下:
module main(
input clk,
input rst,
output reg [7:0] led
);
(mark_debug = "true")reg [23:0] counter;
always @(posedge clk) begin
if(rst) begin
counter <= 0;
led <= 8'b00000001;
end
else counter <= counter + 1;
if (counter == 24'hffffff)
led <= {led[6:0],led[7]};
end
endmodule
例如,要观察counter信号的波形,那么在第7行定义reg型信号counter时,前面加上(mark_debug=“true”),这样就把counter信号标记了出来。如果用vhdl语言实现的话,这句话用该这样写:
signal counter : std_logic_vector (23 downto 0);
attribute mark_debug: string;
attribute mark_debug of counter : signal is "true";
另外添加xdc约束文件,内容如下:
set_property PACKAGE_PIN Y9 [get_ports clk]
set_property PACKAGE_PIN T18 [get_ports rst]
set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS18 [get_ports rst]
set_property PACKAGE_PIN T22 [get_ports {led[0]}]
set_property PACKAGE_PIN T21 [get_ports {led[1]}]
set_property PACKAGE_PIN U22 [get_ports {led[2]}]
set_property PACKAGE_PIN U21 [get_ports {led[3]}]
set_property PACKAGE_PIN V22 [get_ports {led[4]}]
set_property PACKAGE_PIN W22 [get_ports {led[5]}]
set_property PACKAGE_PIN U19 [get_ports {led[6]}]
set_property PACKAGE_PIN U14 [get_ports {led[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[7]}]
之后run synthesis综合,之后open synthesized design,在左上角选择debug layout,在debug窗口中netlist看到counter信号前面有一个绿色的小蜘蛛,表示counter信号被标记出来了。
这其实是一种比较繁琐的方法,更为方便的方法是,直接综合工程,在之后打开综合设计,在netlist中直接选中想要查看的信号,右键选择mark debug,即可将信号标记出来。
但是采用第一种方式的好处是,如果工程比较复杂的话,一些信号可能会被综合优化掉,加上模块层层实例化,在netlist中可能找不到要观测的信号,这时在代码里面mark_debug,依旧可以将该信号引出来。
接着第二步就是插入调试内核了,在Vivado界面下方,找到Unassigned Debug Nets,右键选择 set up debug,在接下来的对话框中列出了counter信号的lk domain是CLK_IBUG_BUFG,其trig和data项都打了对勾,表示counter信号既作为触发信号也作为数据信号。
以上就是关于impact和vivado固化程序有什么区别吗全部的内容,包括:impact和vivado固化程序有什么区别吗、xilinx vivado下microblaze里面C编程中,怎么通过串口实现PC机和FPGA中RAM数据相互读写、linux vivado怎么都识别不了uart等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)