verilog练习一:二选一多路器

内容:

两个输入IO,a,b可以为高/低电平

输入按键按下时,LED灯与a端口状态保持一致。

输入按键释放时,LED灯与b端口状态保持一致。  

 

从图2可知,当按键按下时,接地,为低电平;当按键放开时,为高电平。

module led_test(a,b,key_in,led_out);

 input a;//输入端口A
 input b;//输入端口B
 
 //也可写成input a.b; 这样不直观
 
 input key_in;//输入按键key_in,实现输入通道的选择
 output led_out;//led 控制输出端口
 
 //当key_in==0时,led_out = a
 //assign 连续赋值语句,设计的是组合逻辑; assign 待赋值信号
 
 assign led_out = (key_in == 0)? a : b; //key_in==0是否满足
 
 endmodule

 仿真程序如下(在testbench文件夹下):

`timescale 1ns/1ps //数字1,撇是键盘左上角的撇 定义仿真精度 仿真步径/仿真精度
//如#100,则为100ns,如果为10ns,则为100x10ns=1000ns

module led_test_tb;//tb就是test bench文件

  //激励信号定义,对应连接到待测试模块的输入端口
     reg signal_a;
	  reg signal_b;
	  reg signal_c;
	  
 //待检测信号定义,对应连接到待测试模块的输出端口
	  wire led;
//例化待测试模块 
     led_test led_test0(
	  .a(signal_a),
	  .b(signal_b),
	  .key_in(signal_c),
	  .led_out(led)
	  );//只需要看led状态即可
   //led_test led_test1(a,b,key_in,led_out); 一个模块设计好后,可多次使用
//产生激励  
	  initial begin
	    signal_a = 0;signal_b = 0;signal_c = 0;
		 #100;//延时100ns
		  signal_a = 0;signal_b = 0;signal_c = 1;
		 #100;//延时100ns
		  signal_a = 0;signal_b = 1;signal_c = 0;
		 #100;//延时100ns
		  signal_a = 0;signal_b = 1;signal_c = 1;
		 #100;//延时100ns
		  signal_a = 1;signal_b = 0;signal_c = 0;
		 #100;//延时100ns
		  signal_a = 1;signal_b = 0;signal_c = 1;
		 #100;//延时100ns
		  signal_a = 1;signal_b = 1;signal_c = 0;
		 #100;//延时100ns
		  signal_a = 1;signal_b = 1;signal_c = 1;
		 #200;//延时100ns
		 $stop;//将仿真停止,如果不写,仿真会一直运行  
	  end 
endmodule 

在前仿真(RTL simulation)的过程中, 仿真不存在问题,当按键按下时,即signal_c=0时,输出led与signal_a保持一致;当按键释放时,即signal_c=1时,输出led与signal_b保持一致。波形如下图所示:

 点击后仿真(Gate Level Simulation)如下图:

Timing model分为慢速和快速。其中-8代表速度等级为8;1.2V代表内核电压为1.2V;85度代表运行在温度为85度的极限情况下。

后仿真后,发现有尖尖角,其中,当signal_c=0时,led应该与signal_a保持一致,但是与signal_b保持一致了,这并不是所想要的,后续需要寻找办法解决掉,在后仿真中,还可以看到有延迟现象出现,并没有前仿真那么完美,波形如图所示:

 

 

 

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值