組合邏輯概述
由MOS獲得基本邏輯門之后,再由門級電路形成組合邏輯電路。組合邏輯電路有三種表示方法:
(a)真值表
(b)結構化(即門級)原理圖
(c)布爾方程
示例:例如一個單bit全加器,實現的是兩個輸入信號 a,b以及進位位 c_in的相加。輸出一個相加的結果sum和一個進位位c_out。
其真值表如下:
根據真值表可以直接寫出其布爾方程式。
獲得某個輸出的積之和(多項做與然后再做或)的布爾表達式方法如下:
1. 找到輸出為1的對應的輸入,如果此輸入為0則取反。將輸入做與。
2. 將上面所有的與項再做或操作。
以上面的全加器為例。使得輸出sum為1的有:
故對應sum的積之和布爾表達式如下(*表示與操作,+表示或操作, ' 表示取反):
sum = a' * b' * c_in+a' * b * c_in'+a * b' * c_in' + a * b * c_in
同樣分析可以得出 c_out的積之和布爾表達式如下:
c_out = a' * b * c_in+a * b' * c_in+a * b * c_in' + a * b * c_in
根據積之和表達式就可以得出相應的積之和對應的門級電路。以與或門構成。下面是sum的積之和電路,這里由三個2輸入或門實現一個四輸入或門邏輯。
相應的c_out的積之和門級電路如下。
可以看到這樣獲得積之和布爾表達式與對應的電路都是兩級的,前面一級為與門邏輯,后面一級為或門邏輯。
當然不止只有積之和這一種表達方式,還可以利用狄摩根定律去轉化成和之積的表達方式。
狄摩根定律如下( " ' " 表示取反," * " 表示與, " + "表示或):
(a + b + c + ...) ' = a' * b' * c' * ...
(a * b * c * ...) ' =a' + b' + c' + ...
根據狄摩根定律第二條,就可以將積之和布爾表達式轉化成和之積形式;根據狄摩根定律第一條,就可以將和之積布爾表達式轉化成積之和形式。
這里以將sum的積之和布爾表達式轉化成和之積形式為例。
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') )'
從布爾表達式可以看到,和之積表達式的的前級為或門邏輯,后一級為與門邏輯。
Verilog對組合邏輯電路的描述,可以分為結構級描述,數據流級描述,行為級描述三種方式。
以上面對sum這個電路描述為例,將sum這個電路作為一個完整的module描述,給這個電路取個名字為get_sum。
結構級描述方式如下(其中not是表示非門,and表示與門,or表示或門):
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
數據流級描述方式(& 與,| 或 ,~ 非):
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
行為級描述方式(這里采用了case語句,也可以采用if else語句;{ }是位拼接符,如{a,b,c_in}就是將a,b,c_in拼成一個三位的數據,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
-
邏輯電路
+關注
關注
13文章
494瀏覽量
42581 -
Verilog
+關注
關注
28文章
1345瀏覽量
109993
原文標題:組合邏輯概述與Verilog三種描述形式
文章出處:【微信號:LF-FPGA,微信公眾號:小魚FPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論