当前位置: 首页 > news >正文

HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点

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

这是望森的第 7 期分享

作者 | 望森
来源 | 望森FPGA

目录

1 Conditional ternary operator | 条件三目运算符

2 Reduction operators | 归约运算器

3 Reduction: Even wider gates | 归约:更宽的门电路

4 Combinational for-loop: Vector reversal 2 | 组合 for 循环:向量反转 2

5 Combinational for-loop: 255-bit population count | 组合 for 循环:255 位人口计数

6 Generate for-loop: 100-bit binary adder 2 | Generate for 循环:100 位二进制加法器 2

7 Generate for-loop: 100-digit BCD adder | Generate for 循环:100 位 BCD 加法器


本文中的代码都能够正常运行,请放心食用😋~

练习的官方网站是:https://hdlbits.01xz.net/

注:作者将每个练习的知识点都放在了题目和答案之后


1 Conditional ternary operator | 条件三目运算符

题目:

给定四个无符号数,找出最小值。无符号数可以用标准比较运算符 (a < b) 进行比较。使用条件运算符制作双向最小电路,然后组合其中几个以创建 4 路最小电路。您可能需要一些wire向量来获取中间结果。

答案:

module top_module (input [7:0] a, b, c, d,output [7:0] min);//wire [7:0] minab;wire [7:0] mincd;assign minab         = (a<b)? a: b;assign mincd         = (c<d)? c: d;assign min           = (minab<mincd)? minab: mincd;endmodule

知识点:

Verilog 有一个三元条件运算符 ( ? : ),与 C 非常相似:
(condition ? if_true : if_false)

这可用于根据一行中的条件 (mux!) 选择两个值中的一个,而无需在组合 always 块中使用 if-then。

示例:
(0 ? 3 : 5) // 这是 5,因为条件为假。
(sel ? b : a) // 由 sel 选择的 a 和 b 之间的 2 对 1 多路复用器。

always @(posedge clk) // T 触发器。
q <= toggle ? ~q : q;

always @(*) // 单输入 FSM 的状态转换逻辑
case (state)
A: next = w ? B : A;
B: next = w ? A : B;
endcase

