其他分享
首页 > 其他分享> > 第三章语法

第三章语法

作者:互联网

1.模块语句及表达

module name(a,b,c,d,e,f);//模块名(信号列表)
    input a,b;
    output c;
    inout d;
    input [4:1]e;
    output [4:1]f;
endmodule

input:单向输入

output:单向输出

inout:双向(输入输出)端口

2 assign与wire语句

module name(a,b,c,d,e,f);
    input a,b;
    output c;
    inout d;
    input [4:1]e;
    output [4:1]f;
    
    assign c=a^b; //"^"异或
    assign c=a&b; //"&"与
    
endmodule

assign触发的条件是:左侧的驱动表达式中的信号发生改变。故assign是并行触发的

assign语句的变量类型为 wire型

module name(a,b,c,d,e,f);
    input a,b;
    output c;
    inout d;
    input [4:1]e;
    output [4:1]f;
    
    wire S1=a^b; //"^"异或
    wire S2=a&b; //"&"与
    wire c=S1|S2;
endmodule

1.定义变量默认为wire型,assign与wire描述信号具有一致性,故可用wire代替assign

2.wire可定义信号表外的辅助信号

3 always过程语句与reg型变量

module name(a,b,c,d,e,f);
    input a,b;
    output c;
    inout d;
    input [4:1]e;
    output [4:1]f;
    reg c,[4:1]f;
    int i;
    
    always@(c,f)//(敏感信号列表)
  	begin
        if(c==1&&f[1]==0)
            i=i+1;
    end
endmodule

1.在always语句中,被赋值的信号需定义为reg型

2.输入信号不能定义为reg型

4 case条件语句与并位操作、数字表达

module name(a,b,c,d,e,f);
    input a,b;
    output c;
    inout d;
    input [4:1]e;
    output [4:1]f;
    reg c,[4:1]f;
    int i;
    
    always@(f,e)//(敏感信号列表),并位操作{},四位的e和四位的f并成八位的{f,e}
  	begin
        case({f,e})//条件表达式
            8'b00000000:	;end
            8'b00000001:	;end
            8'b00000011:	;end
            8'b00000111:	;end
            default:	;end
        endcase
    end
endmodule

1.“8”表示位宽八位,b表示二进制,意义为最多表示八位二进制数,其后表示具体数值,另“o”八进制,“h”十六进制,“d”十进制

5 if_else条件语句与并位操作

略,参考C语言的 if_else

6 过程语句中的赋值符号“=”、“<=”

1.“=”阻塞式赋值,如语句 {y=b,x=y,a=x}顺序执行下来,并且被赋值对象立即改变值,即阻塞式赋值

2.“<=”非阻塞式赋值,如语句{y<=b,x<=y,a<=x},顺序执行下来,并且被赋值对象不会立即改变值,当全部执行完毕后一齐赋值。也就是说,y<=b,x<=y中,x<=y的y不等于b,而等于其上一个值。

7 例化语句及其用法

1.  <模块元件名> <例化元件名> (.例化元件端口(例化元件外接端口名));//例化元件端口指代调用模块的元件端口名,例化元件外接端口名指代本程序中连接到该端口的端口名。未知端口顺序用该语句
2.<模块元件名> <例化元件名> (例化元件外接端口名1,例化元件外接端口名2...);//已知端口顺序用该语句

8 过程语句中的循环语句及其用法

1.for循环

...
integer i;
always@(a,b)
    begin
        r=0;
        for(i=1;i<=s;i=i+1)
    end
...

2.while循环

...
integer i;
always@(a,b)
    begin
        i=i+1;
        while(i<10)
    end
...

3.repeat循环

...
always@(a,b)
    begin       
        repeat(10)//repeat语句进入循环前循环次数就已决定
    end
...

6 parameter定义常数及参数传递

1.定义常数

module name (R,A,B);
    parameter S=4;

2.底层模块设置参数传递

module name #(parameter S=4,C=5) (R,A,B);
    或 module name #(parameter S,C) (R,A,B);

3.上层模块调用并设置参数

name #(.S(8),.C(2));

标签:语句,wire,第三章,name,端口,语法,input,output
来源: https://www.cnblogs.com/helloszy/p/16353167.html