0945
相或用英文。
非,直接写not。
然后是移位运算。
这一点,我们在Verilog里面就体会很深了。
Verilog里面只有逻辑移位。
昨天我们做HPC的时候要乘4,有同学直接写乘4。
编译器就会给你生成一个乘法器,你的面积就大了。
也有同学写成逻辑左移的形式,往左边移2位就是乘4。
这是逻辑移位。
逻辑移位跟算术移位的区别就是,逻辑移位是空位补零,算术移位是首位移出位补位。
0946
逻辑右移也是这样。
Verilog里面不支持算术移位,它的语法里面只有逻辑移位。
还支持一种称之为旋转的方式,左旋和右旋。
关于赋值语句,Verilog它是有阻塞赋值和非阻塞赋值。
稍候我们会重点来讨论。
在Verilog的学习过程中,很多人都很困惑,什么时候用阻塞,什么时候用非阻塞?
0947
当然我们现在就清楚了。
现代的观点,要打倒阻塞,就像早期的要打倒goto语句一样的。
在电平敏感的驱动里面用阻塞。
沿敏感的驱动用非阻塞。
这是Verilog经典的描述。
0948
你看这个信号是电平驱动的,还是沿驱动的。
是沿驱动的,就用非阻塞赋值。
电平驱动的,就用阻塞赋值。
但是现在的观点是尽可能地用非阻塞。
这一点在VHDL里面没有。
Verilog四大怪之一,阻与不阻随便来。
VHDL没有这个问题。
VHDL是严谨的体系,你声明是什么,就是什么。
当你声明成一个信号,信号是用signal来声明的,当你声明成信号以后,信号就用信号的赋值符。
当你声明成变量,取决于设计者。
0949
设计者把一个变量名声明成信号变量名,那么以后的信号就始终用它赋值,就是信号的赋值。
当你把一个变量名声明成变量,variable,就一定用变量赋值。
声明成什么,就用什么赋值,取决于设计者。
你让它怎么做,就怎么做。
所以说这是很严谨的。
拼接符,Verilog的拼接符是一个花括弧。
如果我们要做算术移位,我们用拼接符来做,记不记得?
0950
算术移位就是首尾相接的移位。
8位的count,要左移。
逻辑移位,乘4我们可以这样写,<<2。
0951
这个就做了左移两位。
如果是做逻辑移位,会怎么写?
这个时候用拼接符来写。
我们可以写成count, count,最高位写在后面。
把最高位接到最低位。
VHDL的拼接符使用的是&符号。
数值类型,Verilog里面的二进制。
0952
二进制的逻辑变量,VHDL用标准逻辑类型,std_logic。
二进制的逻辑总线,在VHDL里面是用std_logic_vector的描述。
不定值。
高阻。
下面我们通过一个具体的例子,来说明这两种语言它们使用的差异。
我们先举一个非常简单的例子,也是做一个回顾,由浅入深。
VHDL,虽然只有两天的时间,但是我们从最基础开始,直到VHDL的最核心的部分,我们全面地对它进行一个讨论。
0953
我们做一个我们在初级班就学过的非常简单的例子,双输入与门。
0954
同样是准备一个工程文件夹。
启动Quartus。
