赞
踩
目录
sl为控制信号,a,b为两个输入信号,out为输出信号。当sel为低电平时,输出out=a,当sel为高电平时,输出out=b。
- module mux2( //模块名和端口
- a,
- b,
- sel,
- out
- );
- input a;//定义端口属性为输入还是输出
- input b;
- input sel;
- output out;
- assign out = (sel == 0)?a:b;//连续赋值,双目计算符
- endmodule//模块结束
- `timescale 1ns/1ns //是指仿真时用到的延时语句的单位和精度,(后面是精度,前面是单位)
-
- module mux2_tb();
-
- reg S0;
- reg S1;
- reg S2;
-
- wire mux2_out;
- //复制需要的模块名以及端口列表
- mux2 mux2_inst0( //ux2 mux2_inst0是为了防止设备重复所给定的标签名
- .a(S0),//这代表S0与a端口进行连接
- .b(S1),
- .sel(S2),
- .out(mux2_out)//输出只需要连接一根导线即可,故mux2_out为wire线型
- );
-
- initial begin
- S2 = 0; S1 = 0; S0 = 0;
- #20;//20x1 ns
- S2 = 0; S1 = 0; S0 = 1;
- #20;
- S2 = 0; S1 = 1; S0 = 0;
- #20;
- S2 = 0; S1 = 1; S0 = 1;
- #20;
- S2 = 1; S1 = 0; S0 = 0;
- #20;
- S2 = 1; S1 = 0; S0 = 1;
- #20;
- S2 = 1; S1 = 1; S0 = 0;
- #20;
- S2 = 1; S1 = 1; S0 = 1;
- #20;
- end
-
- endmodule
1.`timescale 1ns/1ns //时间刻度 前面的1ns是时间单位,后面的代表精度;
2.所有程序总是从modbule开始,endmodule结束;
3.assign out = (sel == 1)?a:b;相当于c语言中的if条件判断。
4.激励文件中的例化步骤:
1)把设计文件 mux2( a,b,sel,out所以的信号);都搬过来,进行在测试平台上面的例化;
a.把设计文件mux2( a,b,sel,out所以的信号);都搬过来
- module mux2( //模块名和端口
- a,
- b,
- sel,
- out
- );
b.对代码进行修改,在mux2后面加上例化的模块名,在端口名前加点,端口名后打括号,括号中是例化的端口名称,形成以下代码:
- //设计文件模块名 例化模块名
- //设计文件端口名 例化模块端口名
-
- mux2 mux2_inst0( //ux2 mux2_inst0是为了防止设备重复所给定的标签名
- .a(S0),//这代表S0与a端口进行连接
- .b(S1),
- .sel(S2),
- .out(mux2_out)//输出只需要连接一根导线即可,故mux2_out为wire线型
- );
2)给激励文件中的输入端口给激励;
3)产生激励, initial begin开头,end结束。
4)#20只能在激励文件中使用
5)verilog的一般语法结构:
- module 模块名(端口名1,端口名2,端口名3,端口名4,...);
- 端口定义说明(input,output,inout);
- 参数定义(可选);
- 数据类型定义(wire,reg等);
- //…………………………以上为描述接口说明部分…………………………//
- //…………………………以下为描述逻辑功能部分…………………………//
- 实例引用低层次模块和基本门级元件;
- 连续赋值语句(assign);
- 过程赋值语句(initial和always);
- 功能描述语言;
- 任务和函数;
- endmodule
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。