[HDLBits做题]Combinational Logic --- Basic Gates

2023-11-08 17:50

本文主要是介绍[HDLBits做题]Combinational Logic --- Basic Gates,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


1. Combinational Logic 组合逻辑电路

1.1 Basic Gates 基本门电路

1.1.1 wire [Exams/m2014 q4h]
问题描述:

执行下图电路:
image
提交代码:

	assign out = in;

很简单的连线

1.1.2 GND [Exams/m2014 q4i]
问题描述:

执行下图电路:
image

    assign out = 1'b0;

输出引脚直接接地
Warning (13024): Output pins are stuck at VCC or GND

1.1.3 NOR [Exams/m2014 q4e]
问题描述:

执行下图电路:
image

    assign out = ~ (in1 | in2);

或非门

1.1.4 Another gate [Exams/m2014 q4f]
问题描述

执行下图电路:
image

    assign out = in1 & ~in2;

单目运算符优先级高于双目运算符。

1.1.5 Two gates [Exams/m2014 q4g]
问题描述

执行下图电路:
image

    assign out = (~ (in1 ^ in2)) ^ in3;

异或门和异或非门,也可以额外声明线类型作为异或非门的输出和异或门的输入。

1.1.6 More logic gates [Gates]
问题描述

让我们尝试同时构建几个逻辑门电路。构建一个拥有a、b两个输入和七个有逻辑门驱动输出的组合电路,输出定义如下。

输出引脚输出逻辑式
out_anda&b
out_ora|b
out_xora^b
out_nand~(a&b)
out_nor~(a|b)
out_xnor~(a^b)
out_anotba&~b
    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;

按照要求写就行。

1.1.7 7420 chip [7420]
问题描述

7400系列技能电路是每个芯片都有几个门的一系列数字芯片,该7420芯片包含两个四输入与非门。创建一个与7420芯片具有相同功能的模块。它有8个输入与2个输出引脚。
image

    assign p1y = ~(p1a & p1b & p1c & p1d);assign p2y = ~(p2a & p2b & p2c & p2d);
1.1.8 Truth tables [truthrable1]
问题描述

在前面的练习中,我们使用简单逻辑门和多个逻辑门的组合。这些电路是组合逻辑电路的示例。组合意味着电路的输出仅是其输入(在数学含义中)的函数,这意味着对于任意给出的输入值仅有一个可能的输出值。因此描述组合函数行为的一种方法是列出每个输入对应可能的输出,这就是真值表。
对于N个输入的情况,有2N个可能得输入组合,每一行输入对应一个输出,因此真值表也总是2N行。输出列表示了对应每种输入情况下的输出值。

···
ROW Inputs Outputs
number
x1
x2
x3
f
0
0
0
0
0
1
0
0
1
0
2
0
1
0
1
3
0
1
1
1
4
1
0
0
0
5
1
0
1
1
6
1
1
0
0
7
1
1
1
1

上述真值表有三列输入一列输出,对应8个可能得输入组合。
创建一个实现上述真值表的组合电路。

    assign f = (x1&x3|x2&~x3);

化简了一下真值表得到了
f = x 1 x 3 + x 2 x 3 ′ f=x_1 x_3 + x_2 x_3' f=x1x3+x2x3

也可以直接按照真值表写

    assign f = (~x3&x2&~x1|~x3&x2&x1|x3&~x2&x1|x3&x2&x1);
1.1.9 Two-bit equality [Mt2015 eq2]
问题描述

创建具有两个两位输入A[1:0]和B[1:0]的电路,并产生输出z,实现当A=B时z的值为1,否则为0

    assign z = (A == B);

· ==为逻辑相等,比较数值中没有x或z时相同输出1,不同输出0;有x或z时若其余位相同则输出x,不同输出0
· ===为逻辑全等,保证比较的两个值完全一致(x和z也参与比较)。

1.1.10 Simple circuit A [Mt2015 q4a]
问题描述

假设模块A实现函数z=(x^y)&x,实现该模块

    assign z = (x ^ y) & x;

表达式给了,直接写。

1.1.11 Simple circuit B [Mt2015 q4b]
问题描述

电路B可以通过以下仿真波形来描述,实现该电路
image

    assign z = ~ (x ^ y);

列真值表,得同或关系。

1.1.12 Combine circuits A and B
问题描述

