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

一、二选一逻辑

所需软件

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

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

方法一:用assign语句实现

符号图:

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

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

仿真波形:

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

方法二:用always语句块实现

符号图:

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

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文件一样。

仿真波形:

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

注意事项

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

你可能感兴趣的:(Lattice,fpga开发,硬件工程)