Verilog
module decoder(
input [2:0] a,
output reg [7:0] y
);
//--statements--//
//--structarization--//
//assign y[0] = ~a[0] & ~a[1] & ~a[2];
//--behavior level--//
always @ (*)
begin
if(a == 3'b000)
y = 8'b0000_0001;
else if(a == 3'b001)
y = 8'b0000_0010;
else if(a == 3'b010)
y = 8'b0000_0010;
else if(a == 3'b011)
y = 8'b0000_0100;
else if(a == 3'b100)
y = 8'b0000_1000;
else if(a == 3'b101)
y = 8'b0001_0000;
else if(a == 3'b110)
y = 8'b0010_0000;
else if(a == 3'b111)
y = 8'b0100_0000;
else
y = 8'b1000_0000;
//--data fiow--//
//always @ (*)
//begin
// case(a)
// 3'b000 : y = 8'b0000_0001;
// 3'b001 : y = 8'b0000_0010;
// 3'b010 : y = 8'b0000_0100;
// 3'b011 : y = 8'b0000_1000;
// 3'b100 : y = 8'b0001_0000;
// 3'b101 : y = 8'b0010_0000;
// 3'b110 : y = 8'b0100_0000;
// 3'b111 : y = 8'b1000_0000;
// default : y = 8'b0000_0000;
// endcase
end
endmodule
注:若在always里,左侧赋值则必须加上数据类型reg
vhdl
暂无
组合电路
组合逻辑电路在逻辑功能上的特点是任意时刻的输出仅仅取决于该时刻的输入,与电路原来的状态无关。 而时序逻辑电路在逻辑功能上的特点是任意时刻的输出不仅取决于当时的输入信号,而且还取决于电路原来的状态,或者说,还与以前的输入有关。或者可以说,组合电路是电平触发,时序电路是原信号触发。
竞争与冒险,是逻辑门因输入端的竞争而导致输出产生不应有的尖峰干扰脉冲的现象。竞争:两个输入“同时向相反的逻辑电平变化”称之为“竞争”。因竞争而可能在输出产生尖峰脉冲的现象,称之为“竞争-冒险”。并且,在一定可以影响我们电路却无法被分析。
检查竞争-冒险的方法:
1.分析法:如果你把一个逻辑式,其他的输入变量取值,固定下来之后,存在这样一个Y=A+A'或AA',就意味着A和A'之间,在一个延迟时间,这个事情有可能出现冒险.
2.观测法:仿真或实际电路分析
消除竞争-冒险的方法:
1.接入滤波电容:尖峰脉冲很窄,用很小的电容就可以将尖峰削弱到Vth以下。消除竞争冒险,它的宽度基本上就是一个延迟时间,如果是在最后的输出端的话,输出端最后出现了一个小毛刺,加一个小滤波电容,和你的时间相关,和你输出端的导通电阻,构成一个RC。
2.引入选通脉冲:取选通脉冲作用时间-在电路达到稳定之后,p的高电平的输出信号不会出现尖峰。
3.修改逻辑设计:
由此可证明:最简不一定最好,应用卡诺图相切(余后补充)
注:总结于13年清华王红老师的课程