广告

原创 小梅哥和你一起深入学习FPGA之开发流程

2017-1-10 09:49 269 0

久违了,各位,这段时间一直在外出差,前面几天给江西理工大学进行了为期三天的FPGA技术校内实训,今天在湖南常德,从明天开始,又将给湖南文理学院进行为期4天的FPGA校内实训。考虑到前面各位提出的没有开发流程的相关教程,导致很多还没接触过FPGA开发的同志难以入手,因此,今天小梅哥抽出时间,把前面做的一个简单的开发流程发上来,方便还没有入门的同学学习:


设计定义:


设计用途


设计功能


设计接口


设计电压,温度,工作环境等


设计工作频率;


设计输入:


HDL (VHDL 、Verilog, SystemC,SystemVerilog)


网表 – IP core


原理图 — simple (采用原理图的形式调用各类逻辑门和IP Core,通过连线的方式组成设计需要的电路)


其中,HDL方式和IP core方式最为常用,原理图方式一般在设计中不采用。


功能仿真:


逻辑综合:


实质:就是将HDL语言转化为门级网表的过程。


类比,GCC工具可以将C语言转化为可以执行的二进制程序一样。


综合策略:面积(area)和速度(speed)。以增加电路规模换取速度上的提升,以牺牲速度减小电路规模。比如同一个电路,我综合成为100个门级电路,跑到100Mhz,我也可以综合成200个门级电路,可以跑到200Mhz。


综合后仿真:


综合后仿真与功能仿真的差别在于综合后仿真加入了cell延时信息。


布局布线:


后仿真:


静态时序分析:


板上调试:


以上通过简单的图形方式介绍FPGA设计流程各个环节的基本情况,实际在设计的过程中,采用FPGA厂


家提供的工具,如Altera 公司的Quartus II和Xilinx公司的IES,能够非常简单方便的实现以上设计流程。为了更加直观展示一个完整的设计流程,这里以一个最基础的实验,按键控制LED灯为例,来进行一次完整的设计开发。由于实验较为简单,因此将不包含静态时序分析和板级在线调试的部分。


一、设计定义:


设计一个按键控制LED灯亮灭系统,要求使用四个独立按键控制4个LED灯的亮灭,当某按键被按


下时(如Key[1]被按下),则对应的LED灯(LED[1])被点亮,释放按键,则对应LED熄灭。


设计包含一组4bit的按键输入端口和一组4bit的按键输出端口。


二、设计输入


2.1创建新的Quartus II 工程


双击桌面图标,打开Quartus II软件(图略)


打开Quartus II软件后,会显示如图2-1-1所示的主界面:


我们可以直接在该界面蓝色窗口中选择Create a New Project(红色框选中处)来创建一个新的工程,也可以将该蓝色窗口关闭(点击蓝色窗口右上方的小叉),然后在Quartus II软件中选择Files – New Projest Wizard来打开新建工程向导。如图2-1-2所示:


点击New Project Wizard 后会弹出以下界面,直接点击Next


按照图中的提示,输入你自己的工程路径、工程名称和工程顶层实体名。其中,路径中一定不能包含有中文字符和空格,因为QuartusII软件对这些是无法解析的,会出错。工程名称和顶层实体默认为相同,也必须为英文,不得含有中文或空格符号,然后点击Next;


添加已有文件到工程中,如果你已经有写好的代码需要添加到本工程中,可以在这里添加该文件,当然,即使这里不添加也可以,因为后面我们还可以在工程文件窗口中手动添加文件。这里我们不需要添加文件,因此直接点击next;


选择目标器件,根据你的开发板的使用的芯片选择对应的芯片。左上方红色框圈出的为器件系列,包含了Altera公司很多的系列芯片,这里,我们选择我们开发板上使用的芯片系列,Cyclone IV E系列。右上方红框圈出的地方为器件筛选选项,在这里选择合适的筛选选项对于选择正确的器件能够提供很大的便利。第一个Package为器件封装,包含有TQFP、FBGA等封装,我们开发板上使用的为TQFP的封装,因此这里选择TQFP封装,第二行Pin Count为引脚数量,这个可选项与芯片封装有关,我们开发板上的芯片为144脚的芯片,因此这里选择144;第三行为速度等级,表示该芯片能够工作的最高速度,该数值越小,表明该器件的速度越快,即性能越好。在这里我们选择使用最普遍的C8速率的芯片,因此这一行选择8。


当我们设置完以上三个筛选选项后,我们法相下方列出的可选器件数量已经大大减少,列表中第一行列出的EP4CE6E22C8即为我们开发板上使用的器件,因此这里我们直接选中该芯片,然后点击Next即可。在这个列表中,列出了每个芯片所包含的资源,包括核心电压(Core Voltage)、逻辑单元数量(LEs)、用户IO数量(User I/Os)、存储器数量(Memory Bits)、9位硬件乘法器、时钟管理单元(锁相环)、和全局时钟单元。这些资源数量越多,表示该器件的规模越大,能够实现的电路越复杂,但是同时价格也会越高。因此,我们需要合理选择器件,来使我们的设计能够有最高的性价比。


