我是同时做过FPGA开发(verilog)与ARM(c)开发,有很多人说学了单片机再学习FPGA会比较好过度。理由是单片机的C语言与FPGA的verilog语言很像。我不太赞成这一个说法,理由是:单片机的C语言是串行执行的,FPGA的verilog是并行执行的。虽然两者看上去语法差不多,但是语言所代表的含义完全不同。C语言最终到芯片中后是二进制代码,verilog语言最终到芯片是电路。举个例子,同样实现两个led灯的闪烁,一个是10hz,一个是5hz。

/********************************************************************************************************************************/

void isr(void){//1ms的中断

static u32 cnt_led1,cnt_led2;

cnt_led1++;

cnt_led2++;

if(cnt_led1>=50)

{

LED1=~LED1;

cnt_led1=0;

}

if(cnt_led2>=100)

{

LED2=~LED2;

cnt_led2=0;

}

}

int main(void)

{

INIT_LED();

INIT_ISR();

while(1)

{

}

}

/**********************************************************************************************************************************/

module LED(

CLK,

LED1,

LED2

);

input wire CLK;

output reg LED1=0;

output reg LED2=0;

reg [31:0]cnt1=0;

reg [31:0]cnt2=0;

always@(posedge CLK)//在时钟上升沿干的事情1

begin

if(cnt1<50*1000*50)begin

cnt1<=cnt1+1;

end

else begin

LED1<=~LED1;

cnt1<=0;

end

end

always@(posedge CLK)//在时钟上升沿干的事情2

begin

if(cnt2<50*1000*100)begin

cnt2<=cnt2+1;

end

else begin

LED2<=~LED2;

cnt2<=0;

end

end

endmodule

/**********************************************************************************************************************************/

可以发现,单片机实现两个“任务”可以用定时器中断实现,本质意义上来说是串行执行。

FPGA实现两个“任务”可以用时钟上升沿触发,而且一个时钟上升沿可以触发多个“任务”。

/**********************************************************************************************************************************/

再举个例子,输出3路12bit的DAC。

/********************************************************************************************/

unsigned int get_dac1;

unsigned int get_dac2;

unsigned int get_dac3;

int main(void)

{

DAC_INIT();

while(1){

*((unsigned int *)DAC1)=get_dac1&0x3ff;//第一步

*((unsigned int *)DAC2)=get_dac2&0x3ff;//第二步

*((unsigned int *)DAC3)=get_dac3&0x3ff;//第三步

}

}

/********************************************************************************************/

module OUT_DAC(

CLK,

DAC1,

DAC2,

DAC3,

BUFF_DAC1,

BUFF_DAC2,

BUFF_DAC3

);

input wire [11:0]BUFF_DAC1;

input wire [11:0]BUFF_DAC2;

input wire [11:0]BUFF_DAC3;

output reg [11:0]DAC1;

output reg [11:0]DAC2;

output reg [11:0]DAC3;

always@(posedge CLK)

begin

         DAC1<=BUFF_DAC1;//第一步

         DAC2<=BUFF_DAC2;//与上一步是同时执行

         DAC3<=BUFF_DAC3;//与上一步是同时执行

end

endmodule

/********************************************************************************************/

从上面的例子我们可以得到:ARM的3个DAC输出是有先后的,FPGA的3个DAC输出是没有先后的。

所以我们常常听到别人说,FPGA比ARM运行速度“快”!

/********************************************************************************************/

