赞
踩
平台:vivado21018.3,modelsim 10.6c
芯片:xc7k325tffg900-2 (active)
Adder/Subtracter IP可提供LUT和单个DSP48 slice加法/减法实现方案。Adder/Subtracter 模块可实现加法器 (A+B)、减法器 (A–B),以及可通过签名或未签名数据运行的动态可配置加法器/减法器。该功能能够以单个DSP48 slice方式实现,也能够以LUT方式实现。模块可以进行流水线处理。
支持256位数据位宽输入。
端口说明
信号 | 描述 | 详细 |
A[N:0] | Input | 输入A |
B[M:0] | Input | 输入B |
ADD | Input | 控制通过添加器/减法器执行的操作(高=加法,低=减法,选择模式为加减模式有效) |
C_IN | Input | 进位输入 |
C_OUT | Output | 进位输出 |
S[P:0] | Output | 输出结果S |
BYPASS | Input | 旁路控制信号 |
CE | Input | 时钟使能 高有效 |
CLK | Input | 时钟输入 |
SCLR | Input | 同步清除 高有效 |
SINIT | Input | 同步初始化 |
SSET | Input | 同步设置 |
配置界面
配置界面如上图所示
设置两个输入数据的数据位宽,设置计算方式为加法或者减法,设置数据输出位宽。注意数据输出位宽会根据不同输入类型产生不同计算结果。
第二页的配置主要是选型添加一些信号,这里值选泽勒时钟使能。
仿真代码
- `timescale 1ns / 1ps
- //
- // Company:
- // Engineer:
- //
- // Create Date: 2023/04/12 15:45:07
- // Design Name:
- // Module Name: c_addsub_tb
- // Project Name:
- // Target Devices:
- // Tool Versions:
- // Description:
- //
- // Dependencies:
- //
- // Revision:
- // Revision 0.01 - File Created
- // Additional Comments:
- //
- //
-
-
- module c_addsub_tb;
-
- reg [140:0] a;
- reg [ 99:0] b;
- reg clk;
- reg ce;
- reg rst_n;
- wire [140:0] c;
-
-
-
- c_addsub_0 u_c_addsub_0 (
- .A (a ),// input wire [140 : 0] A
- .B (b ),// input wire [99 : 0] B
- .CLK (clk ),// input wire CLK
- .CE (ce ),// input wire CE
- .S (c )// output wire [140 : 0] S
- );
-
- //------------------------------------------------------
- //复位参数
- //------------------------------------------------------
- integer i;
- //设置复位参数
- initial
- begin
- $display("[%t] : reset begin...", $realtime);
- rst_n = 0;
- for( i=0 ; i<100 ; i=i+1)
- begin
- @(posedge clk );
- end
- $display("[%t] : reset stop...", $realtime);
- rst_n = 1;
-
- #1000;
- $finish;
- end
-
-
-
- initial
- begin
- clk = 0;
- rst_n = 0;
- ce = 1;
- end
-
- reg [3:0] cnt ;
- always@(posedge clk )
- begin
- if(rst_n == 1'b0)
- begin
- cnt <= 4'h0;
- end
- else if(cnt == 4'h4)
- cnt <= 4'h0;
- else
- cnt <= cnt + 4'h1;
- end
- always@(posedge clk )
- begin
- if(rst_n == 1'b0)
- begin
- a <= 46'h0;
- b <= 7'h0;
- end
- else if(cnt == 4'h4)
- begin
- a <= a + 46'h1;
- b <= b + 7'h1;
- end
- else
- begin
- a <= a;
- b <= b;
- end
- end
- always#5 clk = ~clk;
- endmodule
仿真结果
仿真tb,可以看到,在设置为延迟4个时钟周期后,计算结果保存在输出端口上。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。