【Verilog零基础入门-边看边练】学习笔记——第二讲 组合逻辑代码设计和仿真(多路选择器逻辑设计)(一)

一、二选一逻辑

所需软件

Verilog编程软件:Lattice Diamond(3.11.0.396.4_Diamond_x64)

Verilog仿真软件:ModelSim SE-64 10.2c(modelsim-win64-10.2c-se)

方法一:用assign语句实现

符号图:

Verilog代码:

Part1:Test_fn_sw.v文件(Verilog工程文件)

//2022-05-23
//二选一逻辑设计-fn_sw
module fn_sw(
		a,
		b,
		sel,
		y
		);
input		a;
input		b;
input		sel;
output		y;

assign	y=sel?(a^b):(a&b); //方法一:通过assign语句实现二选一逻辑

endmodule

Part2:Test_fn_sw_tb.v文件(Verilog仿真文件)

//2022-05-23
//二选一逻辑设计-testbench of fn_sw
`timescale 1ns/10ps
module fn_sw_tb;
reg		a,b,sel;
wire		y;

fn_sw fn_sw(
		.a(a),
		.b(b),
		.sel(sel),
		.y(y)
		);
initial begin
		a<=0;b<=0;sel<=0;
	#10	a<=0;b<=0;sel<=1;
	#10	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	a<=1;b<=1;sel<=0;
	#10	a<=1;b<=1;sel<=1;
	#10	$stop;
	end
		
endmodule

仿真波形:

方法二:用always语句块实现

符号图:

Verilog代码:

Part1:Test_fn_sw.v文件(Verilog工程文件)

//2022-05-23
//二选一逻辑设计-fn_sw
module fn_sw(
		a,
		b,
		sel,
		y
		);
input		a;
input		b;
input		sel;
output		y;

reg		y;	    //方法二:通过always语句块实现二选一逻辑
always@(a or b or sel)
    begin
	if(sel==1)begin
		y<=a^b;
	end
	else begin
		y<=a&b;	
	end
    end
endmodule

Part2:Test_fn_sw_tb.v文件(Verilog仿真文件)

与方法一的Test_fn_sw_tb.v文件一样。

仿真波形:

注意事项

1、对assign语句变量赋值时,需用“=”,比如方法一中的“assign    y=sel?(a^b):(a&b);”;

2、在always语句块里赋值的变量需是reg型,比如方法二中的“y”;

3、对reg型变量赋值时,需用带箭头的等号“<=”,比如方法二中的“y<=a&b; ”;

4、对if else判别语句中的变量判别时,要用双等号“==”,比如方法二中的“if(sel==1)”。

原教学视频链接如下

https://www.bilibili.com/video/BV1hX4y137Ph?p=2&spm_id_from=pageDriver

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

社牛超靓的铁蛋儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值