目录

  • multply.v
  • display
  • tb
  • xdc

multply.v

module multiply(              // 乘法器input         clk,        // 时钟input         mult_begin, // 乘法开始信号input  [63:0] mult_op1,   // 乘法源操作数1input  [31:0] mult_op2,   // 乘法源操作数2output [63:0] product,    // 乘积output        mult_end   // 乘法结束信号
);wire        op1_sign;      //操作数1的符号位wire        op2_sign;      //操作数2的符号位wire [31:0] op1_absolute;  //操作数1的绝对值wire [31:0] op2_absolute;  //操作数2的绝对值assign op1_sign = mult_op1[31];assign op2_sign = mult_op2[31];assign op1_absolute = op1_sign ? (~mult_op1+1) : mult_op1;assign op2_absolute = op2_sign ? (~mult_op2+1) : mult_op2;reg flag;//第一个上升沿后begin=1&end=0flag=1表示可以开始运算,第二个上升沿之后乘数才开始左移  always@(posedge clk)beginif(mult_begin&!mult_end)begin  flag<=1'b1;endelse beginflag<=1'b0;endendreg [63:0]process_op1;//被乘数reg [31:0]process_op2;//乘数  assign mult_end=flag&~(|process_op2);always@(posedge clk)beginif(flag)beginprocess_op1<=process_op1<<1;process_op2<=process_op2>>1;endelse if(mult_begin&!mult_end)beginprocess_op1<={32'b0,op1_absolute};process_op2<=op2_absolute;endendreg [63:0]part;wire [63:0] partial_product;assign partial_product = process_op2[0] ? process_op1:64'd0;        //若此时y的最低位为1,则把x赋值给部分积partial_product,否则把0赋值给partial_productalways@(posedge clk)beginif(flag)beginpart<=part+partial_product;endelse if(mult_begin&!mult_end)beginpart<=64'b0;endend wire product_sign;assign product_sign=op1_sign^op2_sign;  assign product = product_sign ? (~part+1) : part;endmodule

display

//*************************************************************************
//   > 文件名: multiply_display.v
//   > 描述  :乘法器显示模块,调用FPGA板上的IO接口和触摸屏
//   > 作者  : LOONGSON
//   > 日期  : 2016-04-14
//*************************************************************************
module multiply_display(//时钟与复位信号input clk,input resetn,    //后缀"n"代表低电平有效//拨码开关,用于选择输入数input input_sel, //0:输入为乘数1;1:输入为乘数2input sw_begin,//乘法结束信号output led_end,//触摸屏相关接口,不需要更改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
);
//-----{调用乘法器模块}beginwire        mult_begin;reg  [31:0] mult_op1; reg  [31:0] mult_op2;  wire [63:0] product; wire        mult_end;  assign mult_begin = sw_begin;assign led_end = mult_end;multiply multiply_module (.clk       (clk       ),.mult_begin(mult_begin),.mult_op1  (mult_op1  ), .mult_op2  (mult_op2  ),.product   (product   ),.mult_end  (mult_end  ));reg [63:0] product_r;always @(posedge clk)beginif (!resetn)beginproduct_r <= 64'd0;endelse if (mult_end)beginproduct_r <= product;endend
//-----{调用乘法器模块}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时,表示输入数为乘数1always @(posedge clk)beginif (!resetn)beginmult_op1 <= 32'd0;endelse if (input_valid && !input_sel)beginmult_op1 <= input_value;endend//当input_sel为1时,表示输入数为乘数2always @(posedge clk)beginif (!resetn)beginmult_op2 <= 32'd0;endelse if (input_valid && input_sel)beginmult_op2 <= 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  <= "M_OP1";display_value <= mult_op1;end6'd2 :begindisplay_valid <= 1'b1;display_name  <= "M_OP2";display_value <= mult_op2;end6'd3 :begindisplay_valid <= 1'b1;display_name  <= "PRO_H";display_value <= product_r[63:32];end6'd4 :begindisplay_valid <= 1'b1;display_name  <= "PRO_L";display_value <= product_r[31: 0];enddefault :begindisplay_valid <= 1'b0;display_name  <= 48'd0;display_value <= 32'd0;endendcaseend
//-----{输出到触摸屏显示}end
//----------------------{调用触摸屏模块}end---------------------//
endmodule

tb

