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

二、四选一逻辑

所需软件

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

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

方法:用case语句实现多路选择逻辑

符号图:

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

 Verilog代码:

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

//2020-05-24
//四选一逻辑
module fn_sw_4(
				a,
				b,
				sel,
				y
				);
input			a,b;
input[1:0]		sel;				//sel为两位的变量
output			y;					//y为1位形式输出变量,因此不需将y定为两位的变量形式

reg				y;					//需用always语句对变量y赋值,因此需要将变量y定义为reg型变量

always@(a or b or sel)				//本always语句中的敏感变量为a、b、sel
begin
	case(sel)						//case语句中变量为sel
		2'b00:begin y<=a&b;end		//用2'b表示位数为两位的变量sel,变量sel的具体数值为2'b后的二进制数据
		2'b01:begin y<=a|b;end
		2'b10:begin y<=a^b;end
		2'b11:begin y<=~(a^b);end	//用~(a^b)表示同或(异或非门)
	endcase		//case要和endcase搭配
	
end				//begin要和end搭配

endmodule		//module要和endmodule搭配

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

//2020-05-24
//四选一逻辑-testbench
`timescale 1ns/10ps						//时间尺度预编译指令(`timescale 时间尺度/时间精度)
                                        //将时间尺度预编译指令放在testbench(仿真)代码文件里
module fn_sw_4_tb();
reg[3:0]		absel;					//定义4位的变量absel,用于给a、b、sel赋值
wire			y;
fn_sw_4 fn_sw_4(						//采用异名裂化的方法
				.a(absel[0]),			//将absel[0]的值连接到a,即把absel[3:0]的第0位的值赋给a
				.b(absel[1]),			//将absel[1]的值连接到b,即把absel[3:0]的第1位的值赋给b
				.sel(absel[3:2]),		//将absel[3:2]的值连接到sel,即把absel[3:0]的第3位和第2位的值赋给sel
				.y(y)					//将wire型变量y的值赋给y,用作四选一逻辑代码的输出。
				);
										
initial 								//用initial语句块给absel赋值
	begin								
				absel<=0;  				//对absel语句块赋初值
		#200	$stop;					//设置仿真时长为200ns(每10ns变化一次数据,变化20次)。
                                        //注:四位二进制可组成16种数据,令absel每过10ns加1,因此仿真时长大于160ns就可完成一轮仿真。
	end			//勿忘记initial begin后的end
	always  #10 	absel<=absel+1;		//每过10ns,absel+1
				//always后不需要end。只有begin需要单独的end

endmodule

仿真波形:

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

注意事项

1、对1位形式输出的变量,不需将其定义为两位的变量形式,比如fn_sw_4.v文件中的“output            y; ”;

2、用2'b表示位数为两位的变量sel,变量sel的具体数值为2'b后的二进制数据,比如fn_sw_4.v文件中的“2'b00”;

3、case语句要和endcase搭配;begin要和end搭配;module要和endmodule搭配。always语句块后无自己的end;

4、时间尺度预编译指令(`timescale 时间尺度/时间精度),需放在testbench(仿真)代码文件里,如fn_sw_4_tb.v文件首行代码所示;

5、四位二进制可组成16种数据,令absel每过10ns加1,因此仿真时长大于160ns就可遍历完成一轮仿真。

原教学视频链接如下

Verilog零基础入门_哔哩哔哩_bilibili

你可能感兴趣的:(Lattice,学习,fpga开发)