HDLBits练习汇总-09-组合逻辑设计测试--卡诺图

简介: HDLBits练习汇总-09-组合逻辑设计测试--卡诺图

3变量卡诺图


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

image.png

Module Declaration

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

答案:

module top_module(
    input a,
    input b,
    input c,
    output out  ); 
    assign out = ((!a & !b & !c )==1)? 0 : 1;
endmodule

4变量卡诺图1


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

image.png

Module Declaration

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

答案:

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  ); 
    //积之和
    //assign out = (!a&!b&!c&!d)|(!a&b&!c&!d)|(a&!b&!c&!d)|(!a&!b&!c&d)|(a&!b&!c&d)|
      //  (!a&b&c&d)|(a&b&c&d)|(a&!b&c&d)|(!a&!b&c&!d)|(!a&b&c&!d);
    //和之积
    assign out = (!a|!b|c|d)&(a|!b|c|!d)&(!a|!b|c|!d)&(a|b|!c|!d)&(!a|!b|!c|d)&(!a|b|!c|d);
endmodule

4变量卡诺图2


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

image.png

Module Declaration

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

答案:

在实现之前,可以对卡诺图进行简化。将d的值带入,可以实现去除掉变量d变成全部是常数的卡诺图。然后化简可知

out = a |(!b&c);(积之和式子)

out = (a|!b) & (a|c);(和之积式子)

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  );
    //积之和式子
    assign out = a |(!b&c);
    //和之积式子
  //assign out = (a|!b) & (a|c);
endmodule

4变量卡诺图3


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

image.png

Module Declaration

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

答案:

由卡诺图可以看出,都是在ab异或cd同或和cd异或ab同或进行取值。

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out  ); 
    assign out = ((a^b)&!(c^d))|(!(a^b)&(c^d));
endmodule

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 对应于分别设置为 0、1、1、1 的 a、b、c、d。

确定最小SOP形式的输出out_sop,以及最小POS形式的输出out_pos。

Module Declaration

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

答案:

画出卡诺图进行化简,

image.png

此时out_sop = c&d + !a&!b&c;

out_pos = c & (!b|d) & (!a|d);

所以编写代码实现功能:

module top_module (
    input a,
    input b,
    input c,
    input d,
    output out_sop,
    output out_pos
); 
    //SOP
    assign out_sop =  (c&d) | (!a&!b&c);
  //POS
    assign out_pos = c & (!b|d) & (!a|d);
endmodule

卡诺图练习1


考虑下面卡诺图中显示的函数f

image.png

实现这个功能。d是不关心的,这意味着您可以选择输出任何方便的值。

Module Declaration

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

答案:

画出卡诺图进行化简,

image.png

写出表达式进行编写代码:

module top_module (
    input [4:1] x, 
    output f );
    assign f = (x[3]&!x[1]) | (x[4]&x[2]);
endmodule

卡诺图练习2


考虑下面卡诺图中显示的函数f。实现这个功能。

image.png

Module Declaration

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

答案:

画出卡诺图进行化简,

image.png

写出表达式进行编写代码:

module top_module (
    input [4:1] x,
    output f
); 
    assign f = (x[3]&!x[1]) | (!x[4]&!x[2])|(x[2]&x[3]&x[4]);
endmodule

使用数据选择器进行实现卡诺图


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

您只实现了标记为top_module的部分,以便整个电路(包括 4 对 1 多路复用器)实现 K-map。

image.png

答案:

module top_module (
    input c,
    input d,
    output [3:0] mux_in
); 
    always@(*)begin
        if({c,d}== 0)
            mux_in = 4'b0100;
        else if({c,d}== 1)
            mux_in = 4'b0001;
        else if({c,d}== 2)
            mux_in = 4'b0101;
        else
            mux_in = 4'b1001;
    end
endmodule
目录
相关文章
|
6月前
|
存储 缓存 网络协议
dpdk课程学习之练习笔记二(arp, udp协议api测试)
dpdk课程学习之练习笔记二(arp, udp协议api测试)
179 0
|
SQL 安全 网络安全
交易所开发测试版丨交易所系统开发规则玩法/架构设计/项目步骤/方案逻辑/案例解析/源码部署
The development process of the exchange system involves multiple steps and links. The following is the detailed process and steps for the development of the exchange system:
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
40 4
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
35 2
|
3月前
|
Java 测试技术 API
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
SpringBoot单元测试快速写法问题之复杂的业务逻辑设计有效的单元测试如何解决
|
4月前
|
测试技术
详解单元测试问题之@InjectMocks注解的执行逻辑如何解决
详解单元测试问题之@InjectMocks注解的执行逻辑如何解决
77 1
|
4月前
|
测试技术 UED
软件测试的科学与艺术:从数据导向到逻辑严密的实践
本文旨在探讨软件测试领域中数据导向和逻辑严密性的重要性,并分析如何通过科学严谨的方法提升测试效率和质量。文章首先概述了软件测试的基本概念和挑战,随后深入讨论了数据在测试设计和结果分析中的关键作用,以及如何利用逻辑推理来构建有效的测试案例和识别潜在缺陷。最后,本文提出了一系列实践建议,旨在帮助测试人员更好地整合数据驱动和逻辑推理方法,以实现软件测试的最优化。
43 0
|
6月前
|
缓存 监控 网络协议
dpdk课程学习之练习笔记五(kni理解及测试)
dpdk课程学习之练习笔记五(kni理解及测试)
265 0
|
6月前
|
存储
存地址实现组包逻辑的一个测试代码。
存地址实现组包逻辑的一个测试代码。
44 0
|
测试技术 编译器
软件测试用例经典方法 | 逻辑覆盖测试法及案例
逻辑覆盖测试法是常用的一类白盒测试方法,其以程序内部逻辑结构为基础,通过对程序逻辑结构的遍历来实现程序测试的覆盖。逻辑覆盖测试法要求测试人员对程序的逻辑结构有清晰的了解。 逻辑覆盖测试法是一系列测试过程的总称,是使测试过程逐渐进行越来越完整的通路测试。从覆盖源程序语句的详尽程度,可以将其分为语句覆盖、判定覆盖、条件覆盖、判断/条件覆盖、条件组合覆盖和路径覆盖等。接下来将通过下面程序的逻辑覆盖测试用例一一介绍这些覆盖准则,该程序的流程图如图4-1所示,其中,a、b、c、d、e是控制流上的若干程序点。
488 0
软件测试用例经典方法 | 逻辑覆盖测试法及案例