`timescale 1ns / 1ps
// Company:
// Engineer:
//
// Create Date:   17:13:38 04/15/2016
// Design Name:   multiply
// Module Name:   F:/new_lab/multiply/tb.v
// Project Name:  multiply
// Target Device:
// Tool versions:
// Description:
//
// Verilog Test Fixture created by ISE for module: multiply
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
module tb;// Inputsreg clk;reg mult_begin;reg [31:0] mult_op1;reg [31:0] mult_op2;// Outputswire [63:0] product;wire mult_end;// Instantiate the Unit Under Test (UUT)multiply uut (.clk(clk), .mult_begin(mult_begin), .mult_op1(mult_op1), .mult_op2(mult_op2), .product(product), .mult_end(mult_end));initial begin// Initialize Inputsclk = 0;mult_begin = 0;mult_op1 = 0;mult_op2 = 0;// Wait 100 ns for global reset to finish#100;mult_begin = 1;mult_op1 = 32'H00001111;mult_op2 = 32'H00001111;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00001111;mult_op2 = 32'H00002222;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00000002;mult_op2 = 32'HFFFFFFFF;#400;mult_begin = 0;#500;mult_begin = 1;mult_op1 = 32'H00000002;mult_op2 = 32'H80000000;#400;mult_begin = 0;// Add stimulus hereendalways #5 clk = ~clk;
endmodule

xdc

set_property PACKAGE_PIN AC19 [get_ports clk]
set_property PACKAGE_PIN H7   [get_ports led_end]
set_property PACKAGE_PIN Y3   [get_ports resetn]
set_property PACKAGE_PIN AC21 [get_ports input_sel]
set_property PACKAGE_PIN AD24 [get_ports sw_begin]set_property IOSTANDARD LVCMOS33 [get_ports clk]
set_property IOSTANDARD LVCMOS33 [get_ports led_end]
set_property IOSTANDARD LVCMOS33 [get_ports resetn]
set_property IOSTANDARD LVCMOS33 [get_ports input_sel]
set_property IOSTANDARD LVCMOS33 [get_ports sw_begin]#lcd
set_property PACKAGE_PIN J25 [get_ports lcd_rst]
set_property PACKAGE_PIN H18 [get_ports lcd_cs]
set_property PACKAGE_PIN K16 [get_ports lcd_rs]
set_property PACKAGE_PIN L8 [get_ports lcd_wr]
set_property PACKAGE_PIN K8 [get_ports lcd_rd]
set_property PACKAGE_PIN J15 [get_ports lcd_bl_ctr]
set_property PACKAGE_PIN H9 [get_ports {lcd_data_io[0]}]
set_property PACKAGE_PIN K17 [get_ports {lcd_data_io[1]}]
set_property PACKAGE_PIN J20 [get_ports {lcd_data_io[2]}]
set_property PACKAGE_PIN M17 [get_ports {lcd_data_io[3]}]
set_property PACKAGE_PIN L17 [get_ports {lcd_data_io[4]}]
set_property PACKAGE_PIN L18 [get_ports {lcd_data_io[5]}]
set_property PACKAGE_PIN L15 [get_ports {lcd_data_io[6]}]
set_property PACKAGE_PIN M15 [get_ports {lcd_data_io[7]}]
set_property PACKAGE_PIN M16 [get_ports {lcd_data_io[8]}]
set_property PACKAGE_PIN L14 [get_ports {lcd_data_io[9]}]
set_property PACKAGE_PIN M14 [get_ports {lcd_data_io[10]}]
set_property PACKAGE_PIN F22 [get_ports {lcd_data_io[11]}]
set_property PACKAGE_PIN G22 [get_ports {lcd_data_io[12]}]
set_property PACKAGE_PIN G21 [get_ports {lcd_data_io[13]}]
set_property PACKAGE_PIN H24 [get_ports {lcd_data_io[14]}]
set_property PACKAGE_PIN J16 [get_ports {lcd_data_io[15]}]
set_property PACKAGE_PIN L19 [get_ports ct_int]
set_property PACKAGE_PIN J24 [get_ports ct_sda]
set_property PACKAGE_PIN H21 [get_ports ct_scl]
set_property PACKAGE_PIN G24 [get_ports ct_rstn]set_property IOSTANDARD LVCMOS33 [get_ports lcd_rst]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_cs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_rs]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_wr]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_rd]
set_property IOSTANDARD LVCMOS33 [get_ports lcd_bl_ctr]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[0]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[1]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[2]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[3]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[4]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[5]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[6]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[7]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[8]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[9]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[10]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[11]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[12]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[13]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[14]}]
set_property IOSTANDARD LVCMOS33 [get_ports {lcd_data_io[15]}]
set_property IOSTANDARD LVCMOS33 [get_ports ct_int]
set_property IOSTANDARD LVCMOS33 [get_ports ct_sda]
set_property IOSTANDARD LVCMOS33 [get_ports ct_scl]
set_property IOSTANDARD LVCMOS33 [get_ports ct_rstn]

计算机组成原理——乘法器相关推荐

  1. 计算机组成原理乘法器实验报告,Booth乘法器实验报告

    计算机组成原理Booth乘法器实验报告及源码 运算器部件实验:Booth乘法器 班级:软件工程 一. 实验目的 理解并掌握乘法器的原理. 二. 实验原理 Booth算法是一种十分有效的计算有符号数乘法 ...

  2. 计算机组成原理乘法器组成图,计算机组成原理阵列乘法器课程设计报告

    <计算机组成原理阵列乘法器课程设计报告>由会员分享,可在线阅读,更多相关<计算机组成原理阵列乘法器课程设计报告(20页珍藏版)>请在人人文库网上搜索. 1.课 程 设 计;.教 ...

  3. 计算机组成原理乘法器实验报告,实验二乘法器实验报告

    计算机组成原理实验报告 计算机组成原理实验报告 姓名 学号 . 班级 . 实验题目 运算器部件实验 乘法器 一.实验目的 掌握乘法器以及booth乘法器的原理 二.实验原理 乘法计算步骤: (1)从右 ...

  4. 计算机组成原理乘法器实验报告,乘法器实验报告

    河北大学,计算机组成原理,实验报告,CPU乘法器 实验报告 实验题目:乘法器 姓名:闫盼蛟 学号:2009432017 一. 实验目的 理解并掌握乘法器的原理 二. 实验原理 1.有符号数乘法--Bo ...

  5. 计算机组成原理带符号的阵列乘法器,计算机组成原理阵列乘法器课程设计报告精选.doc...

    计算机组成原理阵列乘法器课程设计报告精选 编 号: 学 号: XXX 课 程 设 计 教 学 院计算机学院课程名称计算机组成原理题 目阵列乘法器专 业计算机科学与技术班 级2011级计科(X)班姓 名 ...

  6. 计算机组成原理cop乘法器,COP2000实现乘法器和除法器

    东北大学计算机组成原理课程设计,用COP2000实现乘法器和除法器. 计算机组成原理课程设计报告 班级:07计算机 06 班 姓名: 杨佳学 学号: 20073069 完成时间: 2009年12月25 ...

  7. 计算机组成原理5位无符号阵列乘法器

    计算机组成原理5位无符号阵列乘法器 话说我们学校上课是讲的啥啊根本听不懂...是我理解能力不行好吧,只能自己下来再努力上网找资料学习.今天咱就是说来浅浅学习一下5位无符号阵列乘法器. 首先上电路图 很 ...

  8. 计算机组成原理cop乘法器,计算机组成原理课程设计报告COP2000实现乘法器和除法器.doc...

    文档介绍: 计算机组成原理课程设计报告班级:班姓名:学号:完成时间:一.课程设计目的1.在实验机上设计实现机器指令及对应的微指令(微程序)并验证,从而进一步掌握微程序设计控制器的基本方法并了解指令系统 ...

  9. 计算机组成原理的基础知识,计算机组成原理:基础知识部分习题解答(学习笔记)...

    计算机组成原理:基础知识部分习题解答(学习笔记) 1.冯·诺依曼型计算机的主要设计思想是什么?它包括哪些主要组成部分? 答:存储程序并按地址顺序执行,是冯·诺依曼型计算机的主要设计思想.冯·诺依曼型计 ...

最新文章

  1. conda-forge,conda,-c的理解
  2. Jdon框架开发指南
  3. jsp stc_为什么说jsp的本质是servlet?
  4. MySQL复制常用拓扑结构详解
  5. 前端vue项目执行npm install 报错cd() never called()
  6. petshop 4.0的数据持久层
  7. 水瓶与天蝎的八年爱恋(图
  8. 正则表达式(不断更新,欢迎纠错)
  9. 【Pytorch神经网络实战案例】27 MaskR-CNN内置模型实现语义分割
  10. LeetCode每周刷题(2019.7.8-2019.7.14)
  11. iis7网站可用php吗,在IIS7下面添加对PHP网页的支持
  12. Java线程池如何体现自己的用途
  13. 【DSP】win10安装CCS5.5教程及报错解决方法
  14. DOS (Windows)命令详解
  15. LeetCode 1818. 绝对差值和 [java实现]
  16. 杂记之视频监控基础之IPCAM
  17. 前端开发面试题及答案整理
  18. Web开发 | Spring4 - 01.Spring的概述
  19. 蓝桥杯:历年试题PREV-55—小计算器
  20. html css语义化

热门文章

  1. Grafana WorldMap
  2. “寒冬”来了,年薪百万的程序员沦为流浪汉?
  3. 【kubernetes/k8s概念】Kubernetes1.12从零开始(初):课程介绍与官方文档汇总
  4. C语言逗号表达式在for循环语句中的使用
  5. 对称正定矩阵乔里斯基分解法
  6. (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  7. 代写EA(内有稳定赚钱的EA源代码)
  8. 一个经典帖子里的 21 个经典小故事 受益匪浅
  9. GSM模块发PDU格式短信目标手机接收不到,怎么回事?
  10. 四种Linux系统版本号的查看方式