Vivado+FPGA学习之第一次上电

背景:我本人没有怎么接触过FPGA,但是这次一上来就被要求做FPGA的工作,实在是让我感到无从下手,前前后后忙活了好几天才第一次上电成功,所以把整个经过整理了一下,以便方面后来人。

开发平台:Vivado 2015.2
FPGA :Xilinx Virtex-7系列芯片

一上来就碰到这种高端FPGA芯片,没有什么资料,至于下面的FPGA的板子也是自制的(上面没有按钮,没有数码管,只有2个led灯),所以感到无从下手。那么针对这种情况怎么办呢?下面将全面介绍一下。

//************************************************************//
1.时钟:时钟是驱动FPGA工作的关键,首先我们来看怎么引入时钟。
这里写图片描述
从图中可以看出,使用了ICS8543芯片,查看该芯片的datasheet,可以知道该芯片的输出为4对差分口,IO标准为LVDS,并且通过查看原理图可以知道Q3和Q3*是作为FPGA工作的时钟,此时记下在FPGA中的引脚。
//************************************************************//
2.建立工程:这一步网上有很多教程,我在这里就略过了
//************************************************************//
3.调用Clocking wizard:为了得到稳定的适合XilinxFPGA的时钟,需要使用Xilinx提供的一个IP核

这里写图片描述
选择IP Catalog
这里写图片描述
双击Clocking Wizard
这里写图片描述
设置外部时钟的输入频率,我这里是200M的时钟,由于时钟使用的是差分传输,所以我在这里选择了Differential clock capable pin
这里写图片描述
这里是填写输出时钟,根据需要选择即可
这里写图片描述
这里是对实例化的IP core的输出端口的重命名,方便自己记忆
//************************************************************//
4.使用IP Core:使用Vivado提供的例化模版在v文件中实例化

这里写图片描述
这里写图片描述
复制红框中的内容,粘贴到自己的工程文件中
//************************************************************//
5.编写代码:
在代码很简单,就是利用输出的25M时钟,做了一个分频,点亮一盏LED灯,由于我使用的平台没有外部按键,所以又调用一个VIO的IP core来做复位控制,关于VIO这个IP Core我会在以后的文章中提到。

module top(
    input clk_in1_p,
    input clk_in1_n,    
    output reg flag,
    output led
    );
    wire clk_25M,clk_10M;
    wire locked,rst_n;
    reg [31:0] cnt_r;    

  clk_wiz_0 instance_name
     (
     // Clock in ports
      .clk_in1_p(clk_in1_p),    // input clk_in1_p
      .clk_in1_n(clk_in1_n),    // input clk_in1_n
      // Clock out ports
      .clk_25M(clk_25M),     // output clk_25M
      .clk_10M(clk_10M),     // output clk_10M
      // Status and control signals
      .locked(locked));      // output locked 
    always @ (posedge clk_10M, negedge rst_n) begin
        if(rst_n == 0)begin
            cnt_r <= 0;
        end
        else begin
            if (cnt_r == 32'b1111_1111_1111_1111_1111_1111_1111_1111) begin
                cnt_r <= 0;
            end
            else cnt_r <= cnt_r +1;
        end
      end

      always @ (posedge clk_10M)begin
        if(cnt_r < 32'b1000_0000_0000_0000_0000_0000_0000_0000) flag <= 1;
        else flag <= 0;
      end

    vio_0 your_instance_name (
            .clk(clk_10M),                // input wire clk
            .probe_in0(cnt_r),    // input wire [31 : 0] probe_in0
            .probe_out0(rst_n),  // output wire [0 : 0] probe_out0
            .probe_out1(led)
          );
endmodule

//************************************************************//
6.配置管脚:代码编写好之后,为了让FPGA能够工作,需要将module的输出输入管脚配置到实际的地方才能正常工作
这里写图片描述
打开Schematic
这里写图片描述
点击IO Ports
这里写图片描述
这里就是配置管脚的地方,可以看到我将clk_in1_p配置为了C25(由于是差分管脚的关系,Vivado能够自动识别,自动的把clk_in1_n配置为了C26),根据之前ICS8543的datasheet,IO std应该设置为LVDS。flag是我用来控制led灯的管脚,分配到了a16(不同板子位置不一样,这个需要查看原理图才能知道),至于还有一个名为“led”的引脚,这个大家可以暂时忽略,这个引脚是直接被VIO控制的,在以后会讲到。

7.生成bit文件:这就是最后一步了,虽然过程看起来简单,但是要成功的来到这一步也是很困难的,如果一切顺利的话,这里就能够生成bit文件了(因为没有配置vio核,所以如果直接用我的代码的话,是会报错的,需要删除vio,并且对相应的输入输出进行修改)

这里吐槽一下Vivado,我用的电脑是I7-4790+16G内存+SSD,从头跑一次也要快10分钟的时间,简直太慢了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值