博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Verilog编程网站学习——门电路、组合电路、时序电路
阅读量:4187 次
发布时间:2019-05-26

本文共 2479 字,大约阅读时间需要 8 分钟。

Verilog编程网站学习——门电路、组合电路、时序电路

一、Verilog编程网站

  • 在线练习网站:
  • 中文导学:

二、门电路

(一)与门

  • 题目链接:

  • 关系图

在这里插入图片描述

题目:本题要求使用 Verilog 语言描述一个模块,实现下图中与门。

在这里插入图片描述

解:图中in2输入信号需要取反。

在这里插入图片描述

&和&&的区别:&是逐位与,而&&是逻辑与。

(二)NOR门

  • 题目链接:

关系图

在这里插入图片描述

  • 问题:本题要求使用 Verilog 实现一个 NOR 门,注意这里其实是或非门,而不是更常见的异或门,或非门是或门的输出取反。
  • 解:

在这里插入图片描述

(三)异或门

题目链接:

异或门的输入输出可以概括为:(输入)相同(输出)为 0 ,不同为 1 。

关系图

在这里插入图片描述

题目:本题要求使用 Verilog 实现一个XNOR 门,如下图:

在这里插入图片描述

解:此处foo中间信号取反这里写中间信号是为了便于理解,实际编程中应该为assign out = (in1 ~^ in2) ^ in3;以节约资源。

在这里插入图片描述

三、组合电路

(一)组合电路一

题目链接:

题目:完成下图中的电路。

在这里插入图片描述

解:由图中电路图可知,需要3个assign语句,2个中间信号。

在这里插入图片描述

为便于理解,可为:

module top_module(	input x,	input y,	output z);	wire z1, z2, z3, z4;	A ia1 (x, y, z1);	B ib1 (x, y, z2);	A ia2 (x, y, z3);	B ib2 (x, y, z4);		assign z = (z1 | z2) ^ (z3 & z4);endmodulemodule A (	input x,	input y,	output z);	assign z = (x ^ y) & x;	endmodulemodule B (	input x,	input y,	output z);	assign z = ~(x ^ y);endmodule

这里的A、B两个模块为之前的题目。

(二)组合电路二

实现下图中表示的电路:

在这里插入图片描述

  • 解:代码应该有 4 个 assign 语句,对应四个逻辑门,或者说模块。
`default_nettype nonemodule top_module (    input a,    input b,    input c,    input d,    output out,    output out_n);    assign	out   = (a & b)| (c & d);    assign	out_n = (~a & b)| (c & d);endmodule

default_nettype none 是一个宏定义语句,这里是直接驱动。为便于理解代码可为:default_nettype none

module top_module(
input a,
input b,
input c,
input d,
output out,
output out_n );
wire and_1 = a & b;
wire and_2 = c & d;
wire or_1 = and_1 | and_2;
assign out = or_1;
assign out_n = ~or_1;
endmodule
为什么没有说好的 4 个 assign 语句,因为在定义 3 个中间信号的同时,还给它们赋了值,这在 Verilog 语法中也是允许的。

(三)组合电路三

题目链接:

实现下图中表示的电路:

在这里插入图片描述

解:本题要实现个稍稍复杂的电路:数电芯片 7458 。它有 10 个输入信号,2 个输出信号。你可以选择对每个输出信号,使用一个 assign 语句,也可以先产生第一级逻辑门输出的 4 个中间信号。有时间的话,两种方式都可以尝试下。

使用assign语句:

在这里插入图片描述

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

三、时序电路

(一)时序电路一

题目链接:

实现下图电路,包含两个输入和一个输出(实现D触发器的功能)。实例化三个my_dff,然后将它们连接在一起,构成长度为3的移位寄存器。注意:clk端口需要连接到所有的寄存器实例上。

在这里插入图片描述

解:

在这里插入图片描述

(二)时序电路二

题目链接:

实现下图电路:

在这里插入图片描述

解:给出了一个可以做16bit加法的模块add16,实例化两个add16以达到32bit加法的。一个add16模块计算结果的低16位,另一个add16模块在接收到第一个的进位后计算结果的高16位。此32bit加法器不需要处理输入进位(假设为0)和输出进位(无需进位),但为了内部模块为了结果的正确仍要处理进位信号。(换句话说,add16模块执行16bit的a+b+cin,而顶层模块执行32bit的a+b)。

在这里插入图片描述

(三)时序电路三

题目链接:

  • 这次来实现一个改进型的加法器,如下图所示。第一级加法器保持不变,第二级加法器实现两个,一个假设进位为0,另一个假设进位为1。然后使用第一级结果和2选一选择器来选择哪一个结果是正确的。

ripple进位加法器的一个缺点(见前面的练习)是加法器计算进位的延迟(从进位开始,在最坏的情况下)相当慢,并且第二级加法器在第一级加法器完成之前不能开始计算其进位。这使加法器变慢。一个改进是进位选择加法器,如下所示

在这里插入图片描述

解:在本题中,您将获得与上一练习相同的模块add16,它将两个16bit数和进位输入相加,并产生16bit的结果和进位输出。您必须实例化其中的三add16来构建进位选择加法器,同时实现16bit的2选1选择器来选择结果。

在这里插入图片描述

转载地址:http://nwsoi.baihongyu.com/

你可能感兴趣的文章
基于Jquery的(可视区域,向上滚动向下滚动两种)图片懒加载
查看>>
原生JS的(可视区域,向上滚动向下滚动两种)图片懒加载
查看>>
使用VMware搭建Hadoop集群虚拟网络配置
查看>>
解决vmware下拷贝主机后不识别eth0网卡
查看>>
Promise简单实践
查看>>
vue中无缝轮播简单实现
查看>>
ES5和ES6中的类定义区别
查看>>
利用解构赋值快速提取对象参数
查看>>
CSS3简单实现360deg旋转
查看>>
vue中使用H5的audio
查看>>
PHPStorm配置ESlint检查代码
查看>>
树的子结构
查看>>
判断两棵二叉树是否相似
查看>>
二叉树中和为某一值的路径
查看>>
数字在排序数组中出现的次数
查看>>
两个链表的第一个公共结点
查看>>
二叉树的深度
查看>>
MySQL数据库入门(三)
查看>>
MySQL数据库入门(四)
查看>>
关于方法覆盖和属性覆盖的问题?
查看>>