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_in0 = c | d; //ab = 00时

mux_in1 = 0; //ab = 01时

mux_in2 = ~d; //ab = 10时

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

相关推荐
dadaobusi27 分钟前
pcie原子操作和nvme原子操作
学习
sunshine22 girl40 分钟前
Java学习五 面向对象高级5 内部类1
java·学习
ALINX技术博客1 小时前
8 通道同步采样 ADC!AN706 波形显示实验 【FPGA黑金云课堂】
fpga开发
每天题库3 小时前
架子工脚手架工题库:安全操作考点与模拟题练习指南
学习·安全·考试·题库·考证
yangmu32034 小时前
Codex 提示词优化教程:用四要素把模糊需求变成可执行任务
人工智能·学习
无敌贵点大王4 小时前
RTThread学习记录13——关于要使用一个外设,RTThread与cubemx到底要怎么配合?
c语言·stm32·学习·rtthread
喜欢打篮球的普通人6 小时前
MiniMind 学习笔记(十二):Pretrain 实操——从版本梳理到 8GB 显卡上的真实训练
人工智能·笔记·学习
m4Rk_7 小时前
【论文阅读】Agent 记忆机制(87):VizoMem——把文本历史转化为可检索的视觉记忆
论文阅读·人工智能·学习·开源·github
坤坤子吖7 小时前
算法学习——高精度加减乘除
c++·笔记·学习·算法
HY小宝F8 小时前
树莓派智能摄像头系统 30 天重学计划之 Day 03 · 网络基础:建立“包“的思维 —— 学习总结
网络·学习