如何从头开始系统学习VHDL语言
只要你有学过C语言之类的编程语言,自学VHDL以及Verilog一点问题没有,基本语法非常简单,进行软件仿真也很随意,但学硬件语言一般是要综合的,也就是说最好要有硬件平台支持测验来观察感受。本人最近在攻坚FPGA,个人觉得硬件语言跟纯软件语言还是有差别的,在学习过程中要注意理解并行处理、时间延迟等内容,毕竟跟硬件息息相关,并不是把代码测试过了就好了。
先看书看基本语法,完了学者抄点例子感受感受,再上一些论坛看大牛们怎么说,慢慢进步,一口吃不了大胖子呢的。
/************************************************************************************************************
以上内容是前期写的,刚打开知乎发现有人点赞,本着负责任的态度还是再多些几行吧,写在这里给需要的人,希望你们能够走得更快些。
************************************************************************************************************/
1. 首先明确编程语言问题。
VHDL和Verilog都是目前使用最多的两种硬件语言(HDL),前者最开始是美国军方的标准,后来慢慢普及,最早的硬件工程师使用的基本都是VHDL,这也是为什么现在很多高校开设的也都是VHDL课而不是Verilog课程,因为那些老师最开始接触的都是VHDL,所以他们教授起来比较熟练。Verilog 不是军方开发的,所以代码写起来可能没有VHDL那么繁琐,灵活性要高一点,但代价是出错率会因为个人掌握情况而比VHDL要高,这也涉及到硬件本身问题。
就当前使用情况来看,很多编书的人都用的是平分秋色这个词,但本人觉得Verilog用的较多一写,毕竟现在开发软件功能越来越强大,很多人为的不足软件是可以发现而促使自己去认识到错误而做到改正或避免错误。所以建议初学者学习Verilog,语法简单,语言天赋好的同学甚至可以在数个小时内简单掌握。若基于某种要求,学习VHDL也不妨,二者大同小异。
2. 为什么要学习HDL(HardwareDiscraptionLanguage)。
单纯的学习VHDL语言是没有意义的,本人最开始接触的是VHDL,学的非常差劲,现在总结来主要是因为理解语言本身要实现的功能才是目的,所以不能为了学习一门HDL而去学习一门HDL。
举个简单的D触发器的例子。
alway@(posedge clk or negedge rst_n) //检测到时钟上升沿或者复位信号;
begin
if(!rst_n) //初学者这里注意(!rst_n)是一种很标准的写法,表示复位信号为0时复位;
data_out <= 1'b0;
else
data_out <= data_in;
end
看到这行代码其实脑子里反应到的立马应该是这种东西:
(上图截自电脑里某工程里的一个小点点,没改接口,C即clk,CLR 即rst_n,D、Q就不说了)
说简单点,你要意识到你的每一个always语句或者assign语句都代表一条独立的电路,而这些电路都是always@(……)里面信号监控的,都是有实际意义的。这就说到我要说的第三个问题。
3. FPGA。
学HDL都是为了开发FPGA的,所以为了更好的理解自己所学的知识点,一定要熟悉FPGA硬件架构,像组成逻辑单元与逻辑块、I/O特性、时钟管理、存储等,这就要求你去看一些资料书。最开始可能会觉得特别抽象,没关系,多坚持坚持,到一定程度希望能自己阅读FPGA供应商(主要是Xilinx和Altera)的器件手册,他们官方网站都有下载,不同型号其实内容大同小异,坚持看完一套就差不多,英文读起来非常枯燥,本人现在也没有认真读完过一个系列,不过用到某部分知识时还是会认真看的。另外说一点现在国内很多关于这方面的书基本都是翻译那些资料的,很多其实翻译的都很一般,比如昨天看的IP软核资源Ram-based Shift Registers书里没有翻译清楚里面的一个知识点,导致配置时不理解接口的作用,后来看了英文User Guider才知道,浪费好长时间。
4.学习软件。
相信很多初学习VHDL的同学在书里看到的都是MAX-PlusⅡ的例子,我最开始学的时候老师只讲语法,不教仿真,所以我不可避免的接受诱导去用了这个软件,在这里强烈不推荐这款老到牙都快掉的软件。目前很多FPGA供应商都I有自己的开发软件,如赛灵思(Xilinx)的ISE,Altera的QuartusⅡ,都是使用非常普遍也比较简单的开发工具,功能相对比较齐全,基本满足开发需求,据说赛灵思新一代开发平台Vivado很好,昨天下载了一个才装上,还没开始试用。
使用教程网上都有,下载几个文档,很快就能上手的。