Verilog HDL基本框架
1. 基本概述
常用模板如下
1
2
3
4
5
6
7
8
9
10
11
12
13model 模块名 (端口1, 端口2, 端口3, ..., 端口n); // 声明部分 端口类型说明 (input, output, inout); 参数定义; 数据类型定义 (wire, reg等); // 逻辑功能描述部分 示例引用低层次模块和基本门元件; 连续赋值语句; 过程结构模块; 行为描述语句; 任务和函数; endmodule
以下是对各个部分的详细解释:
定义与名称 | 相关解释 |
模块名 | 模块的唯一标识符 |
端口类型说明 | 类型:输入(input)、输出(output)、双向口(inout) |
***** 所有被定义的端口一定要有类型说明 ***** | |
数据类型定义 | 常见的有:reg(寄存器类型),wire(连线类型) |
编程风格 | 实例化低层次模块:结构风格描述 |
连续赋值语句(assign):数据流描述方式 | |
过程块语句结构(initial 和 always 两种):功能(行为)风格描述方式 |
2. 简单的例子(代码文件均为example1.v)
以下面的式子为例
Y = S ‾ D 0 + S ‾ D 1 Y = overline{S}D_0 + overline{S}D_1 Y=SD0+SD1
2.1 . 结构风格描述法
1
2
3
4
5
6
7
8
9
10
11
12
13module example1 (D0, D1, S, Y); input D0, D1, S; output Y; wire Snot, A, B; not U1 (Snot, S); and U2 (A, Snot, D0); and U3 (B, S, D1); or U4 (Y, A, B); endmodule
2.2. 数据流描述方式
1
2
3
4
5
6
7
8
9
10
11module example1 (D0, D1, S, Y); input D0, D1, S; output Y; wire Y; assign Y = S? D1 : D0; // C语言写习惯了 // 或者写成 assign Y = (~S & D0) | (S & D1) endmodule
2.3. 功能风格描述方式
模块中一定要使用变量类型 —— reg
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15module example1 (D0, D1, S, Y); input D0, D1, S; output Y; reg Y; always @ (D0, D1, S) case (S) // 1'b 表示长度为1的二进制串,0和1表示两种情况 1'b 0: Y = D0; 1'b 1: Y = D1; endcase endmodule
3. 代码仿真
对于写好的代码需要Verilog HDL编译器。测试的具体方法如下:
- 对输入端口添加激励信号(尽可能包含所有种类的输入)
- 用过相应的代码运行后,将得到的结果与实际的结果进行比对,看是否准确。
3.1. 以文件example1.v文件为例(运行代码为test1.v)
仿真的输出一定是wire,输入看实际情况了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31// 单位时间1ns,精准度1ns time 1ns / 1ns module test1 (PS, PD0, PD1); reg PS, PD0, PD1; wire PY; example1 t_Mux(PD0, PD1, PS, PY); initial begin PS = 0; PD0 = 0; PD1 = 0; #1 PS = 0; PD0 = 0; PD1 = 1; #1 PS = 0; PD0 = 1; PD1 = 0; #1 PS = 0; PD0 = 1; PD1 = 1; #1 PS = 1; PD0 = 0; PD1 = 0; #1 PS = 1; PD0 = 0; PD1 = 1; #1 PS = 1; PD0 = 1; PD1 = 0; #1 PS = 1; PD0 = 1; PD1 = 1; #1 $stop; end initial begin // monitor和C语言的printf相似,$ time表示单位时间上的系统任务,%b 表示二进制输出,t 表示tap输出 $monitor ($ time, "tS=%btD1=%btD0=%dtY=%d", PS, PD1, PD0, PY); // dumpfile和dumpvars用于保存仿真数据文件 $dumpfile ("text1.vcd"); $dumpvars; end endmodule
4. 实际操作
(自己动手玩吧)
最后
以上就是激动蓝天最近收集整理的关于Verilog HDL 学习笔记 ——— (1)Verilog HDL基本框架的全部内容,更多相关Verilog内容请搜索靠谱客的其他文章。
发表评论 取消回复