使用前两题q4a、q4b子模块,设计如下图所示电路:
image

    wire iaz,ibz;q4a IA(.x(x),.y(y),.z(iaz));q4b IB(.x(x),.y(y),.z(ibz));assign z = (iaz|ibz)^(iaz&ibz);

把前两题模块结合起来完成即可。

1.1.13 Ring or vibrate [Ringer]
问题描述

假设正在设计一个控制手机振铃与振动马达的电路。当电话需要从来电中(输入ring)需要振铃时,电路必须打开振铃器(ringer=1)或电机(motor=1),但不能同时打开。如果手机处于振动模式(vibrate_mode=1),打开马达。否则,打开振铃器。
尝试只使用赋值语句,看看是否可以将问题描述转换为逻辑门集合。
image
预期代码长度在两行内完成

	assign ringer = ring & ~vibrate_mode;assign motor = ring & vibrate_mode;

题目主要是希望设计思路由软件设计思路向硬件设计思路转变。
根据要求可列如下真值表

ringvibrate_moderingermotor
0000
0100
1010
1101

题目所给出的提示是考虑当ringer或motor启动的时候ring和vibrate_mode应该是什么状态。

1.1.14 Thermostat [Thermostat]
问题描述

加热/冷却恒温器控制制热(在冬季)和空调(在夏季)。设计一个电路,以按照需求打开和关闭加热器、空调以及鼓风机风扇。
恒温器可处于以下两种模式之一:加热(mode=1)和制冷(mode=0)。在加热模式下,当温度过低时(too_cold=1),打开加热器但不使用空调。在制冷模式下,当温度过高时(too_hot=1)时打开空调,但不打开加热器。当暖风或空调打开时,也要打开风扇使空气循环。此外,即使加热器与空调关闭的情况下,用户也可以请求风扇启动(fan_on=1)。
尝试只使用assign语句,看看能否将问题转换成逻辑门集合。
预期代码长度在三行内完成

    assign heater = mode & too_cold;assign aircon = ~mode & too_hot;assign fan = heater | aircon | fan_on;

按照题目要求可知

  • heater=1时应满足mode=1、too_cold=1;
  • aircon=1时应满足mode=0、too_hot=1;
  • fan=1时则是heater=1或者aircon=1或者fan_on=1。
1.1.15 3-bit population count [Popcount3]
问题描述

对一个3bit输入向量中包含的"1"进行计数。

    assign out[0] = (~in[2]&~in[1]&in[0])|(~in[2]&in[1]&~in[0])|(in[2]&~in[1]&~in[0])|(&in);assign out[1] = (in[2]&in[1])|(in[2]&in[0])|(in[1]&in[0]);

针对输出,out[0]为1时分为1个1和3个1两种情况,out[1]为1时分为2个1和3个1两种情况。
通过学习其他人的思路,可以考虑使用for循环或者直接使用加法。

1.1.16 Gates and vectors [Gatesv]
问题描述

你被提供一个4bit输入向量in[3:0],我们想知道各比特和它的邻居之间的一些关系。

  • out_both:该输出向量的每个比特应该指示对应输入比特及其左边邻居(较高索引)是否都是"1"。例如out_both[2]应该指示in[2]和in[3]是否都是1。由于in[3]左侧没有邻居,显而易见不需要知道out_both[3]。
  • out_any:该输出向量的每个比特应该指示对应输入比特及其右边邻居(较高索引)任意一个是否是"1"。例如out_any[2]应该指示in[2]和in[1]是否都是1。由于in[0]右侧没有邻居,显而易见不需要知道out_any[0]。
  • out_different:该输出向量的每个比特应当指示对应的输入比特是否与其左侧的比特不同。例如out_different[2]应该指示in[2]是否不同于in[3]。对于该部分,将向量视为环状,因此in[3]左边的邻居是in[0]。

在提示中提到可以使用AND,OR,XOR运算用三个assign实现。

	 assign out_both = in[2:0]&in[3:1];assign out_any = in[3:1]|in[2:0];assign out_different = in[3:0] ^ {in[0],in[3:1]};

按照题意,借助向量的拼接进行按位运算。

1.1.17 Even longer vectors [Gatesv100]
问题描述

