【HDLbits】01Verilog Language__1.Basics

  • Post author:
  • Post category:其他




1.Basics



1.0

在这里插入图片描述



1.1 Simple wire

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

在这里插入图片描述

module top_module( input in, output out );
	
	assign out = in;
// Note that wires are directional, so "assign in = out" is not equivalent.
	
endmodule



1.2 Four wires

创建一个具有 3 个输入和 4 个输出的模块,其行为类似于建立这些连接的电线:

a -> w

b -> x

b -> y

c -> z

下图说明了电路的每个部分如何对应于Verilog代码的每个位。 从模块外部,有三个输入端口和四个输出端口。

在这里插入图片描述

module top_module (
	input a,b,c,
	output w,x,y,z  );
		
	assign w = a;
	assign x = b;
	assign y = b;
	assign z = c;
	// If we're certain about the width of each signal, using 
	// the concatenation operator is equivalent and shorter:
	// assign {w,x,y,z} = {a,b,b,c};
endmodule



1.3 Inverter(NOT gate)(非门)

创建一个实现 NOT 门的模块。

该电路类似于线,但略有不同。当从导线连接到导线时,我们将实现逆变器(或“非门”)而不是普通导线。

在这里插入图片描述

NOT gate(非门),逻辑取反符号!,按位取反符号~

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



1.4 AND gate(与门)

创建实现 AND 门的模块。

在这里插入图片描述

Verilog有独立的位与(&)和逻辑与(&&)操作符,就像c一样。在这里使用的是一位操作符,所以选择哪个并不重要。

module top_module( 
    input a, 
    input b, 
    output out );
assign out=a&b;
endmodule



1.5 NOR gate(或非门)

创建实现 NOR 门的模块。NOR 门是输出反相的 OR 门。NOR 函数在 Verilog 中编写时需要两个运算符。

在这里插入图片描述

Verilog有独立的位或(|)和逻辑或(||)操作符,就像c一样。在这里使用的是一位操作符,所以选择哪个皆可。

module top_module( 
    input a, 
    input b, 
    output out );
    assign out=!(a|b);
endmodule



1.6 XNOR gate(同或门)

创建一个实现 XNOR 门的模块。

在这里插入图片描述

在这里插入图片描述

异或门 XOR

同或门 XNOR

位异或操作符是^,没有逻辑异或运算符。

module top_module( 
    input a, 
    input b, 
    output out );
	assign out=a^~b;
endmodule



1.7 Declaring wires

到目前为止,电路非常简单,输出是输入的简单功能。随着电路变得越来越复杂,需要电线将内部组件连接在一起。当需要使用电线时,应该在模块的主体中声明它,在首次使用之前的某个地方。




在这里插入图片描述

在这里插入图片描述



实践

实现以下电路。创建两条中间导线(命名为您想要的任何名称)以将 AND 和 OR 门连接在一起。请注意,馈入 NOT 门的导线实际上是导线输出,因此您不一定需要在此处声明第三根导线。如果您遵循图中的电路结构,则最终应该得到四个分配语句,因为有四个信号需要分配值。

在这里插入图片描述

`default_nettype none
module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n   ); 
    wire wire1,wire2;
    assign wire1=a&b;
    assign wire2=c&d;
    assign out=wire1|wire2;
    assign out_n=~out;
endmodule



1.8 7458 chip

7458 是一款具有四个 AND 门和两个 OR 门的芯片。

创建与 7458 芯片具有相同功能的模块。它有 10 个输入和 2 个输出。可以选择使用语句来驱动每根输出导线,也可以选择声明 (四) 根导线用作中间信号,其中每根内部导线由其中一个 AND 门的输出驱动。

在这里插入图片描述

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)|(p2c & p2d);
endmodule



版权声明:本文为m0_71789212原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。