HDLBits中文版,标准参考答案 | 3.1.4 Karnaugh Map to Circuit | 卡诺图到电路

关注 望森FPGA 查看更多FPGA资讯

这是望森的第 11 期分享

作者 | 望森
来源 | 望森FPGA

目录

[1 3 变量](#1 3 变量)

[2 4 变量](#2 4 变量)

[3 4 变量](#3 4 变量)

[4 4 变量](#4 4 变量)

[5 最小 SOP 和 POS](#5 最小 SOP 和 POS)

[6 卡诺图](#6 卡诺图)

[7 卡诺图](#7 卡诺图)

[8 使用多路复用器实现的卡诺图](#8 使用多路复用器实现的卡诺图)


本文中的代码都能够正常运行,请放心食用😋~

练习的官方网站是:https://hdlbits.01xz.net/

注:作者将每个练习的知识点都放在了题目和答案之后


1 3 变量

题目:

实现下面的卡诺图所描述的电路。

在编码之前尝试简化 k-map。尝试乘积和形式和乘积和形式。我们无法检查您是否对 k-map 进行了最佳简化。但我们可以检查您的简化是否等效,并且可以检查您是否可以将 k-map 转换为电路。

答案:

1.卡诺图化简

2.逻辑表达式

out = a + b + c;

3.代码

我的答案:
module top_module(
    input a,
    input b,
    input c,
    output out  ); 

    always@(*)begin
       out = a | b | c; 
    end
    
endmodule

参考答案:
module top_module(
        input a, 
        input b,
        input c,
        output out
);

        // SOP form: Three prime implicants (1 term each), summed.
        // POS form: One prime implicant (of 3 terms)
        // In this particular case, the result is the same for both SOP and POS.
        assign out = (a | b | c);
        
endmodule

2 4 变量

题目:

实现下面的卡诺图所描述的电路。

在编码之前尝试简化 k-map。尝试乘积和形式和乘积和形式。我们无法检查您是否对 k-map 进行了最佳简化。但我们可以检查您的简化是否等效,并且可以检查您是否可以将 k-map 转换为电路。

答案:

1.卡诺图化简

2.逻辑表达式

out = b'c'+ a'd' + bcd + acd;

3.代码

我的答案:
module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  ); 

    always@(*)begin
        out = (~b & ~c) | (~a & ~d) | (b & c & d) | (a & c & d);
    end
    
endmodule

3 4 变量

题目:

实现下面的卡诺图所描述的电路。

在编码之前尝试简化 k-map。尝试乘积和形式和乘积和形式。我们无法检查您是否对 k-map 进行了最佳简化。但我们可以检查您的简化是否等效,并且可以检查您是否可以将 k-map 转换为电路。

答案:

1.卡诺图化简

2.逻辑表达式

out = b'c + a;

3.代码

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  ); 

    always@(*)begin
        out = a | (~b & c); 
    end
    
endmodule

知识点:

d为无关项,在卡诺图中既可以当作1也可以当作0;


4 4 变量

题目:

实现下面的卡诺图所描述的电路。

在编码之前尝试简化 k-map。尝试乘积和形式和乘积和形式。我们无法检查您是否对 k-map 进行了最佳简化。但我们可以检查您的简化是否等效,并且可以检查您是否可以将 k-map 转换为电路。

答案:

1.卡诺图化简

无法化简

2.逻辑表达式

找规律(同或、异或)

out = ~(a ^ b) & (c ^ d) | (a ^ b) & ~(c ^ d);

3.代码

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  ); 

    always@(*)begin
        out = ~(a ^ b) & (c ^ d) | (a ^ b) & ~(c ^ d); 
    end
    
endmodule

5 最小 SOP 和 POS

题目:

具有四个输入(a、b、c、d)的单输出数字系统在输入出现 2、7 或 15 时生成逻辑 1,在出现 0、1、4、5、6、9、10、13 或 14 时生成逻辑 0。数字 3、8、11 和 12 的输入条件在此系统中永远不会发生。例如,7 分别对应于 a、b、c、d 设置为 0、1、1、1。

确定最小 SOP 形式的输出 out_sop 和最小 POS 形式的输出 out_pos。

答案:

1.卡诺图绘制

注:x为无关项

2.卡诺图化简

(1)最小项之和

(2)最大项之和

3.逻辑表达式

(1)最小项之和

out_sop = cd | ~a~bc;

(2)最大项之和

out_pos = ~(~c | b~d | a~d) = c ~(b~d) ~(a~d) = c (~b | d) (~a | d);

4.代码

module top_module (
    input a,
    input b,
    input c,
    input d,
    output out_sop,
    output out_pos
); 

    always@(*)begin
        out_sop = (c & d) | (~a & ~b & c);
        out_pos = c & (~b | d) & (~a | d);
    end
    
endmodule

知识点:

  • SOP形式指找出所有输出为1(最小项)的输入组合

  • POS形式指找出所有输出为0(最大项)的输入组合,画圈之后的正负是反着写的


6 卡诺图

题目:

考虑下面的卡诺图所示的函数 f。

实现这个函数。d 是无关的,这意味着您可以选择输出任何方便的值。

答案:

1.卡诺图化简

2.逻辑表达式

f = (~x1 & x3) | (x2 & x4);

3.代码

module top_module (
    input [4:1] x, 
    output f );

    always@(*)begin
        f = (~x[1] & x[3]) | (x[2] & x[4]);
    end
    
endmodule

7 卡诺图

题目:

考虑下面卡诺图中所示的函数 f。实现此函数。

答案:

1.卡诺图化简

2.逻辑表达式

f = (~x2 & ~x4) | (~x1 & x3) | (x2 & x3 & x4);

3.代码

module top_module (
    input [4:1] x,
    output f
); 

    always@(*)begin
        f = (~x[2] & ~x[4]) | (~x[1] & x[3]) | (x[2] & x[3] & x[4]);
    end
    
endmodule

8 使用多路复用器实现的卡诺图

题目:

对于以下卡诺图,给出使用一个 4 对 1 多路复用器和尽可能多的 2 对 1 多路复用器(但尽可能少)的电路实现。您不得使用任何其他逻辑门,并且必须使用 a 和 b 作为多路复用器选择器输入,如下面的 4 对 1 多路复用器所示。

您只实现标记为 top_module 的部分,这样整个电路(包括 4 对 1 多路复用器)就实现了卡诺图。

1.卡诺图化简

2.逻辑表达式

mux_in = (abcd) | (~a~bd) | (~bc~d) | (a~b~d);

根据题目要求,整理分离ab与cd:

mux_in = (~a~b) & (c | d) | (a~b) & (cd) | (ab) & (~d);

mux_in[0] = c | d; //ab = 00时

mux_in[1] = 0; //ab = 01时

mux_in[2] = ~d; //ab = 10时

mux_in[3] = cd; //ab = 11时

3.代码

module top_module (
    input c,
    input d,
    output [3:0] mux_in
); 

    always@(*)begin
        mux_in[0] = c | d;
        mux_in[1] = 1'b0;
        mux_in[2] = ~d;
                mux_in[3] = c & d;
    end
    
endmodule

- END -

公z号/CSDN搜索【望森FPGA】,查看更多FPGA资讯~

相关推荐文章,点击跳转:

望森FPGA的HDLBits专栏

相关推荐
stm 学习ing1 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Red Red2 小时前
网安基础知识|IDS入侵检测系统|IPS入侵防御系统|堡垒机|VPN|EDR|CC防御|云安全-VDC/VPC|安全服务
网络·笔记·学习·安全·web安全
Natural_yz4 小时前
大数据学习17之Spark-Core
大数据·学习·spark
qq_172805594 小时前
RUST学习教程-安装教程
开发语言·学习·rust·安装
一只小小汤圆4 小时前
opencascade源码学习之BRepOffsetAPI包 -BRepOffsetAPI_DraftAngle
c++·学习·opencascade
虾球xz4 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
LateBloomer7774 小时前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz4 小时前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py4 小时前
【Linux】-学习笔记04
linux·笔记·学习
weiabc5 小时前
学习electron
javascript·学习·electron