组合电路的设计
一、前言
组合电路的特点是电路中任意时刻的稳态输出仅仅取决于该时刻的输入,而与电路之前的状态无关,组合电路没有记忆功能。
在使用Verilog设计中组合电路的描述方法主要有四种:真值表、逻辑代数、结构描述、抽线描述。
- 设计如下电路为例:设计一个3裁判表决电路,当两个或两个以上裁判同意时,判决器输出
1
,否则输出0
。
二、真值表
真值表是对电路功能最直接和简单的描述方式,根据要求的功能,将三个输入端记为A、B、C,输出端记为OUT,可以得出真值表如下所示:
A | B | C | OUT |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 |
0 | 1 | 0 | 0 |
1 | 0 | 0 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 1 |
1 | 1 | 1 | 1 |
然后我们就可以在Verilog中使用case语句对电路进行设计如下所示:
module design1(OUT, A, B, C);
output reg OUT;
input A,B,C;
always@(A or B or C) begin
case({A, B, C})
3'b000: OUT <= 1'b0;
3'b001: OUT <= 1'b0;
3'b010: OUT <= 1'b0;
3'b100: OUT <= 1'b0;
3'b011: OUT <= 1'b1;
3'b101: OUT <= 1'b1;
3'b110: OUT <= 1'b1;
3'b111: OUT <= 1'b1;
endcase
end
endmodule
该描述方式为一个解码器,其电路结构如图所示:
三、逻辑代数
按上述真值表我们可以使用卡诺图进行化简
可得其逻辑函数表达式为:
OUT = AB + BC + AC
根据该逻辑函数表达式编写Veriolg代码如下
module design2(OUT, A, B, C);
output OUT;
input A,B,C;
assign OUT=(A&B)|(B&C)|(A&C);
endmodule
综合后的电路图如下所示:
四、结构描述
我们将逻辑表达式直接调用Verilog库中的门电路设计如下
module design3(OUT, A, B, C);
output OUT;
input A,B,C;
wire w1, w2, w3;
and u1(w1, A, B);
and u2(w2, B, C);
and u3(w3, A, C);
or u4(OUT, w1, w2, w3);
endmodule
综合后电路如下所示,我们可以看到,这个电路和逻辑代数描述综合出来的电路实际上是一样的
五、抽象描述
从我们需要的功能我们可以知道,我们可以直接将三个输入的判决相加,当相加之和大于1就可表示投票成功,编写代码如下所示:
module design4(OUT, A, B, C);
output reg OUT;
input A,B,C;
wire [1:0] sum;
assign sum = A + B + C;
always@(sum) begin
if(sum > 1)
OUT = 1;
else
OUT = 0;
end
endmodule
综合后电路如下所示,
六、总结
VerilogHDL对同一电路有不同风格的描述,对于简单的电路,其各种描述之间的差异不大。但对于复杂的电路,不同风格的代码综合出的电路将会不同,生成的电路的性能也会不同,因此Verilog HDL是与电路对应的,要求设计者在编写代码时对所设计电路应有清楚的认识,这需要平时大量的积累。
七、附录
上一篇:Verilog学习之路(5)— Verilog HDL的结构化建模
下一篇: