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

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

这是望森的第 11 期分享

作者 | 望森
来源 | 望森FPGA

目录

1 3 变量

2 4 变量

3 4 变量

4 4 变量

5 最小 SOP 和 POS

6 卡诺图

7 卡诺图

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

望森FPGA

谢谢你的支持,这对我很重要~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值