HDLBits每日刷题Day2

本文介绍了如何使用Verilog语言创建各种逻辑门,包括非门、与门、或非门、异或门,并展示了如何通过声明中间线连接这些门实现更复杂的电路。此外,还给出了与7458芯片功能相同的模块实现,涉及多个与门和或门的组合。内容涵盖了Verilog中的位运算符,如取反、与、或和异或,并讨论了不同长度数据进行位运算的规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1.3inverter
问题陈述:

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

这个电路类似于线,但略有不同。当从wire in连接到wire out时,我们将使用逆变器(或“非门”)而不是普通电线。

使用assign语句,assign语句将连续驱动in的非传递给out。
在这里插入图片描述

Verilog代码:

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

2.1.4AND gate
问题陈述:

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

该电路现在有三根导线(a、b和out)。wire a和b已经有输入端口驱动到它们的值。但是wire out目前不是由任何东西驱动的。编写一个assign语句,用a和b的AND信号输出。
在这里插入图片描述

Verilog代码:

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

2.1.5Norgate
问题陈述:

创建一个实现 NOR 门的模块。或非门是一个输出反相的或门。用 Verilog 编写的 NOR 函数需要两个运算符。

assign语句驱动带有值的线(或“网”,因为它更正式地称为)。这个值可以是任意复杂的函数,只要它是一个组合(即,无记忆,没有隐藏状态)函数。一个assign语句是一个连续赋值,因为只要它的任何输入永远改变,输出就会被“重新计算”,就像一个简单的逻辑门一样。

在这里插入图片描述

Verilog代码:

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

2.1.6XNOR gate
问题陈述:

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

Verilog代码:

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

2.1.7Declarling wire
问题陈述:

实现以下电路。创建两条中间线(命名为您想要的任何名称)将 AND 和 OR 门连接在一起。请注意,馈入 NOT 门的线实际上是 wire out,因此您不必在此处声明第三条线。请注意电线是如何由一个源(门的输出)驱动的,但可以馈送多个输入。

如果您遵循图中的电路结构,您应该得到四个分配语句,因为有四个信号需要分配一个值。

(是的,可以在没有中间线的情况下创建具有相同功能的电路。

在这里插入图片描述

问题分析:
input a,b,c,d和output的两条线已经定义,则需要声明的是模块内部没有定义用于传输的两根线。
Verilog代码:

module top_module(
    input a,
    input b,
    input c,
    input d,
    output out,
    output out_n   ); 
	wire in_one,in_two;//声明两条线
    assign in_one=a&b;//第一个与门
    assign in_two=c&d;//第二个与门
    assign out=in_one|in_two;
    assign out_n=~out;      
endmodule

2.1.8 7458 chip
问题陈述:
7458 是具有四个与门和两个或门的芯片。

创建一个与 7458 芯片功能相同的模块。它有 10 个输入和 2 个输出。您可以选择使用assign语句来驱动每条输出线,或者您可以选择声明(四)条线用作中间信号,其中每条内部线由一个与门的输出驱动。
在这里插入图片描述

Verilog代码:

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&p1c&p1b)|(p1f&p1e&p1d);
//方法2
	wire w1,w2,w3,w4;
    assign w1=p2a&p2b;
    assign w2=p2c&p2d;
    assign p2y=w1|w2;
    assign w3=p1a&p1c&p1b;
    assign w4=p1f&p1e&p1d;
    assign p1y=w3|w4;

endmodule

每日总结
位运算符

  1. "取反”运算符 ~: ~是个单目运算符,用来对一个操作数进行按位取反运算。
  2. 按位与”运算符&:“按位与”运算就是将两个操作数的相应位进行与运算。
  3. “按位或”运算符|:“按位或”运算就是将两个操作数的相应位进行或运算。
  4. “按位异或”运算符^(也称为XOR运算符):“按位异或”运算就是将两个操作数的相应位进行异或运算。
  5. “按位同或”运算符^~:按位同或运算就是将两个操作数的相应位先进行异或运算再进行非运算。
  6. 不同长度的数据进行位运算:两个长度不同的数据进行位运算时,系统会自动地将两者的右端对齐,位数少的操作数会在对应的高位用0进行填满,以使两个操作数按位进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值