3.基本逻辑门

与非门

第一种写法

比较简单,可以直接使用内置的与非门。

//2端口与非门
module nand_2(y,a,b);

	input a,b;
	output y;
	
	nand(y,a,b);

endmodule 

综合后的电路:
在这里插入图片描述

第二种写法

//2端口与非门 第二种写法
module nand_2(a,b,y);

	input a,b;
	output y;
	
	reg y;//只有reg型变量可以在always块中被赋值
	
	always@(a,b)
		begin
			case({a,b})//枚举
				2'b00:y=1;
				2'b01:y=1;
				2'b10:y=1;
				2'b11:y=0;
				default:y='bx;//否则为高阻 为了安全最好加上default
			endcase 
		end

endmodule 

综合后的电路:
在这里插入图片描述
因为第二种方法用了case语句,所以会用到2-4译码器。

仿真

`timescale 1ns/1ps //定义仿真时间精度   延时1纳秒/精度为1皮秒

module nand_2_tb;
   
//激励信号定义,对应连接待测试模块的输入端口
	reg signal_a;
	reg signal_b;
	
//待检测信号定义,对应连接到待测试模块的输出端口
	wire y;
	
//例化待测试模块	
	//将定义的三个端子连接在下面的模块上
	nand_2(a,b,y) nand_2_0(       //引入模块并命名为led_test0
	.a(signal_a),
	.b(signal_b),
	.y(y);

//产生激励
   initial begin //开始仿真
	   signal_a = 0; signal_b = 0;  //三个按键的初始状态
		#100; //延时100ns
		signal_a = 0; signal_b = 1;  
		#100; //延时100ns
		signal_a = 1; signal_b = 0;  
		#100; //延时100ns
		signal_a = 1; signal_b = 1;  
		#200; 
		$stop;//仿真结束,不然会陷入循环
    end //这里容易忘记

endmodule 

如果仿真的时候显示没有输入,可能是写完仿真文件以后忘了综合。
在这里插入图片描述
结果与预期一致。

或非门

第一种写法

//二端口或非门 第一种写法
module nor_2(y,a,b);

	input a,b;
	output y;
	
	nor(y,a,b);//注意第一个是输出端口

endmodule 

综合后的电路:
在这里插入图片描述

第二种写法

//二端口或非门 第二种写法
module nor_2(a,b,y);

	input a,b;
	output y;
	
	reg y;//只有reg型变量可以在always块中被赋值
	
	always@(a,b)
		begin
			case({a,b})//枚举 这里是非阻塞赋值 为什么呢?
				2'b00:y<=1;
				2'b01:y<=0;
				2'b10:y<=0;
				2'b11:y<=0;
				default:y='bx;//否则为高阻 为了安全最好加上default
			endcase 
		end

endmodule 

在这里插入图片描述

仿真

仿真文件可以直接用上面与非门的,改一下名字就行。
仿真之前别忘了先关闭刚刚已经运行一次的modelsim
在这里插入图片描述

异或门

第一种写法

//二端口异或门 第一种写法
module xor_2(y,a,b);

	input a,b;
	output y;
	
	xor(y,a,b);//注意第一个是输出端口

endmodule 

在这里插入图片描述

第二种写法

//二端口异或门 第二种写法
module xor_2(a,b,y);

	input a,b;
	output y;
	
	reg y;//只有reg型变量可以在always块中被赋值
	
	always@(a,b)
		begin
			case({a,b})//枚举 这里是非阻塞赋值 为什么呢?
				2'b00:y<=0;
				2'b01:y<=1;
				2'b10:y<=1;
				2'b11:y<=0;
				default:y='bx;//否则为高阻 为了安全最好加上default
			endcase 
		end

endmodule 

在这里插入图片描述

仿真

出了点故障以后有机会再放图。

三态门

第一种写法

//二端口三态门 第一种写法
module tri_gate(dout,din,en);

	input din,en;
	output dout;
	
	assign dout=en?din:'bz;
	
endmodule 

在这里插入图片描述

第二种写法

//二端口三态门 第二种写法
module tri_gate(dout,din,en);

	input din,en;
	output dout;
	
	reg dout;
	
	always
		if(en) dout<=din;
		else dout<='bz;
	
endmodule 

在这里插入图片描述
这里综合后的电路没区别。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值