fpga_feixiang 发表于 2018-9-22 14:52:35

关于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

Sunlife 发表于 2018-9-22 17:13:56

                     :)

大鹏 发表于 2022-5-26 16:55:42

关于verilog几条语法

zxopenhl 发表于 2022-5-30 11:10:47

关于verilog几条语法

zxopenhl 发表于 2022-6-22 14:49:34

关于verilog几条语法

大鹏 发表于 2022-6-30 17:47:16

关于verilog几条语法
页: [1]
查看完整版本: 关于verilog几条语法