红芯电子陆续推出了4块FPGA开发板,在不断的改进和加强功能的同时,也在根据顾客的反馈做一些修正。很多人反应例程不容易看得懂,并且对其中的一些技巧无法理解。于是我们决定写一个文章,来指导大家如何学习面向FPGA的逻辑设计,从专业的角度来分析如何去实现电路。我们也会加入我们的例程的详细分析,同时也会分析一些顾客发过来让我帮忙Debug的Code,指出其中的错误,让大家可以引以为鉴。我们会陆续推出,如有任何的问题,大家可以和我一起讨论和交流。

该如何学习面向FPGA的逻辑设计?

学习面向FPGA的逻辑设计是一个因人而异的过程,因为基础,目标的不一样,学习的方法和过程都会有很大的差异,但是我们仍然可以总结出其中的规律。从而总结出一个大致相同的过程:

1、 学习语法。

a)       语法是相对简单的,找一本语法的书,认真的学习一下Design和Verify的语法,任何一个基础再差的人,学习一个星期也绰绰有余。

b)       怎么样才能叫语法学好了呢?如果你看见红芯电子的例程,不会有语法上的问题,就可以了,不需要钻牛角尖,设计当中,主要的语法如always块,assign,case明白就可以了,当然,验证要求的语法要多一些。这些可以通过后面设计当中慢慢强化。

2、  学习简单的电路描述。

a)       在学习语法的同时,你肯定会尝试着去写一些简单的电路,这个时候肯定是模仿居多,比如说控制LED灯的闪烁,数码管的控制等简单电路。

b)       这个阶段,我建议大家写一些基本的Code并明白他会综合成怎么样一个电路。比如说case语句生成怎样一个电路,和 if else 生成的电路会有怎么样的区别。

3、 学习简单的TestBench。

a)       Testbench是测试的激励文件,毕竟你写的Code肯定需要Debug,最好的办法就是仿真,用Modelsim,Active-HDL,NCverilog等工具。

b)       这个阶段你只要能写一些简单Testbench就可以了,让你能看见波形,通过波形来debug。具体可以参考红芯电子例程里面的XXX_tb.v的文件。

4、  学习各种接口设计。

a)       在语法,简单电路,Testbench都没有问题之后,就可以开始学习一些常见接口的设计了,比如UART,SPI,I2C,1-wire等,对应的器件和接口有串口,SPI Flash,串行AD/DA,EEPROM,DS18B20,IR,PS2,DS1302Z等

b)       我相信,这个时候,作为初学者,其实还是模仿居多,我并不反对。但是一定要注意,一个一个来,每学习一个,需要仔细的去分析相应器件的Datasheet,然后参考别人设计的实现方式,特别是细节。然后自己尝试着写,看能否实现功能,最后要自己换一个同类型的接口,在不参考其他人的情况下,能否实现。不能实现就需要继续分析原因,能实现就可以学习下一个类型的接口。

c)       常见的接口很多,特殊的接口更多,是没有办法一个一个学完的,作为初学者,需要做到就是学习一个掌握一类,如果你能仅参考Datasheet(在工程中,很多时候我们确实只有Datasheet)完成相应的接口设计的时候,你就已经成长了。

d)       在红芯电子提供的例程中,所有以*_CTL.v的module就是接口层,可以参考一下。

5、  学习模块划分技巧。

a)       在各种基本的借口设计都已经完成以后,这个时候你就可以尝试着写一些更为复杂的电路来实现一些功能呢?比如说做一个“数码管+RTC”来实现时钟的功能,能否配合按键使之可以配置时钟,能否加上闹钟的功能,能否加上计时器的功能?能否将数码管换成LCD?如果这些都实现了,你会发现这就是一个电子表。

b)       这个时候你就要学习模块划分了,毕竟一个再简单的系统,也是分许许多多的模块的,为了有更清晰的思路,为了更好的维护,我们需要将整个设计划分开,分成更加小的模块,然后一个一个实现并测试,总后再来一个综合测试。

c)       这个部分以后我们还会有专门章节来详细阐述。

6、  学习构建自动化测试环境。

a)       在做一些小东西的时候,特别是分层设计以后,你肯定会觉得简单的testbench不够用了,每一个module都要单独写Testbench,为了测试不同情况下就需要写很多的Testbench,这个时候肯定是很麻烦的,这个时候就需要构建一个自动化的测试环境。

b)       在Linux下用Makefile可以很简单的构建,但是就目前大家的开发环境全部是在Windows下,也可以构建,用Modelsim的do文件也可以构建。

c)       因为篇幅的关系,这个部分以后我们还会有专门章节来详细阐述。

7、 学习常见Device Control 设计和验证。

a)       这个时候,一些小系统可以轻松完成的时候,就会发现,小的东西可以轻易的做出来,但是复杂的东西就比较困难。这时你就需要学习一些较大的控制电路的设计,比如SDRAM control,LCD control(裸屏)。

b)       这些Controller都有一个共同的特点,就是要求高速。要知道,高速电路是比较考验技术的。特别是IO速度超过100M以后,就会需要综合考虑器件选型和电路优化了。

c)       这类controller里面,基本上都是用寄存器来控制,就是与外部用总线相连。外部总线配置controller里面的寄存器,从而修改controller里面的配置,并且接收外部总线的数据来实现功能,要学习并习惯这种控制方式。

d)       这个时候我建议不要轻易的模仿别人的电路,原因很简单,简单的电路和基本的技巧都已经没有问题了。剩下的就是模块的划分和模块内部的组合以及电路的优化。这个东西就靠自己的理解,每个人的情况和出发点都不一样,模仿已经没有意义了,而且,独立跨过这道坎,在非专业的设计里面,你已经是一个小高手了。

