【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证

这篇具有很好参考价值的文章主要介绍了【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

veriloghdl语言与非门实现或运算,fpga开发,Verilog

写在前面:本章主要内容为了解和确认 NAND/NOR/XOR 门的行为,并使用Verilog实现,生成输入信号后通过模拟,验证每个门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为。

本章目录:

Ⅰ. 前置知识

0x00 与非门(NAND)

0x01 或非门(NOR)

0x02 异或门(XOR)

Ⅱ. 练习(Assignment)

0x00  4-input NAND gate

0x01  4-input NOR gate

0x02  4-input XOR gate

0x03  4-input AOI(AND OR Inverter) gate


Ⅰ. 前置知识

0x00 与非门(NAND)

如果所有输入均为High (1),则输出为Low (0),在其他情况下,将产生High (1) 输出。

  • NAND 是 AND 运算符的否定结果

布尔表达式中以 "负乘法" 形式表现:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

veriloghdl语言与非门实现或运算,fpga开发,Verilog

0x01 或非门(NOR)

如果所有输入均为 Low (0),则输出为 High(1),其中一个输入为高 (1) 则产生低功率 (0)。

  • NOR 是 OR 运算符的否定结果

布尔表达式中以 "否定合" 形式表现:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

veriloghdl语言与非门实现或运算,fpga开发,Verilog

0x02 异或门(XOR)

如果 两个值不相同,则异或结果为1。如果 两个值相同,异或结果为0。

veriloghdl语言与非门实现或运算,fpga开发,Verilog

veriloghdl语言与非门实现或运算,fpga开发,Verilog

Ⅱ. 练习(Assignment)

0x00  4-input NAND gate

veriloghdl语言与非门实现或运算,fpga开发,Verilog

比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。

💬 Design source:

`timescale 1ns / 1ps

module input_4_NAND(
    // Input the var
    input a, b, c, d,
    // Output the var
    output e, f, g
    );
   
// NAND = NOT + AND     
assign e = ~(a & b);    // a and b then inv   
assign f = ~(e & c);    // e and c then inv
assign g = ~(f & d);    // f and d then inv

endmodule

💬 Simulation:

`timescale 1ns / 1ps

module input_4_NAND_tb;
reg aa, bb, cc, dd;
wire e, f, g;

input_4_NAND u_input_4_NAND (
    .a(aa),
    .b(bb),
    .c(cc),
    .d(dd),
    .e(e),
    .f(f),
    .g(g)
    );

initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;
initial dd = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;
always dd = #800 ~dd;

initial begin
    #1600
    $finish;
end

endmodule

🚩 运行结果如下:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

💡 解读:assign 语句中,用取反运算符 ~ 和或运算符 | 实现了 4 个输入取反或运算,并将结果分别赋值给输出变量 e, f, g

0x01  4-input NOR gate

veriloghdl语言与非门实现或运算,fpga开发,Verilog

比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。

💬 Design source:

`timescale 1ns / 1ps

module input_4_NOR(
    /* Input the var */
    input a, b, c, d,
    /* Output the var */
    output e, f, g
    );
    
/* NOR = NOT + OR */
assign e = ~(a | b);
assign f = ~(e | c);
assign g = ~(f | d);

endmodule

💬 Testbench:

`timescale 1ns / 1ps

// input_4_NOR_tb

module input_4_NOR_tb;
// input
reg aa, bb, cc, dd;
// output
wire e, f, g;

input_4_NOR u_input_4_NOR (
    .a(aa),
    .b(bb),
    .c(cc),
    .d(dd),
    
    .e(e),
    .f(f),
    .g(g)
    );

initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;
initial dd = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;
always dd = #800 ~dd;

initial begin
    #1600
    $finish;
end

endmodule

🚩 运行结果如下:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

0x02  4-input XOR gate

比较 AB 的布尔表达式,完成 A 和 B 的 Verilog 代码,通过 Simulation 结果进行比较。

veriloghdl语言与非门实现或运算,fpga开发,Verilog

💬 Design source:

`timescale 1ns / 1ps

module input_4_XOR(
    /* Input the var */
    input a, b, c, d,
    /* Output the var */
    output e, f, g
);

/* XOR */
assign e = a ^ b;
assign f = e ^ c;
assign g = f ^ d;

endmodule

💬 Testbench:

`timescale 1ns / 1ps

module input_4_XOR_tb;
// input
reg aa, bb, cc, dd;
// output
wire e, f, g;

input_4_XOR u_input_4_XOR (
    .a(aa),
    .b(bb),
    .c(cc),
    .d(dd),
    
    .e(e),
    .f(f),
    .g(g)
    );

initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;
initial dd = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;
always dd = #800 ~dd;

initial begin
    #1600
    $finish;
end

endmodule

🚩 运行结果如下:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

0x03  4-input AOI(AND OR Inverter) gate

veriloghdl语言与非门实现或运算,fpga开发,Verilog

💬 Design source:

`timescale 1ns / 1ps


module inpu_4_AOI (
    /* Input the var */
    input a, b, c, d,
    /* Output the var */
    output e, f, g
);

/* AOI */
assign e = a & b;
assign f = e & c;
assign g = ~(e | f);

endmodule

💬 Testbench:

`timescale 1ns / 1ps

