前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FPGA和外围接口-第一章 爱上FPGA(1.7 爱上FPGA从流水灯开始)

FPGA和外围接口-第一章 爱上FPGA(1.7 爱上FPGA从流水灯开始)

作者头像
碎碎思
发布2020-06-30 10:14:29
5910
发布2020-06-30 10:14:29
举报
文章被收录于专栏:OpenFPGAOpenFPGA

FPGA和外围接口-第一章 爱上FPGA

第1章 爱上FPGA-

1.7 爱上FPGA从流水灯开始

爱上FPGA从流水灯开始

流水灯可能大部分文章都有介绍,但是本节主要目的是看下两家FPGA的EDA工具的使用流程及建立一个清爽的文件目录。

Intel FPGA流水灯

本次建立的目录只是本人习惯这样建立工程目录,方便后期维护,肯定不局限于这一种,大家可以根据自己的习惯维护一种工程目录。

在进行流水灯工程实验建立前,需要先了解Quartus II工程目录下常见的后缀名及含义。

表1-13 Quartus II工程目录下常见后缀及含义

1.在工程目录下分别建立core、dev、doc、mif、(out、sim)src、tcl目录,如图1-24所示:以下的操作过程基本都是基于表1-13进行操作的。

图 1-24 Intel FPGA Quartus II工程目录

3.在doc目录下放入需要用到的文档,本次需要用到FPGA板子的原理图,原理图用来确定LED灯是高电平控制还是低电平控制(即是共阴极还是共阳极),其他文档可以在设计过程中用到在添加进去。2.在core目录下导入写好的IP文件,因为本次设计并没有引入可以利用的IP文件,所以略过(后期的数码管控制文件在写好后,后期其他工程就可以直接利用该文件直接控制数码管,不需要每次都重新进行编写)。

4.在mif目录下放入需要进行内存初始化的初始化文件,本次设计不涉及到内存问题所以本目录放空。

5.在tcl目录下放入和FPGA板子对应的引脚分配文件(正常情况下,在第一次拿到一个板子时,就应该拿到这个板子的所有管脚分配文件),将和本次设计相关的引脚保留,其他管脚删除就可以。具体如下:

#------------------GLOBAL--------------------#

set_global_assignment-name RESERVE_ALL_UNUSED_PINS "AS INPUT TRI-STATED"

set_global_assignment-name ENABLE_INIT_DONE_OUTPUT OFF

#复位引脚

set_location_assignment PIN_M1 -toRESET

#时钟引脚

set_location_assignment PIN_R9 -toCLOCK

#LED对应的引脚

set_location_assignment PIN_J1 -toLED[0]

set_location_assignment PIN_J2 -toLED[1]

set_location_assignment PIN_K1 -toLED[2]

set_location_assignment PIN_K2 -toLED[3]

第一句话:设置不用的引脚为输入三态;

第二句话:设置启用“初始化完成”输出关闭;

第三句话:设置RESET引脚;

第四句话:设置CLOCK引脚;

第五、六、七、八句话:设置四个LED对应引脚。

· 为什么不用的引脚要设置为输入三态?· 这个设置是有FPGA以来的基本要求,否则可能导致CMOS同时输出而烧毁。

· 不能把全部输出信号放在一个bank上一个BANK的输出电流是有限的,约250ma,如果多根输出线放同一个bank(比如32根数据总线),同时翻转,有可能超出负载能力,导致异常。

· IO输出阻抗要根据实际调整一般PCB的标准阻抗是50欧,FPGA缺省输出阻抗也是50欧,可以调整FPGA的输出电流来改变输出阻抗,进而改善信号完整性。这点在对硬件验收的时候要特别注意,示波器打到最大分辨率,观察信号有无阶梯或过冲,否则出现误码去检查FPGA就耽误时间了。

  • 一个BANK的输出电流是有限的,约250ma,如果多根输出线放同一个bank(比如32根数据总线),同时翻转,有可能超出负载能力,导致异常。