8、  学习划分系统模块,分配任务。

a)       在FPGA常见的嵌入式系统里面,一般都是ARM+FPGA的结构,这个时候需要你根据对FPGA与ARM的理解来分配任务,有些任务适合FPGA来做,有些任务适合ARM来做,这个阶段应该是能够从需求里面分析出ARM FPGA各自擅长和承担的任务。

b)       一般来说FPGA都是做为一个协处理模块,负责高速IO,高精度时序控制,并行多路计算,或者是复杂算法的实现,比如FFT。

c)       从系统的层面分析问题的能力,很难通过学习来得到,必须要经过一个又一个得项目来实现。

转载于:https://www.cnblogs.com/Redcore/archive/2010/10/26/1861955.html

红芯电子对FPGA逻辑设计的解读相关推荐

  1. FPGA逻辑设计回顾(13)RAM以及ROM的IP核定制以及关键参数

    文章目录 前言 RAM IP的定制 Xilinx的IP定制位置 Block RAM的定制过程 第一页 第二页 第三页 第四页 第五页 Block RAM的延迟讨论 ROM IP核的定制 总结 前言 本 ...

  2. FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证

    前言 本文首发:FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证 RAM以及ROM在FPGA中的实现大体有两种方式,一种是使用IP核定制,一种是RTL设计. 也许有人会反驳,那原语呢? ...

  3. FPGA逻辑设计回顾(11)FPGA以及PC中的RAM与ROM

    文章目录 前言 RAM以及ROM在计算机中的应用 什么是存储器? 什么是硬盘驱动器? 其他类型的存储器 什么是RAM? RAM的类型 SRAM DRAM 什么是ROM? ROM的类型 掩膜ROM PR ...

  4. FPGA逻辑设计回顾(8)单比特信号的CDC处理方式之Toggle同步器

    文章目录 前言 脉冲反馈展宽同步器技术补充说明 RTL代码 行为仿真 低电平脉冲的展宽处理 切换同步器的原理与实现 RTL实现 前言 本文首发自:FPGA逻辑设计回顾(8)单比特信号的CDC处理方式之 ...

  5. FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异

    文章目录 前言 DDR的前世SDRAM DDR的今生以及演变版本:DDR/DDR2/DDR3 DDR/DDR2/DDR3/DDR4之间简单对比 速度对比 电压对比 延迟对比 预取差异 电阻端接对比 物 ...

  6. FPGA逻辑设计回顾(1)新手易犯的逻辑综合错误之always块

    前言 注:本文首发自FPGA逻辑设计回顾(1)新手易犯的逻辑综合错误之always块 本文中用到了如下的小标题: "心中有路"与综合推断 "心中无路"与无从推断 ...

  7. FPGA逻辑设计回顾(3)多比特信号上升沿检测的设计方式与陷阱?

    前言 注:本文首发自FPGA逻辑设计回顾(3)多比特信号上升沿检测的设计方式与陷阱? 在总结本文最后的多比特上升沿检测之前,我们先把备用知识讲清楚,摊开来,以免造成模糊不清的默许! 逻辑运算符与位元运 ...

  8. FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义

    前言 本文首发自:FPGA逻辑设计回顾(10)DDR/DDR2/DDR3中的时序参数的含义 上篇文章:FPGA逻辑设计回顾(9)DDR的前世今生以及演变过程中的技术差异有提到,制造商会以一系列由破折号 ...

  9. AD7760数据采集系统设计 [FPGA逻辑设计]

    1 AD7760简介 AD7760是一款高性能.24位Σ-Δ型模数转换器(ADC),融合了宽输入带宽.高速特性与Σ-Δ转换技术的优势,2.5 MSPS时信噪比可达100 dB,因此非常适合高速数据采集 ...

最新文章

  1. python使用matplotlib可视化使用subplots子图、subplots绘制子图并为可视化的子图添加主标题(subplots main title)
  2. PowerDesigner显示注释字段问题
  3. JAVA中将带负数的String字符串转换为int型数组方法
  4. class路径快捷 xml配置_SpringBoot 配置文件详解(告别XML)-class文件
  5. android上如何写配置文件
  6. eclipse导出Maven依赖的Jar
  7. 代码设计的基础原则_设计原则:良好设计的基础
  8. 网络——发送email(一个简单荔枝)
  9. sql server分布式_如何安装,配置和使用SQL Server分布式重播
  10. 这个漏洞能换几杯星巴克?在线等,挺急的
  11. pythonjam安装库_python及pycharm的安装
  12. Form的method方法get和post的区别
  13. 记录一次json转换的经历
  14. 什么是Internet cookie?
  15. Web安全测试之跨站请求伪造(CSRF)
  16. 计算机用户 图片存储位置,电脑版微信图片存在哪里?存储地址是什么?
  17. python中计算结果保留两位小数
  18. 手机图形计算器matlab,Mathlab图形计算器
  19. Rasa 聊天机器人Rasa_NLU_Chi
  20. Vue3 组件示例工程(二) —— AQI组件

热门文章

  1. python-pandas基本数据操作
  2. 最小二乘法(最小平方法)(generalized least squares)
  3. 制作java程序安装包
  4. LGV 引理——二维DAG上 n 点对不相交路径方案数
  5. Qt编写物联网管理平台20-控制器管理
  6. “双11”倒计时,电商行家如何玩转EDM?
  7. linux下载文件命令wget
  8. 解决java.io.FileNotFoundException: class path resource [beans.xml] cannot be opened because it does no
  9. linux正则和三剑客(grep,sek,awk)
  10. JDBC连接数据库添加数据