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