FPGA学习笔记3 -- 多路选择器

本文详细介绍了如何使用Verilog语言设计一个三线八线译码器,包括组合逻辑的实现方式和仿真过程。通过case语句进行逻辑判断,当输入a、b、c变化时,输出相应的八位信号。同时提供了仿真文件textbench的内容,展示了不同输入组合下的输出结果。该译码器在数字逻辑设计中有着广泛应用。
摘要由CSDN通过智能技术生成

 

 这里设计一个三线八线译码器

组合逻辑赋值的大体框架:

 当只有单条赋值语句时可以省略begin -- end 语句

module my3_8(a,b,c,out);
	
	input a;//输入端口a
	input b;//输入端口b
	input c;//输入端口c
	
	output reg [7:0]out;//输出端口,[]中表示位宽,且在always模块中赋值的变量一定为reg型
	
	always@(a,b,c)begin//当abc中任意一个发生变化即执行begin中的内容
	
		case({a,b,c})//abc均为单位信号,所以在此时利用{}可将其联系为一个3位的信号	
			
			3'b000:out = 8'b0000_0001;//中间的下划线为站位符不代表任何作用
			3'b001:out = 8'b0000_0010;
			3'b010:out = 8'b0000_0100;
			3'b011:out = 8'b0000_1000;
			3'b100:out = 8'b0001_0000;
			3'b101:out = 8'b0010_0000;
			3'b110:out = 8'b0100_0000;
			3'b111:out = 8'b1000_0000;
			//default:out = 8'b0000_0000;,此为未考虑到的情况,在此可以不用
		
		endcase
		
	
	end

endmodule 

 case语句比if--else好处在于case不存在先后顺序的关系

 

仿真文件(textbench)

`timescale 1ns/1ps

module my3_8_tb;

	reg a;
	reg b;
	reg c;
	
	wire [7:0] out;//与之前always模块的定义类型不冲突
	
	my3_8 u1(
	.a(a),
	.b(b),
	.c(c),
	.out(out)
	);
	
	initial begin //initial上电后只执行一次,begin--end的作用更像是一个括号
		
		a=0; b=0; c=0;
		#200;
		a=0; b=0; c=1;
		#200;
		a=0; b=1; c=0;
		#200;
		a=0; b=1; c=1;
		#200;
		a=1; b=0; c=0;
		#200;
		a=1; b=0; c=1;
		#200;
		a=1; b=1; c=0;
		#200;
		a=1; b=1; c=1;
		#200;
		$stop;
	end


endmodule 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值