HDLBits: 在线学习 SystemVerilog(二十三)-Problem 158-162(找BUG)

news2024/9/28 7:23:01

HDLBits: 在线学习 SystemVerilog(二十三)-Problem 158-162(找BUG)

e3a4ad7f8ef7bff1034a663372ecb3f7.jpeg

HDLBits 是一组小型电路设计习题集,使用 Verilog/SystemVerilog 硬件描述语言 (HDL) 练习数字硬件设计~

网址如下:

https://hdlbits.01xz.net/

关于HDLBits的Verilog实现可以查看下面专栏:

https://www.zhihu.com/column/c_1131528588117385216

缩略词索引:

  • SV:SystemVerilog

从今天开始新的一章-时序电路,包括触发器、计数器、移位寄存器、状态机等。

Finding bugs in code 这一节中,将找出给的电路中的bug,有一双找bug的眼睛。

Problem 158-Bugs_mux2

题目说明

这个 8 位宽的 2 对 1 多路复用器不起作用。修复错误。

e4fa1f5f97a26842ca6e5146e4af310c.png

模块端口声明

module top_module (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0] out  );

题目解析

sel的位宽不够,补到8位即可。

module top_module (
    input logic sel,
    input logic [7:0] a,
    input logic [7:0] b,
    output logic [7:0] out  );

    assign out = ({8{sel}} & a) | (~{8{sel}} & b);

endmodule
1de609e64fe0855fc8d4b1eeb4d5de77.png

点击Submit,等待一会就能看到下图结果:

80a860f4a3dce723e19b7d194dbb505a.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 159-Bugs_nand3

题目说明

本题中的三输入与非门不工作了,找出并修正 BUG。

读者必须使用提供的 5 输入与门来实现这个与非门。

47c0b8601c0867ecb1625318c3c97c7a.png

模块端口声明

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

题目解析