FPGA开发与ARM(单片机)开发的区别相关推荐

  1. 一款简单易上手的ARM单片机开发IDE—STduino

    一款简单易上手的ARM单片机开发IDE-STduino 前言 STduino介绍 前言 第一眼看到这个IDE,第一反应就是名字有点像TrueSTUDIO,然后我上网查了一下,当然是没有关系的,只能说是 ...

  2. TM4C123系列ARM单片机开发入门介绍

    初学TM4C123GH6PZ,以前未接触过ARM,所以感觉一头雾水.根据自己以前C51的简单经验,对照资料很少的ARM4教程,摸索着终于明白了开发流程,从软件到硬件用自己的程序点亮了LED.现将自己的 ...

  3. 嵌入式开发要难于单片机开发?

    关注.星标公众号,直达精彩内容 ID:技术让梦想更伟大 来源:网络素材 单片机和嵌入式,其实没有什么标准的定义来区分他们,对于进行过单片机和嵌入式开发的开发者来说,都有他们自己的定义,接下来,就谈谈本 ...

  4. PLC,DSP,ARM,单片机有什么区别?

    自二十世纪六十年代美国推出可编程逻辑控制器(Programmable Logic Controller,PLC)取代传统继电器控制装置以来,PLC得到了快速发展,在世界各地得到了广泛应用.同时,PLC ...

  5. 基于stm32mp157 linux开发板ARM裸机开发教程4:Cortex-A7 内核存储系统与流水线(连载中)

    前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) ...

  6. 基于stm32mp157 linux开发板ARM裸机开发教程3:Cortex-A7 架构与工作模式(连载中)

    前言: 目前针对ARM Cortex-A7裸机开发文档及视频进行了二次升级持续更新中,使其内容更加丰富,讲解更加细致,全文所使用的开发平台均为华清远见FS-MP1A开发板(STM32MP157开发板) ...

  7. 项目开发中ARM单片机芯片分类及选型

    项目开发中单片机芯片的选型是一件重要而费心的事情 , 如果芯片型号选择得合适 , 单片机应用系统就会得经济 , 工作可靠 ; 如果选择得不合适 , 就会造成经济浪费 , 影响单片机应用系统的正常运行 ...

  8. 开发板ARM+FPGA架构运动控制卡 运动控制器

    开发板ARM+FPGA架构运动控制卡 运动控制器 本运动控制卡采用ARM单片机+FPGA架构: ARM单片机是基于Cortex-M3内核的LM3S6911,插补核心算法均在该ARM内完成,一方面通过以 ...

  9. 开发板ARM加FPGA架构运动控制卡 运动控制器 架构源码 原理图 资料包含此运动控制卡原理图,PCB图

    开发板ARM加FPGA架构运动控制卡 运动控制器 架构源码 原理图 资料包含此运动控制卡原理图,PCB图, FPGA 源码,ARM去掉算法后的框架源码. 注意实物图是旧版的,出售的图纸是新版本的,元器 ...

最新文章

  1. WINCE6.0+S3C6410的触摸屏驱动
  2. 暂时放在首页,因为需要大家帮忙!!
  3. java数据结构博客园_常见数据结构的Java实现
  4. 开源字符处理类库:CharString类 拆分自自己研发的web服务器中的类库
  5. 关于Redis热点key的一些思考
  6. 50个技巧提高你的PHP网站程序执行效率
  7. 【消息轰炸】Python消息轰炸
  8. 一个快播倒下去,千千万万个快播站起来
  9. 《统计学》第八版贾俊平第三章课后答案Excel
  10. 笔记 c语言99乘法表
  11. als算法参数_推荐算法之ALS
  12. markdown文件怎么转换成html,将markdown文件转换为html文件(MarkdownPad)
  13. Java导出Excel文档(poi),并上传到腾讯云对象存储服务器
  14. vue 右键菜单contextMenu
  15. 数论作业 —— 公约数公倍数问题
  16. Echarts x轴字体倾斜
  17. 高中计算机二级考试试题,高中二年级全国计算机等级考试试题.doc
  18. 当类型设置为Integer时,传入的值为0,会将其转化为空字符串,从而造成查询数据异常
  19. 如何选择专业的海关数据公司合作
  20. 构成中学计算机教学系统的要素包括,教学策略就是对完成特定的教学目标而采用的教学活动的()要素的总体考虑...

热门文章

  1. 【腾讯TMQ】众测实战经验小结
  2. 智能电子秤方案控制板设计开发
  3. FBI教你读心术-1节
  4. 【PHP学习】—apache配置虚拟主机(基于域名)
  5. 潘爱民:Windows系统程序员的“内功”修炼
  6. Mac cocoapods安装步骤
  7. Conditional Random Fields:ProbabilisticModels for Segmenting and Labeling Sequence Data
  8. 【论文笔记】SCOAT-Net: A novel network for segmenting COVID-19 lung opacification from CT images
  9. 【深度学习】【实例分割】SOLO:Segmenting Objects by Locations
  10. 2017传感器总体发展趋势分析