(1)HDLBits-Verilog Language-Basics

Wire

一、题目要求

创建一个具有一个输入和一个输出的模块,其行为类似于连接。

题目给的模块图
在这里插入图片描述

二、分析

连接输入输出,使用assign语句即可。这里要注意in和out是“有方向”的,你需要把in的值赋给out,而不能反过来,不然会报错。

代码如下:

module top_module( input in, output out );

	assign out=in;

endmodule

三、仿真图:

在这里插入图片描述

Wire4

一、题目要求
创建一个具有3个输入和4个输出的模块,输出输入的关系如下图模块所示
在这里插入图片描述

二、分析
输入输出均为“wire”类型,他们的关系是直接连接的,故直接使用assign语句即可。

代码如下:

module top_module( 

	input a,b,c,
	output w,x,y,z );

	assign w=a,x=b,y=b,z=c;

endmodule

三、仿真图:
在这里插入图片描述

Notgate

一、题目要求
创建一个实现NOT(非)门的模块。模块图如下所示
在这里插入图片描述

二、分析
输出跟输入的关系为逻辑非,关系如下图真值表。逻辑非用verilog语言描述为“~”,赋值语句使用assign。

inout
01
10

代码如下:

module top_module( input in, output out );

	assign out=~in;

endmodule

三、仿真图

在这里插入图片描述

Andgate

一、题目要求
创建一个实现AND(与)门的模块。模块图如下所示
在这里插入图片描述

二、分析
输出与输入为逻辑与的关系,逻辑如下图真值表。逻辑与用verilog语言描述为“&”,赋值语句用assign。

about
000
010
100
111

代码如下:

module top_module( 
	input a, 
	input b, 
	output out
);

	assign out=a&b;
	
endmodule

三、仿真图:
在这里插入图片描述

Norgate

一、题目要求
创建一个实现NOR(或非)门的模块。
在这里插入图片描述

二、分析
输出与输入为或非关系,逻辑如下图真值表。逻辑为先“或”后“非”,需要用到两种逻辑运算符或“|”和非“~”,赋值语句用assign。

about
001
010
100
110

代码如下:

module top_module( 

	input a, 
	input b, 
	output out );
	
	assign out=~(a|b);

endmodule

三、仿真图
在这里插入图片描述

Xnorgate

一、题目要求

创建一个实现XNOR(同或,异或为xor)门的模块。模块图如下图所示
在这里插入图片描述

二、分析
输出跟输入为逻辑同或的关系,逻辑如下图真值表所示。异或用verilog语言描述为“^”同或跟异或为逻辑非的关系,即ab异或后取反即为同或。或者使用三目运算符a==b?a:b。赋值语句使用assign。

about
001
010
100
111

代码如下(斜线注释后为三目运算符的表达式)

module top_module( 

	input a, 
	input b, 
	output out );

	assign out=~(a^b);

	//assign out=(a==b)? 1'b1:1'b0;


endmodule

三、仿真图

在这里插入图片描述

Wire decl

一、题目要求

要求使用wire类型声明语句声明三个中间变量,完成下图要求的逻辑。模块图跟逻辑关系如下图
在这里插入图片描述

二、分析
模块要求有三个wire类型的变量,不妨命名为wire1,wire2,wire3(名字可以任取),wire1保存ab相与(a&b)的结果,wire2保存cd相与(c&d)的结果,wire3保存wire1和wire2相或(wire1|wire2)的结果,然后将wire3直接赋值给out,wire3取反(~wire3)后赋值给out_n,赋值语句用assign。

代码如下

module top_module(

	input a,
	input b,
	input c,
	input d,
	output out,
	output out_n   ); 

	wire wire1,wire2,wire3;
	assign wire1=a&b;
	assign wire2=c&d;
	assign wire3=wire1|wire2;
	assign out=wire3;
	assign out_n=~wire3;

endmodule

三、仿真图
在这里插入图片描述

7458

一、题目要求
设计一个7458芯片,其内部连接跟端口要求如下图
在这里插入图片描述

二、分析
需要用wire声明中间变量暂存各个输入之间逻辑关系运算的结果。这里用wire1暂存p2a和p2b相与的结果,wire2暂存p2c和p2d相与的结果,wire3暂存p1a和p1c,p1d三者相与的结果,wire4暂存p1f,p1e,p1d三者相与的结果。然后将wire1和wire2相或的结果赋值给p2y,wire3和wire4相或的结果赋值给p1y。赋值语句用assign。

代码如下

module top_module ( 

	input p1a, p1b, p1c, p1d, p1e, p1f,
	output p1y,
	input p2a, p2b, p2c, p2d,
	output p2y );
	
	wire wire1,wire2,wire3,wire4;
	assign wire1=p2a&p2b,wire2=p2c&p2d;
	assign wire3=p1a&p1b&p1c,wire4=p1d&p1e&p1f;
	assign p2y=wire1|wire2,p1y=wire3|wire4;

endmodule

三、仿真图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值