HDLBits笔记5:Circuits.Combinational Logic.Basic gates

news2024/11/22 0:18:00

Wire

实现一个电路完成in和out的连线

module top_module (input in, output out);
    assign out = in;
endmodule

GND

实现一个电路将out连到GND

module top_module (output out);
    assign out = 1'b0;
endmodule

NOR

实现或非门

module top_module (
    input in1,
    input in2,
    output out);
    assign out = ~(in1 | in2);
endmodule

Another Gate

实现如下电路

在这里插入图片描述

module top_module (
    input in1,
    input in2,
    output out);
    assign out = in1 & ~in2;
endmodule

Two Gates

实现如下电路

在这里插入图片描述

module top_module (
    input in1,
    input in2,
    input in3,
    output out);
    assign out = (in1 ^~ in2) ^ in3;
endmodule

More logic gates

实现与、或、异或、与非、或非、同或、a与b非

module top_module( 
    input a, b,
    output out_and,
    output out_or,
    output out_xor,
    output out_nand,
    output out_nor,
    output out_xnor,
    output out_anotb
);
    assign out_and = a & b;
    assign out_or = a | b;
    assign out_xor = a ^ b;
    assign out_nand = ~(a & b);
    assign out_nor = ~(a | b);
    assign out_xnor = ~(a ^ b);
    assign out_anotb = a & ~b;
endmodule

7420 chip

实现如下电路
在这里插入图片描述

module top_module ( 
    input p1a, p1b, p1c, p1d,
    output p1y,
    input p2a, p2b, p2c, p2d,
    output p2y );
    assign p1y = ~(p1a & p1b & p1c & p1d);
    assign p2y = ~(p2a & p2b & p2c & p2d);
endmodule

Truth table

x3x2x1f
0000
0010
0101
0111
1000
1011
1100
1111

实现上述真值表

module top_module( 
    input x3,
    input x2,
    input x1,  // three inputs
    output f   // one output
);
    assign f = (~x1 & x2 & ~x3) | (x1 & x2 & ~x3) | (x1 & ~x2 & x3) | (x1 & x2 & x3);
endmodule

Two-bit equality

实现一个2bit的等于比较器

module top_module ( input [1:0] A, input [1:0] B, output z ); 
    assign z = A == B;
endmodule

Simple circuit A

实现一个电路完成z = (x^y) & x功能

module top_module (input x, input y, output z);
    assign z = (x ^ y) & x;
endmodule

Simple circuit B

实现电路,波形如下:

在这里插入图片描述

module top_module ( input x, input y, output z );
    assign z = x ^~ y;
endmodule

Combine circuits A and B

实现如下电路,其中A为上面的Simple circuit A,B为Simple circuit B

在这里插入图片描述

module top_module (input x, input y, output z);
    wire z1, z2;
    assign z1 = x & ~y;
    assign z2 = x ^~ y;
    assign z = (z1 | z2) ^ (z1 & z2);
endmodule

Ring or vibrate

假设你在控制一个手机的铃声和振动,当电话打来(input ring)时,你必须响铃(output ringer = 1)或振动(output motor = 1),但不能同时响铃和振动,如果手机处于振动模式(input vibrate_mode = 1),则振动,否则响铃

module top_module (
    input ring,
    input vibrate_mode,
    output ringer,       // Make sound
    output motor         // Vibrate
);
    assign ringer = vibrate_mode ? 1'b0 : ring;
    assign motor = vibrate_mode ? ring : 1'b0;
endmodule

Thermostat

温度调节器内既有加热器也有制冷器,温度调节器有两个状态:加热模式(mode = 1)、制冷模式(mode = 0)。在加热模式,当太冷时(too_cold = 1),打开加热器,在制冷模式,当太热时(too_hot = 1),打开制冷器。不管是打开加热器还是制冷器,都要打卡风扇,同时,用户可以自行打开风扇(fan_on = 1),即使加热器和制冷器都没打开。

试着尽可能只用assign语句完成该模块

module top_module (
    input too_cold,
    input too_hot,
    input mode,
    input fan_on,
    output heater,
    output aircon,
    output fan
); 
    assign heater = mode ? too_cold : 1'b0;
    assign aircon = mode ? 1'b0 : too_hot;
    assign fan = fan_on ? 1'b1 : (heater | aircon);
endmodule

3-bit population count

计算3bit输入中有多少个1

module top_module( 
    input [2:0] in,
    output [1:0] out );
    assign out = in[2] + in[1] + in[0];
endmodule

Gates and vectors

