从PC应用编程到偏硬件编程的转变
本帖最后由 sbtree 于 2012-11-17 13:00 编辑先简单介绍一下背景,楼主近来正处在在努力转行过程中,从原来的基于PC应用开发到Hardwarenah,尽管都是IT,跨度不是很大,但是也需要补充很多相关的知识。因为本科是电气技术专业,学过一些电子相关的课程,诸如模电,数电,基础电路,编码原理等课程。虽然已经多年没用了,但是快速浏览一下还是很快能够回忆起学过的东西的。所不了解的主要是这个领域在德国是怎样的情景,具体作什么样的事情?接近硬件的开发跟嵌入式系统有着不可分割的联系,尤其是实时系统,Linux,还有ARM体系。楼主发此帖主要有两个目的:
1。记录这个转行的过程,总结每一步的进展,供后来人借鉴(仅供参考,因为是纯属个人观点,也可能有网络上的摘录)
2。希望得到在这个领域的前辈们的指点,楼主的第一步正在抬脚,可能还没有入门呢。您的指点会让楼主茅舍顿开,也会给象楼主一样在探索中的人以启迪。
这个帖的后续部分会不断提出一些问题,针对问题,提出楼主的个人想法,也希望前辈们给以指正。
这里先挖个坑,估计还是一个挺大的坑,我要努力,也希望大家帮我一起把它填平。
问题一:接近硬件开发的软件工程师需要哪些基础知识?
本帖最后由 sbtree 于 2012-11-17 14:20 编辑硬件知识:基础电路,数字电路,编码原理(二进制知识),针对硬件的指令集
编程语言:C,Assembler,VHDL (经过与大家的探讨,觉得HDL在嵌入式开发中不是必要的)
嵌入式操作系统:RTOS,Linux
其他:依赖硬件的编译器,开发环境(IDE)
以上是楼主凭个人理解列出的简单清单,不一定全用得到,希望大家来补充。
简单总结一下(17.11.2012):
adrenalin认为硬件编程和软件编程有很大的不同。在很多细节的实现上的想法要特别注意,例如赋值的实现,逻辑的综合。并且描述了从硬件到软件的三个清晰层次。个人觉得偏硬件的编程思维习惯可能需要的实践的积累,逐渐形成硬件设计的思维模式。不过楼主只是想从高层的应用开发走进嵌入式系统的开发,因该没有那么大的跨越。
chinapope和仙林小童对HDL评论,估计是基于硬件设计方面的考虑。
chain1983从一个电子专业的从业人员的方面给出了一些很好的建议,包括IDE,寄存器,信号和网络等概念,以及自行探索方面的建议。楼主附加一点,某些bus系统还是需要学习学习,比如feldbus, can, most等
Casablanca应该对硬件开发的一些主要任务作了简要的描述,指出这个转变的过程是weiter Entwicklung,个人深表赞同。只是楼主缺少嵌入式方面的知识,还一时理解不了那么深入。至于框架,模块等在嵌入式中是一个什么样子,还比较模糊,希望慢慢地深入。 呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的不同的 adrenalin 发表于 2012-11-16 11:02 static/image/common/back.gif
呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的 ...
asic synthese ???
从HDL到物理层电路。 你要是开发CAD工具,写转换算法的,那是大牛,否则就是用用工具而已。 adrenalin 发表于 2012-11-16 11:02 static/image/common/back.gif
呵呵 做asic synthese的最怕codeschreiber是从软件转行过来的或者以前做fpga的
硬件编程跟软件编程有很大的 ...
为什么这么讲?能给出几点理由吗?他们的差别在哪里? chinapope 发表于 2012-11-16 12:52 static/image/common/back.gif
asic synthese ???
从HDL到物理层电路。 你要是开发CAD工具,写转换算法的,那是大牛,否则就是用用 ...
恩 我只是打扫卫生的时候听他们说的 呵呵{:5_321:} sbtree 发表于 2012-11-16 13:07 static/image/common/back.gif
为什么这么讲?能给出几点理由吗?他们的差别在哪里?
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
硬件编程的人必须考虑很多实际因素,比如你给一个变量赋值,它是立马就得到新赋予的值还是要等到下个时钟周期才能得到赋值,也就是说这个赋值将会被以组合逻辑实现还是时序逻辑。
别看很简单的一个问题,如果不搞清楚,综合过以后的netlist 逻辑行为就不对
另外 写硬件的人还要考虑到综合优化方面的东西,可能两个人写的程序行为完全一样,但是综合过以后人家能达到很高的频率,或者很小的面积,你却达不到
本帖最后由 chinapope 于 2012-11-16 14:01 编辑
adrenalin 发表于 2012-11-16 12:27 static/image/common/back.gif
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
...
你说的硬件部分很对。 数电HDL还是有模式可寻的,或是高速或是小面积。
高频模拟电路才难,就连是仿真结果都要来回调,实际布线到asic上还有各种效应需要考虑。
至于纯软件的小规模代码或模块,编译器够优化多的话,按一定规范写,没有逻辑错误就行。有规模的或成熟的系统还是要经得起时间考验才行,这方面我没有什么经验。
adrenalin 发表于 2012-11-16 12:27 static/image/common/back.gif
个人理解
写软件的不用操心底层硬件如何去实现,基本上想怎么写就怎么写,别有逻辑或者语法错误就行了
...
楼主新手,很多东西有待学习。个人觉得,就设计而言,无论硬件还是软件,基本的原则应该是一样的。比如模块化,接口设计。你提到的赋值,组合逻辑等实现问题的确值得在硬件设计的时候仔细考虑,其实在应用软件的开发中也有类似的东西,例如从寄存器还是从内存中取数据,重入问题等。上层的软件开发当然不用考虑低层硬件的实现,这就是系统的层次机构,每个层次考虑每个层次上的任务,做好接口,其他的互不相干。
谢谢你的提示,希望能向你多多学习。 HDL叫做硬件描述语言,和软件编程是两回事。没搞清这个的话,还是不懂硬件。