module inpu_4_AOI_tb;
// input
reg aa, bb, cc, dd;
// output
wire e, f, g;

inpu_4_AOI u_inpu_4_AOI (
    .a(aa),
    .b(bb),
    .c(cc),
    .d(dd),
    
    .e(e),
    .f(f),
    .g(g)
    );

initial aa = 1'b0;
initial bb = 1'b0;
initial cc = 1'b0;
initial dd = 1'b0;

always aa = #100 ~aa;
always bb = #200 ~bb;
always cc = #400 ~cc;
always dd = #800 ~dd;

initial begin
    #1600
    $finish;
end

endmodule

🚩 运行结果如下:

veriloghdl语言与非门实现或运算,fpga开发,Verilog

veriloghdl语言与非门实现或运算,fpga开发,Verilog

📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.9.20
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,
              本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.文章来源地址https://www.toymoban.com/news/detail-778560.html

到了这里,关于【FPGA】Verilog 编码实现:与非门 | 或非门 | 异或门 | NAND/NOR/XOR 行为验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【FPGA】Verilog:编码器 | 实现 4 到 2 编码器

    0x00 编码器(Encoder) 编码器与解码器相反。当多台设备向计算机提供输入时,编码器会为每一个输入生成一个与设备相对应的信号,因此有多少比特就有多少输出,以数字形式表示输入的数量。 例如,如果有四个输入,就需要一个两位二进制数来表示 0 至 3,这样就有四个输

    2024年02月04日
    浏览(56)
  • 计算机中的逻辑运算(与、或、非、异或、同或、与非、或非)

    计算机中的逻辑运算又被称作为“布尔运算”,分别为: 与 、 或 , 非 , 异或 。此外在门电路中还有: 同或 、 与非 、 或非 。共七种。 这七种逻辑运算中,只有 逻辑非运算 是一元逻辑运算(一个运算操作数),其他六种均是二元逻辑运算(两个运算操作数)。 逻辑运

    2024年02月08日
    浏览(42)
  • Verilog编程:8线-3线优先编码器FPGA

    Verilog编程:8线-3线优先编码器FPGA 基于FPGA的数字电路设计是当前领域中的关键技术之一,因为这种设计具有高速、可编程、可重构等优点。在数字电路设计中,编码器是常见的模块,尤其是8线-3线优先编码器,可以实现将八个输入信号中最先出现的一个编码输出到三位二进制

    2024年02月08日
    浏览(44)
  • 【FPGA】Verilog 实践:优先级编码器 | Priority encoder

    0x00 优先级编码器(Priority encoder) \\\"能将多个二进制输入压缩成更少数目输出的电路或算法的编码器\\\" 优先级编码器是一种编码器,它考虑了两个或更多输入位同时变为 1 但没有收到输入的情况。当输入进来时,优先级编码器会按照优先级顺序进行处理。 通常,它按升序或降

    2024年01月18日
    浏览(60)
  • 【FPGA】Verilog:组合逻辑电路应用 | 数码管 | 8421BCD编码 | 转换七段数码管段码

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:数码管的使用 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用IO:Switch :

    2024年02月03日
    浏览(50)
  • 【FPGA】基本实验步骤演示 | Verilog编码 | 运行合成 | 设备/引脚分配 | 综合/实施 | 设备配置 | 以最简单的逻辑非为例

    写在前面: 本章的目的是让你理解与门、或门和非门的行为,并使用 Verilog 语言实现多输入与门、或门和非门。在生成输入信号之后,你需要通过模拟来验证这些门的操作,并使用 FPGA 来验证 Verilog 实现的电路的行为。 0x00 引入:与门、或门与非门 构成数字系统电路的最基

    2024年02月02日
    浏览(42)
  • verilog中异或(XOR)和同或(XNOR)

    input [7:0]a,b output [7:0]result1 output result2 异或(相同为零,相反为一) 同或(相同为一,相反为零) ‘= =’与‘= = =’ ‘’与‘’

    2024年02月11日
    浏览(31)
  • 「Verilog学习笔记」用优先编码器①实现键盘编码电路

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点,刷题网站用的是牛客网   分析  用此编码器实现键盘的编码电路。 注意:编码器的输出是低电平有效,而键盘编码电路输出的是正常的8421BCD码,是高电平有效。因此将编码器的输出取反就是8421编码输出

    2024年02月05日
    浏览(44)
  • Verilog 实现优先编码器的两种方式

    1.1 定义:  为了防止多条线信号同时有效,规定只对序号最高的有效信号线进行编码,相当于该线的优先级别最高,称为优先编码器 。      优先编码器可以通过  if else 语句和case语句两种方式实现。 输入描述: ①输入描述: input      [8:0]         I_n 输出描述: ①输出

    2024年02月08日
    浏览(48)
  • Verilog实现倍频FPGA

    Verilog实现倍频FPGA FPGA(现场可编程门阵列)是一种灵活的硬件开发平台,可以用于实现各种数字电路。在FPGA中实现倍频电路是一项常见的任务,它可以将输入信号的频率提高到所需的倍数。本文将介绍如何使用Verilog语言在FPGA上实现倍频电路,并提供相应的源代码示例。 设

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包