【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器

 写在前面:为了解狄摩根定理和布尔函数的行为,我们使用 Verilog 实现狄摩根定律和布尔函数的行为。生成输入信号后,验证通过仿真实现的结果。


Ⅰ.  前置知识

0x00 离散结构:否定量词的狄摩根定律

否定量词的狄摩根定律是:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第1张图片

由表中推理可知:

¬\forall {\color{Red} (}xP(x){\color{Red} )} \equiv \exists x ¬P(x) 

¬ \exists{\color{Red} (}xP(x){\color{Red} )}\equiv \forall x ¬P(x) 

可以将 ¬ 想象成一只青蛙,而这就是个青蛙跳,每跳一级任意变存在,存在变任意。

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第2张图片

0x01 狄摩根第一第二定律

狄摩根定律将 AND 和 OR  运算互换,取各变量的否定。

狄摩根第一定律:

\overline{A+B}=\overline{A}\cdot \overline{B}  

狄摩根第二定律:

\overline{A\cdot B}=\overline{A}+\overline{B}   

  • 第一定律:A+B 的否定取等于 A 的否定乘以 B 的否定。
  • 第二定律:A\cdot B 的否定取等于 A 的否定和 B 的否定之和。

\overline{A+B}=\overline{A}\cdot \overline{B}

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第3张图片

\overline{A\cdot B}=\overline{A}+\overline{B }

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第4张图片

\overline{\overline{A}+\overline{B}}=A\cdot B

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第5张图片

\overline{\overline{A}\cdot \overline{B}}=A+B

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第6张图片

0x01  多级/多输入布尔函数

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第7张图片

0x02  数电:布尔方程式

  • 积之合 (Sum of product) ,简写为 SOP,用符号 \sum  表示。
  • 析取范式 (disjunctive normal form) ,简写为 DNF,用符号  \prod 表示。

f = x_1x_2' + x_2 'x_3 + x_1x_3'

  • 和之积 (Product of sum) ,简写为 POS,用符号 \sum 表示。
  • 合取范式 (conjunctive normal form) ,简写为 CNF,用符号  \prod 表示。

f = (x_1+ x_2 ')(x_2 + x_3 )(x_3 + x_1)

  • 积之合的典范:极小项之和 (Canonical sum of product : sum of minterms) :

               【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第8张图片

  • 合之积的典范:极大项之和 (Canonical product of sum : product of maxterms)

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第9张图片

Ⅱ.  练习(Assignment)

0x00  布尔方程(1)

比较 AB 的 Schematic ,完成 Verilog 编码,通过仿真比较输出结果。

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第10张图片

Design source(A):

`timescale 1ns / 1ps

module Boolean_Function_1_a (
    input a, b, c,
    output d
    );
    
    assign d = (~a | ~b) & ~c;
    
endmodule

Testbench(A):

`timescale 1ns / 1ps

module Boolean_Function_1_a_tb;
reg aa, bb, cc;  
wire d;
Boolean_Function_1_a u_Boolean_Function_1_a (
    .a(aa),
    .b(bb),
    .c(cc),
    .d(d)
    );

initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;

initial begin
    #1000
    $finish;
end

endmodule

运行结果如下:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第11张图片

Design source(B):

`timescale 1ns / 1ps

module Boolean_Function_1_b(
    input a, b, c,
    output d
    );

    assign d = ~((a & b) | c);
    
endmodule

Testbench(B):

`timescale 1ns / 1ps

module Boolean_Function_1_b_tb;
reg aa, bb, cc;
wire d;

Boolean_Function_1_b u_Boolean_Function_1_b(
    .a(aa),
    .b(bb),
    .c(cc),
    .d(d)
    );
    
initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;

initial begin
    #1000
    $finish;
end

endmodule

运行结果如下:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第12张图片

0x02 布尔方程(2)

比较 AB 的 Schematic ,完成 Verilog 编码,通过仿真比较输出结果。

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第13张图片

Design source(A):

`timescale 1ns / 1ps

module Boolean_Function_2_a (
    input a, b, c,
    output d
    );
    assign d = (~a & ~b) | ~c;
    
endmodule

Testbench(A):

`timescale 1ns / 1ps

module One_Bit_tb;
reg aa, bb;
wire c, d, e, f;

One_Bit u_One_Bit (
    .a(aa),
    .b(bb),
    .c(c),
    .d(d),
    .e(e),
    .f(f)
    );

initial aa = 1'b0;
initial bb = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;

initial begin
    #2000
    $finish;
end

endmodule

运行结果如下:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第14张图片

Design source(B):

`timescale 1ns / 1ps

module Boolean_Function_2_b (
    input a, b, c,
    output d
    );
    assign d = ~( (a | b) & c );

endmodule

Testbench(B):

`timescale 1ns / 1ps

module Boolean_Function_2_b_tb;
reg aa, bb, cc;
wire d;

Boolean_Function_2_b u_Boolean_Function_2_b(
    .a(aa),
    .b(bb),
    .c(cc),
    .d(d)
    );
    
initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;
    
always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;
    
initial begin
    #1000
    $finish;
end

endmodule

运行结果如下:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第15张图片

0x02 1bit 比较器

1bit 比较器的 Schematic ,完成 Verilog 编码,通过仿真比较输出结果。

Design source:

`timescale 1ns / 1ps

module One_Bit (
    input a, b,
    output c, d, e, f
    );
    
    assign c = ( a == b );
    assign d = ( a != b );
    assign e = ( a > b );
    assign f = ( a < b );
    
endmodule

Testbench:

`timescale 1ns / 1ps

module One_Bit_tb;
reg aa, bb;
wire c, d, e, f;

One_Bit u_One_Bit (
    .a(aa),
    .b(bb),
    .c(c),
    .d(d),
    .e(e),
    .f(f)
    );

initial aa = 1'b0;
initial bb = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;

initial begin
    #2000
    $finish;
end

endmodule

运行结果如下:

【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第16张图片

 【FPGA】Verilog 实践:狄摩根定律 | 布尔方程 | 1bit 比较器_第17张图片

 [ 笔者 ]   王亦优
 [ 更新 ]   2023.1.20
❌ [ 勘误 ]   /* 暂无 */
 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

你可能感兴趣的:(⚡《FPGA开发》,fpga开发,狄摩根定律)