题目要求:
看到题目,很多小伙伴可能不知道高阻态是个啥玩意咧(尤其是我们计院这些不懂硬件的学生),这里普及一下高阻态的概念:
高阻态是数字电路三态门中输出状态的一种,它的输出既不是高电平也不是低电平,相当于浮空状态。
如果高阻态再输入下一级电路的话,对下级电路无任何影响,等同于没接入上级电路。
如果用万用表测的话,有可能是高电平也有可能是低电平。
在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. 加法和减法:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)