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

2023-09-18 18:59:57

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

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

问题的讨论

在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

更多推荐

220V转12V芯片-交流45v-265v输入,固定12v输出峰值电流600MA

标题:220V转12V芯片,实现宽电压输入和固定12V输出摘要:本文介绍了一款具备宽电压输入范围(45V-265V)和固定12V输出的220V转12V芯片。该芯片内置了650V高压MOS管,并通过CS电阻调节输出电流,最大输出电流峰值可达600mA。该芯片采用SOP-8封装,具有较小的尺寸和方便的焊接特性。在电子设备中

电工-三极管主要参数(直流、交流、极限)

三极管主要参数(直流、交流、极限)三极管的主要参数分为三种,即直流参数、交流参数和极限参数,下面分别介绍:直流参数·共发射极直流放大倍数β=Ic/Ib·集电极—基极反向截止电流Icbo,Ic=0时,基极和集电极间加规定反向电压时的集电极电流。Icb越小,说明三极管的集电结质量越好。·集电极—发射极反向截止电流Iceo(

webpack常用配置与性能优化插件

webpack是一个流行的前端项目构建工具(打包工具),可以解决当前web开发中所面临的困境。提供了友好的模块化支持,以及代码压缩混淆、处理js兼容问题、性能优化等强大的功能,从而让程序员把工作的重心放到具体的功能实现上,提高开发效率和项目的可维护性。直接代码加注释/***各个webpack版本之间存在一定差异,经常报

ADB底层原理

介绍adb的全称为AndroidDebugBridge,就是起到调试桥的作用。通过adb我们可以在Eclipse/AndroidStudio中方便通过DDMS来调试Android程序,说白了就是debug工具。adb是androidsdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的androi

Sftp服务安全评估

1认识SFTPFTP(SSH文件传输协议)和FTP(文件传输协议)是两种用于文件传输的协议,它们在工作原理、安全性和配置方面有很大的差异。1)工作原理:FTP:FTP使用两个独立的连接(控制连接和数据连接)来传输文件。控制连接用于发送命令和处理身份验证,而数据连接用于传输文件内容。SFTP:SFTP是通过SSH协议进行

安全基础 --- nodejs沙箱逃逸

nodejs沙箱逃逸沙箱绕过原理:沙箱内部找到一个沙箱外部的对象,借助这个对象内的属性即可获得沙箱外的函数,进而绕过沙箱前提:使用vm模块,实现沙箱逃逸环境。(vm模式是nodejs中内置的模块,是nodejs提供给使用者的隔离环境)目的:拿到process模块实现沙箱逃逸,拿到目标(1)Function构造函数实现源

求 2+22+222+2222+...+22..·22(n个2)(精确计算)

目录(1)求2+22+222+2222+...+22..·22(n个2)(精确计算)计算机组成原理与操作系统之间区别乘式还原,有乘法运算如下OOOXOO--------OOOOOOOO-------------OOOOO式中18个O位置上的数字全部是素数(2,3,5或7),请还原这算式(1)求2+22+222+2222

vue学习-02vue入门之组件

删除Vue-cli预设在用户根目录下(C:\Users\你的用户名)这个地址里有一个.vuerc文件,修改或删除配置组件Props(组件之间的数据传递)Prop的大小写(camelCasevskebab-case)不敏感Prop类型:StringNumberBooleanArrayObjectDateFunctionS

方案:AI赋能,森林防火可视化智能监管与风险预警系统解决方案

一、方案背景森林火灾是世界八大自然灾害之一,具有发生面广、突发性强、破坏性大、危险性高、处置扑救特别困难等特点,严重危及人民生命财产和森林资源安全,甚至引发生态灾难。有效预防和及时控制森林火灾是保护国家生态建设成果、推进生态文明建设的重要措施。监管痛点:1)现有的森林防火监测系统落后,以人工地面巡护、瞭望塔高点巡查为主

【群晖NAS】Synology drive套件安装设置与结合内网穿透实现远程访问——“cpolar内网穿透”

文章目录前言1.群晖SynologyDrive套件的安装1.1安装SynologyDrive套件1.2设置SynologyDrive套件1.3局域网内电脑测试和使用2.使用cpolar远程访问内网SynologyDrive2.1Cpolar云端设置2.2Cpolar本地设置2.3测试和使用3.结语前言群晖作为专业的数据

【基础篇】六、基于SpringBoot来整合SSM的案例(下)

文章目录1、前后端调用:axios发送异步请求2、添加功能3、删除功能4、修改功能5、异常消息处理6、分页功能7、分页Bug处理8、条件查询接下来加入前端页面,使用axios发送异步请求调用上篇的接口。调前端代码时,发现还挺有趣,刷新、隐藏、调用、以及一些交互逻辑的代码翻译,等框架学完看看前端的东西。1、前后端调用:a

热文推荐