Chisel(Constructing Hardware In a Scala Embedded Language)是UC Berkeley开发的一种开源硬件构造语言。
站长xddcore有话说:在我大二的时候,因为项目需要,接触了Chisel。在体验过后,我被它深深的吸引了。我幻想着它十年后的样子,充满希望。于是创建了这个博客,让更多人的了解Chisel,学习Chisel。

[Vivado 2020.1]ZYNQ7020折腾之路(三)之荔枝糖Hex流水灯设计

内容纲要
Reading Time: 3 minutes

首先,按照上一篇博客的设置创建好项目(参考链接:https://blog.csdn.net/qq_36229876/article/details/108054405)

只不过今天要多留个FCLK_CLK0_0端口,因为荔枝糖HEX的PL侧是没有外挂晶振,所以需要通过PS侧给PL侧生成时钟。这样的设计,我认为的优缺点如下:
优点

  1. PS侧为PL侧生成的时钟频率(<=250Mhz)任意,自由度比较高(见下图)
  2. 支持四路任意频率(见下图)
    在这里插入图片描述

缺点

  1. 开发时候不能仅开发PL侧,必须要配置ZYNQ的IP核(打开PS侧),为PL侧提供时钟

于是,我们配置好ZYNQ的IP核,此处只需要给PL侧引出一路时钟就行。右键FCLK_CLK0,点击make external,然后再auto 连线
在这里插入图片描述
然后为BD create wrapper
最后将我们之前写好的run_led.v加入到source里面。
在这里插入图片描述

源码如下

run_led.v

module run_led(
input RSTn_i,
output reg [1:0]LED_o
);
wire CLK_i;

reg [31:0]Counter;

sys_clk_wrapper system_clk1(
    .FCLK_CLK0_0(CLK_i)
);

//脉冲计数器
always @(posedge CLK_i or negedge RSTn_i)
    begin
        if(!RSTn_i)
            begin
                Counter <= 0;
            end
        else if(Counter == 32'd99_999_999)
            begin
                Counter <= 0;
            end
        else
            begin
                Counter <= Counter + 1;
            end
    end
//LED灯控制(0:亮 1:灭)
always @(posedge CLK_i or negedge RSTn_i)
    begin
        if(!RSTn_i)
            begin
                LED_o <= 2'b10;//
            end
        else if(Counter == 32'd49_999_999)//第一秒
            begin
                LED_o <= 2'b10;
            end
        else if(Counter == 32'd99_999_999)//第2秒复位
            begin
                LED_o <= 2'b01;
            end
    end
endmodule

XDC

set_property PACKAGE_PIN W5 [get_ports RSTn_i]
set_property PACKAGE_PIN AB1 [get_ports {LED_o[1]}]
set_property PACKAGE_PIN AB4 [get_ports {LED_o[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports RSTn_i]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {LED_o[0]}]

然后综合一下,直接就可视化的生成xdc约束文件了(自己手动太麻烦了)
在这里插入图片描述
在这里插入图片描述
等右上角出现 Ready 字样 说明综合完毕,此时也要观察下底部的log框,康康有没有waring或者error.综合完成后,打开综合设计
在这里插入图片描述

然后点击Schematic,再点击4 I/O Ports
(教程写到这里我才发现,其实CLK端口没必要引出,因为走的PS端的FCLK_CLK_0,不过无所谓啦.
在这里插入图片描述在这里插入图片描述之后就是根据荔枝派Hex的原理图分配下管脚(这里吹吹画原理图的前辈,设计得不错。后面哪个{}花括号里面的数字,就是使用这个网络标号的FPGA端口 在原理图上所在的页码数。)
在这里插入图片描述

设置管脚约束如下,记得把电平换成LVCOMS33
在这里插入图片描述

在这里插入图片描述

然后点击右上角的保存,保存xdc文件
在这里插入图片描述
在这里插入图片描述

最后我们看到管脚约束文件已经被添加进来了
在这里插入图片描述

最后生成比特流文件,把.bits文件通过JTAG烧录到板子里面
在这里插入图片描述
在这里插入图片描述

至此,板子上的红灯应该会亮起来,但是不会流水。为什么呢?因为counter并没计数->没有posedge clk输入->ps侧没有工作。

那么接下来,要实现流水效果的话,我们要让PS侧工作起来。
如何让ps侧运行起来呢?很简单,只用给ps侧随便来一个空的project就行。
差不多就是这样

int main(void)
{   
    return 0;
}

在这里插入图片描述

在这里插入图片描述
将刚刚的.bits下载进去和ps端的程序一起下载进去。

至此,完成流水灯。

在这里插入图片描述

在这里插入图片描述

Share

xddcore

xddcore www.github.com/xddcore

You may also like...

发表回复

您的电子邮箱地址不会被公开。