目录
设计定义
- 按键控制LED灯
- 按下时LED灯亮
- 松开时LED灯灭
设计输入 (画出设计图)
- 按键进行选择
- 按键按下将信号A传给LED
- 按键松开将信号B传给LED
代码编写(根据上面设计图设计代码)
设计图解析
- A,B,KEY 为输入信号
- LED 为输出信号
- 故设置A,B,KEY为输入类型
- LED为输出类型
- 以KEY为条件利用连续赋值语句完成信号的选择
由以上分析编写代码
注:模块名必须和项目名称一致否则会有错误
module selecter(KEY,A,B,LED); input KEY; input A; input B; output LED; assign LED= (KEY == 0)? A :B; endmodule
功能仿真
仿真代码分析:
时间定义:
`timescale 1ns/1ns //仿真单位/仿真精度
- /前面为 时间单位(做延迟时 1个单位代表 多少)
- /后面为 时间精度(做仿真时时间精确到多少)
模块例化:
//激励信号定义,对应连接到待测试模块的输入端口 reg KEY; reg A; reg B; //待测试信号定义,对应连接到待测试模块的输出口 wire LED; //例化待测试模块 selecter selecter1 //例化模块 ( .KEY(KEY), .A(A), .B(B), .LED(LED) );
- 激励信号(输入信号)必须定义为 reg 类型
- 测试信号(输出信号)必须定义为 wire 类型
- 例化时 输入固定格式即可
<模块名> <例化模块名> //例化模块 ( .变量名(例化变量名), .变量名(例化变量名), .变量名(例化变量名), .变量名(例化变量名) );
例化变量赋值:
- 将激励信号赋初值
- #<延迟时间> 仿真延迟
- $stop 停止仿真
initial begin KEY=0;A=0;B=0; //激励信号赋初值 #20 .... $stop end
仿真代码:
`timescale 1ns/1ns module selecter; reg KEY; reg A; reg B; wire LED; selecter selecter1 //例化模块 ( .KEY(KEY), .A(A), .B(B), .LED(LED) ); initial begin KEY=0;A=0;B=0; #20 KEY=0;A=0;B=1; #20 KEY=0;A=1;B=0; #20 KEY=0;A=1;B=1; #20 KEY=1;A=0;B=0; #20 KEY=1;A=0;B=1; #20 KEY=1;A=1;B=0; #20 KEY=1;A=1;B=1; $stop end endmodule