· IO输出阻抗要根据实际调整

  • 一般PCB的标准阻抗是50欧,FPGA缺省输出阻抗也是50欧,可以调整FPGA的输出电流来改变输出阻抗,进而改善信号完整性。这点在对硬件验收的时候要特别注意,示波器打到最大分辨率,观察信号有无阶梯或过冲,否则出现误码去检查FPGA就耽误时间了。

6.在src目录下放入本次设计的源代码,命名为:Run_LED.v(本次设计释义Verilog进行设计的,其他方法根据需要新建对应的文件)。

右击Run_LED.v以Sublime打开(其他编辑器一样),如果不习惯的话,可以略过本步骤,在后面新建完工程后在原生编辑器里进行编辑;

编写代码如下:

//***************************************//

//# @Author: 碎碎思

//# @Date: 2019-04-14 19:54:50

//# @LastModified by: zlk

//# @LastModified time: 2019-04-14 21:36:06

//****************************************//

module Run_LED

(

CLOCK,

RESET,

LED

);

////////////////////////////////////////////

input CLOCK,RESET;

output reg [3:0]LED;

////////////////////////////////////////////

//

//首先定义一个时间计数寄存器counter,每当达到预定的100ms时,

//计数寄存器就清零,否则的话寄存器就加1。

//然后计算计数器计数的最大值。时钟频率为50MHZ,

//也就是周期为1/50M 为20ns,要计数的最大值为T100MS=100ms/20ns-1 = 4999_999。

//

reg[25:0]counter;

parameter T100MS= 23'd5_000_000;

always @(posedge CLOCK or negedge RESET)

if(!RESET) //高电平复位

counter<=25'd0;

else if(counter==T100MS)

counter<=25'd0;

else

counter<=counter+1'b1;

////////////////////////////////////////////

always @(posedge CLOCK or negedge RESET)

if(!RESET)

LED<=4'b0001; //初值,最低位led[0]灯亮

elseif(counter==T100MS)

begin

