0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

设计FPGA的过程举例

Hx 作者:工程师陈翠 2018-07-13 08:17 次阅读

数字电路经过半个世纪,从分立元件到小规模集成电路、中等规模集成电路、大规模、超大规模,集成度越来越高,运算能力越来越强,功耗越来越低,人类已经将数字集成电路发展到接近摩尔定律极限。

FPGA是这样一类数字电路,它可以反复修改自身逻辑功能,具有灵活多变的特性,设计FPGA的过程其实是遵循数字电路设计的一般流程的:

(1)需求分析

(2)抽象逻辑表示(真值表、状态流图)

(3)具体逻辑表示(HDL、布尔方程)

(4)将逻辑表示综合为可实现的电路(门电路、LUT和触发器)

(5)验证

FPGA逻辑工程师一般是从应用需求出发,用Verilog或VHDL来描述算法,并通过综合实现工具、仿真工具、调试工具来协助完成设计。

针对Xilinx器件,开发工具为ISE(Project Navigator,ISim,iMact,Chipscope),有时需要用Modelsim工具完成HDL仿真。

Zynq内部包含PL,资源前面已经说过了,大量LUT,FF,DSP48E1等着你来组织,开发PL可以完全脱离PS,采用传统开发工具ISE完成。

下面给出只利用PL实现流水灯的例子,希望能有抛砖引玉的功效。

上一节介绍了使用ARM控制流水灯的例子,这里完成同样的功能,但用PL实现控制,将PS冷落一旁,不用理它。

首先运行ISE Design Suite 14.5,打开Project Navigator软件。

设计FPGA的过程举例

File-》New Project,新建一个工程,弹出对话框如下:

设计FPGA的过程举例

按照上图进行工程设置,然后点Next

设计FPGA的过程举例

设置器件为XC7Z020,即我们Zedboard上的主芯片型号。封装为CLG484,速度级别为-1,语言选择VHDL。点Next,Finish。

我们分析一下怎样完成这个设计。数字电路都需要有时钟源,我们的PL也不例外,板子上有专为PL提供时钟输入的晶振,在原理图中找到:

设计FPGA的过程举例

设计FPGA的过程举例

可见晶振输入为100MHz,直接送入Y9引脚(位于PL部分)。如此高的时钟速率,需要经过分频,LED闪烁速率最好低于10Hz,这样人眼才能分辨出来。

用ISE提供的IP核可以实现分频,在工程中Add Source:

设计FPGA的过程举例

选择IP(Core Generator),输入名称为clk_module,如上图,点Next。

设计FPGA的过程举例

从“FPGA Features and Design”中“Clocking“下找到Clocking Wizard,点Next,Finish。进入配置IP的环节。

设计FPGA的过程举例

第一步,默认设置,Next。。。

设计FPGA的过程举例

第二步,将CLK_OUT1输出频率设置为5MHz(貌似不能再小了),其他不改,点Next。

第三步里把复位和锁定引脚去掉,如下图所示,后面都一路Next到结束。

设计FPGA的过程举例

这样生成了第一个分频器,输入为100MHz,输出为5MHz,需要进一步分频。

再New Source一下,选VHDL模块,命名为myled.vhd,输入代码如下:

----------------------------------------------------------------------------------

-- Company:

-- Engineer:

--

-- Create Date: 20:59:03 08/16/2013

-- Design Name:

-- Module Name: myled - Behavioral

-- Project Name:

-- Target Devices:

-- Tool versions:

-- Description:

--

-- Dependencies:

--

-- Revision:

-- Revision 0.01 - File Created

-- Additional Comments:

--

----------------------------------------------------------------------------------

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

-- Uncomment the following library declaration if using

-- arithmetic functions with Signed or Unsigned values

--use IEEE.NUMERIC_STD.ALL;

-- Uncomment the following library declaration if instantiating

-- any Xilinx primitives in this code.

--library UNISIM;

--use UNISIM.VComponents.all;

entity myled is

Port ( clk : in STD_LOGIC;

rst : in STD_LOGIC;

led : out STD_LOGIC_VECTOR(7 downto 0));

end myled;

architecture Behavioral of myled is

signal clk_5M : STD_LOGIC;

signal localbuffer :STD_LOGIC_VECTOR(7 downto 0);

component clk_module

port

(-- Clock in ports

CLK_IN1 : in std_logic;

-- Clock out ports

CLK_OUT1 : out std_logic

);

end component;

begin

myclk : clk_module

port map

(-- Clock in ports

CLK_IN1 =》 clk,

-- Clock out ports

CLK_OUT1 =》 clk_5M);

process(clk_5M,rst)

variable cnt : integer := 0;

begin

led 《= localbuffer;

if(rst = ‘1’) then

localbuffer 《= X”01“;

elsif(clk_5M‘EVENT and clk_5M = ’1‘)

then

cnt := cnt + 1;

if (cnt = 5000000)

then

localbuffer 《= localbuffer(6 downto 0)&localbuffer(7);

cnt := 0;

end if;

end if;

end process;

end Behavioral;

这里使用计数器实现了分频,输出为1Hz。

Add Source,选UCF,命名myled.ucf,内容如下:

##

## This is an updated UCF file from the original version by Digilink.

## The CS signal has been removed and all the other signals are mapped to

## proper pin on the Zynq FPGA.

## For the reset, the middle-push button is used.

## Modified by Farhad Abdolian (fabdolian@seemaconsulting.com) Nov. 5, 2012

##

Net ”clk“ LOC=Y9 | IOSTANDARD=LVCMOS33;

Net ”clk“ TNM_NET = sys_clk_pin;

TIMESPEC TS_sys_clk_pin = PERIOD sys_clk_pin 100000 kHz;

NET ”led[0]“ LOC = T22;

