verilog 语言,Vivado2018 计算机组成原理实验-adder(加法器)模块的编写

news/2025/1/25 8:55:35/

实验内容:

1.adder(加法器)模块的编写。
2.建立完整的工程,工程中包括自己编写的 adder 模块,adder_display 模块(已
在群文件中提供),testbench.v(仿真文件)文件(已在群文件中提供),
lcd_module.dcp(显示屏操作模块)(已在群文件提供)。
※其中,adder_display.v 文件和 testbench.v 文件中的 adder 模块实例化已被挖
去,请自行填充。
3.完成仿真,并将仿真波形图像截图。
4.生成可以下载到 FPGA 上的.bit 文件。
5.完成整个工程的结构框图(包括 adder_display 模块和 adder 模块,不包括
testbench 部分和 lcd_module 部分)(选做 加分项)

实验过程:

1)新建工程

本过程按照实验手册一路next,按实验手册进行选择:

这里写图片描述

这里写图片描述

这里写图片描述

2)添加源文件

创建adder.v文件,编写代码;

有 2 个 32 位数的输入和 1 个进位输入,产生 1 个 32 位的加法 和结果和 1 个向高位的进位。本实验提供的参考设计是直接写“+”号实现加法功能 的,这样的写法综合工具会调用内部的模块库的加法器来实现;
源码如下:

这里写图片描述

`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date: 2018/05/02 22:42:20
// Design Name: 
// Module Name: adder
// Project Name: 
// Target Devices: 
// Tool Versions: 
// Description: 
// 
// Dependencies: 
// 
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
// 
//////////////////////////////////////////////////////////////////////////////////module adder(input   [31:0]  operand1,input   [31:0]  operand2,input           cin,output  [31:0]  result,output          cout);assign  {cout,result}   = operand1 + operand2 + cin;
endmodule

3)添加展示外围模块

将实验辅助文件adder_display.v,lcd_module与testbentch.v添加到工程中;并对adder_display.v与testbentch.v的未添加模块添加,及对adder.v文件进行实例化。
这里写图片描述
adder_display.v添加部分:
这里写图片描述
源码:

//*************************************************************************
//   > 文件名: adder_display.v
//   > 描述  :加法器显示模块,调用FPGA板上的IO接口和触摸屏
//   > 作者  : LOONGSON
//   > 日期  : 2016-04-14
//*************************************************************************
module adder_display(//时钟与复位信号input clk,input resetn,    //后缀"n"代表低电平有效//拨码开关,用于选择输入数和产生cininput input_sel, //0:输入为加数1(add_operand1);1:输入为加数2(add_operand2)input sw_cin,//led灯,用于显示coutoutput led_cout,//触摸屏相关接口,不需要更改output lcd_rst,output lcd_cs,output lcd_rs,output lcd_wr,output lcd_rd,inout[15:0] lcd_data_io,output lcd_bl_ctr,inout ct_int,inout ct_sda,output ct_scl,output ct_rstn);//-----{调用加法模块}beginreg  [31:0] adder_operand1;reg  [31:0] adder_operand2;wire        adder_cin;wire [31:0] adder_result  ;wire        adder_cout;adder adder_module(//需要补充的部分.operand1(adder_operand1),.operand2(adder_operand2),.cin (adder_cin ),.result (adder_result ),.cout (adder_cout ) );assign adder_cin = sw_cin;assign led_cout  = adder_cout;
//-----{调用加法模块}end//---------------------{调用触摸屏模块}begin--------------------//
//-----{实例化触摸屏}begin
//此小节不需要更改reg         display_valid;reg  [39:0] display_name;reg  [31:0] display_value;wire [5 :0] display_number;wire        input_valid;wire [31:0] input_value;lcd_module lcd_module(.clk            (clk           ),   //10Mhz.resetn         (resetn        ),//调用触摸屏的接口.display_valid  (display_valid ),.display_name   (display_name  ),.display_value  (display_value ),.display_number (display_number),.input_valid    (input_valid   ),.input_value    (input_value   ),//lcd触摸屏相关接口,不需要更改.lcd_rst        (lcd_rst       ),.lcd_cs         (lcd_cs        ),.lcd_rs         (lcd_rs        ),.lcd_wr         (lcd_wr        ),.lcd_rd         (lcd_rd        ),.lcd_data_io    (lcd_data_io   ),.lcd_bl_ctr     (lcd_bl_ctr    ),.ct_int         (ct_int        ),.ct_sda         (ct_sda        ),.ct_scl         (ct_scl        ),.ct_rstn        (ct_rstn       )); 
//-----{实例化触摸屏}end//-----{从触摸屏获取输入}begin
//根据实际需要输入的数修改此小节,
//建议对每一个数的输入,编写单独一个always块//当input_sel为0时,表示输入数为加数1,即operand1always @(posedge clk)beginif (!resetn)beginadder_operand1 <= 32'd0;endelse if (input_valid && !input_sel)beginadder_operand1 <= input_value;endend//当input_sel为1时,表示输入数为加数2,即operand2always @(posedge clk)beginif (!resetn)beginadder_operand2 <= 32'd0;endelse if (input_valid && input_sel)beginadder_operand2 <= input_value;endend
//-----{从触摸屏获取输入}end//-----{输出到触摸屏显示}begin
//根据需要显示的数修改此小节,
//触摸屏上共有44块显示区域,可显示44组32位数据
//44块显示区域从1开始编号,编号为1~44,always @(posedge clk)begincase(display_number)6'd1 :begindisplay_valid <= 1'b1;display_name  <= "ADD_1";display_value <= adder_operand1;end6'd2 :begindisplay_valid <= 1'b1;display_name  <= "ADD_2";display_value <= adder_operand2;end6'd3 :begindisplay_valid <= 1'b1;display_name  <= "RESUL";display_value <= adder_result;enddefault :begindisplay_valid <= 1'b0;display_name  <= 40'd0;display_value <= 32'd0;endendcaseend
//-----{输出到触摸屏显示}end
//----------------------{调用触摸屏模块}end---------------------//
endmodule

testbentch.v添加部分:

这里写图片描述

源码:

`timescale 1ns / 1ps   //仿真单位时间为1ns,精度为1ps
module testbench;// Inputsreg [31:0] operand1;reg [31:0] operand2;reg cin;// Outputswire [31:0] result;wire cout;// Instantiate the Unit Under Test (UUT)adder uut (//需要补充的部分.operand1(operand1),.operand2(operand2),.cin(cin),.result(result),.cout(cout));initial begin// Initialize Inputsoperand1 = 0;operand2 = 0;cin = 0;// Wait 100 ns for global reset to finish#100;// Add stimulus hereendalways #10 operand1 = $random;  //$random为系统任务,产生一个随机的32位数always #10 operand2 = $random;  //#10 表示等待10个单位时间(10ns),即每过10ns,赋值一个随机的32位数always #10 cin = {$random} % 2; //加了拼接符,{$random}产生一个非负数,除2取余得到0或1
endmodule

