ZYNQ多个区域实现动态重配置(基于zc706开发板)

目标

使用ZC706开发板上面的三个LED灯来做这个实验,完成一个静态区域控制LED0以1/4S的周期进行闪烁。两个动态区域实现LED2和LED3闪烁时间的动态配置。

过程

先看下ZC706 PL LED的电路原理图:
在这里插入图片描述
LED这里只用到了三个,直接接到了PL上。
再看下ZC706的时钟系统,主要目的是实现多块区域的重配置,因此选择一个最简单的全局时钟。
在这里插入图片描述
这下好了,想着是用一个简单的时钟,可惜除了PS时钟以外,全是差分时钟。(墨菲定律了)那就尝试下用差分时钟。
先写好约束文件:


#diff clock
set_property PACKAGE_PIN H9         [get_ports clk_p]
set_property IOSTANDARD DIFF_SSTL15 [get_ports clk_p]
set_property DIFF_TERM TRUE         [get_ports clk_p]
set_property DIFF_TERM TRUE         [get_ports clk_n]
#led0  1.5V
set_property PACKAGE_PIN G2         [get_ports led0]
#led1   1.5V
set_property PACKAGE_PIN A17        [get_ports led1]
#led2   2.5V
set_property PACKAGE_PIN W21        [get_ports led2]
set_property IOSTANDARD LVCMOS18    [get_ports led1]
set_property IOSTANDARD LVCMOS25    [get_ports led2]
set_property IOSTANDARD LVCMOS18    [get_ports led0]

对差分时钟只需要约束一个管脚就可以了,内部会自动识别到。
下面是顶层头文件:

module static(
   
    input clk_p,
    input clk_n,
    
    output led0,
    output led1,
    output led2
    );
        
parameter SYS_CLK = 200000000/4;    
    
reg [32:0] cnt =32'b0;
wire clk;
IBUFGDS u_ibufds
(
    .I(clk_p),
    .IB(clk_n),
    .O(clk)
);
always @(posedge clk)
begin
    if(cnt > SYS_CLK)
       cnt<=1'b0;
     else
      cnt<=cnt+1'b1;
end
assign led0 = (cnt>SYS_CLK/2)?1'b0:1'b1;     
part1 u_part1
(
   .clk(clk),
   .led1(led1)
);
part2 u_part2
(
   .clock(clk),
   .led2(led2)
);
endmodule

差分时钟的引入需要用到 IBUFGDS,可以把它理解成一个差分时钟转成单端时钟的转换器。差分时钟是用来抵消外界的电磁干扰的,在芯片内部还需要转换成正常的单端时钟。
下面是画好的静态区域:
对于动态加载不懂的同学,可以看看我之前写过的zynq实现动态加载 里面有很清楚的描述。
在这里插入图片描述
到这一步就可以生成bitstream了。完成以后,先看看目标文件夹中的内容:
在这里插入图片描述
可以看到一共有三个文件,第一个是静态分区+默认动态分区的bitstream文件。第二个和第三个分别是两个动态分区的文件。能看到这三个文件,我觉得这个实验已经成功了,所以写的时候看到这三个文件就开心的去做饭了☺。

回来验证一下刚才做的事情:
下载static.bit文件到开发板。
不过万万没想到,这一步花了一下午的时间。因为是第一次使用zc706开发板,而且也是第一次在linux环境下开发的。所以当调试器不能正常连接的时候,一直在找USB驱动的问题,忽略了开发板上的拨码开关,结果抱怨了一下午ubuntu 18.04。想到一件事情,最近腾讯官方出来QQ for Linux,体验了一下,结果是:QQ回到了当年的QICQ。这让我想到一个职场的画面,老马让手下出一个linux版本的QQ。老马认为这件事非常简单,不就是编译一个版本出来,结果QQ是用VS开发的,移植到Linux很麻烦,但是只拿了老马认为编译个版本的钱。所以最后事情做的很糟。结果老马认为他的手下做事不认真,他的手下确认为老马没有领导能力,不能看清开发的难度,自以为是。
这个问题怎么解决呢?假设有这么一个人,老马很信任他,他又很懂开发。这样就能很好的协调这种事情。这可能就是项目经理的重要性了。

ZC706 JTAG电路

