vivado乘法器IP核进行无符号与有符号数相乘问题的验证

news2024/11/25 13:54:55

本文验证乘法器IP核Multiplier进行无符号(unsigned)与有符号数(signed)相乘的正确性,其中也遇到了一些问题,做此记录。

配套工程:https://download.csdn.net/download/weixin_48412658/88354179

文章目录

  • 问题的讨论
  • 验证过程
    • IP核配置
    • 例化乘法器
    • 仿真代码
    • 仿真波形分析与结论
  • 补充:vivado乘法器IP核简单调用

问题的讨论

在IP核手册中提到pg108-mult-gen.pdf>,两端口的类型必须一致。进行验证后发现AB的数据类型不一致时也能够计算出正确的输出值,是否意味着两端口类型可以不一致进行计算啦?

在这里插入图片描述

验证过程

IP核配置

首先配置两个乘法器IP核:

第一个是有符号的相乘。

在这里插入图片描述

第二个是有无符号与有符号的相乘。

在这里插入图片描述

例化乘法器

变量输入类型:

reg signed [15 : 0] A_sig;
reg        [15 : 0] A_unsig;

reg signed [15 : 0] B_sig;		//例化中B始终是有符号类型

//输出
wire signed [31 : 0] P_sig;

wire 		[31 : 0] P_unsig;
wire signed	[31 : 0] P_sig2;	//用于mult_unsigned_signed IP核

设置初始值:

A_sig = 16'b1101_1101_1101_1101;
	A_unsig = 16'b1101_1101_1101_1101;
	B_sig = -50;

例化中前第一个使用的是第一个IP核,第二三个使用的是第二个IP核。

//例化待测设计
mult_signed_signed mult_signed_signedi (
  .CLK(sys_clk), 
  .A(A_sig),     
  .B(B_sig),     
  .P(P_sig)      
);

mult_unsigned_signed mult_unsigned_signed1 (
  .CLK(sys_clk),  
  .A(A_unsig),      
  .B(B_sig),      
  .P(P_unsig)	//将输出赋值给P_unsig      
);

mult_unsigned_signed mult_unsigned_signed2 (
  .CLK(sys_clk),  
  .A(A_unsig),      
  .B(B_sig),      
  .P(P_sig2)   //将输出赋值给P_sig2   
);

仿真代码

