HDLBits之Verilog学习记录 Day1

1 Simple Wire

Create a module with one input and one output that behaves like a wire.
注:、
1 Verilog 中的线(和其他信号)是有方向的。
2 在 Verilog 的“连续赋值”( assign left_side = right_side;) 中,右侧的信号值被驱动到左侧的导线上。赋值是“连续的”,因为即使右侧的值发生变化,赋值也会一直继续。连续分配不是一次性事件。
在这里插入图片描述
模块和端口声明创建了电路的黑色部分。通过添加一条assign语句来连接in到out.

作业:创建一个具有一个输入和一个输出的模块,其中输入=输出

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

2 Four Wires

Create a module with 3 inputs and 4 outputs that behaves like wires that makes these connections:

a -> w
b -> x
b -> y
c -> z

注:
1 当您有多个赋值语句时,它们在代码中出现的顺序无关紧要。不同于编程语言,分配语句(“连续分配”)描述了连接东西之间,而不是动作复制从一件事到另一个值。
2 assign语句不是在创建连线,而是在已存在的线之间创建连接
3 模块的输入输出端口也同样是 wire
4 input a 实际等于 input wire a

图中的绿线代表的是 wire 之间的连接,而不是 wire 本身。即 wire 是连线两端的信号,而不是连线本身。
在这里插入图片描述
作业:完成上图设计

module top_module( 
    input a,b,c,
    output w,x,y,z );
	assign w = a;
    assign x = b;
    assign y = b;
    assign z = c;
endmodule

module top_module( 
    input a,b,c,
    output w,x,y,z );
	assign w = a,x = b,y = b,z = c;
endmodule

3 NOT GATE

在这里插入图片描述
非门模块中 in 被连接到 out,相比 wire 模块,唯一的区别在于:输出信号 out 是将输入信号 in 取反得到。
我们在 assign 语句中增加的逻辑操作符为 ~(逐位取反),由于我们的信号位宽为 1 位,我们也可以使用!(逻辑取反)。二者的区别在于逻辑取反的结果时钟只有一位,而逐位取反结果的位宽和输入信号位宽相同,在每一个位上逐位(bitwise)取反。

作业:完成上述电路

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

4 AND GATE

题目给出的模块如下图,有三个 wire : a,b 以及 out。a,b 信号已经由模块的输入端口驱动,但图中黑色的部分中,wire out 还没有被任何信号驱动。本题要写一个 assign 语句,使 a,b 信号经过与门的输出驱动 wire out 信号。
在这里插入图片描述
注:
1 信号是被驱动(drive)的,被驱动的含义可以理解为,该信号的取值取决于另一个连接到它的信号的值,该信号的值随着另一个信号的值改变而改变。
2 一个 wire 信号不能被多个信号同时驱动(当一个信号说往东,另一个信号说往西,两个信号还要同时驱动我时,我到底该往哪?)。
3 另一个方面,一个没有驱动者(driver)的信号的值会处于未定义的状态,综合器一般会免费给他安排一个,将其信号值驱动为 0。

作业:完成上电路

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

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

5 NOR GATE

本题要求使用 Verilog 实现一个或非门,或非门是或门的输出取反。

注:
assign 语句将某个值赋予 wire 信号,这个 value 可以是常量,也可以是一个复杂的逻辑表达式,综合器会综合出相应的逻辑门实现。assign 语句代表的始终是连续赋值,因为当输入信号改变时,输出信号会重新“计算”。和一个逻辑门的工作方式相同,输入改变,输出对应改变。
在这里插入图片描述

作业:完成上图电路

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

6 XNOR GATE

同或门(英语:XNOR gate或equivalence gate)也称为异或非门,在异或门的输出端再加上一个非门就构成了异或非门,是数字逻辑电路的基本单元,有2个输入端、1个输出端。当2个输入端中有且只有一个是低电平(逻辑0)时,输出为低电平。亦即当输入电平相同时,输出为高电平(逻辑1)。
在这里插入图片描述

在这里插入图片描述

作业:完成上图电路

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

8 Declaring wires

电路变得复杂的时候,我们需要一些中间信号来帮助我们简化描述电路的难度。
定义中间信号的语法格式为:
wire 信号名
注:
1 建议先定义信号,再使用信号.
2 原则上,你可以在任何位置定义你的信号,使用前使用后都可以,正如之前的课程中说的那样,语句的顺序对于 Verilog 来说没有关系。但有些仿真工具需要你在使用信号之前定义信号,

示例:
在这里插入图片描述

module top_module (
    input in,              // Declare an input wire named "in"
    output out             // Declare an output wire named "out"
);

    wire not_in;           // Declare a wire named "not_in"

    assign out = ~not_in;  // Assign a value to out (create a NOT gate).
    assign not_in = ~in;   // Assign a value to not_in (create another NOT gate).

endmodule   // End of module "top_module"

作业:完成下图的电路
在这里插入图片描述

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n   ); 
    
    wire in_1, in_2;
    assign in_1 = a & b;
    assign in_2 = c & d;
    assign out = in_1 | in_2, out_n = ~(in_1 | in_2);
    

endmodule

9 7458器件

作业:完成下图的设计
在这里插入图片描述

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


endmodule
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开始学AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值