Verilog HDL的基础知识
- assign”语句是描述组合逻辑最常用的方法之一
- 而“always”块既可用于描述组合逻辑,也可描述时序逻辑
- 用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。
- “always”块中的语句称为“顺序语句”,在“always”模块内,逻辑是按照指定的顺序执行的,请注意,两个或更多的“always”模块也是同时执行的,但是模块内部的语 句是顺序执行的。“always”内部常用if ….else ,若“always”内部不是顺序执行的,则if ….else则失去了意义。
- 在数字电路中,x代表不定值,z代表高阻值(z还有一种表达方式是可以写作?)
1.负数 :
一个数字可以被定义为负数,只需在位宽表达式前加一个减号
-8'd5 //合法
8’d-5 //非法
2.下划线
可以用来分隔开数的表达以提高程序可读性
16'b1010_0000_1111_1011 //合法
8'b_0011_1010 //非法
3.参数(Parameter)型
用parameter来定义常量,即用parameter来定义一个标识符代表一个常量,称为符号常量
parameter N = 32 ;
reg [N-1 : 0] q_reg;
reg [N-1 : 0] q_next;
reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。
在“always”块内被赋值的每一个信号都必须定义成reg 型。
4.赋值语句
(1)非阻塞b <= a;
1.块结束后才完成赋值操作
2.b的值并不是立即就改变的
(2)阻塞b = a;
1.赋值语句执行完成后,块才能结束
2.b的值在赋值语句执行完后立刻就改变的
5.几大常见语句(博客更新12.7)
1.块语句
- 顺序块 begin_end语句
- 并行块 fork_join语句
begin
areg = breg;
#10 creg = areg;
end
/*end后面不需要加分号,因为begin_end内是一个完整的复合语句
不需再附加分号*/
2.if_else语句
- 若为0,x,z.则按“假”处理 , 若为1则按“真“处理(这里与C语言稍有不同)
- 表达式简写
if(expression)相当于if(expression == 1)
if(!expression)相当于if(expression!=1)
- if语句的嵌套,应注意if与else的配对关系(用begin_end块语句来确定配对关系是一个好方法)