NET ”led[1]“ LOC = T21;

NET ”led[2]“ LOC = U22;

NET ”led[3]“ LOC = U21;

NET ”led[4]“ LOC = V22;

NET ”led[5]“ LOC = W22;

NET ”led[6]“ LOC = U19;

NET ”led[7]“ LOC = U14;

NET ”led[7]“ IOSTANDARD = LVCMOS33;

NET ”led[6]“ IOSTANDARD = LVCMOS33;

NET ”led[5]“ IOSTANDARD = LVCMOS33;

NET ”led[4]“ IOSTANDARD = LVCMOS33;

NET ”led[3]“ IOSTANDARD = LVCMOS33;

NET ”led[2]“ IOSTANDARD = LVCMOS33;

NET ”led[1]“ IOSTANDARD = LVCMOS33;

NET ”led[0]“ IOSTANDARD = LVCMOS33;

#We use the center push button as the reset for this project

Net ”rst“ LOC = P16 | IOSTANDARD = LVCMOS33;

源文件都已经OK,接下来进行综合、实现、生成bit、iMPACT下载即可(按照标准FPGA开发流程),效果与前面的实验相同,略去不表。这里由于逻辑比较简单,省去了功能仿真、时序仿真等流程。真正的逻辑开发最好经过仿真后再下载到硬件中。

从上面这个例子发现,不考虑ARM时,PL部分开发与普通的FPGA开发并没有任何区别。

恰恰是由于ARM的存在,我们的PL可以实现更多复杂的功能!

1. DDR控制。采用逻辑来实现DDR2存储器访问非常复杂,调试也非常耗费时间。ARM核的存在,使得PL可以借助ARM来做DDR2控制器,访问时只需遵循PS与PL之间的通信协议——AXI就可以了。

2. 操作系统。同样,FPGA上运行操作系统是一件费力不讨好的事情,浪费大量逻辑资源,如果用软核实现CPU,性能又不高。如果有ARM硬核负责操作系统的日常维护,必要时FPGA仍然通过AXI总线与ARM上的操作系统进行交互。

3. 网络

4. USB通信

从传统FPGA开发到Zynq上PL开发需要改变一个观念:逻辑可以实现一切。嵌入硬核恰恰说明一点:有些事还是别让逻辑来做!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1627

    文章

    21679

    浏览量

    602174
收藏 人收藏

    评论

    相关推荐

    Verilog语言在FPGA中运用的简单实例有什么,求举例

    Verilog语言在FPGA中运用的简单实例有什么,求举例
    发表于 03-16 00:59

    FPGA大神帮你解决开发过程的问题

    的,在有问题的时候能有人能够解答,也是我感触很深的一点,大家在帖子下方发出学习过程中遇到的问题,我会力所能及的回答大家的问题。希望大家在FPGA开发的道路上越来越顺利。提问的范围举例:1、FP
    发表于 10-14 10:08

    举例说明FPGA作为协处理器在实时系统中有哪些应用?

    举例说明FPGA作为协处理器在实时系统中有哪些应用?FPGA用于协处理器有什么结构特点和设计原则?
    发表于 04-08 06:48

    锁相环设计举例

    锁相环设计举例:锁相环设计主要包括:确定所需环的类型,选择适当的带宽,指出希望的稳定度。下面将举例说明要满足这些设计要求而常用的基本方法。
    发表于 09-05 08:51 102次下载
    锁相环设计<b class='flag-5'>举例</b>

    简化Xilinx和Altera FPGA调试过程

    简化Xilinx和Altera FPGA调试过程:通过FPGAViewTM 解决方案,如混合信号示波器(MSO)和逻辑分析仪,您可以在Xilinx 和Altera FPGA 内部迅速移
    发表于 11-20 17:46 27次下载

    DSP和FPGA共用FLASH进行配置的方法

    本文举例分析了DSP的引导装载过程FPGA的配置流程,并据此提出了一种使用单个FLASH存储器实现上述两个功能的方法。
    发表于 07-21 17:14 13次下载

    FPGA应用举例

    FPGA学习资料,有兴趣的同学可以下载看看。
    发表于 04-07 11:10 14次下载

    FPGA应用举例

    FPGA学习资料,有兴趣的同学可以下载看看。
    发表于 04-11 13:48 86次下载

    热敏电阻应用举例

    热敏电阻应用举例:包含PTC和NTC的应用及电路
    发表于 08-31 13:56 28次下载

    DSP汇编编程及应用举例

    DSP汇编编程及应用举例
    发表于 12-06 15:22 24次下载

    FPGA选型和设计过程

    如果你在采用FPGA的电路板设计方面的经验很有限或根本没有,那么在新的项目中使用FPGA的前景就十分堪忧——特别是如果FPGA是一个有1000个引脚的大块头。继续阅读本文将有助于你的FPGA
    的头像 发表于 11-01 09:44 2039次阅读

    FPGA设计过程中常用的FIFO

    无论何时,在复杂的 FPGA 设计过程中,都不可避免地需要在模块之间发送数据,实现这一点的常用的是 FIFO。
    的头像 发表于 09-20 09:10 2464次阅读

    触发器应用举例

    触发器应用举例
    的头像 发表于 03-15 16:40 1576次阅读
    触发器应用<b class='flag-5'>举例</b>

    FPGA的编译过程讨论

    构建FPGA的第一阶段称为综合。此过程将功能性RTL设计转换为门级宏的阵列。这具有创建实现RTL设计的平面分层电路图的效果。
    发表于 06-21 14:26 843次阅读
    <b class='flag-5'>FPGA</b>的编译<b class='flag-5'>过程</b>讨论

    Pt文件及举例

    Pt文件及举例
    的头像 发表于 05-15 09:42 1583次阅读