对IC设计而言,FPGA设计层级大致包括:系统级和行为级,RTL级,门级和晶体管级。然而更普遍的情况,FPGA只是用作实时数据采集控制、某些快速处理算法、PCIe\DDR3等高速数据通道,甚至某些简单的胶合逻辑等,FPGA开发工程师基本不会接触到门级和晶体管级。自顶而下FPGA设计方法,按照职位分工不同,大致归纳如下。

1. 系统架构师工作在系统级,一般使用高级语言如System C描述一个系统的规格,仿真整个系统的功能和性能等,往往不涉及具体的实现细节,但应该对系统实现所需要的资源等关键指标进行充分评估,可能包括模块互联总线形式,IO资源(Clock, GTX\GTP等),IP,核心算法等,确定FPGA选型,设计模块划分等。系统级设计工具推荐使用HDL designer,系统结构能够图形化表示,一目了然;多种输入方式:框图、流程图、状态机、真值表、基于接口设计(IBD)、表格式输入输出、HDL文本等,且都可以自动生成可综合的HDL代码。系统级的输出包括:系统设计描述和功能模块划分,FPGA资源分配,可用的IP及算法等。

2. 逻辑设计工程师工作在RTL级,他们使用Verilog\VHDL进行功能模块开发,需要精确到时钟周期;当然也可以使用System Generator(Matlab)和高层综合工具HLS(C语言)开发算法。RTL级的结果输出必须是仿真正确,代码可综合的。条件允许的话,需要进行后仿真或板级验证。RTL级的输出包括:FPGA设计文档,可综合的FPGA设计代码(不限于Verilog\VHDL, systemGen或者HLS的设计输出),性能及资源分析报告,验证方法及测试结果。

3. 验证工程师工作在行为级,他们对设计好的代码进行验证,编写的代码主要是用来产生激励,这些激励大部分抽象层次更高,仿真效率更高,然后检查相应结果。这些代码不会实现为具体硬件,有些并不需要精确到时钟周期,只是在仿真工具(ModelSim\ISim\Questa)中运行。验证工作的输出包括:验证方法步骤及代码,验证报告等。

4.硬件测试工程师的任务是对配置好的FPGA进行板级测试,在实验室环境下搭建测试平台,使用测试仪器仪表或者测试工装产生激励条件,验证测试结果是否满足设计要求。测试工程师可能完全不懂FPGA,这就要求测试文档需要相关的设计工程师的参与。这一阶段的输出包括测试步骤及接收标准文档,测试报告等。

这是我在项目中采用的自顶而下FPGA设计方法,人手够的时候,按照定义好的设计流程能够有条不紊的开展工作,减少项目成员间相互推卸责任、提高工作效率;有时候资源不足,自己身兼数职,任务繁重些,倒也自得其乐。

自顶而下设计FPGA的更多相关文章

  1. 使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值

    使用Intel的FPGA电源设计FPGA 供电的常用反馈电阻阻值. 当前仅总结使用EN5339芯片的方案 Vout = Ra*0.6/Rb + 0.6 芯片手册推荐Ra取348K,则 3.3V时,取R ...

  2. 解决VS在高DPI下设计出的Winform程序界面变形问题

    在目前高分屏流行的情况下,windows缩放与布局仍然设置为100%就显得太小(特别是笔记本),通常会调整为125%或150%, VS在缩放与布局设置为非100%的时候,就会自动启动DPI感知模式,以 ...

  3. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  4. 异步fifo的设计(FPGA)

    本文首先对异步 FIFO 设计的重点难点进行分析 最后给出详细代码 一.FIFO简单讲解 FIFO的本质是RAM, 先进先出 重要参数:fifo深度(简单来说就是需要存多少个数据)           ...

  5. [置顶] Linux下的截图小工具

    Linux下的截图工具scrot 基于命令行 先下载:scrot apt-get install scrot 对该工具的操作: 分为以下几个部分 1.抓取整个桌面 scrot pic.jpg 2.抓取 ...

  6. [置顶] linux下让php支持mysql——寻找消失的mysql

       问题 最近我都在忙一个课件录制系统.这两天发现其中服务器端的一个更新数据库的php脚本运行有问题,一些本应该是系统自带函数却无法运行.于是我展开了调查... 服务器端是centos系统,其中ph ...

  7. [置顶] MyEclipse下安装插件方法(properties文件编辑器Propedit为例)

    网上流传了很多安装插件的方法.在这里我只讲解一种方法. 因为我认为这种方法有以下两个优点:第一.简单,方便安装:第二.对于自己安装的插件易于管理. 我的myeclipse版本号为10.5,操作系统为w ...

  8. [置顶] .NET下枚举类型的Save和Load分析

    今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...

  9. [置顶] Linux下文件和目录权限说明

    在Linux下使用ls -l或者ll命令可以查看文件和文件夹的权限.结果显示类似于: drwxrwxrwx,这里分为四组,分别为文件类型,文件所有者的权限(读写执行),文件所有者所在组用户的权限(读写 ...

随机推荐

  1. 使用automake等命令自动生成Makefile文件 (转载)

    使用automake等命令自动生成Makefile文件   Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Lin ...

  2. liunx ln -s 软连接

    项目中遇到不同项目中上传图片共享问题 解决方法就用到了 liunx的ln -s 的软连接, 用法: liunx ln -s 文件路径 实现共享思路:不同的目录都软连接到同一个目录

  3. UIautomator Python测试

    #!/usr/bin/env python # -*- coding: utf-8 -*- import unittest from mock import MagicMock, patch impo ...

  4. C3P0的两种使用方法

    方法一: package   C3P0; import   java.sql.Connection; import   java.sql.SQLException; import   java.bea ...

  5. java-方法练习

    一.定义方法的最主要的两个步骤: 1.先明确结果(即返回值类型要先明确) 2. 在实现功能时是否有未知内容参与运算,即明确函数的参数列表(参数类型,参数个数) 例如:定义一个九九乘法表的功能.  思路 ...

  6. java中的成员变量和局部变量区别

    1.作用域不同 成员变量的作用域在整个类内部都是可见,可用的: 局部变量的作用域仅限于定义它的方法,不能被其它方法调用: 2.初始值不同 java会给成员变量一个初始值,初始值为0: java不会给局 ...

  7. cf #379div2

    A. 题意:输入一串字符只含A和D,判断A和D的多少比较, 分析:直接计数 B. 题意:给出数字2,3,5,6的个数,用这些数组成256和32,要求最后组成的数的和最大 分析:贪心,优先组成256,然 ...

  8. PL/SQL导出到execl中,数据前面的0发生丢失的解决办法

    ERR出现的场景再现: 使用 PL/SQL导出按钮,选择‘CSV文件’,保存为1.csv,后用execl打开,复制到VuGen中作为login脚本的参数化文件username. ERR及发现过程: 在 ...

  9. ws_ webpack+reactjs+redux+nodejs认识

    /** * Created by yangpu on 2016/9/18. */ //环境安装方法1.npm install //加载依赖模块2.npm run build //打包没有压缩,开发环境 ...

  10. Hprose question

    1 在服务端 接口的开发中 如果定义了index()方法 中间不能够有参数,否则报错. 2 接口方法中的参数 最好使用单参数 如fun($uid ) 或者 如果需要多个参数 fun($param){$ ...