微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

vivado实验

思考题:
(1)总结Zynq FPGA设计流程,将实验步骤与软件设计流程对照分析,
分析每一步生成了什么文件,各有什么作用;
(2) 分析本实验中用到的verilog源代码,特别对使用到的原语进行分
析说明;

//-----------------------------------------------------------------------------
//
// (c) copyright 2013 Tronlong, Inc. All rights reserved.
//
//-----------------------------------------------------------------------------
`timescale 1ns / 1ps

module tl_led_flash(
  output  reg  [1:0]  led      // led gpio output
);

// Delay lenght: 32_500_000, 500ms, by used 65MHz cfgmclk
parameter	DELAY_LEN = 26'd3249_9999;

reg	[26:0]	delay_cnt;

wire		cfgmclk;
wire		eos_n;

STARTUPE2 #()
STARTUPE2_inst (
	.CFGMCLK(cfgmclk),     // 1-bit output: Configuration internal oscillator clock output 65MHz.
	.EOS(eos_n)            // 1-bit output: Active high output signal indicating the End Of Startup.
);

// Led flash with delay counter by cfgmclk
always@(posedge cfgmclk or negedge eos_n)
	if(!eos_n)
		begin
			delay_cnt <= 26'd0;	// reset delay_cnt
			led <= 2'b0;		// led output low
		end
	else if(delay_cnt == DELAY_LEN)
		begin
			delay_cnt <= 26'd0;	// reset delay_cnt;
			led <= ~led;		// change led output status;
		end
	else
		delay_cnt <= delay_cnt + 1'b1;

endmodule

代码分析:
tl_led_flash模块内部振荡时钟cfgmclk为65MHz,标志信号eos_n为1时启动结束,输出为两位的寄存器led,控制开发板上的两个LED灯闪烁。
时间间隔=计数次数DELAY_LEN**时钟频率=3250000065Mhz=500ms
原语分析
使用了STARTUPE2原语,其一般声明如下:

STARTUPE2_inst
(
    .CFGCLK(), // 1-bit output: Configuration main clock output
    .CFGMCLK(), // 1-bit output: Configuration internal oscillator clock output
    .EOS(), // 1-bit output: Active high output signal indicating the End Of Startup.
    .PREQ(), // 1-bit output: PROGRAM request to fabric output
    .CLK(0), // 1-bit input: User start-up clock input
    .GSR(0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name)
    .GTS(0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name)
    .KEYCLEARB(1), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM)
    .PACK(1), // 1-bit input: PROGRAM ackNowledge input
    .USRcclKO(flash_clk), // 1-bit input: User cclK input
    .USRcclKTS(0), // 1-bit input: User cclK 3-state enable input
    .USRDONEO(1), // 1-bit input: User DONE pin output control
    .USRDONETS(1) // 1-bit input: User DONE 3-state enable outpu
);
该代码转载自:https://blog.csdn.net/jiuzhangzi/article/details/79471365

有的项目需要远程更新固件,更新完成后断电、重启即可。那远程更新是如何实现的呢?用的最多的应该是以太网或者自定义的局域网为主,当然还可以使用pcie、串口之类的,像xilinx还有golden image,以防止远程更新失败启动不起来,它主要是flash存有两个启动文件,正常情况下启动认的,当认的被损坏,就从备用的启动。本文章主要讲解的是STARTUPE2原语,这和远程更新有什么关系呢?请接着向下看。
fpga掉电丢失时,使用外部flash存储代码,flash有spi、bpi、qspi等接口,外部存储器的时钟管脚一般与fpga的cclK_0连接,当使用远程更新时,首先fpga内部有控制flash的驱动(即逻辑控制flash时序),当然flash时钟也需要控制了,但这时时钟管脚已经连接到cclK_0,那该如何操作啊,你直接约束分配管脚试试
其中flash_clk就是你时序控制的flash时钟信号,连接到这就行了,其它的不需要改动,也无需约束此管脚(因为此管脚不需要在顶层作为输出信号了)。当然你也可以例化qspi ip看里面是如何使用的。
顺便说一下,对于数据信号,一般是inout类型,对于单bit可以如下使用:

(3) 分析本实验中的约束文件,尝试使用图形界面生成约束文件
本实验的约束文件如下:

set_property PACKAGE_PIN F16 [get_ports {led[0]}]
set_property PACKAGE_PIN M14 [get_ports {led[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {led[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {led[1]}]

# enable bitstream compression
set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design]

(4) 查看生成的各种报告文件,描述生成的报告的含义;
(5) 查看编译后得到的原理图,分析其大致功能

(6) 查看布局布线后的版图,查找7020 FPGA资料,将版图与FPGA
内部资源做对比,分析设计用到的模块的作用。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