***************************************************************************************************************************
***区别一下软硬件几种类型***
***************************************************************************************************************************
***通用应用软件***
a. 软件汇编语言(Assembly Language)是面向机器的程序设计语言。
b. 主要关心逻辑和抽象,关心代码量大了之后复杂度可控。硬件资源较多,硬件性能差别较大,不需要针对特定资源设计。
c. 逻辑分层较多,来源于抽象的性能损耗可以接受。甚至于现在很多主流语言构建在虚拟机和解释器上。
d. 非实时。
e. 不需要了解底层硬件原理。
***************************************************************************************************************************
***嵌入式软件(面向硬件编程)***
a. 时序可控。大部分场景要求实时,因为要满足硬件时序。非抢占的任务调度和中断队列都会引入定时的偏差。
b. 资源开销可控。因为嵌入式硬件环境大多只有有限的 RAM 和 Flash 资源。
c. 针对特定硬件环境设计。
d. 所有代码上的抽象和优化都必须是零损耗或者损耗可控(可以参考 rust 语言)。比较典型的是 GC 会引入严重的时序和资源不可控,所以系统语言很少使用。
***************************************************************************************************************************
***数字逻辑电路设计(硬件描述性语言)***
a. 数字电路设计不是编程,是设计的时候先有电路,再用语言描述出来。
b. 时序要求更严,需要考虑建立时间和保持时间,及随之而来的亚稳态。
c. Coding style 会明显的影响电路性能。逻辑都一样,但是 DFF 的位置不一样,就可能导致时序不满足。
d. 并行化。执行顺序不再是 CPU 的顺序执行,而是多个并行的流水线。比如快速傅立叶 FFT。比如路由器的 CAM,单次动作完成整表查表。
***************************************************************************************************************************
1. FPGA学习时使用的 VHDL 和 verilog HDL 不是编程语言,而是一种可综合的硬件描述语言,我们在描述的时候一定要明白所要设计的是一个怎样的电路。