verilog基本门电路实验

1. 实验目的

(1)熟悉使用Verilog HDL的三种不同描述方式进行基本门电路建模,实现数据扩展。

(2)学习使用Vivado进行逻辑设计的基本流程。

(3)学习使用Nexys4 FPGA硬件开发板,了解开发板主要的外围接口。

(4)了解设计源代码与仿真代码的区别。

2. 实验内容

(1)原理描述

基本与或非电路

(2)Verilog HDL设计源代码描述(要求:注释)

`timescale 1ns / 1ps

module lab1 (

input [1:0] SW,

output [3:0] LED

);

assign LED[0] = SW[0] ;//当SW[0]=1时LED[0]亮起

assign LED[1] = !SW[1];//当SW[1]=0时LED[1]亮起

assign LED[2] = SW[0] | SW[1];//当SW[0]或SW[1]中存在一个为1时LED[2]亮起

assign LED[3] = SW[0] & SW[1];//当SW[0]或SW[1]中全都不为0时LED[3]亮起

endmodule

这是一个用Verilog编写的代码模块,用于描述数字电路。

timescale指令指定设计中使用的时间单位和精度。在这种情况下,时间单位是1纳秒(ns),精度是1皮秒(ps)。

module关键字表示模块定义的开始。模块具有名称(在本例中为“lab1”)和圆括号中的输入和输出端口列表。在本例中,模块具有两个输入:SW[1:0]和四个输出:LED[3:0]

assign语句用于描述输入和输出端口之间的互连。在这些特定的赋值中,输出端口LED[0]连接到输入端口SW[0]LED[1]连接到SW[1]的反向,LED[2]连接到SW[0]SW[1]的逻辑OR,LED[3]连接到SW[0]SW[1]的逻辑AND。

endmodule关键字表示模块定义的结束。

总的来说,此模块描述了具有两个输入开关和四个输出LED的数字电路。LED的行为由输入开关的状态决定,如assign语句中所述。

(3)TestBeach仿真代码及仿真结果

`timescale 1ns / 1ps

module lab1_testbench() ;

reg [1:0] SW;

wire [3:0] LED;



lab1 U1(

. SW(SW),

. LED (LED)

);

initial begin

SW = 2'b00;

#10 SW = 2'b01;

#8 SW = 2'b10;

#6 SW = 2'b11;

end

endmodule

(4)XDC文件配置

set_property PACKAGE_PIN N14 [get_ports {LED[3]}]

set_property IOSTANDARD LVCMOS33 [get_ports {LED[3]}]

set_property PACKAGE_PIN J13 [get_ports {LED[2]}]

set_property PACKAGE_PIN K15 [get_ports {LED[1]}]

set_property PACKAGE_PIN H17 [get_ports {LED[0]}]

set_property PACKAGE_PIN L16 [get_ports {SW[1]}]

set_property PACKAGE_PIN J15 [get_ports {SW[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {LED[2]}]

set_property IOSTANDARD LVCMOS33 [get_ports {LED[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {LED[0]}]

set_property IOSTANDARD LVCMOS33 [get_ports {SW[1]}]

set_property IOSTANDARD LVCMOS33 [get_ports {SW[0]}]

配置文件说明:

      

set_property命令用于设置所实现设计的各种设计属性。在这些特定命令中,为各种端口(例如LED[3]LED[2]LED[1]LED[0]SW[1]SW[0])设置PACKAGE_PIN属性。PACKAGE_PIN属性指定目标设备上的物理引脚应连接到哪个特定端口。

get_ports命令用于获取与特定模式匹配的端口列表。在这些命令中,模式是端口名称,例如LED[3]LED[2]LED[1]LED[0]SW[1]SW[0]

还为一些端口设置了IOSTANDARD属性。IOSTANDARD属性指定特定端口应使用的输入/输出标准。值LVCMOS33表示应为指定端口使用低压 CMOS 3.3V标准。

上述文件是在硬件设计中为某些LED和开关设置物理引脚分配和输入/输出标准。很可能,所实现的设计包括具有可编程 I/O引脚的FPGA或ASIC设备(此处位nexys4),并且这些命令用于指定在设计中如何使用引脚。

(5)下板测试

 

 

 

VerilogHDL是一种硬件描述语言,用于设计数字电路门电路是数字电路中最基本的电路,它可以实现与、或、非等逻辑运算。下面介绍VerilogHDL基础门电路设计实验原理。 实验目的:掌握VerilogHDL语言编写基本门电路的方法。 实验原理: 1. VerilogHDL语言的基本结构 VerilogHDL语言的结构包括模块、端口、信号、赋值语句等。其中,模块是VerilogHDL的基本组成单元,端口用于连接不同模块的信号,信号用于传递数据和控制信息,赋值语句用于对信号进行赋值操作。 2. 门电路的基本原理 门电路是数字电路的基本单元,它实现逻辑运算,包括与、或、非等。与门、或门和非门的真值表分别如下: 与门: A | B | Y --|---|-- 0 | 0 | 0 0 | 1 | 0 1 | 0 | 0 1 | 1 | 1 或门: A | B | Y --|---|-- 0 | 0 | 0 0 | 1 | 1 1 | 0 | 1 1 | 1 | 1 非门: A | Y --|-- 0 | 1 1 | 0 3. 基本门电路VerilogHDL实现 以与门为例,其VerilogHDL代码如下: ``` module and_gate(input A, input B, output Y); assign Y = A & B; endmodule ``` 其中,module定义了一个模块,input定义了输入端口,output定义了输出端口,assign用于对信号进行赋值操作。 以或门为例,其VerilogHDL代码如下: ``` module or_gate(input A, input B, output Y); assign Y = A | B; endmodule ``` 以非门为例,其VerilogHDL代码如下: ``` module not_gate(input A, output Y); assign Y = ~A; endmodule ``` 4. 门电路的组合 多个门电路可以组合在一起实现更复杂的逻辑运算,如与非、或非、异或等。以与非门为例,其VerilogHDL代码如下: ``` module nand_gate(input A, input B, output Y); wire w1; and_gate and(A, B, w1); not_gate not(w1, Y); endmodule ``` 其中,wire定义了一个中间信号,and_gate和not_gate分别实现了与和非的逻辑运算。 实验步骤: 1. 打开VerilogHDL开发环境,新建一个工程,命名为gate_design。 2. 在工程中新建一个VerilogHDL文件,命名为and_gate.v,输入与门的VerilogHDL代码。 3. 在工程中新建一个VerilogHDL文件,命名为or_gate.v,输入或门的VerilogHDL代码。 4. 在工程中新建一个VerilogHDL文件,命名为not_gate.v,输入非门的VerilogHDL代码。 5. 在工程中新建一个VerilogHDL文件,命名为nand_gate.v,输入与非门的VerilogHDL代码。 6. 编译并综合所有的VerilogHDL文件,生成门电路的网表文件。 7. 下载网表文件到FPGA开发板中,验证门电路的功能。 总结: VerilogHDL是设计数字电路的重要工具,可以用于实现基本门电路和复杂逻辑运算。掌握VerilogHDL语言的基本结构和门电路的基本原理,可以编写出实用的数字电路
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

+720

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

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

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

打赏作者

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

抵扣说明:

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

余额充值