原题中只使用了与门~

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

    var logic out_temp ;
    andgate inst1 (.out(out_temp) ,
                   .a(a),
                   .b(b), 
                   .c(c),
                   .d(1'd1),
                   .e(1'd1)
                  );

    assign out = ~out_temp ;
endmodule
626ac3ca4ca6aa97324983c29b32840c.png

点击Submit,等待一会就能看到下图结果:

8514c385cd50f75653cf9ebb47b8ff0e.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 160-Bugs_mux4

题目说明

这个 4 对 1 多路复用器不起作用。修复错误。

下面无错误的 2 对 1 多路复用器:

module mux2 (
    input sel,
    input [7:0] a,
    input [7:0] b,
    output [7:0] out
);
56c94e365ab272dc0ec719d30aec1baf.png

模块端口声明

module top_module (
    input [1:0] sel,
    input [7:0] a,
    input [7:0] b,
    input [7:0] c,
    input [7:0] d,
    output [7:0] out  );

题目解析

没啥大问题,还是变量位宽问题。

module top_module (
    input logic [1:0] sel,
    input logic [7:0] a,
    input logic [7:0] b,
    input logic [7:0] c,
    input logic [7:0] d,
    output logic [7:0] out  
    ); //

    var logic [7:0] mux0, mux1;
    mux2 u1_mux0 ( sel[0],    a,    b, mux0 );
    mux2 u2_mux1 ( sel[0],    c,    d, mux1 );
    mux2 u3_mux2 ( sel[1], mux0, mux1,  out );

endmodule
c27b3325c8e90aa784ea441c0ce64351.png

点击Submit,等待一会就能看到下图结果:

01081f1bf2e54276542f775f3b157671.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 161-Bugs_addsubz

题目说明

继续找BUG

62dfbfdc781978788ff11773746badd4.png图片来自HDLBits

模块端口声明

module top_module ( 
    input do_sub,
    input [7:0] a,
    input [7:0] b,
    output reg [7:0] out,
    output reg result_is_zero
);

题目解析

out条件举例不足。

module top_module ( 
    input logic do_sub,
    input logic [7:0] a,
    input logic [7:0] b,
    output logic [7:0] out,
    output logic result_is_zero
);

    always_comb begin
        case (do_sub)
          0: out = a+b;
          1: out = a-b;
        endcase

        if (out == 8'd0) begin
            result_is_zero = 1 ;
        end
        else begin
            result_is_zero = 0 ;
        end
            
    end

endmodule
f5b2b78ca8a6a4da170e2aa7ce155ac4.png

点击Submit,等待一会就能看到下图结果:

339eea0e340cfdbd2f0dec54d8364d01.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

Problem 162-Bugs_case

题目说明

这个组合电路应该识别键 0 到 9 的 8 位键盘扫描码。它应该指示是否识别了 10 种情况中的一种(valid),如果是,则检测到哪个键。修复错误。

d9d40a6cf7e2dce312f1623ea89ca340.png

模块端口声明

module top_module (
    input [7:0] code,
    output reg [3:0] out,
    output reg valid=1 );

题目解析

信号定义时不能赋值,case最后一个选项位宽不对。

module top_module (
    input logic [7:0] code,
    output logic [3:0] out,
    output logic valid );//

     always_comb begin
        out = 4'd0 ;
        valid = 1'd1 ;
        case (code)
            8'h45: out = 4'd0;
            8'h16: out = 4'd1;
            8'h1e: out = 4'd2;
            8'h26: out = 4'd3;
            8'h25: out = 4'd4;
            8'h2e: out = 4'd5;
            8'h36: out = 4'd6;
            8'h3d: out = 4'd7;
            8'h3e: out = 4'd8;
            8'h46: out = 4'd9;
            default: valid = 1'd0;
        endcase
     end

endmodule
fc569417909a50735134dd6956f9c2e1.png

点击Submit,等待一会就能看到下图结果:

2fb622f780a6ed2d5d146fc48f6d4936.png

注意图中的Ref是参考波形,Yours是你的代码生成的波形,网站会对比这两个波形,一旦这两者不匹配,仿真结果会变红。

这一题就结束了。

总结

今天的几道题就结束了,找bug开不开心~

最后我这边做题的代码也是个人理解使用,有错误欢迎大家批评指正,祝大家学习愉快~

代码链接:

https://github.com/suisuisi/SystemVerilog/tree/main/SystemVerilogHDLBits

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/399196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】《LeetCode 101》第二章:最易懂的贪心算法

文章目录2.1 算法解释2.2 分配问题455. 分发饼干 (简单)135. 分发糖果 (困难)2.3 区间问题435. 无重叠区间(中等)2.4 练习605. 种花问题(简单)452. 用最少数量的箭引爆气球&#xff…

FFmpeg介绍及入门知识

1、简介 FFmpeg是一套由c语言编写的,可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,自身采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案,包含了非常先进的音频/视频编解码库libavcodec&#xf…

【Unity Android Platform:关于Android权限来源(安卓)如何查找】

Android权限来源 问题描述:当项目接入的插件逐渐变多,不仅仅是AndroidManifest会影响Android Permission的个数,甚至有些API也会影响最终的权限个数,例如下图所示: 当国内权限问题涉及到一些安全隐私问题时&#xff0…

构造函数与普通函数,显式原型与隐式原型,原型与原型链

原型与原型链1 学前先了解一些概念1.1 构造函数和普通函数的区别1.1.1 调用方式1.1.2 函数中this的指向不同1.1.3 写法不同1.2 问题明确2 原型与原型链2.1 原型2.2 显式原型与隐式原型2.3 原型链3 原型链环形结构1 学前先了解一些概念 1.1 构造函数和普通函数的区别 构造函数…

全流程基于最新导则下的生态环境影响评价技术方法及图件制作与案例

目录 专题一、生态环境影响评价框架及流程 专题二、基于遥感解译的土地利用现状图的编制 专题三、生物多样性测定及R语言分析 专题四、植被类型及植被覆盖度图的编制 专题五、生物量与净初级生产力测定:实测及模型 专题六、生态系统类型及服务价值评估 专题七…

MOT学习笔记 — 行人检测及行人跟踪数据集总结

1. 行人红外数据集总结 (1)OSU Thermal Pedestrian Database 下载链接:http://vcipl-okstate.org/pbvs/bench/Data/01/download.html (2)IRIS Thermal/Visible Face Database 下载链接:http://vcipl-o…

React 服务端渲染

React 服务器端渲染概念回顾什么是客户端渲染CSR(Client Side Rendering)服务器端只返回json数据,Data和Html的拼接在客户端进行(渲染)。什么是服务器端渲染SSR(Server Side Rendering)服务器端返回数据拼接过后的HTML,Data和Html…

Ubuntu20.04下安装vm17+win10/11

一、安装vmware17 1、官网下载 vmware官网:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html 2、安装依赖 sudo apt update sudo apt install build-essential linux-headers-generic gcc make3、权限和安装 到下载的目录下…

vector你得知道的知识

vector的基本使用和模拟实现 一、std::vector基本介绍 1.1 常用接口说明 std::vector是STL中的一个动态数组容器,它可以自动调整大小,支持在数组末尾快速添加和删除元素,还支持随机访问元素。 以下是std::vector常用的接口及其说明&#xf…

品牌软文怎么写?教你几招

软文是什么?软文的本质就是广告,当然不是明晃晃的推销,而是自然隐晦地植入产品信息,引导更多用户自愿下单。 品牌软文对于写手的经验、内容的质量要求都相对较高,否则写出来的软文无法达到预期的效果。品牌软文怎么写…

一个古老的html后台的模板代码

效果图下: css部分代码:/* CSS Document / body{font-family:“宋体”, Arial,Verdana, sans-serif, Helvetica;font-size:12px;margin:0;background:#f4f5eb;color:#000;} dl,ul,li{list-style:none;} a img{border:0;} a{color:#000;} a:link,a:visit…

[css]通过网站实例学习以最简单的方式构造三元素布局

文章目录二元素布局纵向布局横向布局三元素布局b站直播布局实例左右-下 布局左-上下 布局上下-右 布局方案一方案二后言二元素布局 在学习三元素布局之前,让我们先简单了解一下只有两个元素的布局吧 两个元素的相对关系非常简单,不是上下就是左右 纵向布…

Anaconda配置Python科学计算库SciPy的方法

本文介绍在Anaconda环境中,安装Python语言SciPy模块的方法。 SciPy是基于Python的科学计算库,用于解决科学、工程和技术计算中的各种问题。它建立在NumPy库的基础之上,提供了大量高效、易于使用的功能,包括统计分析、信号处理、优…

用一个例子告诉你 怎样在spark中创建累加器

目录 1.说明 1.1 什么是累加器 1.2 累加器的功能 2. 使用累加器 3. 累加器和reduce、fold算子的区别 1.说明 1.1 什么是累加器 累加器是Spark提供的一个共享变量(Shared Variables) 默认情况下,如果Executor节点上使用到了Driver端定义的变量(通过算子传…

Redis常用命令及数据类型参数

1. 针对于string SET key value / GET key SET k1 v1 GET k1 // v1String是二进制安全的,是可变长度的, 底层类似于ArrayList 是可扩容的,最大存储内存为 512MB。 2. 判断key中是否存在某个内容 EXISTS key SET k1 v1 EXISTS k1 // …

Noah-MP陆面过程模型建模方法与站点、区域模拟

陆表过程的主要研究内容以及陆面模型在生态水文研究中的地位和作用 熟悉模型的发展历程,常见模型及各自特点; Noah-MP模型的原理 Noah-MP模型所需的系统环境与编译环境的搭建方法您都了解吗?? linux系统操作环境您熟悉吗&…

Linux驱动中的fasync(异步通知)和fsync

一、fsync用来同步设备的写入操作,考虑把一块设局写入到硬盘的操作,如果使用write函数,函数返回后只能保证数据被写入到驱动程序或者内核管理的数据缓存中,而无法保证数据被真正写入到硬盘的存储块里。但是fync可以做到这一点&…

查找、排序、二叉树的算法,统统记录于此。

文章目录一、查找1. 无序表的顺序查找2. 折半查找3. 分块查找4. 二叉排序树BST5. 哈希表查找二、排序1. 不带哨兵的直接插入排序2. 带哨兵的直接插入排序3. 带哨兵、折半查找的直接插入排序4. 希尔排序5. 冒泡排序6. 快速排序7. 选择排序8. 堆排序9. 归并排序二叉树1. 递归先序…

八,iperf3源代码分析:状态机及状态转换过程--->运行正向TCP单向测试时的客户端代码

本文目录一、测试用命令二、iperf3客户端状态机中各个状态解析状态机迁移图运行正向TCP单向测试时的客户端的状态列表三、iperf3客户端状态机迁移分析A-初始化测试对象(NA--->初始化状态):B-建立控制连接,等待服务端PARAM_EXCHANGE的指令&…

西电机试数据结构核心算法与习题代码汇总(机考真题+核心算法)

文章目录前言一、链表问题1.1 反转链表1.1.1 题目1.1.2 代码1.2 多项式加减法1.2.1 题目1.2.2 代码二、队列和栈2.1 学生退学2.1.1 问题2.1.2 代码三、矩阵和串题目3.1 矩阵对角线求和3.1.1 问题3.1.2 代码四、排序问题4.1 多元素排序4.1.1 问题4.1.2 代码五、二叉树5.1 相同二…