1. Combinational Logic 组合逻辑电路

1.1 Basic Gates 基本门电路

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

执行下图电路:

提交代码:

 assign out = in;

很简单的连线

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

执行下图电路:

    assign out = 1'b0;

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

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

执行下图电路:

    assign out = ~ (in1 | in2);

或非门

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

执行下图电路:

    assign out = in1 & ~in2;

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

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

执行下图电路:

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

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

1.1.6 More logic gates [Gates]
问题描述

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

输出引脚 输出逻辑式
out_and a&b
out_or a|b
out_xor a^b
out_nand ~(a&b)
out_nor ~(a|b)
out_xnor ~(a^b)
out_anotb a&~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个输出引脚。

    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=x1​x3​+x2​x3′​

也可以直接按照真值表写

    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可以通过以下仿真波形来描述,实现该电路

    assign z = ~ (x ^ y);

列真值表,得同或关系。

1.1.12 Combine circuits A and B
问题描述

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

    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),打开马达。否则,打开振铃器。
尝试只使用赋值语句,看看是否可以将问题描述转换为逻辑门集合。

预期代码长度在两行内完成

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

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

ring vibrate_mode ringer motor
0 0 0 0
0 1 0 0
1 0 1 0
1 1 0 1

题目所给出的提示是考虑当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相关推荐

  1. verilog练习:hdlbits网站上的做题笔记(5)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  2. verilog练习:hdlbits网站上的做题笔记(6)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  3. verilog练习:hdlbits网站上的做题笔记(7)!强烈推荐!

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  4. verilog练习:hdlbits网站上的做题笔记(8)

    前言 之前的文章<如何学习verilog,如何快速入门?>中提到了verilog学习,推荐了一个可以练习的网站:hdlbits网站,那自己也玩玩这个网站. 这篇文章,是接着<veri ...

  5. Verilog 语法练习:HDL Bits做题笔记(3.2 Circuits Sequential Logic )

    目录 1.Lateches and Flip-Flops 1.1.D flip-flop 1.2.D flip-flops 1.3. DFF with reset 1.4.DFF with reset ...

  6. 【HDLBits 刷题】所有答案直达链接汇总

    写在前面 以下为HDLBits全部答案,有些题的解法不唯一,我的也许不是最优解,欢迎提出更好的想法,HDLBits总的来说比较适合初学者. HDLBits 答案汇总 Language [HDLBits ...

  7. HDLBits刷题全记录(五)

    文章目录 Finite State Machines Simple FSM 1_1(asynchronous reset) Simple FSM 1_2(synchronous reset) Simp ...

  8. 【SV书的章节练习题】Chap.3 Combinational Logic Using SystemVerilog Gate Models

    [SV书的章节练习题]Chap.3 Combinational Logic Using SystemVerilog Gate Models 前言 Problem 3.1 题目 分析:delay def ...

  9. 计算机网络自顶向下做题总结一(应用层)

    文章目录 计算机网路自顶向下做题总结一 第一章 1.1.复习题 1.2.作业题 1.3.第一次实验wireshark入门 第二章 2.1.telnet在windows使用 2.2.SMTP协议和HTT ...

  10. 计算机二级一做题就不会,2017年计算机二级考试做题经验分享

    2017年计算机二级考试做题经验分享 计算机科学的大部分研究是基于"冯·诺依曼计算机"和"图灵机"的,它们是绝大多数实际机器的计算模型.下面是小编整理的关于计算 ...

最新文章

  1. pyspark汇总小结
  2. 【前端笔记】Vuex 是什么,为什么需要
  3. jQuery 表格插件
  4. boost之对象池使用实例
  5. 蓝桥杯之貌似化学(g背包)
  6. python-批量插入多条数据-pymysql-executemany方法
  7. 【VS2015】链接器错误link2001
  8. android 4.4 webview 上传,android使用webview上傳文件(適配4.4以上系統)
  9. ML/DL-复习笔记【九】- 神经网络中各层的计算量与参数量
  10. win7系统rpc服务器不可用无法开机,win7系统RPC服务器不可用的解决方法
  11. 首先提出电子计算机存储程序的科学家,1、世界上首先实现存储程序的电子数字计算机是___C_。.doc...
  12. 吕 思 伟 ---- 潘 爱 民 :: ATL 介 绍( 二 )
  13. PHP输出中文乱码的解决方法(适合初学者)
  14. 卫健委最新报告对医疗设备售后服务产生了什么影响
  15. 【优化】梯度下降 收敛性 证明
  16. firefox浏览器邮件通知插件
  17. 基于openCV库的张正友标定法的一些实验结果
  18. 程序员需要弄懂的三大部分,程序员具体工作是做什么的 ?
  19. 练习:二元逻辑回归实现
  20. pcb成型板aoi检测_【技术】7种PCB板常用检测方法

热门文章

  1. 2021/7/3爬虫第三十二次课(反反爬措施二之突破行为验证,opencv)
  2. 倒计时 9 天:NFT 门票可以点对点转让赠送了 | ArcBlock DevCon 2020
  3. 017:函数:Python的乐高积木
  4. 88 R 用户画像之线性回归逻辑回归综合实战 1
  5. 发那科机器人xyz的方向_FANUC机器人坐标变换
  6. 企业缺少进项票,不用煞费苦心,税收优惠政策了解一下!
  7. get,post请求实例
  8. four: course catalogue
  9. 社交营销-也许是下一个风口之一
  10. Hexo-Fluid主题美化