入门前
方才开端触摸逻辑规划许多人会觉得很简略:由于verilog的语法不多,半响就能够把书看完了。可是很快许多人就发现这个主意是过错的,他们常常抱怨归纳器怎样和自己的主意不同这么大:它居然连用for循环写的一个计数器都不知道!
相信上一段的阅历大部分人都曾有,原因是做逻辑规划的思想和做软件的很不相同,咱们需求从电路的视点去考虑问题。
在这个进程中首先要了解的是软件规划和逻辑规划的不同,并了解什么是硬件认识。
软件代码的履行是一个次序的进程,编绎今后的机器码放在存储器里,等着CPU一条一条的取指并履行;因而软件规划中常常会带有次序处理的思想。而逻辑规划则不同,咱们规划的是数字电路,它是由许多许多的与非门及D触发器构成的,上电之后一切与非门和D触发器都一起作业,不会由于A触发器的代码描绘在B触发器之前A触发器便是先作业,事实上,RTL级代码的代码先后次序在归纳成网表文件后这种次序就消失了,替代的是根本逻辑电路之间的互联联系描绘;因而逻辑规划需求的是一种并发的思想,咱们也需求用并发的思想去考虑电路的规划。
当然,咱们规划的电路功用一般都有先后次序的联系,假如这种次序不能通过代码的先后次序来完结,那么要怎样完结这一功用呢?在逻辑规划中,咱们所说的先后次序都是根据时间轴来完结:它的承载体便是时序逻辑,也便是那些触发器。
硬件认识的东西网上议论的现已许多,这儿就不再多说了。
其次便是要了解根本电路的规划。
根本的电路不是许多,也便是D触发器、计数器、移位寄存器、状态机、多路选择器、译码器等几种,一切杂乱的电路都可由这些根本的电路构成。高手水平高的表现并不是他能写出一些很独特的电路,相反,水平高是表现在他们总能将杂乱的电路用这些很朴素的根本电路去描绘。乃至,你会发现他们的代码根本上是由if…else、case这些句子构成的,朴素的让你觉得古怪。
我以为,初学者在入门的时分,关于根本电路的规划应该固定化、标准化,每种电路该用什么样的代码描绘,应该要固定、一致,尽量少一些花哨的东西。说来这儿我举个比方。
曾经有几个朋友由于仿真有问题请我帮助找问题。他们的代码写的很乱,呈现了许多种八怪七喇的电路,一看头都大了,只好主张他们依照标准的电路从头写下代码。成果过了半响,他们就和我说问题不见了。
所以,高手们喜爱用简略的代码是有道理的,电路的标准化和标准化能够削减许多八怪七喇的问题,问题少了他们也就能在他人加班的时分回家多睡回觉,呵呵。总归,简略的、朴素的便是最好的。
最终是代码的标准化。
代码标准主要是代码书写、命名等标准。比方不能用TAB键空格、低电平有用信号命名时加_n(如rst_n等)、每行只能写一行代码等。这些东西网上也许多,这儿仅仅强烈主张我们要严格遵守,像华为等公司假如代码不标准的话肯定是要打回去重写的。