说白了,verilog是个结构描述语言,其他的像C是过程描述语言,java是对象描述语言.
实话说,我到是希望能直接用verilog编译出来的逻辑电路然后直接搞出电路板(当然成本比fpga贵)
结构描述
所谓结构描述,意思就是这个语言描述的是逻辑结构,大多数情况下,多个语句是并行处理的.时序的实现实质上也应该是一种逻辑(对晶振时钟周期的计数).
然后教科书上就给你分出来什么逻辑描述,数据流描述和行为描述.
我想一般人应该不会牛比到用逻辑门直接写,所以正常不用逻辑描述.
数据流描述允许用进行逻辑赋值和一些运算,更加接近高级语言,但是结构化的判断语句(虽然允许三目运算赋值)和时序应该是实现不了的.
行为描述会给你一种在描述过程的错觉(描述时序逻辑电路仍然不是过程描述).这里甚至有if else语句,当然,电路上的逻辑判断和软件的逻辑判断是不一样的,判断和执行有先后顺序但是你并不是在判断中执行了一条语句,而是用一个电路进行了判断.
虽然真正写的时候大多数时候都在搞行为描述的写法,但是你能写不代表他能编译(这就是这个语言让人难崩的地方,硬件的限制很多但是语句写出来不报错)
模块化
是给了用于简化编写和测试的函数和任务功能,实际上用的其实只有模块.和硬件对应就类似于封装好的芯片,可以设置输入和输出引脚.调用的时候当然也是作为模块调用(并行发生的处理)而不能和函数一样在语句中只调用一次.
变量
verilog中描述的变量也是电路结构,wire代表逻辑电路连线,reg代表连接的时序电路连线.实话说我不是很懂为什么一定要分开,应该是为了防止逻辑电路和时序电路混着写(其实也可以转换了写)
实际硬件
在实际设计的时候,会发生竞争冒险之类的问题,所以会有要求只用一种描述方法这样的设计规范,同时一个变量不能同时在多个位置赋值.