重庆网站整合营销,大连甘井子区怎么样,各地人社app大全官网,电线电缆技术支持中山网站建设已剪辑自: https://zhuanlan.zhihu.com/p/476394240
概述
首先#xff0c;“嵌入式”这是个概念#xff0c;准确的定义没有#xff0c;各个书上都有各自的定义。但是主要思想是一样的#xff0c;就是相比较PC机这种通用系统来说#xff0c;嵌入式系统是个专用系统#…已剪辑自: https://zhuanlan.zhihu.com/p/476394240
概述
首先“嵌入式”这是个概念准确的定义没有各个书上都有各自的定义。但是主要思想是一样的就是相比较PC机这种通用系统来说嵌入式系统是个专用系统结构精简在硬件和软件上都只保留需要的部分而将不需要的部分裁去。所以嵌入式系统一般都具有便携、低功耗、性能单一等特性。
然后MCU、DSP、FPGA这些都属于嵌入式系统的范畴是为了实现某一目的而使用的工具。
MCU俗称”单片机“经过这么多年的发展早已不单单只有普林斯顿结构的51了性能也已得到了很大的提升。因为MCU必须顺序执行程序所以适于做控制较多地应用于工业。而ARM本是一家专门设计MCU的公司由于技术先进加上策略得当这两年单片机市场份额占有率巨大。
ARM的单片机有很多种类从低端M0(小家电)到高端A8、A9(手机、平板电脑)都很吃香所以也不是ARM的单片机一定要上系统关键看应用场合。
DSP叫做数字信号处理器它的结构与MCU不同加快了运算速度突出了运算能力。可以把它看成一个超级快的MCU。低端的DSP如C2000系列主要是用在电机控制上不过TI公司好像称其为DSC(数字信号控制器)一个介于MCU和DSP之间的东西。高端的DSP如C5000/C6000系列一般都是做视频图像处理和通信设备这些需要大量运算的地方。
FPGA叫做现场可编程逻辑阵列本身没有什么功能就像一张白纸想要它有什么功能完全靠编程人员设计(它的所有过程都是硬件包括VHDL和Verilog HDL程序设计也是硬件范畴一般称之为编写“逻辑”。)。
如果你够NB你可以把它变成MCU也可以变成DSP。由于MCU和DSP的内部结构都是设计好的所以只能通过软件编程来进行顺序处理而FPGA则可以并行处理和顺序处理所以比较而言速度最快。
**那么为什么MCU、DSP和FPGA会同时存在呢?**那是因为MCU、DSP的内部结构都是由IC设计人员精心设计的在完成相同功能时功耗和价钱都比FPGA要低的多。而且FPGA的开发本身就比较复杂完成相同功能耗费的人力财力也要多。
**所以三者之间各有各的长处各有各的用武之地。**但是目前三者之间已经有融合的态势ARM的M4系列里多加了一个精简的DSP核TI的达芬奇系列本身就是ARMDSP结构ALTERA和XINLIX新推出的FPGA都包含了ARM的核在里面。所以三者之间的关系是越来越像三基色的三个圆了。
一言以蔽之“你中有我我中有你”。
硬件工程师学习从何开始?
单片机:通常无操作系统用于简单的控制如电梯空调等。dsp:用于复杂的计算像离散余弦变换、快速傅里叶变换常用于图像处理在数码相机等设备中使用。arm:一个英国的芯片设计公司但是不生产芯片。只卖知识产权。fpga:现场可编程门阵列以硬件描述语言(Verilog 或 VHDL)所完成的电路设计可以经过简单的综合与布局快速的烧录至 FPGA 上进行测试是现代 IC 设计验证的技术主流。嵌入式 是相对于台式电脑而言系统可裁剪形态各异可能体积、功耗、成本受限、实时性要求高如示波器手机平板电脑全自动洗衣机路由器、数码相机这些设备中虽然看不到台式机的存在但是都有一个或多个嵌入式系统在工作。
根据对象体系的功能复杂性和计算处理复杂性提供的不同选择。对于简单的家电控制嵌入式系统采用简单的8位单片机就足够了价廉物美对于手机和游戏机等就必须采用32位的ARM和DSP等芯片了。FPGA是一种更偏向硬件的实现方式。
所以要通过学习成为硬件工程师要从单片机开始然后学习ARM和DSP之类。
市面上七大主流单片机的详细介绍
单片机现在可谓是铺天盖地种类繁多让开发者们应接不暇发展也是相当的迅速从上世纪80年代由当时的4位8位发展到现在的各种高速单片机。
各个厂商们也在速度、内存、功能上此起彼伏参差不齐~~同时涌现出一大批拥有代表性单片机的厂商Atmel、TI、ST、MicroChip、ARM…国内的宏晶STC单片机也是可圈可点…
下面为大家带来51、MSP430、TMS、STM32、PIC、AVR、STC单片机之间的优缺点比较及功能体现……
51单片机 应用最广泛的8位单片机当然也是初学者们最容易上手学习的单片机最早由Intel推出由于其典型的结构和完善的总线专用寄存器的集中管理众多的逻辑位操作功能及面向控制的丰富的指令系统堪称为一代“经典”为以后的其它单片机的发展奠定了基础。
51单片机之所以成为经典成为易上手的单片机主要有以下特点
特性
从内部的硬件到软件有一套完整的按位操作系统称作位处理器处理对象不是字或字节而是位。不但能对片内某些特殊功能寄存器的某位进行处理如传送、置位、清零、测试等还能进行位的逻辑运算其功能十分完备使用起来得心应手。同时在片内RAM区间还特别开辟了一个双重功能的地址区间使用极为灵活这一功能无疑给使用者提供了极大的方便乘法和除法指令这给编程也带来了便利。很多的八位单片机都不具备乘法功能作乘法时还得编上一段子程序调用十分不便。
缺点(虽然是经典但是缺点还是很明显的)
AD、EEPROM等功能需要靠扩展,增加了硬件和软件负担虽然I/O脚使用简单但高电平时无输出能力这也是51系列单片机的最大软肋运行速度过慢特别是双数据指针如能改进能给编程带来很大的便利51保护能力很差很容易烧坏芯片
应用范围
目前在教学场合和对性能要求不高的场合大量被采用使用最多的器件8051、80C51
MSP430单片机 MSP430系列单片机是德州仪器1996年开始推向市场的一种16位超低功耗的混合信号处理器给人们留下的最大的亮点是低功耗而且速度快,汇编语言用起来很灵活,寻址方式很多,指令很少,容易上手。
主要是由于其针对实际应用需求把许多模拟电路、数字电路和微处理器集成在一个芯片上以提供“单片”解决方案。其迅速发展和应用范围的不断扩大主要取决于以下的特点…
特性
**强大的处理能力**采用了精简指令集(RISC)结构具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度在 8MHz 晶体驱动下指令周期为 125 ns 。这些特点保证了可编制出高效率的源程序在运算速度方面能在 8MHz 晶体的驱动下实现 125ns 的指令周期。16 位的数据宽度、 125ns 的指令周期以及多功能的硬件乘法器(能实现乘加)相配合能实现数字信号处理的某些算法(如 FFT 等)。超低功耗方面MSP430 单片机之所以有超低的功耗是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。电源电压采用的是 1.8~3.6V 电压。因而可使其在 1MHz 的时钟条件下运行时 芯片的电流会在 200~400uA 左右时钟关断模式的最低功耗只有 0.1uA
缺点
个人感觉不容易上手不适合初学者入门资料也比较少只能***网去找占的指令空间较大,因为是16位单片机,程序以字为单位,有的指令竟然占6个字节。虽然程序表面上简洁, 但与pic单片机比较空间占用很大
应用范围
在低功耗及超低功耗的工业场合应用的比较多使用最多的器件MSP430F系列、MSP430G2系列、MSP430L09系列
TMS单片机 这里也提一下TMS系列单片机虽不算主流。由TI推出的8位CMOS单片机,具有多种存储模式、多种外围接口模式,适用于复杂的实时控制场合。虽然没STM32那么优秀也没MSP430那么张扬但是TMS370C系列单片机提供了通过整合先进的外围功能模块及各种芯片的内存配置具有高性价比的实时系统控制。
同时采用高性能硅栅CMOS EPROM和EEPROM技术实现。低工作功耗CMOS技术宽工作温度范围噪声抑制再加上高性能和丰富的片上外设功能使TMS370C系列单片机在汽车电子工业电机控制电脑通信和消费类具有一定的应用。
STM32单片机 由ST厂商推出的STM32系列单片机行业的朋友都知道这是一款性价比超高的系列单片机应该没有之一功能及其强大。其基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M内核。
同时具有一流的外设1μs的双12位ADC4兆位/秒的UART18兆位/秒的SPI等等在功耗和集成度方面也有不俗的表现当然和MSP430的功耗比起来是稍微逊色的一些但这并不影响工程师们对它的热捧程度由于其简单的结构和易用的工具再配合其强大的功能在行业中赫赫有名…
特性
内核单周期乘法和硬件除法存储器片上集成32-512KB的Flash存储器。6-64KB的SRAM存储器时钟、复位和电源管理2.0-3.6V的电源供电和I/O接口的驱动电压。POR、PDR和可编程的电压探测器(PVD)。4-16MHz的晶振。内嵌出厂前调校的8MHz RC振荡电路。内部40 kHz的RC振荡电路。用于CPU时钟的PLL。带校准用于RTC的32kHz的晶振调试模式串行调试(SWD)和JTAG接口。最多高达112个的快速I/O端口、最多多达11个定时器、最多多达13个通信接口使用最多的器件STM32F103系列、STM32 L1系列、STM32W系列
PIC单片机 PIC单片机系列是美国微芯公司(Microship)的产品共分三个级别,即基本级、中级、高级是当前市场份额增长最快的单片机之一CPU采用RISC结构,分别有33、35、58条指令,属精简指令集。
同时采用Harvard双总线结构,运行速度快,它能使程序存储器的访问和数据存储器的访问并行处理,这种指令流水线结构,在一个周期内完成两部分工作,一是执行指令,二是从程序存储器取出下一条指令,这样总的看来每条指令只需一个周期,这也是高效率运行的原因之一此外PIC单片机之所以成为一时非常热的单片机不外乎以下特点
特点
具有低工作电压、低功耗、驱动能力强等特点。PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器,从而解决了51系列I/O脚为高电平时同为输入和输出的状态。当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点。它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。
不足之处
其专用寄存器(SFR)并不像51系列那样都集中在一个固定的地址区间内(80FFH),而是分散在四个地址区间内。只有5个专用寄存器PCL、STATUS、FSR、PCLATH、INTCON在4个存储体内同时出现但是在编程过程中,少不了要与专用寄存器打交道,得反复地选择对应的存储体,也即对状态寄存器STATUS的第6位(RP1)和第5位(RP0)置位或清零。数据的传送和逻辑运算基本上都得通过工作寄存器W(相当于51系列的累加器A)来进行,而51系列的还可以通过寄存器相互之间直接传送,因而PIC单片机的瓶颈现象比51系列还要严重,这在编程中的朋友应该深有体会。使用最多的器件PIC16F873、PIC16F877
AVR单片机 AVR单片机是Atmel公司推出的较为新颖的单片机,其显著的特点为**高性能、高速度、低功耗。**它取消机器周期,以时钟周期为指令周期,实行流水作业。
AVR单片机指令以字为单位,且大部分指令都为单周期指令。而单周期既可执行本指令功能,同时完成下一条指令的读取。通常时钟频率用48MHz,故最短指令执行时间为250125ns。
特点
AVR系列没有类似累加器A的结构,它主要是通过R16R31寄存器来实现A的功能。在AVR中,没有像51系列的数据指针DPTR,而是由X(由R26、R27组成)、Y(由R28、R29组成)、Z(由R30、R31组成)三个16位的寄存器来完成数据指针的功能(相当于有三组DPTR)。而且还能作后增量或先减量等的运行而在51系列中,所有的逻辑运算都必须在A中进行;而AVR却可以在任两个寄存器之间进行,省去了在A中的来回折腾,这些都比51系列出色些AVR的专用寄存器集中在003F地址区间,无需像PIC那样得先进行选存储体的过程,使用起来比PIC方便。AVR的片内RAM的地址区间为000DF(AT90S2313) 和0060025F(AT90S8515、AT90S8535),它们占用的是数据空间的地址,这些片内RAM仅仅是用来存储数据的,通常不具备通用寄存器的功能。当程序复杂时,通用寄存器R0R31就显得不够用;而51系列的通用寄存器多达128个(为AVR的4倍),编程时就不会有这种感觉。AVR的I/O脚类似PIC,它也有用来控制输入或输出的方向寄存器,在输出状态下,高电平输出的电流在10mA左右,低电平吸入电流20mA。这点虽不如PIC,但比51系列还是要优秀的…
缺点
没有位操作都是以字节形式来控制和判断相关寄存器位。C语言与51的C语言在写法上存在很大的差异这让从开始学习51单片机的朋友很不习惯。通用寄存器一共32个(R0R31),前16个寄存器(R0R15)都不能直接与立即数打交道,因而通用性有所下降。而在51系列中,它所有的通用寄存器(地址007FH)均可以直接与立即数打交道,显然要优于前者。使用最多的器件ATUC64L3U、ATxmega64A1U、AT90S8515
STC单片机
说到STC单片机有人会说到STC也能算主流估计要被喷了~~我们基于它是国内还算是比较不错的单片机来说。
STC单片机是宏晶生产的单时钟/机器周期的单片机说白了STC单片机是51与AVR的结合体有人说AVR是51的替代单片机但是AVR单片机在位控制和C语言写法上存在很大的差异。而STC单片机洽洽结合了51和AVR的优点虽然功能不及AVR那么强大但是在AVR能找到的功能在STC上基本都有同时STC单片机是51内核这给以51单片机为基础的工程师们提供了极大的方便省去了学习AVR的时间同时也不失AVR的各种功能…
STC单片机是高速、低功耗、超强抗干扰的新一代8051单片机51单片机指令代码完全兼容传统8051但速度快8~12倍内部集成MAX810专用复位电路。4路PWM 、8路高速10位A、D转换针对电机电机 的供应商控制强干扰场合成为继51单片机后一个全新系列单片机…
特性
下载烧录程序用串口方便好用容易上手拥有大量的学习资料及视频最著名的要属于杜老师的那个视频了好多对单片机有兴趣的朋友都是通过这个视频入门的同时具有宽电压5.53.8V2.43.8V, 低功耗设计空闲模式掉电模式(可由外部中断唤醒)STC单片机具有在应用编程调试起来比较方便;带有10位AD、内部EEPROM、可在1T/机器周期下工作速度是传统51单片机的8~12倍价格也较便宜STC12C2052AD系列为2通道也可用来再实现4个定时器或4个外部中断2个硬件16位定时器兼容普通8051的定时器。4路PCA还可再实现4个定时器具有硬件看门狗、高速SPI通信端口、全双工异步串行口,兼容普通8051的串口同时还具有先进的指令集结构兼容普通8051指令集。**PS**STC单片机功能虽不及AVR、STM32强大价格也不及51和ST32便宜但是这些并并不重要重要的是这属于国产单片机比较出色的单片机但愿国产单片机能一路长虹…使用最多的器件STC12C2052AD
Freescale单片机 主要针对S08,S12这类单片机当然Freescale单片机远非于此。Freescale系列单片机采用哈佛结构和流水线指令结构在许多领域内都表现出低成本高性能的的特点它的体系结构为产品的开发节省了大量时间。此外Freescale提供了多种集成模块和总线接口可以在不同的系统中更灵活的发挥作用!Freescale单片机的特有的特点如下
全系列从低端到高端从8位到32位全系列应有尽有其推出的8位/32位管脚兼容的QE128可以从8位直接移植到32位,弥补单片机业界8/32 位兼容架构中缺失的一环多种系统时钟模块三种模块七种工作模式。多种时钟源输入选项不同的mcu具有不同的时钟产生机制可以是RC振荡器外部时钟或晶振也可以是内部时钟多数CPU同时具有上述三种模块!可以运行在FEIFEEFBIFBILPFBEFBELPSTOP这七种工作模式多种通讯模块接口Freescale单片机几乎在内部集成各种通信接口模块包括串行通信接口模块SCI多主I2C总线模块,串行外围接口模块 SPIMSCAN08控制器模块通用串行总线模块(USB/PS2)具有更多的可选模块具有LCD驱动模块带有温度传感器具有超高频发送模块含有同步处理器模块含有同步处理器的MCU还具有屏幕显示模块OSD还有少数的MCU具有响铃检测模块RING和双音多频/音调发生器DMG模块可靠性高抗干扰性强多种引脚数和封装选择低功耗、也许Freescale系列的单片机的功耗没有MSP430的低但是他具有全静态的“等待”和“停止”两种模式从总体上降低您的功耗!新近推出的几款超低功耗已经与MSP430的不相上下!使用最多的器件MC9S12G系列
如果真要在这些单片机中分个一二三等那么如果你想跟随大众无可厚非51单片机还是首选;如果你追求超高性价比STM32将是你理想选择;如果你渴望超低功耗MSP430肯定不会让你失望;如果你想支持国产STC会让你兴奋… 已剪辑自: https://zhuanlan.zhihu.com/p/106985266
一、什么是DSP
DSPDigital Signal Processor也就是数字信号处理器。这是一种具有特殊结构的微处理器是以数字信号来处理大量信息的微处理器。将模拟信号转换成数字信号用于专用处理器的高速实时处理。
DSP的工作原理接收外部输入的模拟信号然后将其转换为数字信号为0或1再对数字信号进行运算处理并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。 DSP芯片的内部采用程序和数据分开的哈佛结构具有专门的硬件乘法器广泛采用流水线操作提供特殊的DSP 指令可以用来快速地实现各种数字信号处理算法。它不仅具有可编程性而且其实时运行速度可达每秒数以千万条复杂指令程序远远超过通用微处理器是当前越来越热门、应用越来越广泛的微处理器芯片。
二、 DSP的发展
1.世界上第一个单片DSP芯片是1978年AMI公司宣布的S2811
2.1979年美国Iintel公司发布的商用可编程期间2920是DSP芯片的一个主要里程碑。
以上两种芯片内部都没有现代DSP芯片所必须的单周期芯片。
3.1980年日本NEC公司推出的μPD7720这是第一个具有乘法器的商用DSP 芯片。
4.1982年日本Hitachi 公司推出浮点DSP芯片是第一个采用CMOS工艺生产浮点DSP芯片。
5.1983年日本的Fujitsu公司推出的MB8764其指令周期为120ns 且具有双内部总线从而处理的吞吐量发生了一个大的飞跃。
6.1984年ATT公司推出的DSP32是第一个高性能的浮点DSP芯片。
在这么多的DSP芯片种类中最成功的是美国德克萨斯仪器公司Texas Instruments简称TI的一系列产品。
TI是DSP领域的的老大。 TI公司1982年成功推出启迪一代DSP芯片TMS32010及其系列产品TMS32011、TMS32C10/C14/C15/C16/C17等之后相继推出了
第二代DSP芯片TMS32020、TMS320C25/C26/C28
第三代DSP芯片TMS32C30/C31/C32
第四代DSP芯片TMS32C40/C44
第五代DSP芯片TMS32C50/C51/C52/C53以及集多个DSP于一体的高性能DSP芯片TMS32C80/C82等。
自1980年以来DSP芯片获得迅猛发展
1.从运算速度来看MAC一次乘法和一次加法时间已经从80年代初的400ns如TMS32010降低到40ns如TMS32C40处理能力提高了10多倍。DSP芯片内部关键的乘法器部件从1980年的占模区的40左右下降到5以下片内RAM增加一个数量级以上。
2.从制造工艺来看1980年采用4μ的N沟道MOS工艺而现在则普遍采用亚微米CMOS工艺。
3.从封装工艺来看DSP芯片的引脚数量从1980年的最多64个增加到现在的200个以上引脚数量的增加意味着结构灵活性的增加。
此外DSP芯片的发展是DSP系统的成本、体积、重量和功耗都有很大程度的下降。
三、DSP芯片的类型
\1. 根据基础特性
根据DSP芯片的工作时钟和指令类型来分类的。如果DSP芯片在某时钟频率范围内的任何频率上能正常工作除计算速度有变化外没有性能的下降这类DSP芯片一般称之为静态DSP芯片。如果有两种或两种以上的DSP芯片,它们的指令集和相应的机器代码机管脚结构相互兼容,则这类DSP芯片称之为一致性的DSP芯片。
\2. 根据数据格式
数据以定点格式工作的DSP芯片称之为定点DSP芯片。以浮点格式工作的称为浮点DSP芯片。不同的浮点DSP芯片所采用的浮点格式不完全一样有的DSP芯片采用自定义的浮点格式有的DSP芯片则采用IEEE的标准浮点格式。
\3. 根据用途
可分为通用型DSP芯片和专用型的DSP芯片。通用型DSP芯片适合普通的DSP应用如TI公司的一系列DSP芯片。专用型DSP芯片市为特定的DSP运算而设计更适合特殊的运算如数字滤波卷积和FFT等。
四、DSP芯片的基本结构
DSP芯片的基本结构包括
1哈佛结构
2流水线操作
3专用的硬件乘法器
4特殊的DSP指令
5快速的指令周期。
哈佛结构
哈佛结构的主要特点是将程序和数据存储在不同的存储空间中即程序存储器和数据存储器是两个相互独立的存储器每个存储器独立编址独立访问。与两个存储器相对应的是系统中设置了程序总线和数据总线从而使数据的吞吐率提高了一倍。由于程序和存储器在两个分开的空间中因此取指和执行能完全重叠。
流水线与哈佛结构相关DSP芯片广泛采用流水线以减少指令执行的时间从而增强了处理器的处理能力。处理器可以并行处理二到四条指令每条指令处于流水线的不同阶段。
专用的硬件乘法器
乘法速度越快DSP处理器的性能越高。由于具有专用的应用乘法器乘法可在一个指令周期内完成。
特殊的DSP指令DSP芯片是采用特殊的指令。
快速的指令周期哈佛结构、流水线操作、专用的硬件乘法器、特殊的DSP指令再加上集成电路的优化设计可使DSP芯片的指令周期在200ns以下。
TMS320F28335 嵌入式DSP内部结构框图 TMS320F28335 嵌入式DSP 来自网上 侵删
SEED-DEC28335主要集成了150M系统时钟的DSP、64K x 16 位的片外SRAM、16 路片内12 位A/D、12 路PWM、2 路UART、1 路CAN、一路高速USB、片外4 通道12-位D/A 和串行EEPROMRTC 实时时钟等外设。这样使其能够应用在电机、电力等工业控制领域。
五、如何选择DSP芯片
一般来说我们选择DSP芯片时需要考虑如下因素
TI系列推荐
如果用于控制主要是选择TMS320C2000系列
如果用于通信主要是选择TMS320C5000系列
如果用于图像处理那就选择6000系列。
具体指标
1.运算速度。运算速度是芯片的一个最重要的性能指标也是选择芯片时所需要考虑的一个主要因素。运算速度可以用以下几种性能指标来衡量
1 指令周期。就是执行一条指令所需要的时间通常以纳秒ns为单位。
2 MAC时间。即一次乘法加上一次加法的时间。
3 FFT执行时间。即运行一个N点FFT程序所需的时间。
4 MIPS。即每秒执行百万条指令。
5 MOPS。即每秒执行百万次操作。
6 MFLOPS。即每秒执行百万次浮点操作。
7 BOPS。即每秒执行十亿次操作。
2.价格。根据实际应用确定一个价格适中的芯片。
3.硬件资源。
4.运算速度。
5.开发工具。
6.功耗。
另外还要考虑一些其它的因素如封装的形式等等。
DSP应用系统的运算量是确定选用处理能力多大的DSP芯片的基础。确定一个DSP系统的运算量以选择DSP芯片的方法
1 按样点处理
就是DSP算法对每一个输入样点循环一次。比如设计一个采用LMS算法的256抽头的自适应FIR滤波器假定每个抽头的计算需要3个MAC周期则256抽头计算需要256*3768个MAC周期。如果采样频率为8KHz即样点之间的间隔为125μs的时间DSP芯片的MAC周期为200μs则768个周期需要153.6μs的时间显然无法实时处理需要选用速度更快的芯片。
2 按帧处理
有些数字信号处理算法不是每个输入样点循环一次而是每隔一定的时间间隔通常称为帧循环一次。所以选择DSP芯片应该比较一帧内DSP芯片的处理能力和DSP算法的运算量。假设DSP芯片的指令周期为Pns一帧的时间为⊿τns则该DSP芯片在一帧内所提供的最大运算量为⊿τ/ P 条指令。
六、DSP系统
三大特色强大数据处理能力、数字信号处理的实时性和高运行速度最值得称道。一般具有如下的一些主要特点
1 在一个指令周期内可完成一次乘法和一次加法。
2 程序和数据空间分开可以同时访问指令和数据。
3 片内具有快速RAM通常可通过独立的数据总线在两块中同时访问。
4 具有低开销或无开销循环及跳转的硬件支持。
5 快速的中断处理和硬件I/O支持。
6 具有在单周期内操作的多个硬件地址产生器。
7 可以并行执行多个操作。
8 支持流水线操作使取指、译码和执行等操作可以重叠执行。
与通用微处理器相比DSP芯片的其他通用功能相对较弱些。
数字信号处理系统是以数字信号处理为基础因此具有数字处理的全部特点
1 接口方便。DSP系统与其它以现代数字技术为基础的系统或设备都是相互兼容这样的系统接口以实现某种功能要比模拟系统与这些系统接口要容易的多。
2 编程方便。DSP系统种的可编程DSP芯片可使设计人员在开发过程中灵活方便地对软件进行修改和升级。
3 稳定性好。DSP系统以数字处理为基础受环境温度以及噪声的影响较小可靠性高。
4 精度高。16位数字系统可以达到的精度。
5 可重复性好。模拟系统的性能受元器件参数性能变化比较大而数字系统基本上不受影响因此数字系统便于测试调试和大规模生产。
6 集成方便。DSP系统中的数字部件有高度的规范性便于大规模集成。
目前广泛应用的是TMS320F28335芯片系列。
DSP芯片实例TMS320C542
TMS320C542属于TI公司C5000系列。C5000系列具有以下特点:
·改进的哈佛结构,包含一条程序总线,三条数据总线和四条地址总线
·高度并行的CPU和针对应用优化的硬件
·针对算法和高级语言优化的指令集
·先进的IC技术使其既高性能又低功耗。 C5000系列DSP微处理器内部结构功能框图如图1所示。包括40bit算数逻辑单元(ALU)2个40bit累加器A和B17×17bit乘加单元、40bitMAC 可作64级FIR运算而不必考虑溢出计算、选择、存储单元(CCSU)特别适合Viterbi等算法40bit桶型移位寄存器片上双存取RAM每机器周期可存取两次片上单存取RAM可同时访问两块片上存储区片上外围接口包括串口、定时器、PLL、HPI接口等。
TMS320C542自身特点如下:
·25ns单周期定点指令执行时间5V供电
·10K Words16bit 片上双存取RAM
·64K Words程序64K Words数据64K Words I/O存储空间
·2K Words HPI接口可通过此接口方便地与主设备进行信息交换主设备也可通过此接口下载DSP程序
·一个自动缓冲的串口和一个TDM串口且都可用作标准同步串口
此外C5000系列DSP可使用JTAG接口进行调试可完全控制DSP上的所有资源使用方便可靠。
学习指导
一本非常好用的DSP教材手把手教你学DSP。
这本书以TMS320X281x的开发为主线介绍与DSP开发相关的知识DSP开发环境的搭建、新工程的建立、CCS6.0的使用、CMD文件的编写、硬件电路的设计、存储器的映像、三级中断系统以及TMS320X281X各个外设模块的功能和使用。
每部分内容都有应用实例并手把手地讲解例程的编写过程。所有代码都标注有详细的中文注释为读者快速熟悉并掌握DSP的开发方法和技巧提供了方便。
基于CCS6.0生活化语言浅显易懂深入浅出非常适合新手学习。
出版社 北京航空航天大学出版社 出版时间2019-02-01
第1章如何开始DSP的学习和开发 第2章TMS320X2812的结构、资源及性能 第3章TMS320X281x的硬件设计 第4章创建一个新工程 第5章CCS的常用操作 第6章使用C语言操作DSP的寄存器 第7章存储器的结构、映像及CMD文件的编写 第8章X281x的时钟和系统控制 第9章通用输入/输出多路复用器GPIO 第10章CPU定时器 第11章X2812的中断系统 第12章事件管理器EV 第13章模/数转换器ADC 第14章串行通信接口SCI 第15章串行外设接口SPI 第16章增强型控制器局域网通信接口eCAN 第17章基于HDSPSuper2812的开发实例
B站上 手把手教你学DSP视频教程DSP281X
参考
^如有侵犯您的权益请联系作者删除。 已剪辑自: https://dongka.github.io/2018/11/17/cpu/arm%E4%BD%93%E7%B3%BB%E6%9E%B6%E6%9E%84%E7%9A%84%E5%8F%91%E5%B1%95/
ARM体系架构的发展
本文将从以下几点去展开介绍arm体系架构的发展
指令集架构arm公司的发展历史以及授权模式arm的体系架构
arm公司的发展历史
arm的发展历程在此文章讲的非常详细故不再赘述一文带你了解ARM的发展历程
arm授权模式
在传统PC领域半导体有两种路子可以走一种是Intel这种从头到尾一条龙架构和芯片设计生产一律不靠任何人 这样做需要极其雄厚全方位的实力做保障得有钱有人有技术在半导体技术日益复杂的今天能这么做屈指可数好处就是利润率比较高想卖多少钱就多少当然技术上得做到领先甚至于垄断的地位优势才比较明显
另外一种则无工厂模式Fabless,NVIDIA,AMD,这类企业都是自己设计芯片制造交给代工厂比如台积电联电GlobalFoundries,三星电子。好处很明显负担轻但是在半导体这种工艺在功耗与性能中扮演重要角色的行业你设计出来的是否能设计出来怎么设计出来很大程度看代工厂的能耐幸好这些代工厂也十分给力不断的逼近物理极限使得AMD最近也能慢慢的赶上挤牙膏的Intel;
arm就不一样了它不制造不销售芯片只是自己设计IP,包括指令集微处理器GPU,总线然后谁要的话就买arm的授权授权模式分为此三种
处理器授权
ARM设计好一颗CPU或者GPUarmv7架构对应的IP为Cortex-A5/A7/A9/A12/A15/A17这几个核心架构对应armv8-A就有Cortext-A35/A53/A57/A72/A73;ARMv8.2A指令集Cortext-A55/A75;然后授权卖给伙伴买下它们后只能按照图纸实现能发挥的不多如何实现就比较随便如配置哪些模块几个核心多少缓存多高频率什么工艺谁来代工等等
如果想优化但是技术有限那么可以买arm的处理器优化包/物理IP包授权POP 如果只是想更快速搞出产品那么更干脆了arm已经帮你制定好代工厂处理器类型和工艺了 代表商家有联发科展讯联芯全志瑞芯微炬力等这些设计公司获得的是软核或者这点硬核授权通过购买的CPU核与GPU核以及通过一定的流程集成出SOC
购买处理器授权的本质上就大同小异了可以做出差异化的只能在一些IP上做出差异化
架构/指令授权
这种授权方式价格比较贵为防止碎片化的情况出现还有可能处于技术上的保护arm禁止对指令集进行修改或者添加但其他公司是否确切遵守了这个就不得而知了总之这种授权需要具有非常强的技术实力也不过15家如我们熟知的高通苹果三星华为等公司
除了版税那些购买了arm IP授权的还需要为每一个芯片支付版税
在这里有些问题就应该提出来思考了为什么都是arm的指令集苹果的芯片却可以吊打现在的Android厂商的芯片呢评价CPU性能指标在以下几个方面
一指令集宽度ISSUE6
二乱序指令执行缓冲区Recorder Buffer192
三内存加载延迟Load Latency:4
四分支预测错误代价Misprediction Penalty:16(一般介于14~19)
不得不说苹果很早就开始布局CPU的设计之路具有极强的芯片设计能力在厂家都是基于arm的公版进行设计苹果就已经通过购买arm指令集然后进行自己的CPU设计在14年的时候A7处理器作为第一个ARM 64位CPU商用而且将指令集宽度位6作为对比arm目前的指令集为3由于封闭式的开发不像高通需要考虑各个厂家的需求和成本苹果有更高的溢价能力可以用面积去换取性能与功耗并根据自己的系统去做定制化
指令集架构ISA
CPU执行计算任务时都需要遵从一定的规范程序在被执行时都需要先翻译成CPU可以理解的语言。这种规范就是指令集**ISAIntruction Set Architecrure;**
例如以下的机器码1110 0001 1010 0000 0010 0000 0000 0001
比如有个CPU定位1110 0001就是ADD指令1010 0000对应的是存储数据的寄存器R20010 0000对应的寄存器R0; 0000 0001对应是寄存器R1,故意思可以是ADD R2 R0 R1,将R0,R1的值加起来放到R2指令集就是定义一套约定俗成的CPU运行规则对于编程人员面对的汇编指令而对于CPU来说就是怎么去理解这段二进制码不同的CPU对这段二进制代码不同故就有了不同的指令集架构
指令集一般分为两种精简指令集RISC:reduced instruction set computer)和复杂指令集CISCComplex Instrution Set Computer,以洗衣机洗衣服为例RISC架构为加水-漂洗-风干而复杂指令集则可以发出洗衣服的指令从而让洗衣机自动帮忙做这一整套的流程CISC可以通过一条复杂的指令来完成许多事情性能在处理复杂的任务时会比RISC更为高效但随之而来的是面积和功耗的提升基于2/8理论程序大部分时间80%都是在做重复而简单的事情所以RISC架构就应运而生更为精简的指令将任务更多的放在了编译器这块通过复杂的指令转化成简单指令的组合在一定程度上增加了代码量但使其大部分场合能比CISC取得更小的面积和功耗
采用精简指令集的微处理常见为ARM,MIPSPower Architecture(包括PowerPC,PowerXCell),SPARCRISC-V等而采用CISC则为X86和AMD
至于arm为代表RISC架构与以X86为代表的CISC之间的优劣比较还有是否存在替代一说笔者认为不会而且从目前的发展来看已经出现了你中有我我中有你的局面 更进一步的探讨可以看下知乎上关于精简指令集与负杂指令集的讨论,我也很赞同其中一个答主的观点这已经不是个技术问题了而是一个商业的问题
总结完RISC和CISC之间的关系再讲讲基于RISC阵营里面的ARM和最近比较火热的RISC-Varm大家都熟悉而RISC-V又是个什么东西呢
RISC-V是加州大学伯克利分校的开源指令集由计算机架构的宗师级任务David Patterson领衔打造通过将核心指令集以及 关键IP开源意图改变半导体生态详细的可以看这篇文档名家专栏丨一文看懂RISC-V
总结如下RISC-V具有以下优点1.可模块化配置的指令集。 2.支持可扩展的指令集 3.一套指令集支持所有架构基本指令集仅40余条指令以此为共用基础加上其他常用模块子集指令总指令集也仅几十条 4.硬件设计和编译器非常简单
笔者认为RISC-V目前作为一个像linux看齐的硬件开源组织linux之所以能健康长足发展在于社区成千上万的内核爱好者的不断贡献使得linux能够蓬勃发展而硬件则不同在这动辄上百万的流片费的无数摆在硬件设计者面前的坎是否会有公司或者团体愿意将自己用血与泪验证的IP贡献到社区如果没有做到这一点即将面临由于厂家扩展指令不同的碎片化问题解决还有RISC-V后面的长足发展将付之空谈这样RISC-V架构只能作为几个大厂找到的低廉的替代arm方案的选择而无法真正做到普惠
arm的体系架构
时间 架构 主要更新
1985ARMv1只有26位的寻值空间没有用于商业产品1986ARMv2首颗量产的ARM处理器包括32位乘法指令和协处理器指令1990ARMv3具有片上高速缓存MMU和写缓冲寻址空间增大到32位1993ARMv4ARM7ARM8ARM9和Strong ARM采用这种架构。增加了16 Thumb指令集1998ARMv5ARM7(EJ),ARM9(E),ARM10(E)和Xscale采用这种了该架构改进了ARM/Thumb状态之间的切换效率此外还引入DSP指令和支持JAVA2001ARMv6ARM11,强化了图形处理性能通过追加有效进行多媒体处理的SIMD将语音及图像的处理功能大大提高。此外ARM在这个系列中引入混合16位/32位的Thumb-2指令集2004ARMv7Cortex-M3/4/7,Cortex-R4/5/6/7,Cortex-A8/9都是基于该架构该架构包括NEON技术扩展可将DSP和媒体处理吞吐量高达400%并提供改进的浮点支持以满足下一代3D图形和游戏以及传统嵌入式控制应用的需要2007ARMv6-M专门为低成本高性能的设备而设计Cortex-M0/1即采用该架构2011ARMv8Cortex-A32/35/53/57/72/73采用此架构第一款支持64位的处理器架构
ARM架构发展图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KLo8uaGM-1666278819947)(http://yoursite.com/2018/11/17/cpu/arm%E4%BD%93%E7%B3%BB%E6%9E%B6%E6%9E%84%E7%9A%84%E5%8F%91%E5%B1%95/arm_develop.png)]
arm体系的CPU工作模式
1.用户模式(usr):正常的程序执行状态 2.快速中断模式fiq:用于支持高速数据传输或者通道处理 3.中断模式irq:用于普通中断处理 4.管理模式svc:操作系统使用的保护模式 5.系统模式sys:运行具有特权的操作系统的任务 6.数据访问终止模式abt:数据或指令与预取终止时进入该模式 7.未定义指令终止模式und:未定义的指令执行时进入该模式
linux如何从用户态进入内核态 分为两种主动式和被动式、
1.主动式就是linux用户在ARM在用户模式下工作通过发起用户态程序发起命令请求ARM响应进入特权模式进而Linux切入内核态就是系统调用系统调用可被堪称一个内核与用户空间程序交互的接口把用户进程的请求传达 给内核待内核把请求处理完毕后再将处理结果送回给用户空间 系统调用的主要用途
一控制硬件-系统调用往往作为硬件资源和用户空间的抽象接口比如读写文件用到的write/read调用
二设置系统状态或读取内核数据
2.被动式就是Linux在用户态ARM在用户模式工作没有主动发起请求而被动地进入内核态包括硬件中断和程序异常
参考资料
arm汇编基础教程
给开源架构泼泼冷水
ARMv8-a
ARM介绍1发展史 ARM介绍2授权模式
ARMV8
从arm到三星苹果是如何走向自研芯片的
一样是ARM架构为何苹果处理器效能就是压下其他人 浅析arm的异常中断和arm工作模式的联系 如何零基础入门FPGA这篇文章让你吃透
已剪辑自: https://www.eet-china.com/mp/a124380.html
1. 看代码建模型
只有在脑海中建立了一个个逻辑模型理解FPGA内部逻辑结构实现的基础才能明白为什么写Verilog和写C整体思路是不一样的才能理解顺序执行语言和并行执行语言的设计方法上的差异。在看到一段简单程序的时候应该想到是什么样的功能电路。 2. 用数学思维来简化设计逻辑
学习FPGA不仅逻辑思维很重要好的数学思维也能让你的设计化繁为简所以啊那些看见高数就头疼的童鞋需要重视一下这门课哦。举个简单的例子比如有两个32bit的数据X[31:0]与Y[31:0]相乘。
当然无论Altera还是Xilinx都有现成的乘法器IP核可以调用这也是最简单的方法但是两个32bit的乘法器将耗费大量的资源。那么有没有节省资源又不太复杂的方式来实现呢我们可以稍做修改 将X[31:0]拆成两部分X1[15:0]和X2[15:0]令X1[15:0]X[31:16]X2[15:0]X[15:0]则X1左移16位后与X2相加可以得到X同样将Y[31:0]拆成两部分Y1[15:0]和Y2[15:0]令 Y1[15:0]Y[31:16]Y2[15:0]Y[15:0]则Y1左移16位后与Y2相加可以得到Y则X与Y的相乘可以转化为X1和X2 分别与Y1和Y2相乘这样一个32bit32bit的乘法运算转换成了四个16bit16bit的乘法运算和三个32bit的加法运算。转换后的占用资源将会减少很多有兴趣的童鞋不妨综合一下看看看看两者差多少。 3. 时钟与触发器的关系
“时钟是时序电路的控制者”这句话太经典了可以说是FPGA设计的圣言。FPGA的设计主要是以时序电路为主因为组合逻辑电路再怎么复杂也变不出太多花样理解起来也不没太多困难。
但是时序电路就不同了它的所有动作都是在时钟一拍一拍的节奏下转变触发可以说时钟就是整个电路的控制者控制不好电路功能就会混乱。 打个比方时钟就相当于人体的心脏它每一次的跳动就是触发一个 CLK向身体的各个器官供血维持着机体的正常运作每一个器官体统正常工作少不了组织细胞的构成那么触发器就可以比作基本单元组织细胞。
时序逻辑电路的时钟是控制时序逻辑电路状态转换的“发动机”没有它时序逻辑电路就不能正常工作。
因为时序逻辑电路主要是利用触发器存储电路的状态而触发器状态变换需要时钟的上升或下降沿由此可见时钟在时序电路中的核心作用。 最后简单说一下体会吧归结起来就是多实践、多思考、多问。实践出真知看100遍别人的方案不如自己去实践一下。实践的动力一方面来自兴趣一方面来自压力。有需求会容易形成压力也就是说最好能在实际的项目开发中锻炼而不是为了学习而学习。 02
为什么你会觉得FPGA难学
不熟悉FPGA的内部结构
FPGA为什么是可以编程的
恐怕很多初学者不知道他们也不想知道。
因为他们觉得这是无关紧要的。他们潜意识的认为可编程嘛肯定就是像写软件一样啦。
软件编程的思想根深蒂固看到Verilog或者VHDL就像看到C语言或者其它软件编程语言一样。一条条的读一条条的分析。
拒绝去了解为什么FPGA是可以编程的不去了解FPGA的内部结构要想学会FPGA 恐怕是天方夜谭。
那么FPGA为什么是可以“编程”的呢首先来了解一下什么叫“程”。
启示 “程”只不过是一堆具有一定含义的01编码而已。 编程其实就是编写这些01编码。只不过我们现在有了很多开发工具运算或者是其它操作。
所以软件是一条一条的通常都不是直接编写这些01编码而是以高级语言的形式来编写最后由开发工具转换为这种01编码而已。
对于软件编程而言处理器会有一个专门的译码电路逐条把这些01编码翻译为各种控制信号然后控制其内部的电路完成一个个的读因为软件的操作是一步一步完成的。
而FPGA的可编程本质也是依靠这些01编码实现其功能的改变但不同的是FPGA之所以可以完成不同的功能不是依靠像软件那样将01编码翻译出来再去控制一个运算电路FPGA里面没有这些东西。 FPGA内部主要三块可编程的逻辑单元、可编程的连线和可编程的IO模块。
其基本结构某种存储器(SRAM、 FLASH等)制成的4输入或6输入1输出地“真值表”加上一个D触发器构成。
任何一个4输入1输出组合逻辑电路都有一张对应的“真值表”同样的如果用这么一个存储器制成的4输入1输出地“真值表”只需要修改其“真值表”内部值就可以等效出任意4输入1输出的组合逻辑这些“真值表”内部值就是那些01编码。
如果要实现时序逻辑电路怎么办任何的时序逻辑都可以转换为组合逻辑D触发器来完成。但这毕竟只实现了4输入1输出的逻辑电路而已通常逻辑电路的规模那是相当的大。 3.1 可编程连线
那怎么办呢这个时候就需要用到可编程连线了。在这些连线上有很多用存储器控制的链接点通过改写对应存储器的值就可以确定哪些线是连上的而哪些线是断开的。这就可以把很多可编程逻辑单元组合起来形成大型的逻辑电路。
3.2 可编程的IO
任何芯片都必然有输入引脚和输出引脚。有可编程的IO可以任意的定义某个非专用引脚(FPGA中有专门的非用户可使用的测试、下载用引脚)为输入还是输出还可以对IO的电平标准进行设置。
总归一句话FPGA之所以可编程是因为可以通过特殊的01代码制作成一张张 “真值表”并将这些“真值表”组合起来以实现大规模的逻辑功能。 不了解FPGA内部结构就不能明白最终代码如何变到FPGA里面去的也就无法深入的了解如何能够充分运用FPGA。现在的FPGA不单单是有前面讲的那三块还有很多专用的硬件功能单元如何利用好这些单元实现复杂的逻辑电路设计是从菜鸟迈向高手的路上必须要克服的障碍。而这一切还是必须先从了解FPGA内部逻辑及其工作原理做起。
3.3 错误理解HDL语言怎么看都看不出硬件结构
HDL语言的英语全称是Hardware Deion Language注意这个单词Deion而不是Design。老外为什么要用Deion这个词而不是Design呢因为HDL确实不是用用来设计硬件的而仅仅是用来描述硬件的。
描述这个词精确地反映了HDL语言的本质HDL语言不过是已知硬件电路的文本表现形式而已只是将以后的电路用文本的形式描述出来而已。而在编写语言之前硬件电路应该已经被设计出来了。语言只不过是将这种设计转化为文字表达形式而已。
硬件设计也是有不同的抽象层次每一个层次都需要设计。最高的抽象层次为算法级、然后依次是体系结构级、寄存器传输级、门级、物理版图级。
使用HDL的好处在于我们已经设计好了一个寄存器传输级的电路那么用HDL描述以后转化为文本的形式剩下的向更低层次的转换就可以让EDA工具去做了这就大大的降低了工作量。这就是可综合的概念也就是说在对这一抽象层次上硬件单元进行描述可以被EDA工具理解并转化为底层的门级电路或其他结构的电路。 在FPGA设计中就是在将这以抽象层级的意见描述成HDL语言就可以通过FPGA开发软件转化为上一点中所述的FPGA内部逻辑功能实现形式。
HDL也可以描述更高的抽象层级如算法级或者是体系结构级但目前受限于EDA软件的发展EDA软件还无法理解这么高的抽象层次所以HDL描述这样抽象层级是无法被转化为较低的抽象层级的这也就是所谓的不可综合。
所以在阅读或编写HDL语言尤其是可综合的HDL不应该看到的是语言本身而是要看到语言背后所对应的硬件电路结构。 3.4 FPGA本身不算什么一切皆在FPGA之外
FPGA是给谁用的很多学校是为给学微电子专业或者集成电路设计专业的学生用的其实这不过是很多学校受资金限制买不起专业的集成电路设计工具而用FPGA工具替代而已。其实FPGA是给设计电子系统的工程师使用的。
这些工程师通常是使用已有的芯片搭配在一起完成一个电子设备如基站、机顶盒、视频监控设备等。当现有芯片无法满足系统的需求时就需要用FPGA来快速的定义一个能用的芯片。 前面说了FPGA里面无法就是一些“真值表”、触发器、各种连线以及一些硬件资源电子系统工程师使用FPGA进行设计时无非就是考虑如何将这些以后资源组合起来实现一定的逻辑功能而已而不必像IC设计工程师那样一直要关注到最后芯片是不是能够被制造出来。
本质上和利用现有芯片组合成不同的电子系统没有区别只是需要关注更底层的资源而已。
要想把FPGA用起来还是简单的因为无非就是那些资源在理解了前面两点再搞个实验板跑跑实验做点简单的东西是可以的。
而真正要把FPGA用好那光懂点FPGA知识就远远不够了。因为最终要让FPGA里面的资源如何组合实现何种功能才能满足系统的需要那就需要懂得更多更广泛的知识。 3.5 数字逻辑知识是根本
无论是FPGA的哪个方向都离不开数字逻辑知识的支撑。FPGA说白了是一种实现数字逻辑的方式而已。如果连最基本的数字逻辑的知识都有问题学习FPGA的愿望只是空中楼阁而已。数字逻辑是任何电子电气类专业的专业基础知识也是必须要学好的一门课。
如果不能将数字逻辑知识烂熟于心养成良好的设计习惯学FPGA到最后仍然是雾里看花水中望月始终是一场空的。
以上几条只是我目前总结菜鸟们在学习FPGA时所最容易跑偏的地方FPGA的学习其实就像学习围棋一样学会如何在棋盘上落子很容易成为一位高手却是难上加难。要真成为李昌镐那样的神一般的选手除了靠刻苦专研恐怕还确实得要一点天赋。 4.1 入门首先要掌握HDL(HDLverilogVHDL)
第一句话是还没学数电的先学数电。然后你可以选择verilog或者VHDL有C语言基础的建议选择VHDL。因为verilog太像C了很容易混淆最后你会发现你花了大量时间去区分这两种语言而不是在学习如何使用它。当然你思维能转得过来也可以选verilog毕竟在国内verilog用得比较多。 接下来首先找本实例抄代码。
抄代码的意义在于熟悉语法规则和编译器(这里的编译器是硅编译器又叫综合器常用的编译器有
Quartus、ISE、Vivado、Design Compiler 、Synopsys的VCS、iverilog、Lattice的Diamond、Microsemi/Actel的Libero、Synplify pro)然后再模仿着写最后不看书也能写出来。
编译完代码就打开RTL图看一下综合出来是什么样的电路。 HDL是硬件描述语言突出硬件这一特点所以要用数电的思维去思考HDL而不是用C语言或者其它高级语言如果不能理解这句话的可以看《什么是硬件以及什么是软件》。
在这一阶段推荐的教材是《Verilog传奇》、《Verilog HDL高级数字设计》或者是《用于逻辑综合的VHDL》。不看书也能写出个三段式状态机就可以进入下一阶段了。 此外你手上必须准备Verilog或者VHDL的官方文档《verilog_IEEE官方标准手册-2005_IEEE_P1364》、《IEEE Standard VHDL Language_2008》以便遇到一些语法问题的时候能查一下。 4.2 独立完成中小规模的数字电路设计
现在你可以设计一些数字电路了像交通灯、电子琴、DDS等等推荐的教材是夏老《Verilog 数字系统设计教程》(第三版)。在这一阶段你要做到的是给你一个指标要求或者时序图你能用HDL设计电路去实现它。这里你需要一块开发板可以选Altera的cyclone IV系列或者Xilinx的Spantan 6。
还没掌握HDL之前千万不要买开发板因为你买回来也没用。这里你没必要每次编译通过就下载代码咱们用modelsim仿真(此外还有QuestaSim、NC verilog、Diamond的Active-HDL、VCS、Debussy/Verdi等仿真工具)如果仿真都不能通过那就不用下载了肯定不行的。
在这里先掌握简单的testbench就可以了。推荐的教材是《WRITING TESTBENCHES Functional Verification of HDL Models》。 4.3 掌握设计方法和设计原则
你可能发现你综合出来的电路尽管没错但有很多警告。这个时候你得学会同步设计原则、优化电路是速度优先还是面积优先时钟树应该怎样设计怎样同步两个异频时钟等等。
推荐的教材是《FPGA权威指南》、《IP核芯志-数字逻辑设计思想》、《Altera FPGA/CPLD设计》第二版的基础篇和高级篇两本。学会加快编译速度(增量式编译、LogicLock)静态时序分析(timequest)嵌入式逻辑分析仪(signaltap)就算是通关了。如果有不懂的地方可以暂时跳过因为这部分还需要足量的实践才能有较深刻的理解。 4.4 学会提高开发效率
因为Quartus和ISE的编辑器功能太弱影响了开发效率。所以建议使用Sublime text编辑器中代码片段的功能以减少重复性劳动。Modelsim也是常用的仿真工具学会TCL/TK以编写适合自己的DO文件使得仿真变得自动化推荐的教材是《TCL/TK入门经典》。
你可能会手动备份代码但是专业人士都是用版本控制器的所以为了提高工作效率必须掌握GIT。
文件比较器Beyond Compare也是个比较常用的工具。此外你也可以使用System Verilog来替代testbench这样效率会更高一些。如果你是做IC验证的就必须掌握System Verilog和验证方法学(UVM)。推荐的教材是《Writing Testbenches using SystemVerilog》、《The UVM Primer》、《System Verilog1800-2012语法手册》。 掌握了TCL/TK之后可以学习虚拟Jtag(ISE也有类似的工具)制作属于自己的调试工具此外有时间的话最好再学个python。脚本意味着一劳永逸。 4.5 增强理论基础
这个时候你已经会使用FPGA了但是还有很多事情做不了(比如FIR滤波器、PID算法、OFDM等)因为理论没学好。我大概地分几个方向供大家参考后面跟的是要掌握的理论课。 信号处理 —— 信号与系统、数字信号处理、数字图像处理、现代数字信号处理、盲信号处理、自适应滤波器原理、雷达信号处理 接口应用 —— 如UART、SPI、IIC、USB、CAN、PCIE、Rapid IO、DDR、TCP/IP、SPI4.2(10G以太网接口)、SATA、光纤、DisplayPort 无线通信 —— 信号与系统、数字信号处理、通信原理、移动通信基础、随机过程、信息论与编码 CPU设计 —— 计算机组成原理、单片机、计算机体系结构、编译原理 仪器仪表 —— 模拟电子技术、高频电子线路、电子测量技术、智能仪器原理及应用 控制系统 —— 自动控制原理、现代控制理论、过程控制工程、模糊控制器理论与应用 压缩、编码、加密 —— 数论、抽象代数、现代编码技术、信息论与编码、数据压缩导论、应用密码学、音频信息处理技术、数字视频编码技术原理 现在你发现原来FPGA会涉及到那么多知识你可以选一个感兴趣的方向但是工作中很有可能用到其中几个方向的知识所以理论还是学得越多越好。如果你要更上一层数学和英语是不可避免的。 4.6 学会使用MATLAB仿真
设计FPGA算法的时候多多少少都会用到MATLAB比如CRC的系数矩阵、数字滤波器系数、各种表格和文本处理等。
此外MATLAB还能用于调试HDL(用MATLAB的计算结果跟用HDL算出来的一步步对照可以知道哪里出问题)。推荐的教材是《MATLAB宝典》和杜勇的《数字滤波器的MATLAB与FPGA实现》。 4.7 图像处理
Photoshop
花一、两周的时间学习PS对图像处理有个大概的了解知道各种图片格式、直方图、色相、通道、滤镜、拼接等基本概念并能使用它。这部分是0基础目的让大家对图像处理有个感性的认识而不是一上来就各种各样的公式推导。推荐《Photoshop CS6完全自学教程》。 基于MATLAB或OpenCV的图像处理
有C/C基础的可以学习OpenCV否则的话建议学MATLAB。这个阶段下只要学会简单的调用函数即可暂时不用深究实现的细节。推荐《数字图像处理matlab版》、《学习OpenCV》。 图像处理的基础理论
这部分的理论是需要高数、复变、线性代数、信号与系统、数字信号处理等基础基础不好的话建议先补补基础再来。看不懂的理论也可以暂时先放下或许学到后面就自然而然地开窍了。推荐《数字图像处理》。 基于FPGA的图像处理
把前面学到的理论运用到FPGA上面如果这时你有前面第七个阶段的水平你将轻松地独立完成图像算法设计(图像处理是离不开接口的上面第五个阶段有讲)。推荐《基于FPGA的嵌入式图像处理系统设计》、《基于FPGA的数字图像处理原理及应用》。 进一步钻研数学。要在算法上更上一层必然需要更多的数学所以这里建议学习实分析、泛涵分析、小波分析等。 5.1 为什么不推荐学习MicroBlaze等软核
性价比不高一般的软核性能大概跟Cortex M3或M4差不多用FPGA那么贵的东西去做一个性能一般的CPU在工程上是非常不划算的。不如另外加一块M3。 加上软核可能会影响到其它的逻辑的功能。这是在资源并不十分充足的情况下再加上软核导致布局布线变得相当困难。软核不开源出现Bug的时候不容易调试。工程上很少使用极有可能派不上用场。 5.2 为什么不推荐0基础学习ZYNQ或SOC
入门应该学习尽量简单的东西要么专心学习ARM要么专心学习FPGA。这样更容易有成就感增强信心。 ZYNQ和SOC的应用领域并不广还有很多人没听过这种东西导致求职的不利。开发工具编译时间长浪费较多时间。绝大多数工作都只是负责一方面也就是说另一方面很有可能派不上用场。 5.3 为什么已经存在那么多IP核仍需写HDL
问这种问题的一般是学生他们没有做过产品没有遇到过工程上的问题。IP核并非万能不能满足所有需求。尽量少用闭源IP核一旦出问题这种黑匣子很可能让产品难产。
深入理解底一层次可以更好地使用高一层次。该法则可以适用于所有编程语言。
-END-
往期推荐点击图片即可跳转阅读 谁能教教我怎么学单片机怎么入门 什么是PWM“死区” 平衡小车PID就该这么调 绝了电容这样理解真的简单