4)仿真图像

这里写图片描述

这里写图片描述

5)加入约束文件,烧成bit文件,上板验证

将adder.xdc文件添加到工程中;生成可烧写的bit文件
点击“Generate Bitsteam”上板验证:烧写bit文件,在FPGA板上操作

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述


http://www.ppmy.cn/news/582288.html

相关文章

Xilinx加法器IP核adder

1.加法器IP核配置 2.adder_top.v代码 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 10:20:30 07/19/2017 // Design Name: // Module Name: adder_top // Project Name: // Target Devices: // Tool versions: // Description: // // …

forahead adder 超前进位加法器

数电书上说道超前进位加法器&#xff0c;没有仔细讲。上网搜了这篇资料&#xff0c;摘抄下来 串行进位加法器需要一级一级的进位&#xff0c;进位延迟很大。先行进位加法器&#xff08;也叫超前进位加法器&#xff09;可以有效的减少进位延迟。 设二进制加法器的第i位输入为Xi,…

java add用法

add(int index, E element) 在列表的指定位置插入元素 转载javaerSir 最后发布于2013-12-03 08:55:54 阅读数 6593 收藏 展开 转载▼ void add(int index, E element) 在列表的指定位置插入指定元素&#xff08;可选操作&#xff09;。将当前处于该位置的元素&#xff08;如果…

HDLBits 系列(11)All about Adder

目录 半加器 全加器 Binary Ripple-Carry Adder 多位加法器 有符号加法溢出 Adder100 Bcdadd4 最后想说的一些话 半加器 Create a half adder. A half adder adds two bits (with no carry-in) and produces a sum and carry-out. module top_module( input a, b,out…

Parallel Prefix Adder 简介

Parallel Prefix Adder 简介 本次介绍电路设计中的PPA (Parallel Prefix Adder)&#xff0c;该技术可以高效求布尔状态下的2-输入加法&#xff0c;用于安全多方计算中算术分享对布尔分享的转化。接下来首先介绍Full Adder (FA) 和基于 FA 构造的RCFA。进一步介绍PPA的构造。 0…

verilog 超前进位加法器(carry-look-ahead-adder)

目录 1. 数据流建模实现4位加法器 1.1 代码 1.2 资源占用结果 1.3 RTL综合 2. 结构建模&#xff08;门&#xff09;实现4位超前进位加法器 2.1 代码 2.2 资源占用结果 2.3 RTL综合 3. 行为级建模实现4位串行加法器 3.1 代码 3.2 资源占用结果 3.3 RTL综合 总结 与…

AdderNet

AdderNet是由华为、北大和悉尼大学共同提出的一个网络层结构。主要思想是用加法代替卷积层特征计算的乘法&#xff0c;从而实现减少深度网络的计算。 1、卷积计算 在深度卷积神经网络中&#xff0c;设 F ∈ R d d c i n c o u t F\in R^{d\times d\times c_{in}\times c_{o…

XILINX关于Adder/Subtracter加法器减法器 IP核的使用与仿真

平台&#xff1a;vivado21018.3&#xff0c;modelsim 10.6c 芯片&#xff1a;xc7k325tffg900-2 (active) Adder/Subtracter IP可提供LUT和单个DSP48 slice加法/减法实现方案。Adder/Subtracter 模块可实现加法器 (AB)、减法器 (A–B)&#xff0c;以及可通过签名或未签名数据运…