当器件选择完毕后,我们需要选择我们的验证工具,即仿真工具,为了支持功能齐全的仿真验证,Altera公司推荐使用第三方仿真软件,如modelsim。其中,Altera公司也提供了modelsim的一个OEM版本,被称为Modelsim-Altera,该仿真软件能够更好的支持Altera公司的器件的仿真,而且是完全免费的,因此这里推荐一般的学习和应用中使用Modelsim-Altera作为仿真验证工具。具体设置如下图,Simulation一栏中,tool name选择modelsim-Altera,format(s)选择Verilog HDL。其它选项暂时可不用修改,选择None即可。当此两处设置完成之后,我们可以点击Next,到下一个页面后点击Finish来完成整个工程的创建,也可以直接在此处点击Finish来完成工程的创建,因为最后一页上没有任何需要设置的地方,因此这里我们一般就可以直接点击Finish了。


通过以上几步,我们的一个工程就建立好了,接下来,我们将进行设计的输入。


首先我们点击Files – New来打开新建文件选择卡,新建文件选项卡如下所示,


这里我们选中Verilog HDL File,点击OK,即可新建一个空白的Verilog 源文件。然后在该空白文件中输入以下内容:


module led(Key,Led);


input [3:0]Key;

output [3:0]Led;

assign Led = Key;

endmodule


点击保存,将文件名命名为led.v


于是,我们的设计输入便也完成了,完成之后,点击开始分析和综合按钮,来对我们的设计输入进行分析综合,如果在分析综合过程中发现设计输入存在问题,会有警告和错误的提示,请根据提示改正设计输入,知道分析综合通过为止。


当设计输入无语法错误后,就需要进行功能仿真,功能仿真之前,必须进行测试平台的设计,测试平台的设计和编写设计输入类似,也是新建一个Verilog HDL文件,并在其中将我们的设计包含进来,通过测试文件给我们的设计提供一定的激励,观察设计的输出,从而分析我们的设计是否正确。设计平台的代码如下所示:


timescale 1ns/1ns


module led_tb;


reg [3:0]Key_in;

wire [3:0]Led_out;


led led_inst(
.Key(Key_in),
.Led(Led_out)
);

initial begin
Key_in =4'b1111;
#100;
Key_in = 4'b1110;
#100;
Key_in = 4'b1101;
#100;
Key_in = 4'b1011;
#100;
Key_in = 4'b0111;
#300;
$stop;
end

endmodule


将该文件保存为led_tb.v。


通过以上步骤,我们的设计输入和测试平台都已经设计好了,接下来我们就可以进行仿真了。这里,我们采用Nativelink的方式来让Quartus II自动调用仿真工具,并完成整个仿真的工作。以下为关于NativeLink的详细设置。


点击assignment – Setting,如下所示


会弹出设置界面,如下所示,这里选择simulation 并在右侧窗口中选择Compile test bench。然后点击Test Benches,则可进入testbench设置页面。


在此选项卡上点击New,即可添加新的Test Bench,如下所示:


在弹出的选项卡里,首先点击1处的浏览文件选项,选中led_tb.v文件,然后点击3处的add选项,将该文件添加进来。然后将2处的两个地方都填上led_tb,注意不要在后面加“.v”,否则会出错。完成之后,点击OK。如下所示:


然后所有选项卡点击OK,即完成了NativeLink的设置。


此时,我们的仿真工具和测试平台已经添加进来了,只需要点击tool- Run EDA Simulation tool – EDA RTL Simulation,系统即会自动启动modelsim-Altera仿真软件,添加所有需要文件,并执行仿真,将仿真波形显示出来。


以上为前仿,一般情况下,我们还会进行后仿,后仿即为对布局布线后加入了门级延时信息的电路进行仿真,此时的仿真结果已经非常接近我们的真实电路。在前仿完成的基础上,我们只需要对设计进行一次全编译,然后在tool- Run EDA Simulation tool中选择 EDA Gate Level Simulation即可。


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
小梅哥 2019-09-04 22:10
小梅哥FPGA时序分析笔记(6.2)深入现象看本质——庖丁解牛之FPGA内数据传输模型
通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。 时钟和数据传输路径 通过上一节内容中,我绘制的那个FPGA内部数...
小梅哥 2019-09-01 21:28
小梅哥FPGA时序分析笔记(6.1)深入现象看本质——庖丁解牛之FPGA可编程原理
上一次发博客,已经是2个月前了,这中间两个月,干了件很有意义的事情,尤其是对于自己来说,感觉学到了非常多的知识和经验,每天都很忙,忙到没时间逛网站博客,终于忙完闲下来了,连载的事情可不能忘,终于可以书...
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
我要评论
0
0
广告
关闭 热点推荐上一条 /1 下一条