关于verilog几条语法
1.关于wire和reg类型的使用:input的变量一定只能是wire。output的变量可以是wire也可以是reg。inoutput的变量只能是wire型,因为类型中含有input成分。
所有变量不加说明默认定义为wire型。
在assign语句中使用wire类型。在always语句块中使用reg类型。
2.位拼接符 { }
位拼接符使用:把某些倍号的某些位详细地列出来,中间用逗号分开,最后用大括号括起来表示一个整体信号。拼接时高位在前。
eg: input numberH;
input numberL;
output wire number;
assign number = {numberH,numberL};
1
2
3
4
3.case endcase语句与if else语句
if语句语法基本与c语言相同,也具有优先级。
eg: if(flag == 0)
begin single = 3;end
else if(flag == 1)
begin single = 2;end
else if(flag == 2)
begin single = 1;end
else
begin single = 0;end```
1
2
3
4
5
6
7
8
case语句,不具有优先级
eg: case(flag)
2'b0: single = 3;
2'b1: single = 2;
2'b2: single = 1;
default: single = 0;
endcase
1
2
3
4
5
6
if语句与case语句:
if占用资源相对较少,但执行时间较长。case语句与之相反。
4.always语句块与assign语句
always语句块一般用在时序逻辑电路中,在组合逻辑中也有应用。
/*敏感信号是需要检测的信号,当这些信号发生变化时,always语句块就会更新一次。对于时序逻辑而言,还需要有posedge,negedge,posedge or negedge修饰。*/
语法: always@(敏感信号)
begin
语句体;
end
1
2
3
4
5
6
always组合逻辑
在组合逻辑电路中,用阻塞赋值 =
eg:always@(a,b,c,d,x)
begin
case(x)
2'b0: y = a;
2'b1: y = b;
2'b2: y = c;
default: y = d;
endcase
end
1
2
3
4
5
6
7
8
9
always时序逻辑
在时序逻辑电路中,用非阻塞赋值 <=
eg:always@(posedge clk or negedge res)
begin
if(clk)
y <= a;
else if(res == 0)
y <= 0;
else y <= y;
end
1
2
3
4
5
6
7
8
5.assign 目标变量 = 驱动表达式
eg: assign y = a & b;
1
6.多目运算符 ? :
eg: Y = (a&b)?c:d;
/*与c语言神似的运算符。若a&b为真,Y=c,否者 Y=d。*/
---------------------
本文来自 nickqiang 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xu8023636/article/details/78148374?utm_source=copy :) 关于verilog几条语法 关于verilog几条语法 关于verilog几条语法 关于verilog几条语法
页:
[1]