`timescale 1ns / 1ps
//
// Module Name: tb_mult
//
module tb_mult();

//输入
reg           sys_clk;
reg signed [15 : 0] A_sig;
reg        [15 : 0] A_unsig;
reg signed [15 : 0] B_sig;

//输出
wire signed [31 : 0] P_sig;

wire 		[31 : 0] P_unsig;
wire signed	[31 : 0] P_sig2;	//用于mult_unsigned_signed IP核
//信号初始化
initial begin
    sys_clk = 1'b1;
	A_sig = 16'b1101_1101_1101_1101;
	A_unsig = 16'b1101_1101_1101_1101;
	B_sig = -50;
end

//生成时钟
always #10 sys_clk = ~sys_clk;
    
initial begin
	#10
	forever begin
		#(100);
			A_sig = A_sig + 1'b1;
			B_sig = B_sig + 1'b1;
		end
end

initial begin
	#10	
	forever begin
		#(100);
			A_unsig = A_unsig + 1'b1;
		end
end
//例化待测设计
mult_signed_signed mult_signed_signedi (
  .CLK(sys_clk), 
  .A(A_sig),     
  .B(B_sig),     
  .P(P_sig)      
);

mult_unsigned_signed mult_unsigned_signed1 (
  .CLK(sys_clk),  
  .A(A_unsig),      
  .B(B_sig),      
  .P(P_unsig)      //将输出赋值给P_unsig
);

mult_unsigned_signed mult_unsigned_signed2 (
  .CLK(sys_clk),  
  .A(A_unsig),      
  .B(B_sig),      
  .P(P_sig2)      //将输出赋值给P_sig2
);

endmodule

仿真波形分析与结论

波形中的进制Radix均根据是sig还是unsig设置成对应的进制。

可以看出:

有符号(signed)与有符号数(signed)相乘,输出赋值给有符号能得到正确输出。

无符号(unsigned)与有符号数(signed)相乘,输出赋值给有符号能得到正确输出。

无符号(unsigned)与有符号数(signed)相乘,输出赋值给无符号得到错误的输出,实质上将P_unsig的进制设置成signed的显示时则和P_sig2相同,表示两种是补码的关系。

通过试验可以验证无符号(unsigned)与有符号数(signed)相乘的乘法器IP核输出的值赋值给有符号数时能够计算正确。

在这里插入图片描述

补充:vivado乘法器IP核简单调用

vivado乘法器IP核简单调用:https://blog.csdn.net/Master_0_/article/details/123694290

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1040518.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业AI视觉检测优势显著,深眸科技为工业自动化发展注入更强动力

随着工业自动化的不断发展,工业机器视觉检测技术日趋成熟,能够对制造生产线上的产品进行识别、定位、检测、测量等功能,使得工业生产更加高效和精准。 同时机器视觉检测也是一种基于图像处理和模式识别的技术,能够通过高清晰度工…

00-MySQL数据库的使用-下

一 多表查询 多表查询简介 笛卡尔乘积 笛卡尔乘积 : 当一个连接条件无效或被遗漏时,其结果是一个笛卡尔乘积 (Cartesian product),其中所有行的组合都被显示。第一个表中的所 有行连接到第二个表中的所有行。一个笛卡尔乘积会产生大量的 行…

麦肯锡:中国生成式AI市场现状和未来发展趋势

本文来自《麦肯锡中国金融业CEO季刊》,版权归麦肯锡所有。该季刊主要围绕生成式AI(以下简称“GenAI”)主题,通过4大章节共8篇文章,全面深入分析了GenAI对各主要行业的影响、价值链投资机会、中国GenAI市场现状和未来趋…

YTM32的LINFlexD实现UART功能详解

文章目录 引言简介原理与机制同UART模式相关的寄存器时钟与波特率数据缓冲区发送过程接收过程 软件参考文献 引言 初看YTM32B1ME的手册时,一眼看上去,竟然没有找到UART模块的章节,心想这车规MCU的产品定义也太激进了,直接把工业和…

阿里云服务器使用教程(从购买到配置再到搭建自己的网站)

阿里云服务器使用教程包括云服务器购买、云服务器配置选择、云服务器开通端口号、搭建网站所需Web环境、安装网站程序、域名解析到云服务器公网IP地址,最后网站上线全流程,阿小云分享阿里云服务器详细使用教程: 目录 阿里云服务器使用教程 …

Python爬虫爬取豆瓣电影短评(爬虫入门,Scrapy框架,Xpath解析网站,jieba分词)

声明:以下内容仅供学习参考,禁止用于任何商业用途 很久之前就想学爬虫了,但是一直没机会,这次终于有机会了 主要参考了《疯狂python讲义》的最后一章 首先安装Scrapy: pip install scrapy 然后创建爬虫项目&#…

广东MES系统实现设备管理的方法与功能

在生产车间中,可以借助MES系统来完成设备管理。下面来看看借助MES系统实现设备管理比较常见的具体方法与功能: 1.在线监控和数据采集:MES系统能够与车间设备相连接,在线实时监控设备的运行状态和运行指标。凭借传感器、物联网产品…

【教程】Ubuntu自动查看有哪些用户名与密码相同的账户,并统一修改密码

转载请注明出处:小锋学长生活大爆炸[xfxuezhagn.cn] 目录 背景说明 开始操作 修改密码 背景说明 有些用户为了图方便或者初始创建用户默认设置等原因,会将密码设置为与用户名相同,但这就使得非常不安全。甚至如果该用户具有sudo权限&#…

力扣26:删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣(LeetCode) 题目: 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 …

virtualbox安装的linux虚拟机安装并启动Tomcat过程(结合idea操作)记录,并使用宿主机访问页面

virtualbox安装的linux虚拟机安装并启动Tomcat过程(结合idea操作)记录,并使用宿主机访问页面 参考教程地址linux版本Tomcat下载地址上传解压 启动TomcatVirtualBox虚拟机本地可访问宿主机尚未可以访问关闭防火墙宿主机可以访问 参考教程地址 …

构建自己的物料解决方案——构建物料库,实现前端设计

01: 数据拦截简化数据获取流程 /** * 响应拦截器: * 服务端返回数据之后,前端 .then 之前被调用 */ service.interceptors.response.use((response) > {const { success, message, data } response.dataif (success) {return data}// TODO&#xff…

顺序读写函数的介绍:fscanf fprintf

目录 函数介绍: fprintf: 将结构体变量s的成员列表内容写入文件中: 文件效果:已经进行了格式化,3.140000是最明显的效果,因为float需要补齐0来补充精度 和printf的对比: 不同之处&#xff…

基础排序算法

插入排序(insertion sort) 插入排序每次循环将一个元素放置在适当的位置。像抓牌一样。手里的排是有序的,新拿一张牌,与手里的牌进行比较将其放在合适的位置。 插入排序要将待排序的数据分成两部分,一部分有序&#…

ddd扬帆

简介 读取了一篇“产品代码都给你看了,可别再说不会DDD”较为清晰了解了:领域驱动设计,整洁架构和事件驱动架构的架构思想落地实践,特做记录读后感,可以直接跳到正文阅读原文 正文 以下正文... 构建自己的软件大厦 …

【C++】C++11——可变参数模板和emplace

可变参数模板的定义方式可变参数模板的传值计算可变参数模板参数个数参数包展开方式递归展开参数包逗号表达式展开参数包 emplace插入 可变参数模板是C11新增的最强大的特性之一,它对参数高度泛化,能够让我们创建可以接受可变参数的函数模板和类模板。 在…

(a)Spring注解式开发,注册组件的@Repository,@Service,@Controller,@Component使用及说明

注解扫描原理 通过反射机制获取注解 Target(value {ElementType.TYPE})// 设置Component注解可以出现的位置,以上代表表示Component注解只能用在类和接口上 Retention(value RetentionPolicy.RUNTIME)// 设置Component注解的保持性策略,以上代表Comp…

社区团购美团和多多买菜小程序购物车

概述 微信小程序购物车列表demo 详细 需求 显示食物名称、价格、数量。 点击相应商品增加按钮,购买数量增加1,点击食物减少按钮,购买数量减一 显示购买总数和总金额 查看当前购买的商品 效果图(数据来自本地模拟) 目录结构 实现过程 主要wxml <view classfoods>…

工具篇 | H2数据库的使用和入门

引言 1.1 H2数据库概述 1.1.1 定义和特点 H2数据库是一款以 Java编写的轻量级关系型数据库。由于其小巧、灵活并且易于集成&#xff0c;H2经常被用作开发和测试环境中的便利数据库解决方案。除此之外&#xff0c;H2也适合作为生产环境中的嵌入式数据库。它不仅支持标准的SQL…

饮料生产线Modbus协议转换网关的应用介绍

在饮料生产线设备数据采集和控制系统中&#xff0c;MODBUS网关是一种非常重要的设备。它可以将不同设备之间的通讯协议转换为统一的MODBUS协议&#xff0c;从而实现数据采集和指令下达。在本文中&#xff0c;我们将介绍如何使用MODBUS网关采集饮料生产线设备数据并下达指令。 在…

知识库搭建保姆级教程,如何从0到1完成知识库搭建

在这个信息爆炸的时代&#xff0c;如何获取、整理和应用知识成为了我们个体价值和企业核心竞争力打造的重要表现&#xff0c;搭建一个高效的知识库可以提升我们企业的竞争力&#xff0c;必要时还能快速切换赛道&#xff0c;开展一个新的领域。 今天我们将结合HelpLook 来与你一…