为什么要把这个单列一节,想想是太大意了,再想想也不光是大意,因为第一次用zc706又是第一次用linux开发zynq,这就像是嵌入式开发中,软件硬件都有问题,你该怎么办☺
在这里插入图片描述
之前对嵌入式有个很好的形容,说软件开发和硬件开发的都像是在翻土,每一步都能看见效果,而且能够平稳的前进。但是搞嵌入式驱动就像是在破冰,可能一直没有动静,可能迎刃而解。介于这种情况嵌入式驱动工程师一定要保持头脑清醒。思路一定要开,但是还得专,你的每一个动作,必须要得出一个结论,来否定你之前的假设,知道你的假设成立。
看上图的SW4,直接决定了JTAG的链接方式;
10:platform usb
01:digilent
11:JTAG 20 PIN
这下清醒了,可以做最后的试验了。
分别下载上午搞定的三个文件,看到小灯如期的闪起来。好啦,本周结束。

结论

1、搞嵌入式最有意思的地方就是:你可能对一个现象有千万种想法,然后你开始用大量的时间,让自己只剩下对这个现象只有一种想法,这就是嵌入式工程师眼中的真理。
2、可以批判的看待Ubuntu、vivado、linux这些大型软件。但是一定有一个能经得住推敲的理由。不要因为自己搞不定或者是简单的猜想就说 “这个软件设计的真垃圾 搞不懂设计人员怎么想的”。

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: zc706开发板原理图是指Xilinx公司推出的zc706系列开发板的电路原理图,实际上是一种开发板设计方案,是硬件开发的基础和指导。 zc706开发板原理图主要包括了处理器、存储器、各种外设、时钟和电源等部分的电路设计和连接方式。其中,处理器部分是指板载的Xilinx公司推出的Zynq-7000系列的SoC芯片,它集成了ARM Cortex-A9双核处理器和FPGA可编程逻辑部分。存储器部分则是板载的DDR3 SDRAM、Quad-SPI Flash等,用于存储程序和数据。各种外设包括了网口接口、USB接口、HDMI接口等,用于连接外部设备。时钟和电源部分是保障整个系统工作的要部分,包括了各种稳压器、时钟发生器、电源滤波器等。 zc706开发板原理图是硬件设计师进行电路布局和线路走向设计的基础,同时也是开发者进行系统代码编写和调试的基础。只有了解zc706开发板原理图,才能更好地理解整个系统的结构和实现方式,从而实现更好的软硬件交互和优化。 ### 回答2: zc706开发板原理图是指针对Xilinx公司生产的zc706开发板所设计的电路原理图。这个原理图是硬件设计师在设计zc706开发板时所需要用到的要工具之一,其主要作用是给出硬件设计指导的参考和指导,包括芯片的电路原理、器件的原理和连线的电路原理等多个方面。 zc706开发板原理图是一张非常复杂的图纸,里面包含了大量的电子元器件、电子元器件的连接方式、信号的流向和变换以及各种电路板之间的连接等等。通过这张原理图,硬件设计师可以更加直观地了解整个开发板的设计方案,进一步确定组成和连接方式,从而达到高效、可靠的电路布局。 从另一个角度看,每个电子元器件都有它自己的特性和限制,原理图中也体现了这些特性和限制。因此,在设计zc706开发板时,硬件设计师要充分考虑电子元器件的特性以及它们之间的互相影响,从而保证整个开发板的性能和稳定性。 总之,zc706开发板原理图是硬件设计师必备的工具,它向硬件设计师提供了全面的、直观的信息,为他们提供了设计高效性能、稳定可靠的开发板要参考和指导。 ### 回答3: zc706开发板原理图是指zc706开发板的电路原理,它包含了整个开发板的主要电路结构和电气连接方式,并用图形化的方式展现出来。通过zc706开发板原理图,我们可以了解到每个电路模块的连接方式和作用,以及各个模块之间的相互作用关系。 在zc706开发板原理图中,我们可以看到板载的各种器件,包括FPGA、DDR3、Flash等,以及它们之间的协作方式。比如,在FPGA模块中,通常会包含时钟模块、硬件电路控制模块、IO端口模块等,这些模块与DDR3、Flash等其他模块的接口连接方式,将整个开发板组成一个完整的系统。 同时,zc706开发板原理图也展现了各个电路模块之间的信号传递路线,这些线路的稳定性和可靠性对整个系统的稳定运行至关要,因此,在设计zc706开发板原理图时,需要精密计算和细致设计。 总之,zc706开发板原理图是深入了解zc706开发板原理的要工具,开发者可以通过理解原理图来更好地设计、调试和运行zc706开发板

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值