assign out = ena ? q : 1'bz; // 三态缓冲器
((sel[1:0] == 2'h0) ? a : // 3 对 1 多路复用器
(sel[1:0] == 2'h1) ? b : c )


2 Reduction operators | 归约运算器

题目:

奇偶校验通常用作在通过不完美信道传输数据时检测错误的简单方法。创建一个电路,用于计算 8 位字节的奇偶校验位(将第 9 位添加到字节)。我们将使用“偶”奇偶校验,其中奇偶校验位只是所有 8 个数据位的异或。

答案:

module top_module (input [7:0] in,output parity); assign parity = ^in;endmodule

知识点:

您已经熟悉了两个值之间的按位运算,例如 a & b 或 a ^ b。有时,您想要创建一个对一个向量的所有位进行运算的宽门,例如 (a[0] & a[1] & a[2] & a[3] ... ),如果向量很长,这会变得很繁琐。

归约运算符可以对向量的位进行 AND、OR 和 XOR 运算,从而产生一位输出:
& a[3:0] // AND: a[3]&a[2]&a[1]&a[0]. Equivalent to (a[3:0] == 4'hf)
| b[3:0] // OR: b[3]|b[2]|b[1]|b[0]. Equivalent to (b[3:0] != 4'h0)
^ c[2:0] // XOR: c[2]^c[1]^c[0]

这些是只有一个操作数的一元运算符(类似于 NOT 运算符 ! 和 ~)。您还可以反转这些运算符的输出以创建 NAND、NOR 和 XNOR 门,例如 (~& d[7:0])。

现在您可以重新访问 4 输入门和 100 输入门。


3 Reduction: Even wider gates | 归约:更宽的门电路

题目:

构建一个具有 100 个输入的组合电路,in[99:0]。

有 3 个输出:

  • out_and:100 个输入与门的输出。

  • out_or:100 个输入或门的输出。

  • out_xor:100 个输入异或门的输出。

答案:

module top_module( input [99:0] in,output out_and,output out_or,output out_xor 
);assign out_and = ∈assign out_or = |in;assign out_xor = ^in;endmodule

4 Combinational for-loop: Vector reversal 2 | 组合 for 循环:向量反转 2

题目:

给定一个 100 位输入向量 [99:0],反转其位顺序。

答案:

module top_module( input [99:0] in,output [99:0] out
);genvar i;generate for(i=0;i<100;i=i+1)begin:name1assign out[i] = in[99-i];endendgenerateendmodule

知识点:

错解及分析:
module top_module( input [99:0] in,output [99:0] out
);genvar i;generate for(i=0;i<99;i=i+1)beginout[i] = in[99-i];endendgenerateendmodule

Error (10170): Verilog HDL syntax error at top_module.v(9) near text: "="; expecting ".", or an identifier. Check for and fix any syntax errors that appear immediately before or at the specified keyword.

通过组合逻辑进行变量赋值,需要使用assign语句。

Error (10644): Verilog HDL error at top_module.v(8): this block requires a name File: /home/h/work/hdlbits.18346683/top_module.v Line: 8

需要给 Generate 中的 for 循环块命名。


5 Combinational for-loop: 255-bit population count | 组合 for 循环:255 位人口计数

题目:

“人口计数”电路计算输入向量中“1”的数量。为 255 位输入向量构建人口计数电路。

答案:

module top_module( input [254:0] in,output [7:0] out );integer i;always@(*)begin:name1out = 8'd0;for(i=0;i<255;i=i+1)beginif(in[i])out = out + 1;elseout = out;endendendmodule

6 Generate for-loop: 100-bit binary adder 2 | Generate for 循环:100 位二进制加法器 2

题目:

通过实例化 100 个全加器来创建一个 100 位二进制行波进位加法器。该加法器将两个 100 位数和一个进位相加,以产生 100 位和并输出进位。为了鼓励您实际实例化全加器,还输出行波进位加法器中每个全加器的进位。cout[99] 是最后一个全加器的最终进位,也是您通常看到的进位。

答案:

module top_module( input [99:0] a, b,input cin,output [99:0] cout,output [99:0] sum );full_adder adder_0( .a(a[0]), .b(b[0]),.cin(cin),.cout(cout[0]),.sum(sum[0]) );genvar i;generate for(i=1;i<100;i=i+1)begin:name1full_adder adder_i( .a(a[i]), .b(b[i]),.cin(cout[i-1]),.cout(cout[i]),.sum(sum[i]) );endendgenerateendmodulemodule full_adder( input a, b,input cin,output cout,output sum );assign cout = a&b | a&cin | b&cin;assign sum = a ^ b ^ cin;endmodule

7 Generate for-loop: 100-digit BCD adder | Generate for 循环:100 位 BCD 加法器

题目:

您将获得一个名为 bcd_fadd 的 BCD 一位数加法器,它将两个 BCD 数字和进位相加,并产生一个和及进位输出。

module bcd_fadd (
input [3:0] a,
input [3:0] b,
input cin,
output cout,
output [3:0] sum );

实例化 100 个 bcd_fadd 副本以创建一个 100 位 BCD 行波进位加法器。您的加法器应将两个 100 位 BCD 数字(打包成 400 位向量)和一个进位相加,以产生一个 100 位和及进位输出。

答案:

module top_module( input [399:0] a, b,input cin,output cout,output [399:0] sum );wire [99:0] cout_t;bcd_fadd add_0(.a(a[3:0]),.b(b[3:0]),.cin(cin),.cout(cout_t[0]),.sum(sum[3:0]) );genvar i;generate for (i=1;i<100;i=i+1)begin:name1bcd_fadd add_i(.a(a[i*4+3:i*4]),.b(b[i*4+3:i*4]),.cin(cout_t[i-1]),.cout(cout_t[i]),.sum(sum[i*4+3:i*4]) );endendgenerateassign cout = cout_t[99];endmodule

- END -

公z号/CSDN/EETOP搜索【望森FPGA】,查看更多FPGA资讯~

相关推荐文章,点击跳转:

望森FPGA的HDLBits合集

相关文章:

HDLBits中文版,标准参考答案 |2.5 More Verilog Features | 更多Verilog 要点

关注 望森FPGA 查看更多FPGA资讯 这是望森的第 7 期分享 作者 | 望森 来源 | 望森FPGA 目录 1 Conditional ternary operator | 条件三目运算符 2 Reduction operators | 归约运算器 3 Reduction: Even wider gates | 归约&#xff1a;更宽的门电路 4 Combinational fo…...

提升开机速度:有效管理Windows电脑自启动项,打开、关闭自启动项教程分享

日常使用Windows电脑时&#xff0c;总会需要下载各种各样的办公软件。部分软件会默认开机自启功能&#xff0c;开机启动项是指那些在电脑启动时自动运行的程序和服务。电脑开机自启太多的情况下会导致电脑卡顿&#xff0c;开机慢&#xff0c;运行不流畅的情况出现&#xff0c;而…...

数据库简单介绍

数据库是现代信息技术中用于存储、管理和检索数据的重要工具。数据库技术的发展经历了多个阶段&#xff0c;从早期的层次模型和网状模型&#xff0c;到关系型数据库的兴起&#xff0c;再到NoSQL和NewSQL的多样化发展。数据库系统已经成为现代信息系统的核心和基础设施。 数据库…...

运用MinIO技术服务器实现文件上传——利用程序上传图片(二 )

在上一篇文章中&#xff0c;我们已经在云服务器中安装并开启了minio服务&#xff0c;本章我们将为大家讲解如何利用程序将文件上传到minio桶中 下面介绍MinIO中的几个核心概念&#xff0c;这些概念在所有的对象存储服务中也都是通用的。 - **对象&#xff08;Object&#xff0…...

C语言 | Leetcode C语言题解之第461题汉明距离

题目&#xff1a; 题解&#xff1a; int hammingDistance(int x, int y) {int s x ^ y, ret 0;while (s) {s & s - 1;ret;}return ret; }...

Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系

理清 Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系 在开发图形界面应用时&#xff0c;特别是在使用 Qt 框架时&#xff0c;开发者可能会接触到多个概念&#xff0c;如 Qt 3D、QtQuick、QtQuick 3D 和 QML。这些术语分别代表了 Qt 中不同的模块或技术&#xff0c;但由于它们的功能…...

软件设计师(软考学习)

数据库技术 数据库基础知识 1. 数据库中的简单属性、多值属性、复合属性、派生属性简单属性&#xff1a;指不能够再分解成更小部分的属性&#xff0c;通常是数据表中的一个列。例如学生表中的“学号”、“姓名”等均为简单属性。 多值属性&#xff1a;指一个属性可以有多个值…...

第一讲:Go语言开发入门:环境搭建与基础语法

文章目录 环境搭建windows环境搭建Mac环境搭建安装GO使用 Homebrew 安装 Go手动下载安装 Go 配置环境变量配置环境变量检查 Go 是否正确安装 验证安装&#xff1a;编写第一个 Go 程序创建 Go 工作区编写 Hello World 程序运行程序编译程序 常用的 Go 命令 Go语言基础语法1. 变量…...

Linux CentOS stream9配置本地yum源

在Linux系统中,yum源配置是一个重要的环节。把系统安装时配置的国外yum源转换为国内yum源,能够帮助系统快速安装软件包。对于网络环境不稳定或无法联网的系统,配置本地yum源,可以让用户在离线状态下也能进行软件包的安装,十分重要。 一、国内源 在使用Linux的日常工作中…...

std::string

std::string是C标准库中的一个基本类模板&#xff0c;专门用于处理字符串。它提供了一个可变长度的字符序列&#xff0c;以及一系列用于字符串操作的方法。std::string是值类型&#xff0c;这意味着当它作为函数参数传递或赋值时&#xff0c;整个字符串数据会被复制。 std::st…...

【Docker】03-自制镜像

1. 自制镜像 2. Dockerfile # 基础镜像 FROM openjdk:11.0-jre-buster # 设定时区 ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 拷贝jar包 COPY docker-demo.jar /app.jar # 入口 ENTRYPOINT ["ja…...

Java GC 分类,8和9使用的哪种?

Java的垃圾收集器&#xff08;Garbage Collector, GC&#xff09;负责自动管理内存&#xff0c;回收不再使用的对象所占用的空间。随着JVM的发展&#xff0c;出现了多种不同特性的垃圾收集器来适应不同的应用场景和性能需求。在Java 8中&#xff0c;主要有以下几种垃圾收集器&a…...

【Docker从入门到进阶】01.介绍 02.基础使用

1. 介绍 1.1. 什么是 Docker Docker 是一个开源的平台&#xff0c;用于开发、发布和运行应用程序。它使开发者能够以更精简的方式封装应用及其依赖&#xff0c;做到“打包一次&#xff0c;到处运行”。通过 Docker&#xff0c;您可以创建轻量级、可移植的容器&#xff0c;每个…...

GraphRAG-Local-UI - 基于 GraphRAG 支持本地的聊天UI

文章目录 一、关于 GraphRAG-Local-UI &#x1f578;️特点&#x1f31f;&#x1f5fa;️路线图最近更新即将推出的功能 二、&#x1f4e6;安装和设置三、使用入门&#x1f680;1、创建索引目录2、添加示例数据&#xff08;可选&#xff09;3、初始化索引文件夹4、配置设置5、定…...

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…...

树莓派3b安装ubuntu18.04服务器系统server配置网线连接

下载ubuntu镜像网址 img镜像&#xff0c;即树莓派官方烧录器使用的镜像网址 ubuntu18.04-server&#xff1a;ARM/RaspberryPi - Ubuntu Wiki 其他版本&#xff1a;Index of /ubuntu/releases 下载后解压即可。 发现使用官方烧录器烧录配置时配置wifi无论如何都不能使用&am…...

【AIGC】2022-NIPS-视频扩散模型

2022-NIPS-Video Diffusion Models 视频扩散模型摘要1. 引言2. 背景3. 视频扩散模型3.1. 重建引导采样以改进条件生成 4. 实验4.1. 无条件视频建模4.2. 视频预测4.3. 文本条件视频生成4.3.1 视频与图像建模的联合训练4.3.2 无分类器指导的效果4.3.3 更长序列的自回归视频扩展 5…...

从零开始构建:Python自定义脚本自动化你的日常任务

从零开始构建&#xff1a;Python自定义脚本自动化你的日常任务 Python 作为一种简洁且功能强大的编程语言&#xff0c;被广泛应用于各种自动化任务中。通过编写 Python 脚本&#xff0c;你可以轻松地将日常重复性工作自动化&#xff0c;例如文件操作、数据处理、网络爬虫、系统…...

【python实操】python小程序之对象的属性操作

引言 python小程序之对象的属性操作 文章目录 引言一、对象的属性操作1.1 题目1.2 代码1.3 代码解释 二、思考2.1 添加属性2.2 获取属性 一、对象的属性操作 1.1 题目 给对象添加属性 1.2 代码 class Cat:# 在缩进中书写⽅法def eat(self):# self 会⾃动出现,暂不管print(f…...

HCIP——网络类型及数据链路层协议

目录 网络类型的分类 数据链路层协议 MA网络 以太网协议 P2P网络 HDLC---高级数据链路控制协议 HDLC网络搭建 PPP---点到点协议 PPP协议的优点 PPP数据帧封装结构​编辑 PPP会话的搭建 路建立阶段---LCP建立 认证阶段 PAP CHAP 网络层协议协商阶段---NCP协商 网…...

数据结构——栈与队列的实现(全码)

一 栈的概念 栈是一种特殊的线性表&#xff0c;栈内数据遵循先进后出(LIFO)的原则&#xff0c;对于栈&#xff0c;只能在同一侧进行入栈和出栈操作。 入栈操作和出栈操作是在栈的同一侧进行的&#xff0c;如图示&#xff1a; 对于栈这种数据类型&#xff0c;我们可以采用链表或…...

MacOS编译和安装Poco库的方法

1.从官网git下载最新的poco源代码 在/usr/local路径下创建Poco文件夹&#xff0c;克隆Poco源代码 sudo git clone -b poco-1.13.3-release https://github.com/pocoproject/poco.git2.等了一会后&#xff0c;报错啦&#xff01;&#xff01;&#xff01; error: RPC failed…...

医院管理新境界:Spring Boot技术突破

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…...

Docker 环境下 MinIO 监控实战:通过 Prometheus 实现集群与桶级别性能监控

Docker 环境下 MinIO 监控实战&#xff1a;通过 Prometheus 实现集群与桶级别性能监控 文章目录 Docker 环境下 MinIO 监控实战&#xff1a;通过 Prometheus 实现集群与桶级别性能监控一 获取 prometheus 配置二 配置的内容三 prometheus 的配置1&#xff09;集群级别的指标2&a…...

渗透测试入门学习——使用python脚本自动跟踪csrf_token实现对网站登录界面的暴力破解

目录 写在前面 使用方法 相关代码 写在前面 最近在学习使用Burp Suite时发现其intruder模块无法实现多种模式的混合使用&#xff0c;就如想要暴力破解账号和口令两个区域并同时跟踪网页的csrf_token时BP似乎不能很方便的实现这一功能&#xff0c;于是自己在练习时就想到了用…...

stc8最小系统使用usb下载程序,关于断电的避坑

首先&#xff0c;按stc官方的原理图做好最小系统。 下面&#xff0c;来看一下stc手册中的操作步骤 USB-ISP 下载程序步骤&#xff1a; 1、按下板子上的 P3.2/INT0 按键&#xff0c;就是 P3.2 接地 2、给目标芯片重新上电&#xff0c;不管之前是否已通电。 电子开关是按下停电后…...

API 数据接口:使用操作流程与安全指南

在当今数字化高速发展的时代&#xff0c;API 数据接口如同构建数字世界的关键纽带&#xff0c;将不同的软件系统和服务紧密连接在一起。无论是企业开发者致力于提升业务效率&#xff0c;还是个人用户追求更便捷的数字体验&#xff0c;深入了解 API 数据接口的使用操作流程以及全…...

elasticsearch 8.2 版本如何设置config/elasticsearch.yml

在Elasticsearch 8.2版本中,`config/elasticsearch.yml`文件是用于配置Elasticsearch的主要配置文件。你可以通过编辑这个文件来设置各种配置选项。以下是一些常见的配置选项及其设置方法: ### 1. 基本配置 #### 集群名称 ```yaml cluster.name: my-cluster ``` #### 节点…...

华为 HCIP-Datacom H12-821 题库 (33)

&#x1f423;博客最下方微信公众号回复题库,领取题库和教学资源 &#x1f424;诚挚欢迎IT交流有兴趣的公众号回复交流群 &#x1f998;公众号会持续更新网络小知识&#x1f63c; 1.VLAN Pool 只要通过一个 SSID 就能够同时支持多个业务 VLAN&#xff0c;从而缩小广播域&#…...

【网络篇】计算机网络——运输层详述(笔记)

目录 一、运输层 1. 概述 2. 运输层和网络层的关系 3. 运输层协议概述 二、多路复用和多路分解 1. 综述 2. 无连接的多路复用与多路分解&#xff08;UDP&#xff09; 3. 面向连接的多路复用与多路分解&#xff08;TCP&#xff09; 4. Web 服务器与TCP 三、UDP&#x…...