你被提供一个100bit输入向量in[99:0],我们想知道各比特和它的邻居之间的一些关系。
后面内容略,与上一题类似,代码也类似。

    assign out_both = in[98:0]&in[99:1];assign out_any = in[99:1]|in[98:0];assign out_different = in[99:0] ^ {in[0],in[99:1]};

这个系列主要是记录一下自己的学习过程和简单思考过程,也参考了许多其他人的思路,题目均为HDLBits上的原题,借助翻译器和自己的理解简单组织了一下语言,如有问题欢迎批评指正。

这篇关于[HDLBits做题]Combinational Logic --- Basic Gates的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/371491

相关文章

查看Excel 中的 Visual Basic 代码,要先设置excel选项

1. excel VB的简单介绍 百度安全验证 2.excel选项设置 excel表格中在选项->自定义功能区域,选择开发工具,visual baisc/查看代码,即可看到代码。 3.excel已经设置,可以直接查看

小杨做题c++

题目描述 为了准备考试,小杨每天都要做题。第1天,小杨做了a道题;第2天,小杨做了b道题;从第3天起,小杨每天做的题目数量是前两天的总和。 此外,小杨还规定,当自己某一天做了大于或等于m题时,接下来的所有日子里,他就再也不做题了。 请问,到了第N天,小杨总共做了多少题呢? 输入 总共4行。第一行一个整数a,第二行一个整数b,第三行一个整数m,第四行一个整数N。 保证0≤a,b≤10; a,b

Basic Calculator 总结

Basic Calculator 思路:stack中间存数,遇见+,-都当符号位,push num或者-num进去;最后相加;重要的是如何处理括号,那么这里一种方法是用递归调用;count左右括号,如果为0,那么就是一个反括号的位置了,那么 //(      ) //j......i; substring(j + 1, i); 这题的通用解法,可以扩展到二三题; class Solutio

逻辑学(Logic)

GPT-4o (OpenAI)  逻辑学是研究论证的原则和标准的学科,主要关注如何正确地推理和论证。从抓取股票日线数据到形成有效的分析,我们可以应用逻辑推理。 逻辑推理步骤: 1. 明确目标:我们要抓取股票的日线数据。 2. 分析需求:确定需要抓取哪些具体数据,比如日期、开盘价、收盘价、最高价、最低价、成交量等。 3. 选择数据来源:确定从哪个平台或网站获取这些数据,比如Yahoo Financ

100.SAP MII功能详解(14)Workbench-Transaction Logic(Repeater)

目录 1.Logic->Repeater 2.演示 配置对象 配置链接 ​编辑 Repeater的使用示例 1.Logic->Repeater         您可以使用此操作循环浏览XML节点集,该节点集由XML文档中属于同一层次级别的任何XML节点组成。中继器操作执行以下操作: 从节点集的第一个成员开始使用来自第一个节点的信息执行任务移动到下一个节点

做克隆虚拟机的basic

新建一台虚拟机(之前写的有这一步) 虚拟机里操作 vi /etc/hostname    改称basic (可改可不改)  vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=EthernetPROXY_METHOD=noneBROWSER_ONLY=noBOOTPROTO=staticDEFROUTE=yesIPV4_FAILU

【Http认证方式】——Basic认证

今天在访问请求:http://192.168.2.113:8080/geoserver/rest/workspaces时,浏览器弹出窗口需要输入用户名和密码 ,并且,如果不输入或者输入错误,浏览器返回 可以在火狐浏览器的网络监控这里看到请求的详细信息,

微积分复习笔记 Calculus Volume 1 - 1.2 Basic Classes of Functions

1.2 Basic Classes of Functions - Calculus Volume 1 | OpenStax

04:创建PADS Logic软件逻辑库

1. 打开自带的库文件 2.保留common库,移除其他库文件 3.新建库 5点击封装工具栏 6选择2D线 7添加端点 8点击保存 9打开查看

SAT数学考试做题时需要用到的数学公式

SAT数学做题时可能会用到的公式:   (做题时会遇到的相关概念将于下篇出现,这里只是单独的公式集锦   1.抛物线:y = a(x^2 + bx + c   (y等于ax 的平方加上 bx再加上 c   a > 0时开口向上   a 0   5. 椭圆(很少用到,知道就可以了   1周长公式:L=2πb+4(a-b   椭圆周长定理:椭圆的周长等于该椭圆短半轴长为半径的圆