if(LED==4'b0000) //当溢出最高位时

LED<=4'b0001; //回到复位时的状态

else

LED<=LED<<1; //循环左移一位

end

endmodule //Run_LED

其中所有的输入输出引脚名需要根据tcl目录下的引脚分配文件中定义的名称相匹配。

LED电路原理图如下,可知其为共阴极设计,需要高电平点亮,所以FPGA引脚只要设置为“1”对应的LED就会被点亮。

图 1-24 LED原理图

程序就不多进行解释就是简单的流水灯程序,其中“<<”为循环左移一位的运算符。

7.打开Quartus II程序,点击New ProjectWizard;

点击NEXT;

设置工程目录选择上几步设置的目录下的dev目录和工程的名称;

点击NEXT;

选择Empty project;

Add file页面选择src目录下的源文件;

点击NEXT;

选择FPGA Device,根据自己的情况选择FPGA型号;

一路点击NEXT;

点击Finsh。

图 1-25 Quartus II设置工程目录和工程的名称

8.引脚分配,ToolsàTCL scriptsà选择引脚分配的TCL文件àRun,就会看到执行成功提示,注意:如果TCL文件和工程文件是在同一个文件夹内就会直接看到该TCL文件,不在同一个文件夹需要点击Add to Project按钮进行添加,具体如下:

图 1-26 TCL脚本加载过程

这个时候就可以在DeviceàPin Planner下看到所有的引脚都已经分配好。

9.编译,下载程序就可以看到流水灯现象了。

最后,看下整个工程文件/夹构成:

<00_Intel_Run_LED>

├<core>

├<dev>

│ ├Run_LED.qpf

│ ├Run_LED.qsf

│ ├<db>

│ │ ├.cmp.kpt

│ │ ├prev_cmp_Run_LED.qmsg

│ │ ├Run_LED.(0).cnf.cdb

│ │ ├Run_LED.(0).cnf.hdb

│ │ ├Run_LED.asm.qmsg

│ │ ├Run_LED.asm.rdb

│ │ ├Run_LED.asm_labs.ddb

│ │ ├Run_LED.cbx.xml

│ │ ├Run_LED.cmp.bpm

│ │ ├Run_LED.cmp.cdb

│ ├<incremental_db>

│ │ ├README

│ │ ├<compiled_partitions>

│ │ │ ├Run_LED.db_info

│ │ │ ├Run_LED.root_partition.cmp.ammdb

│ │ │ ├Run_LED.root_partition.cmp.cdb

│ │ │ ├Run_LED.root_partition.cmp.dfp

│ │ │ ├Run_LED.root_partition.cmp.hdb

│ │ │ ├Run_LED.root_partition.cmp.logdb

│ │ │ ├Run_LED.root_partition.cmp.rcfdb

│ │ │ ├Run_LED.root_partition.map.cdb

│ │ │ ├Run_LED.root_partition.map.dpi

│ │ │ ├Run_LED.root_partition.map.hbdb.cdb

│ │ │ ├Run_LED.root_partition.map.hbdb.hb_info

│ │ │ ├Run_LED.root_partition.map.hbdb.hdb

│ │ │ ├Run_LED.root_partition.map.hbdb.sig

│ │ │ ├Run_LED.root_partition.map.hdb

│ │ │ ├Run_LED.root_partition.map.kpt

│ │ │ └Run_LED.rrp.hdb

│ ├<output_files>

│ │ ├Run_LED.asm.rpt

│ │ ├Run_LED.done

│ │ ├Run_LED.fit.rpt

│ │ ├Run_LED.fit.smsg

│ │ ├Run_LED.fit.summary

│ │ ├Run_LED.flow.rpt

│ │ ├Run_LED.jdi

│ │ ├Run_LED.map.rpt

│ │ ├Run_LED.map.summary

│ │ ├Run_LED.pin

│ │ ├Run_LED.sld

│ │ ├Run_LED.sof

│ │ ├Run_LED.sta.rpt

│ │ └Run_LED.sta.summary

├<doc>

│ ├DB4CE15底板.pdf

│ └DB4CE15核心板.pdf

├<mif>

├<src>

│ ├Run_LED.v

│ └Run_LED.v.bak

├<tcl>

│ └PIN_ASSIGN.tcl

Xilinx FPGA流水灯

Xilinx的FPGA的工具为ISE\Vivado,目前比较常用的是Vivado,由于Vivado的工程目录名称建立的比较符合大众,所以在使用Vivado时本人很少修改文件夹目录,所以Vivado建立工程过程比较常规,在此不再赘述,工程源码和上个例子一样。

这里介绍几个常见的后缀名称的含义:

表1-14 Vivado工程目录下常见后缀及含义

后缀

含义

后缀

含义

.v

verilog 文件

.vhd

vhdl 文件

.dcp

不论是综合还是布局布线都只会产生一种格式的文件,即.dcp文件,每个阶段的.dcp文件都是下一阶段的输入文件,.dcp文件实际上包含了对应阶段处理的信息,用vivado可以直接打开,File->Open Checkpoint。.dcp文件主要包括Physical Constraints, Device Constraints, Netlists以及device的信息。

.xdc

这个是vivado的约束文件,vivado的约束文件和ise中的约束文件.ucf或者.pcf相比有很大不同,.xdc中的约束文件其实就是一系列的tcl语句,所以对于vivado中的约束文件,可以作为一个源文件放在工程里,在综合和布局布线中调用;也可以在tcl console中输入,立即执行。

.xci

这是定制ip产生的文件,里面包含了定制的ip核的所有信息,可以通过这个文件产生需要的ip核,作用和.dcp文件差不多。ip核中也有.dcp文件,关于选择.xci文件还是.dcp文件,在vivado中的ip定制中会总结。

.rpt

这个是每个过程结束输出的一个report文件,用来记录各个过程中的一些信息,和ise中的多种输出文件格式相比,这样的统一格式显然更好一点。

OK,这部分就简单介绍到这里,后面的更新也基本以实际例程为主,介绍部分会砍掉,但是会在每周更新的文档里体现。实际的代码会更新到GitHub上,基本一周一更新。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenFPGA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.7 爱上FPGA从流水灯开始
  • 爱上FPGA从流水灯开始
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档