一.三种建模方式
结构化描述方式、数据流描述方式和行为描述方式
1.结构化的建模方式
就是通过对电路结构的描述来建模,即通过对器件的调用( HDL概念称为例化),并使用线网来连接各器件的描述方式。
2.数据流描述方式
数据流的建模方式就是通过对数据流在设计中的具体行为的描述的来建模。最基本的机制就是用连续赋值语句。在连续赋值语句中,某个值被赋给某个线网变量(信号).
比如 assign [delay] net_name = expression;
3.行为描述方式
行为方式的建模是指采用对信号行为级的描述(不是结构级的描述)的方法来建模。在表示方面,类似数据流的建模方式,一般是把用initial 块语句或always 块语句描述的归为行为建模方式。行为建模方式通常需要借助一些行为级的运算符如加法运算符(+),减法运算符(-)等。
二.操作符
1.算术:
+ //加法
- //减法
* //乘法
/ //整除
% //取余
** //幂运算
2.用于判断关系:
关系运算符用于判断两个操作数的大小。操作数之间的关系为真时返回为1,当为假时返回值为0。
> //大于
>= //大于或者等于
< //小于
<= //小于或者等于
注意:关系运算符的优先级低于算数运算符
3.等式运算符
用于判断两个操作数的是否x。操作数之间的关系为真时返回为1,当为假时返回值为0。
== //相等
!= //不相等
4.逻辑:
&& 逻辑与
|| 逻辑或
! 逻辑非
5.问号运算:
格式与c无异:(条件表达式) ? 表达式 1 : 表达式 2
//条件表达式为真,则返回表达式1的值,若条件表达式为假,则返回表达式2的值。
6.位运算符:
& //与
| //或
~ //非
^ //异或
^~ //同或
~& //与非
~| //或非
位操作是对变量的每一位进行操作。如果两个操作数的长度不相等,将会对较短的数高位补零,然后进行对应位操作,输出结果的长度与位宽较长的操作数长度保持一致。
7.移位运算符://我对于这个运算符的理解很浅,所以借用了网上的内容。
移位运算符用于将操作符左侧的操作数向左或者向右移位,移位的次数与运算符的右侧的位数决定。
<< //逻辑左移
>> //逻辑右移
<<< //算数左移
>>> //算数右移
格式:
<操作数><移位运算符><移位位数>
如data<<2
,即data信号逻辑左移两位”.
示例:
reg [3:0] a;
a =4'b0010;
a<<2 //左移两位,左边丢弃,右边补零,结果是4‘b1000;类似的a>>2,右移两位,右边丢弃,左边补零,结果为4’b0000;
算数移位运算符,对于左移产生的空位补零。算数右移运算符,对于无符号数,右移产生的空位用0补齐,有符号数用有符号位补齐。