verilog入门 之 多路选择器设计

//定义模块
module fn_sw(
	a,//定义模块的端口
	b,
	sel,
	y
);

	input a,b,sel;//定义端口的输入输出类型
	output y;
	reg y;//定义数据类型,reg变量只能在always语句和initial语句中被赋值

	//可以用下面的三目运算符实现两路选择器,也可以用always语句实现
	//使用assign时,需要将y定义成wire类型
	//assign y = sel?(a^b):(a&b);
	
	//用always语句实现
	//@为敏感信号列表,当这些信号变化时,触发这个always
	always@(a or b or sel)begin

		if(sel==1) begin
			y<=a^b;
		end
		else begin
			y<=a&b;
		end
	end


endmodule
//编写测试平台 testbench
module fn_sw_tb;
	reg a_,b_,sel_;//定义测试用到的端口,以及数据类型
	wire y_;

	fn_sw a_fn_sw(//实例化一个两路选择器模块
		.a(a_),//采用匿名例化,将上面定义的端口进行连接
		.b(b_),
		.sel(sel_),
		.y(y_)
	);

	initial begin//使用initial语句对端口进行不同赋值,来测试模块
		a_<=0;b_<=1;sel_<=0;//初始化端口值
		#10 a_<=0;b_<=1;sel_<=1;//为端口赋不同值
		#10 a_<=1;b_<=0;sel_<=0;
		#10 a_<=1;b_<=0;sel_<=1;
		#10 $stop;
	end


endmodule
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值