Xilinx Vivado复数乘法器Complex Multiplier IP核调用及其仿真

本文详细解析ComplexMultiplierIP核的使用方法,重点介绍输出数据截位原理,并通过三种不同的仿真示例阐述如何正确配置IP核及进行数据处理。

 Complex Multiplier IP核的使用,尤其是输出数据的截位到底怎么弄,我感觉官方文档PG104写的不清楚。我个人在网上也没找到好的讲解文章,就自己琢磨了下,然后写成文档记录在此,方便将来也有疑问的同学。

目录

一、如下是我的仿真代码:

二、testbench中的IP设置如下: 

三、几个关键点的理解如下:

1、当IP输出位宽为默认的最大值25时,此时IP没有截位。如仿真例子中第一种方法:

2、当IP输出位宽设置为20时,此时IP相对于最大值25就截掉了5位。如仿真例子中第二种方法:

3、如上第2点使用同一个IP设置:IP输出位宽设置为20时,此时IP相对于最大值25就截掉了5位。但修改输入数据的使用方法,如仿真例子中第三种方法:

4、modelsim仿真结果如下所示,可以看到仿真结果是正确的。


一、如下是我的仿真代码:

/*-------------------------------------------------------------------------------------------------------------------
    Author:  Zheng Wei
    Date:    2022-10-10
    Version: 1.0
    Description: It is a tb_cmpy test.
-------------------------------------------------------------------------------------------------------------------*/

`timescale 1ns / 1ps

module tb_cmpy;
                                                
    reg                 i_sys_clk   ; 
    reg                 i_sys_rst   ;
                                     
    reg                 din_ena     ;    
    reg     [9 :0]      din_re0     ;
    reg     [9 :0]      din_im0     ;
    reg     [9 :0]      din_re1     ;
    reg     [9 :0]      din_im1     ;
                                                          
                                                          
    //  clock generate module
    parameter  period = 10;           // 100MHz
    initial begin
        i_sys_clk = 1'b0;
        forever     #(period/2)  i_sys_clk = ~i_sys_clk;
    end
                                                                         
	//-------------------------------------------------------------------	
	
	//  system initialization
	task task_sysinit;
		begin
            			
		end
	endtask
	
	//  system reset
	task task_reset;
        begin
            i_sys_rst = 1'b1;
            repeat(2)  @(negedge i_sys_clk);
            i_sys_rst = 1'b0;
        end
    endtask                                                      
                                                          
                                                          
                                                          
    initial begin
        task_sysinit;
	    task_reset  ;
                                  
        repeat(10)  @(posedge i_sys_clk);
                                  
        // 10bit: 1 sign bit, 1 integer bit, 8 fraction bit
        // case1: x0 = 0.5 + j; x1 = 1 - 0.5j
        // result: x0 * x1 = 1 + 0.75j, 1 sign bit, 1 integer bit, 8 fraction bit
        din_ena = 1;
        din_re0 = 10'b00_1000_0000;
        din_im0 = 10'b01_0000_0000;
        din_re1 = 10'b01_0000_0000;
        din_im1 = 10'b11_1000_0000;
                                      
        @(posedge i_sys_clk); 
        din_ena = 0;
                                      
        repeat(20) @(posedge i_sys_clk);                               
                                                           
        // 10bit: 1 sign bit, 1 integer bit, 8 fraction bit
        // case2: x0 = 0.5 - j; x1 = 1 - 0.75j
        // result: x0 * x1 = -0.25 - 1.375j, 1 sign bit, 1 integer bit, 8 fraction bit
        din_ena = 1;
        din_re0 = 10'b00_1000_0000;
        din_im0 = 10'b11_0000_0000;
        din_re1 = 10'b01_0000_0000;
        din_im1 = 10'b11_0100_0000;
                                         
        @(posedge i_sys_clk); 
        din_ena = 0;                                 
                                         
        repeat(500) @(posedge i_sys_clk);
		                                  
		$stop;                          
    end                                                                                           
                                                                                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

jjzw1990

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

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

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

打赏作者

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

抵扣说明:

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

余额充值