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专栏

相关推荐
西岸行者4 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
ZPC82104 天前
docker 镜像备份
人工智能·算法·fpga开发·机器人
ZPC82104 天前
docker 使用GUI ROS2
人工智能·算法·fpga开发·机器人
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码4 天前
嵌入式学习路线
学习
毛小茛4 天前
计算机系统概论——校验码
学习
babe小鑫4 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms4 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下4 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。4 天前
2026.2.25监控学习
学习