Quartus模拟仿真实现简单的CPU逻辑运算单元

Quartus模拟仿真实现简单的CPU逻辑运算单元,第1张

题目要求:

看到题目,很多小伙伴可能不知道高阻态是个啥玩意咧(尤其是我们计院这些不懂硬件的学生),这里普及一下高阻态的概念:

高阻态是数字电路三态门中输出状态的一种,它的输出既不是高电平也不是低电平,相当于浮空状态。


如果高阻态再输入下一级电路的话,对下级电路无任何影响,等同于没接入上级电路。


如果用万用表测的话,有可能是高电平也有可能是低电平。


在verilog中,高阻态用z表示,比如4位寄存器,如果想使其每一位输出无效(即高阻态),则赋值语句是: v = 4'bzzz

其余的功能就非常好实现了,这里采用行为建模的方式,类似于C语言的算法,便于各位计院大佬理解;且代码简洁,干净利落!

代码如下:

module Unidad_Logica_de_Algoritmo(op0, op1, s, oe, clk, r);
	input clk, oe; // OE是使能信号,低电平有效
	input[3:0] op0; // 第一个 *** 作数
	input[3:0] op1; // 第二个 *** 作数
	input[2:0] s; // 选择开关,不同的值(具体见题目描述)进行不同的运算
	output[3:0] r; // 输出值
	
	reg[3:0] r; // 因为r在always代码块中被赋值,所以需要定义为寄存器类型
	
	always @(posedge clk) // D触发器上升沿触发
	begin
		if(oe == 1'b1)
		begin
			r = 4'bzzzz; // 输出高阻态
		end
		else
		begin
			if(s == 3'b000) // PLUS
			begin
				r <= op0 + op1;
			end
			else if(s == 3'b001) // MINUS
			begin
				r <= op0 - op1;
			end
			else if(s == 3'b100) // AND
			begin
				r <= op0 & op1;
			end
			else if(s == 3'b101) // OR
			begin
				r <= op0 | op1;
			end
			else if(s == 3'b110) // XOR
			begin
				r <= op0 ^ op1;
			end
		end
	end
endmodule

波形图模拟仿真如下:

1. 高阻态情况:

 2. 异或:

3. 按位或:

 

4. 按位与:

 

5. 加法和减法:

 

 

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/580055.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存