找回密码
 注册
关于网站域名变更的通知
查看: 236|回复: 1
打印 上一主题 下一主题

FPGA设计全流程

[复制链接]
  • TA的每日心情
    难过
    2019-11-19 16:03
  • 签到天数: 1 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2020-4-24 11:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    第一章 Modelsim编译Xilinx: |6 O9 h" E% A) A  S" O
    0 M! j0 b/ w, I3 V% O7 e. H, e# ?
    本章介绍如何编译HDL必须的Xilinx库和结构仿真。* z) z" V$ N+ z% u8 T8 Y1 j
    创建将被编译库的目录
    / C6 {8 r" J. ~/ F. ^) v- `在编译库之前,最好先建立一个目录(事实上必须建立一个目录),步骤如下。(假设Modelsim的安装目录是“$Modeltech_6.0”,ISE的安装目录是“$Xilinx”)
    & l, f% ~3 i1 W3 b8 h◆ 在“$Modeltech_6.0/”目录下建立一个名为XilinxLib的文件夹;
    $ @! w4 R; K" @. D' E, Q5 p◆ 启动Modelsim后,从“File”菜单项中点击“Change Directory”并指定到刚刚建立的那个文件夹“XilinxLib”;
    $ y: n. q8 L: N* q. B  W◆ 接下来要做的事情是将Xilinx库编译到“XilinxLib”文件夹中。有三个库需要被编译。它们分别是“simprims”,“unisims”和“XilinxCoreLib”;(所有这些库文件都在“$Xilinx/verilog/src”目录下)
    % Z4 S! z* T. a◆ 点击Modelsim中的“Workspace”窗口,建立一个名为Xilinx_CoreLib的新库;(这个操作创建一个名为“Xilinx_CoreLib”的文件夹,你可以在“Workspace”窗口中看到它)
    ! W" P7 {  n* t7 d◆ 现在开始编译!在“Compile”菜单中点击“Compile”,选择“$Xinlinx/verilog/scr/XilinxCoreLib”目录中所有的文件,在弹出的对话框中选中刚刚建立的“Xilinx_CoreLib”文件夹,再点击“Compile”按钮就可以了编译了;5 T+ S( _# T5 ~0 [9 y- Z

    5 b5 k. W/ |+ z" ~◆ 用同样的方式编译其他两个本地库(“simprims”和“unisims”);7 ^, U7 e( }4 |  n
    " @' G& `6 Q+ ?  q- e
    第二章 调用Xilinx CORE-Generator/ a) ?1 Q4 x( C6 _( [9 b) X# b( G! j# L
    & p$ Q* n& d( j# r7 p6 P, T
    当需要在设计中生成参数化和免费的IP内核(黑箱子)时,无论是通过原理图方式还是HDL方式,CORE-Generator都是一个非常有用的程序。" D# ], b; |7 G8 X/ Z/ F' I0 {; _
    利用CORE-Generator创建一个IP核
    ; c* p& Z# U2 J3 }' Y利用Xilinx提供的CORE-Generator来生成IP核是非常简单的。内核是全参数化的,这就意味着你只需要在空白处填入几个数字和参数,然后程序就会自动产生一个你所需要的- y4 P! D5 h4 z4 a9 D4 y, U" Z2 }

    # A& v! i, T9 N( ^8 z/ P内核。(有些内核是全免费的,有些则没有这么慷慨)
    . ?# o0 }& H, q# B4 e" `  t4 n0 S! _& r利用CORE-Generator来生成IP核的步骤如下:# L3 ]2 Q" Q, y* s$ Z$ j
    ◆ 在“程序”中找到“Xilinx”项,然后在“Accessories”中启动单独存在的“CORE-Generator”;
    9 {' a6 d% h7 M, a) G) G$ e! h& n8 v◆ 在“Part”标签栏中选择恰当的FPGA模型;
    8 W2 \+ {5 {* F6 Q8 Z' Q/ F8 N7 L; s  L% M' Z
    ◆ 从“Generation”标签栏中选择正确的设计流;(完成后按“OK”按钮)
    5 ]) S1 Q/ N3 o2 U4 x◆ 定制你的参数化内核;
    9 l& J( _5 f, U: o4 z◆ 在内核生成的同时,会弹出一个“Readme File”的信息框来通知一些重要的信息;
    ! k2 N. S' L) o8 ^! M' v% I1 u9 r3 C
    ◆ “*.v”文件是用来作仿真和综合用的,而“*.veo”文件是用来作综合实例用的。(调用意味着把相应的文件加入Synplify.Pro工程中,而实例指的是可以拷贝这个文件中的某些线到HDL设计的顶层模块中去。退出!)
    6 k; b0 U' r5 k0 c$ @/ L
    , I. A$ [3 d/ J0 @1 Z9 F! @+ x第三章 使用Synplify.Pro综合HDL和内核9 {; P% C8 m( X  W% k" d
    - |/ V: R2 K2 g. z: V6 W. {9 K6 Z" Y
    综合是将设计好的HDL代码,图形代码和原理图转变成逻辑单元的技术。同与硬件执行和物理布线非常接近的物理综合相比,逻辑综合是更高层次的综合技术。
    8 ]( h" u0 D4 O% Q7 U利用Synplify.Pro进行逻辑综合5 `/ n/ A; a& X9 ^
    Synplify.Pro对于大容量低价格的Xilinx Spartan系列FPGA而言,有着非常好的综合能力。) {/ u3 H, Y6 n3 S$ F! ]0 `& `7 N% p9 t  S  \
    具体步骤如下:$ x! u9 w8 C! p3 ]
    ◆ 首先创建一个工程;! Y, A4 \. S  G( f
    ◆ 往工程中加入HDL文件(我的演示文件有三个文件,CORE-Generator生成的“async_fifo.v”和“dcm4clk”和一个Verilog顶层文件“top.v”)。在Synplify.Pro环境中设置“Implementation Option”;(如果读者非常熟练的话,可以省略这步)
    # |" X2 W! n. g, u◆ 往CORE-Generator生成的两个Verilog文件中插入Synplify.Pro能够识别的指示这些指示告诉综合器如何处理这两个特殊的文件;4 u9 u! C4 m' V
    ; Q' g% T! h! Z- L$ g/ I
    ◆ 插入“/*synthesis syn_black_box*/”指示通知Synplify.Pro把模块当作黑箱子来处理,同时指示“/*synthesis syn_isclock=1*/”表示这个作为时钟输入端的端口不能被综合器识别,因为它除了端口名外没有下层结构;( u( p/ ?( \% r. k
    ◆ 将工程保存在合适的地方,然后综合这个工程;4 \( }, c8 \2 h8 G* i
    ◆ 在综合完成后,选择“Technology View”按钮来观察层次结构;(你可以发现内核: ~8 w5 V: p% n0 w

    ' J) x/ g6 K- R: B7 S" X  t1 {  y4 H◆ 不管你相信与否!Synplify.Pro已经生成了你所希望的东西。(拥有专用Clock-Input-Buffer,IBUG连接的DCM结构,并且有一个从Global-Clock-Buffer,BUFG的反馈结构“CLKFB”)  B% S! _( N& K# ]! R( ]

    ; d$ l9 z" T- y, y第四章 综合后的项目执行8 M2 p  P8 k* w

    & ]4 E5 X* |6 V' K: l% X执行是将生成的位文件下载到FPGA的最后一个步骤。, L2 N3 n# j. J5 ^/ G: e' |
    " I- I+ T8 q" B$ B7 f0 O; ^% s5 O
    同时创建不同的时序模型(post-translate模型,post-map模型和post-PAR模型)和时序报告。6 e) g5 k' q; Y9 ?& d  c+ i% N
    ISE,唯一可以用来执行的工具) [( }5 G" n& [% C( v
    ISE控制着设计流的各个方面。通过Project Navigator界面,可以进入所有不同的设计实体和实际执行工具。同时也可以访问于工程有关的文件和文档。Project Navigator包含一个平坦的目录结构;
    - ~$ [3 ?, d3 `% n' y* ~在演示项目中,ISE的一些贫乏的功能不得不让道给其他的第三方软件,例如ModelSim.Pro和Synplify.Pro,因此ISE一般仅仅被用作执行工具。
    7 [+ o. I/ `1 i9 Q* @* u◆ 启动ISE,用“EDIF”作为文件输入;(“EDIF”文件由Synplify.Pro软件生成,作为终端设计文件,可以被大多数的FPGA开发环境识别,例如ISE,Quartus,ispLevel。)9 \: v5 F7 r' \- X7 k

    ) l- B+ u# a% t' i# @# H/ N. R- Z% D◆ 在建立了ISE工程后,可以加入其他两个文件,一个是与内核相关的“*.xco”文件,另一个是与DCM结构有关的“*.xaw”;
    ! D: B  e( J  \4 \8 y◆ 现在可以生成需要仿真的所有的模块;(点击下划红线的选项)
      R, L6 G6 e% y- F( l4 f# t◆ 如果想仿真post-PAR模块,最好首先定义引脚,特别是专用的外部时钟引脚;
    2 U( @. N4 O7 N' z# ]◆ 启动“map”程序中的“Floorplaner”选项来定义引脚;
    # B, }6 u# X! Y3 K◆ “DCMs”和“IBUFGs”应该被放在正确的位置。2 s/ t: Y+ b* I; N1 i: o

    / [9 w( C* x9 j0 P2 m" d8 h仿真是用来验证设计的时序和功能是否正确的调试方法之一。
    & e) [) f4 r8 W7 f在验证调试电路和观察波形的过程中,应该进行四个不同类型的仿真。
    ' b4 e; S6 q: k7 `; g0 o& D不同的仿真类型针对的不同的平台。功能仿真用来验证设计的功能是否正确;# A0 v3 L8 w% ~
    post-translate仿真用来验证设计的基于原语延时;post-map仿真用来仿真基于原语延时和网络延时;最后,post-PAR仿真在post-map仿真的基础上加入了输入输出和布线延时。
    2 s2 X4 q5 d- X" a' D$ ?我不会给出演示设计的全部详细的仿真过程,但是给出了重点和重要的步骤。只给出了post-PAR仿真过程,列出了对于所有其他三种仿真需要的不同文件。(实际上,不同的文件是不同的参考时序模型:<DesignName>_translate.v是post-translate模型,<DesignName>_map.v是post-map模型。)
    , _& [( V9 v; r3 @- i: n◆ 对于post-PAR仿真,需要四种类型的文件,“glb1.v”是用来作FPGA全局复位的(从“$Xilinx/verilog/src”目录中拷贝),“<DesignName>_timesim.v”用来作post-PAR仿真(必须命名为<DesignName>.v),<TestBenchName.v>用来作仿真用和<DesignName>_timesim.sdf用来作时序后注。7 z2 S* j8 x2 _' U1 M6 l- Z; T
    ' Z( M0 o% Z3 J+ |9 E2 S
    ◆ post-map仿真跟上述类似,post-translate没有“*.sdf”文件,功能仿真除了没有“*.sdf”文件外还没有“glb1.v”文件;) x8 s+ ~  R, y) L
    ◆ 通过点击“Simulation”菜单下的“Start Simulation”命令把前面讨论过的三个Xilinx库文件加入到当前仿真库中;  Q) n0 y8 _( p; t

    & v- b) g* l% r; E/ }2 \◆ 在“Design”栏中选择“glb1”和“<TestbenchName>”,仿真设计;6 z3 o* F1 Q/ m4 z% }
    ◆ 在“Transcript”窗口中输入“add wave*”命令,你就可以到在波形窗口中出现了信号6 y1 ^' j, `& t* G$ i6 b! P

    该用户从未签到

    2#
    发表于 2020-4-24 13:36 | 只看该作者
    同与硬件执行和物理布线非常接近的物理综合相比,逻辑综合是更高层次的综合技术。
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-8-21 01:47 , Processed in 0.109375 second(s), 23 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表