Verilog语法中需注意的细节点

Verilog语法中需注意的细节点

 1 1. integer 整型 须在 initial语句、always语句 外定义,Verilog区分大小写,关键字都是小写;
2 2. parameter 须在 module内部定义,局部常量;
3 3. define 可在任何地方定义(一般在module外部),全局常量。
4 4. $monitor 只要参数变化就触发。必须放在 initial块 内部。
5 5. case的用法:
6 case(sel)
7 2'b00: out=in0;
8 2'b01: out=in1;
9 2'b10: out=in2;
10 2'b11: out=in3;
11 default: out=2'bx;
12 endcase
13
14 casez(select)
15 4'b???1: out = a;
16 4'b??1?: out = b;
17 4'b?1??: out = c;
18 4'b1???: out = d;
19 endcase
20 6. initial内
21 (1)赋值只能用 =
22 (2)操作变量只能是 reg
23 (3)不能使用always块
24 7. always内
25 (1)时钟敏感用 <=和 = ; 电平敏感只能用 =
26 (2)操作变量只能是 reg
27 8. assign 连续赋值
28 (1)只能用于电平敏感 =
29 (2)操作变量只能是 wire
30 9. `timescale 10ns/1ns 刻度/精度
31 10. 用begin-end 串行时序;用fork-join 并行时序
32 11. output端口赋值:
33 (1)定义了同名reg变量,用always语句赋值
34 (2)没有定义了同名reg,用assign语句赋值
35 12.任务:必须在module内部定义,可带时序控制(如,延时#、always语句)
36 task my_and; //任务定义,注意无端口列表
37 input[3:0] a,b; //a,b,out 名称的作用域范围为task 任务内部
38 output[4:0] out;
39 integer i;
40 begin
41 for(i=3;i>=0;i=i-1)
42 out[i]=a[i]&b[i]; //按位与
43 end
44 endtask
45 my_and(a,b,c);
46 /* 调用任务my_and,需注意端口列表的顺序应与任务定义中的一致,这里的a,b,c
47 分别对应任务定义中的a,b,out */
48
49 13.函数function: 必须在module内部定义,不能带时序控制(如,延时#、always语句)
50 仅用作自定义运算符号,隐含同名的输出reg
51 function[7:0] get0;
52 input[7:0] x;
53 ...
54 ...
55 endfunction
56 14.$random; //每次产生一个随机数
57 15. 注意1:使用 readmemh 等函数时,必须将文字档放在 simulation/modelsim,否则将会读取不到。
58 注意2:$readmemh(“ C:/project/mem.dat”, mem_arry); 必须使用反斜杠。



posted @ 2012-03-30 10:42  fishplj2000  阅读(781)  评论(0编辑  收藏  举报