输入4bit信号in,输出out_both、out_any、out_different

  • out_both: in的每bit和其左邻如果都为1,则该bit的output为1

    举例:如果in[2]和in[3]为1,则out_both[2]为1,in[3]没有左邻,所以没有out_both[3]

  • out_any: in的每bit和其右邻如果有至少一个1,则该bit的output为1

    举例:如果in[2]和in[1]有至少一个1,则out_any[2]为1,in[0]没有右邻,所以没有out_both[0]

  • out_different: in的每bit和其左邻如果不同,则该bit的output为1

    举例:如果in[2]和in[3]不同,则out_different[2]为1,MSB的左邻为LSB

module top_module( 
    input [3:0] in,
    output [2:0] out_both,
    output [3:1] out_any,
    output [3:0] out_different );
    // 方法一:逻辑门+位拼接
    assign out_both = {in[3] & in[2], in[2] & in[1], in[1] & in[0]};
    assign out_any = {in[3] | in[2], in[2] | in[1], in[1] | in[0]};
    assign out_different = {in[0] ^ in[3], in[3] ^ in[2], in[2] ^ in[1], in[1] ^ in[0]};
    /* 方法二:位选
	assign out_any = in[3:1] | in[2:0];
	assign out_both = in[2:0] & in[3:1];
	assign out_different = in ^ {in[0], in[3:1]};
    */
endmodule

Even longer vectors

原理同上Gates and vectors,但输入为100bit位宽

module top_module( 
    input [99:0] in,
    output [98:0] out_both,
    output [99:1] out_any,
    output [99:0] out_different );
    assign out_both = in[99:1] & in[98:0];
    assign out_any = in[99:1] | in[98:0];
    assign out_different = in ^ {in[0], in[99:1]};
endmodule

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

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

相关文章

Vue-消息订阅与发布(pub/sub)

消息订阅与发布(pub/sub) 消息订阅与发布和全局事件总线一样,也是一种组件间通信的方式 pub/sub全称为publisher(订阅)/subscriber(发布),一般需要数据的人订阅消息,提供数据的人发布消息 这个技术非常简单容易上手,主要有以下两步 1 订阅…

Java集合之ArrayList详解

Java集合之ArrayList 一、ArrayList类的继承关系1. 基类功能说明1.1. Iterator:提供了一种方便、安全、高效的遍历方式。1.2. Collection:为了使ArrayList具有集合的基本特性和操作。1.3. AbstractCollection:提供了一些通用的集合操作。1.4.…

Vue-动画效果

vue动画效果 vue中动画效果是很简单的一个东西,vue帮助我们做了一些动画封装,同时也支持自定义动画,过度,第三方库,这些方式都可以实现,我们一一举例说明 注意:下面的相关截图,由于…

55 KVM工具使用指南-LibcarePlus概述

文章目录 55 KVM工具使用指南-LibcarePlus概述55.1 概述55.2 软硬件要求55.3 注意事项和约束 55 KVM工具使用指南-LibcarePlus概述 55.1 概述 LibcarePlus 是一个用户态进程热补丁框架,可以在不重启进程的情况下对 Linux 系统上运行的目标进程进行热补丁操作。热补…

语音合成 - TTS-VUE 学习

今天给小伙伴测试了一款人工智能文字合成语音的工具,测试中发现应该是某位大神开发的开源工具,经过一下午的测试,发现有可学习之处,有兴趣的小伙伴可以一起来学习下。 一、简单介绍 微软的语音合成助手利用强大的微软AI语音库&am…

牛云企业官网小程序,外卖cps权益变现,uniCloud云开发无需购买服务器和域名,助力每一位创业者。

技术优势 基于 uniapp uniCloud 研发,无需购买服务器和域名,uniCloud 是 DCloud 联合阿里云、腾讯云 serverless 构建。从此不用关心服务器运维、弹性扩容、大并发承载、防DDoS攻击等,轻松应对高并发应用, 上图 小程序页面 体…

一种新颖的智能优化算法-蝠鲼优化算法(MRFO)

目录 一、MRFO数学模型 1.1 链式觅食 1.2 旋风式觅食 1.3 翻筋斗式觅食 二、MRFO伪代码 2019年提出一种新的仿生优化技术称为魔鬼鱼觅食优化算法,旨在提供一种替代优化 解决实际工程问题的方法。该算法的灵感是基于智能算法魔鬼鱼的行为。这项工作模拟了魔鬼…

轻量应用服务器性能如何?CPU带宽流量系统盘测评

