組合邏輯概述
由MOS獲得基本邏輯門(mén)之后,再由門(mén)級(jí)電路形成組合邏輯電路。組合邏輯電路有三種表示方法:
(a)真值表
(b)結(jié)構(gòu)化(即門(mén)級(jí))原理圖
(c)布爾方程
示例:例如一個(gè)單bit全加器,實(shí)現(xiàn)的是兩個(gè)輸入信號(hào) a,b以及進(jìn)位位 c_in的相加。輸出一個(gè)相加的結(jié)果sum和一個(gè)進(jìn)位位c_out。
其真值表如下:
根據(jù)真值表可以直接寫(xiě)出其布爾方程式。
獲得某個(gè)輸出的積之和(多項(xiàng)做與然后再做或)的布爾表達(dá)式方法如下:
1. 找到輸出為1的對(duì)應(yīng)的輸入,如果此輸入為0則取反。將輸入做與。
2. 將上面所有的與項(xiàng)再做或操作。
以上面的全加器為例。使得輸出sum為1的有:
故對(duì)應(yīng)sum的積之和布爾表達(dá)式如下(*表示與操作,+表示或操作, ' 表示取反):
sum = a' * b' * c_in+a' * b * c_in'+a * b' * c_in' + a * b * c_in
同樣分析可以得出 c_out的積之和布爾表達(dá)式如下:
c_out = a' * b * c_in+a * b' * c_in+a * b * c_in' + a * b * c_in
根據(jù)積之和表達(dá)式就可以得出相應(yīng)的積之和對(duì)應(yīng)的門(mén)級(jí)電路。以與或門(mén)構(gòu)成。下面是sum的積之和電路,這里由三個(gè)2輸入或門(mén)實(shí)現(xiàn)一個(gè)四輸入或門(mén)邏輯。
相應(yīng)的c_out的積之和門(mén)級(jí)電路如下。
可以看到這樣獲得積之和布爾表達(dá)式與對(duì)應(yīng)的電路都是兩級(jí)的,前面一級(jí)為與門(mén)邏輯,后面一級(jí)為或門(mén)邏輯。
當(dāng)然不止只有積之和這一種表達(dá)方式,還可以利用狄摩根定律去轉(zhuǎn)化成和之積的表達(dá)方式。
狄摩根定律如下( " ' " 表示取反," * " 表示與, " + "表示或):
(a + b + c + ...) ' = a' * b' * c' * ...
(a * b * c * ...) ' =a' + b' + c' + ...
根據(jù)狄摩根定律第二條,就可以將積之和布爾表達(dá)式轉(zhuǎn)化成和之積形式;根據(jù)狄摩根定律第一條,就可以將和之積布爾表達(dá)式轉(zhuǎn)化成積之和形式。
這里以將sum的積之和布爾表達(dá)式轉(zhuǎn)化成和之積形式為例。
sum = ( (a' * b' * c_in+a' * b * c_in'+a * b' * c_in' + a * b * c_in)' )'
= ( (a' * b' * c_in)' * (a' * b * c_in')' * (a * b' * c_in')' * (a * b * c_in)') '
= ( ( a+b+c_in' )*( a+b'+c_in )*( a'+b+c_in )*(a' + b' + c_in') )'
從布爾表達(dá)式可以看到,和之積表達(dá)式的的前級(jí)為或門(mén)邏輯,后一級(jí)為與門(mén)邏輯。
Verilog對(duì)組合邏輯電路的描述,可以分為結(jié)構(gòu)級(jí)描述,數(shù)據(jù)流級(jí)描述,行為級(jí)描述三種方式。
以上面對(duì)sum這個(gè)電路描述為例,將sum這個(gè)電路作為一個(gè)完整的module描述,給這個(gè)電路取個(gè)名字為get_sum。
結(jié)構(gòu)級(jí)描述方式如下(其中not是表示非門(mén),and表示與門(mén),or表示或門(mén)):
module get_sum(
input a,
input b,
input c_in,
output sum
);
wire a_n,b_n,c_in_n;
not (a_n,a);
not (b_n,b);
not (c_in_n,c_in);
wire and_o1,and_o2,and_o3,and_o4;
and (and_o1,a_n,b_n,c_in) ;
and (and_o2,a_n,b,c_in_n) ;
and (and_o3,a,b_n,c_in_n) ;
and (and_o4,a,b,c_in) ;
wire or_o1,or_o2;
or (or_o1,and_o1,and_o2);
or (or_o2,and_o3,and_o4);
or (sum,or_o1,or_o2);
endmodule
數(shù)據(jù)流級(jí)描述方式(& 與,| 或 ,~ 非):
module get_sum(
input a,
input b,
input c_in,
output sum
);
wire a_n,b_n,c_in_n;
assign a_n = ~a;
assign b_n = ~b;
assign c_in_n = ~c_in;
wire and_o1,and_o2,and_o3,and_o4;
assign and_o1 = a_n&b_n&c_in;
assign and_o2 = a_n&b&c_in_n;
assign and_o3 = a&b_n&c_in_n;
assign and_o4 = a&b&c_in;
wire or_o1,or_o2;
assign or_o1 = and_o1 | and_o2;
assign or_o2 = and_o3 | and_o4;
assign sum = or_o1 | or_o2;
endmodule
行為級(jí)描述方式(這里采用了case語(yǔ)句,也可以采用if else語(yǔ)句;{ }是位拼接符,如{a,b,c_in}就是將a,b,c_in拼成一個(gè)三位的數(shù)據(jù),a為最高位,b為次高位,c_in為最低位):
module get_sum(
input a,
input b,
input c_in,
output reg sum
);
always @( * ) begin
case( {a,b,c_in} )
3'b001: sum = 1'b1;
3'b010: sum = 1'b1;
3'b100: sum = 1'b1;
3'b111: sum = 1'b1;
default: sum = 1'b0;
endcase
end
endmodule
-
邏輯電路
+關(guān)注
關(guān)注
13文章
494瀏覽量
42655 -
Verilog
+關(guān)注
關(guān)注
28文章
1351瀏覽量
110154
原文標(biāo)題:組合邏輯概述與Verilog三種描述形式
文章出處:【微信號(hào):LF-FPGA,微信公眾號(hào):小魚(yú)FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論