发信人: linmh(林mm要独立|EE·天秤大使|我们都爱萨尼无), 信区: EE
标 题: EE课程经验分享之VHDL篇
发信站: 饮水思源 (2013年02月21日00:00:31 星期四), 站内信件
非常感谢 coyboy 板友的供稿!辛苦辛苦~
以下是正文:
课程名称:数字系统仿真VHDL设计
教师简介:忘了,对不起。
所用教材:我当时用的不是老师指定的教材。


学习心得:
VHDL,说白了就是用硬件设计与验证的计算机程序化。现在整个电子行业高度依赖于计
算机辅助设计,其实不只电子行业,所有行业基本都是如此,深深认识到这一点会为你
以后省掉很多麻烦。
提起VHDL,不得不提Verilog HDL,如果对C语言特别有爱的话,看到Verilog HDL也必须
是爱不释手。但是,讨论它们的优劣毫无意义,最好两者都学。说真的,两个都学起来
、互相对比、处内旁通比你在那边单单学习VHDL多花不了多少时间,但却可以记得更牢
,认识得更深。这边涉及到的就是学习习惯的问题了,功利化的学习往往抓着突击检查
的一些知识点不放,对之外的知识不屑一顾,更不会花时间去拓展自己的知识面。却不
知道,把其它一些东西也学起来,反而能加深要考试的知识点,并且知其所以然。
无论是VHDL、Verilog HDL还是更古老的AHDL, 或者直接schematic的设计,没有所谓的
优劣,只有深刻了解这些语言背后大部分常见用法背后所对应的电路结果,那才是真正
学会这门课程。而且就课程而言,从可综合的角度出发,要考的特性其实非常少,既没
有时序分析、也不会有跨时钟域设计、一致性检查。考的也就是计数器、简单的状态机
、同步异步复位置位,还有真值表bool逻辑。在这些点上,VHDL和Verilog HDL没有太大
区别。很多朋友会被语法搞得晕头转向,那就细细看上一两段实用性的代码,比如《Adv
anced Digital Design with the Verilog HDL》里面的样例设计。还有将数字信号处理
和硬件设计结合起来描述的《Digital Signal Processing with Field Programmable
Gate Arrays》。正确的风格在基于硬件描述语言的设计中非常重要。如果大一大二程序
设计乱七八糟的话,在VHDL、Verilog HDL更要纠正自己的风格。风格迥异并不显得你有
多聪明,真正有智慧的人会深刻知道其它人的风格,尽量保证风格的一致性和规范性,
在非常有必要的时候才去风格迥异。只有大师级的人才有资格去风格迥异,如果对C语言
足够自信的可以去看看qemu的代码,它会告诉你什么叫做自成一派。
无论是计算机行业还是电子设计行业,目前已经建立了较高程度的抽象(而且讲来还会
更高),于是也就苦了我们孩子。因为会觉得动态语言也好、EDA也好,都好像在变戏法
一样,乍一看就让人觉得非常有趣,会编写一些程序就觉得很了不起。殊不知,你所编
写出的成果其中99%都归属于更加底层地设计人员为你所做好的抽象。
如果一开始就从底层一步一步学起,知识会非常牢靠。但是现在大环境倡导的不是这种
学习方式,那我们就只好在整个过程中自我完善。Stay hungry, stay foolish.
自我完善在这门课程中最显著的一个例子就是:学习FPGA/CPLD器件。FPGA本身也是一个
非常复杂的数模混合电路,尤其现在嵌入ARM Core之后,整个已经变成一个具备一定性
能的SoC,把每一代的区别、每个系列的区别弄清楚,一定要了解整个发展的脉络,这些
学习起来才有效果,这方面不妨多问问老师。发展史是非常有趣很有教益的,纵向的比
较特别重要。要严肃对待硬件,也要充分意识到硬件设计的困难性,因为大多数情况下
流片后就很难进行修改,一失足就是千古恨。
第二个例子就是充分认识到验证的重要性。验证是什么?就是验证你所写的代码正确与
否。虽然我相信艰苦卓绝的努力可以让你达到一次写完代码,99%都能正确,但硬件设计
全并行的方式使得想要达到那个程度需要很多年的积累以及非常扎实的基础。所以电路
设计(包括模拟、射频)很大的大部分压力来自于验证(另一部分压力来自于指令集架
构/系统设计)。在整个课程的学习中一定要认识到什么样的描述风格是可以综合的,那
些是只能在仿真验证中使用的。并且懂得如何搭建一个较为完善的平台来验证你的设计
,这比在那边苦苦地看RTL代码,用静态的方式来调试或者在FPGA上调试要容易得多。老
师也别光在那边念代码,一定要让学生主动地调试起来,用较为完善的平台来进行验证
。我有时候就觉得很奇怪,至少我当时学习的时候,老师虽然安排了实验课程,但是这
些课程都侧重于设计。我觉得老师应该事先搭建好一个验证环境,然后让学生充分地在
这个环境中进行设计,最后,引导学生去改进这个环境。这样可以节约学生很多时间,
避免他们在调试方面浪费过多的不必要的精力。而且从环境中也可以授予学生良好的验
证风格。否则,就算设计出来的东西也是千疮百孔。在学校千万不能潜移默化地倡导重
设计而轻视验证。软件是如此,硬件更是如此。
除了验证之外,系统级的设计就是另外一个重头戏了,系统级的观点既要考虑到设计也
要考虑到验证,既要考虑到所运行的FPGA平台/ASIC,也要考虑到是不是这样的接口最容
易不出错。这也是学生最觉得不以为然但实际上最为重要的一部分了。多数学生学习电
路设计既不能深入分析到底层,又不能站在高层去审视系统,结果就是夹在中间被细节
给淹没了,于是造就了“码农”(软件也是如此),不上不下非常尴尬。一定要反复地
问“我写的这段代码是用来干什么的?为什么我会这么写?”“数据流到底是如何流动
的,时钟又是如何分布的”,“这段代码是纯组合逻辑还是时序逻辑”,“我的接口是
不是最为精简了?还需要预留其它接口给其它模块了吗?”“将来如果要添加新功能容
不容易?”。因此,这一级别的设计没有固定的章法可循,再高智商也没有什么用,完
全靠积累,慢慢来。
文档一定要写好,特别是这门课程的实验报告。无论是设计、验证、系统设计,只有文
档能告诉别人和自己——我确实了解、理解了我为什么这么设计,我的设计是不是达到
了预期。没有写下来的东西一点都不可信。最好是边写报告边做实验。前面就提到老师
需要为真个课程预先写好一个仿真环境。这个时候可以先让学生给这个环境补上文档。
写文档跟小学写作文一样,是需要不断地写才能写出感觉的,关键是思路要清晰。如果
文档写得很清晰的话,那么无论是设计还是验证乃至FPGA上板,问题都不大了。写代码
其实是最简单的一个步骤,功夫完全在其之外,在前期的准备以及后期的总结,总结了
才会提高。
短短的一个学期,这门课程最多算是一个引导。Have fun. 大学最重要的不是教会你什
么知识,而是培养良好的学习习惯和态度。还有,找个人多多交流吧,别人的点醒往往
让你醍醐灌顶。因为,这方面,经验真的太重要了。
--
历史总是惊人的一致
即使在个体层面上
也体现得如此
淋漓尽致
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 222.78.80.45]
标 题: EE课程经验分享之VHDL篇
发信站: 饮水思源 (2013年02月21日00:00:31 星期四), 站内信件
非常感谢 coyboy 板友的供稿!辛苦辛苦~
以下是正文:
课程名称:数字系统仿真VHDL设计
教师简介:忘了,对不起。
所用教材:我当时用的不是老师指定的教材。
学习心得:
VHDL,说白了就是用硬件设计与验证的计算机程序化。现在整个电子行业高度依赖于计
算机辅助设计,其实不只电子行业,所有行业基本都是如此,深深认识到这一点会为你
以后省掉很多麻烦。
提起VHDL,不得不提Verilog HDL,如果对C语言特别有爱的话,看到Verilog HDL也必须
是爱不释手。但是,讨论它们的优劣毫无意义,最好两者都学。说真的,两个都学起来
、互相对比、处内旁通比你在那边单单学习VHDL多花不了多少时间,但却可以记得更牢
,认识得更深。这边涉及到的就是学习习惯的问题了,功利化的学习往往抓着突击检查
的一些知识点不放,对之外的知识不屑一顾,更不会花时间去拓展自己的知识面。却不
知道,把其它一些东西也学起来,反而能加深要考试的知识点,并且知其所以然。
无论是VHDL、Verilog HDL还是更古老的AHDL, 或者直接schematic的设计,没有所谓的
优劣,只有深刻了解这些语言背后大部分常见用法背后所对应的电路结果,那才是真正
学会这门课程。而且就课程而言,从可综合的角度出发,要考的特性其实非常少,既没
有时序分析、也不会有跨时钟域设计、一致性检查。考的也就是计数器、简单的状态机
、同步异步复位置位,还有真值表bool逻辑。在这些点上,VHDL和Verilog HDL没有太大
区别。很多朋友会被语法搞得晕头转向,那就细细看上一两段实用性的代码,比如《Adv
anced Digital Design with the Verilog HDL》里面的样例设计。还有将数字信号处理
和硬件设计结合起来描述的《Digital Signal Processing with Field Programmable
Gate Arrays》。正确的风格在基于硬件描述语言的设计中非常重要。如果大一大二程序
设计乱七八糟的话,在VHDL、Verilog HDL更要纠正自己的风格。风格迥异并不显得你有
多聪明,真正有智慧的人会深刻知道其它人的风格,尽量保证风格的一致性和规范性,
在非常有必要的时候才去风格迥异。只有大师级的人才有资格去风格迥异,如果对C语言
足够自信的可以去看看qemu的代码,它会告诉你什么叫做自成一派。
无论是计算机行业还是电子设计行业,目前已经建立了较高程度的抽象(而且讲来还会
更高),于是也就苦了我们孩子。因为会觉得动态语言也好、EDA也好,都好像在变戏法
一样,乍一看就让人觉得非常有趣,会编写一些程序就觉得很了不起。殊不知,你所编
写出的成果其中99%都归属于更加底层地设计人员为你所做好的抽象。
如果一开始就从底层一步一步学起,知识会非常牢靠。但是现在大环境倡导的不是这种
学习方式,那我们就只好在整个过程中自我完善。Stay hungry, stay foolish.
自我完善在这门课程中最显著的一个例子就是:学习FPGA/CPLD器件。FPGA本身也是一个
非常复杂的数模混合电路,尤其现在嵌入ARM Core之后,整个已经变成一个具备一定性
能的SoC,把每一代的区别、每个系列的区别弄清楚,一定要了解整个发展的脉络,这些
学习起来才有效果,这方面不妨多问问老师。发展史是非常有趣很有教益的,纵向的比
较特别重要。要严肃对待硬件,也要充分意识到硬件设计的困难性,因为大多数情况下
流片后就很难进行修改,一失足就是千古恨。
第二个例子就是充分认识到验证的重要性。验证是什么?就是验证你所写的代码正确与
否。虽然我相信艰苦卓绝的努力可以让你达到一次写完代码,99%都能正确,但硬件设计
全并行的方式使得想要达到那个程度需要很多年的积累以及非常扎实的基础。所以电路
设计(包括模拟、射频)很大的大部分压力来自于验证(另一部分压力来自于指令集架
构/系统设计)。在整个课程的学习中一定要认识到什么样的描述风格是可以综合的,那
些是只能在仿真验证中使用的。并且懂得如何搭建一个较为完善的平台来验证你的设计
,这比在那边苦苦地看RTL代码,用静态的方式来调试或者在FPGA上调试要容易得多。老
师也别光在那边念代码,一定要让学生主动地调试起来,用较为完善的平台来进行验证
。我有时候就觉得很奇怪,至少我当时学习的时候,老师虽然安排了实验课程,但是这
些课程都侧重于设计。我觉得老师应该事先搭建好一个验证环境,然后让学生充分地在
这个环境中进行设计,最后,引导学生去改进这个环境。这样可以节约学生很多时间,
避免他们在调试方面浪费过多的不必要的精力。而且从环境中也可以授予学生良好的验
证风格。否则,就算设计出来的东西也是千疮百孔。在学校千万不能潜移默化地倡导重
设计而轻视验证。软件是如此,硬件更是如此。
除了验证之外,系统级的设计就是另外一个重头戏了,系统级的观点既要考虑到设计也
要考虑到验证,既要考虑到所运行的FPGA平台/ASIC,也要考虑到是不是这样的接口最容
易不出错。这也是学生最觉得不以为然但实际上最为重要的一部分了。多数学生学习电
路设计既不能深入分析到底层,又不能站在高层去审视系统,结果就是夹在中间被细节
给淹没了,于是造就了“码农”(软件也是如此),不上不下非常尴尬。一定要反复地
问“我写的这段代码是用来干什么的?为什么我会这么写?”“数据流到底是如何流动
的,时钟又是如何分布的”,“这段代码是纯组合逻辑还是时序逻辑”,“我的接口是
不是最为精简了?还需要预留其它接口给其它模块了吗?”“将来如果要添加新功能容
不容易?”。因此,这一级别的设计没有固定的章法可循,再高智商也没有什么用,完
全靠积累,慢慢来。
文档一定要写好,特别是这门课程的实验报告。无论是设计、验证、系统设计,只有文
档能告诉别人和自己——我确实了解、理解了我为什么这么设计,我的设计是不是达到
了预期。没有写下来的东西一点都不可信。最好是边写报告边做实验。前面就提到老师
需要为真个课程预先写好一个仿真环境。这个时候可以先让学生给这个环境补上文档。
写文档跟小学写作文一样,是需要不断地写才能写出感觉的,关键是思路要清晰。如果
文档写得很清晰的话,那么无论是设计还是验证乃至FPGA上板,问题都不大了。写代码
其实是最简单的一个步骤,功夫完全在其之外,在前期的准备以及后期的总结,总结了
才会提高。
短短的一个学期,这门课程最多算是一个引导。Have fun. 大学最重要的不是教会你什
么知识,而是培养良好的学习习惯和态度。还有,找个人多多交流吧,别人的点醒往往
让你醍醐灌顶。因为,这方面,经验真的太重要了。
--
历史总是惊人的一致
即使在个体层面上
也体现得如此
淋漓尽致
※ 来源:·饮水思源 bbs.sjtu.edu.cn·[FROM: 222.78.80.45]
No comments:
Post a Comment