轻量应用服务器性能如何?腾讯云轻量应用服务器是一种轻量级搭建小型网站和应用的服务器,相对于其他更高性能配置的服务器CVM,性价比更高。虽然其性能不如高性能云服务器CVM,但对于小型网站和应用来说,能够提供基本的计…

JDK1.8 lambda_函数式编程_stream流

一、 lambda表达式 jdk 1.8 引入了 lambda表达式 能够我们 编写代码时更加简洁,也为函数式编程提供了支持 lambda表达式 作用 简化匿名实现类的书写,实现接口抽象方法; (参数类型 参数名1,参数类型 参数名2,……参数类型 参数名n)->{ //方法体 } …

【工具】搜狗输入法常用配置(持续更新)

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 按键相关通用快捷键系统快捷键辅助输入快捷键 2️⃣ 其它自定义语句关闭自动更新 🛬 结论 🛫 问题 描述 作为输入法的常青树,重装系统后经常第一步就是装输入法,由于以下原因&#…

开发框架前后端分离的好处是什么

关于将前端和后端保持在一起或分开,存在广泛的意见分歧。唯一重要的是,这两个组件对于开发成熟的应用程序都是必需的。 考虑:紧密耦合的前端和后端 许多人认为后端和前端的分离是一个坏主意,这两个角色之间没有太大区别。 以下…

多旋翼无人机振动分析与减振方法

多旋翼无人机振动分析与减振方法 振动分析无人机减振设计机械减振数字滤波减振 振动分析 振动机制包括: 激励(振动源)系统响应 无人机振动机制: 激励 —— 动力系统(旋翼电机)系统 —— 机架响应 —— …

《产品思维》 要点

“一切以用户价值为依归”的价值观,落地下来就是从用户中来,到用户中去。 认知用户 用户画像 用户是一切产品的源头 用户不是理性人 我们的用户到底是谁、究 竟在哪里。这个“到底是谁”“究竟在哪里”。 用户生活工作的环境,是他们日常的…

【机器学习】机器故障的二元分类模型-Kaggle竞赛

竞赛介绍 数据集描述 本次竞赛的数据集(训练和测试)是从根据机器故障预测训练的深度学习模型生成的。特征分布与原始分布接近,但不完全相同。随意使用原始数据集作为本次竞赛的一部分,既可以探索差异,也可以了解在训…

[RockertMQ] Broker启动加载消息文件以及恢复数据源码 (三)

Broker的启动过程中, 在DefaultMessageStore实例化后, 会调用load方法将磁盘中的commitLog、ConsumeQueue、IndexFile文件的数据加载到内存中, 还有数据恢复的操作。 调用isTempFileExist方法判断上次broker是否是正常退出, 如果是正常退出不会保留abort文件, 异常退出则会。 …

【MySQL】关于自增id、雪花id还是uuid作为MySQL主键

在MySQL中设计表的时候,MySQL官方推荐不要使用uuid或者不连续不重复的雪花id(long型且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment。那么为什么不使用雪花id或者uuid呢?让我们来探讨分析一下这个问题的原因。 关于…

【人工智能技术专题】「入门到精通系列教程」打好AI基础带你进军人工智能领域的全流程技术体系(机器学习知识导论)

零基础带你进军人工智能领域的全流程技术体系和实战指南(机器学习基础知识) 前言专栏介绍专栏说明学习大纲前提条件面向读者学习目标核心内容机器学习的概念定义回顾人工智能机器学习概念国外知名学者对机器学习的定义中文翻译 机器学习发展历程机器学习…

Oracle JSON_ARRAYAGG()函数的排序失效问题

引入: 在实际操作中,俺写了这样一个Funtcion: FUNCTION fun_get_xxx(v_param_one VARCHAR2) RETURN CLOB ASv_OUTPUT CLOB;BEGINWITH temp_table AS (SELECT * FROM (( SELECT one.action_id,two.log_timeFROM table_one oneLEFT JOIN table…

【深度学习】6-4 卷积神经网络 - CNN的实现

CNN的实现 网络的构成是“Convolution - ReLU - Pooling -Affine - ReLU - Affine - Softmax”,我们将它实现为名为 SimpleConvNet的类。 首先来看一下 SimpleConvNet的初始化(init),取下面这些参数。 input_dim——输入数据的维…

七彩虹CN600+Meetiger N10C测评

七彩虹CN600这款M.2固态硬盘的参数就不多说了 本期采用为512版本 迷虎品牌,英文名Meetiger,Meetiger/迷虎品牌成立于2012年,品牌迷虎产品主要有硬盘底座,保护盒,硬盘座,移动硬盘盒子,硬盘盒子,... 以下就是本期的硬盘盒 当这两样东西在一起…