首页 > 其他分享 >DesignWareBuildingBlock IP的仿真与综合

DesignWareBuildingBlock IP的仿真与综合

时间:2023-09-25 22:55:46浏览次数:45  
标签:仿真 set DesignWareBuildingBlock IP sig rnd width inst dw

感谢一下同学的协助,跑通了一个case。

IP核调用 dw_fp_mac.sv

module dw_fp_mac( inst_a, inst_b, inst_c, inst_rnd, z_inst, status_inst );
parameter inst_sig_width = 23;
parameter inst_exp_width = 8;
parameter inst_ieee_compliance = 0;
input [inst_sig_width+inst_exp_width : 0] inst_a;
input [inst_sig_width+inst_exp_width : 0] inst_b;
input [inst_sig_width+inst_exp_width : 0] inst_c;
input [2 : 0] inst_rnd;
output [inst_sig_width+inst_exp_width : 0] z_inst;
output [7 : 0] status_inst;
// Instance of DW_fp_mac
DW_fp_mac #(inst_sig_width, inst_exp_width, inst_ieee_compliance) U1 (
.a(inst_a),
.b(inst_b),
.c(inst_c),
.rnd(inst_rnd),
.z(z_inst),
.status(status_inst) );
endmodule

需要在makefile里添加路径

SYNOPSYS = /home/synopsys/syn/O-2018.06-SP1
#start vcs compile
vcs_com:
cd ../work/vcs && vcs -sverilog -full64 +v2k -debug_pp -timescale=${TIMESCALE} -
cpp g++ -cc gcc -LDFLAGS -LDFLAGS -Wl,--no-as-needed -CFLAGS -fPIE -fsdb -f
../../prj/filelist.f -o ${OUTPUT} -l compile.log -y ${SYNOPSYS}/dw/sim_ver
+libext+.v +incdir+{SYNOPSYS}/dw/sim_ver+

写了一个简单的tb

`timescale 1ps/1ps
module tb_dw_fp_mac;
// Parameters for testbench
parameter inst_sig_width = 23;
parameter inst_exp_width = 8;
parameter inst_ieee_compliance = 0;
// Inputs and Outputs
logic [inst_sig_width+inst_exp_width : 0] inst_a;
logic [inst_sig_width+inst_exp_width : 0] inst_b;
logic [inst_sig_width+inst_exp_width : 0] inst_c;
logic [2 : 0] inst_rnd;
wire [inst_sig_width+inst_exp_width : 0] z_inst;
wire [7 : 0] status_inst;
// Instantiate DW_fp_mac_inst
dw_fp_mac UUT (
.inst_a(inst_a),
.inst_b(inst_b),
.inst_c(inst_c),
.inst_rnd(inst_rnd),
.z_inst(z_inst),
.status_inst(status_inst)
);
task dump_output();
$dumpfile("out.vcd");
$dumpvars(0, tb_dw_fp_mac);
$fsdbDumpfile("tb_dw_fp_mac.fsdb"); //指定生成的的fsdb
$fsdbDumpvars("+all");//$fsdbDumpvars(0,tb_mesh);
 //0表示生成u_rec_intra_top模
块及以下所有的仿真数据
$vcdpluson;
 //下面这两个是保存所有仿真数据
$vcdplusmemon;
endtask
// Clock generation
logic clk = 0;
always #5 clk = ~clk;
// Reset generation
logic rst = 0;
initial begin
rst = 1;
#10 rst = 0;
end
// Test cases
initial begin
dump_output();
// Test case 1: Multiplication
inst_a = 32'h3F800000; // 1.0
inst_b = 32'h40000000; // 2.0
inst_c = 32'h3F000000; // 0.5
inst_rnd = 3'b000;
#20;
inst_a = 32'h40A9999A; // 5.3
inst_b = 32'h42C75EB8; // 99.685
inst_c = 32'h455C81FA; // 3528.123456
inst_rnd = 3'b000;
#20;
// Add more test cases here...
// Finish simulation
$finish;
end
a*b+c = 7FFFFFFF
 (4,056.453956)
// Monitor for displaying results
always_ff @(posedge clk) begin
$display("inst_a = %h, inst_b = %h, inst_c = %h, inst_rnd = %b, z_inst = %h,
status_inst = %h",
inst_a, inst_b, inst_c, inst_rnd, z_inst, status_inst);
end
endmodule

仿真结果

image

综合脚本:

set design_name "dw_fp_mac"
set stdcel_libs "
../../lib/logic/slow.db
"
set target_library "$stdcel_libs"
#set synthetic_library "dw_foundation.sldb"
#set link_library
 "* $target_library dw_foundation.sldb"
set synthetic_library [list dw_foundation.sldb]
dw_foundation.sldb添加到link中
set link_library [concat $target_library $synthetic_library]
set search_path [concat $search_path [list \
[format “%s%s” $synopsys_root “/dw/sim_ver”]]]
set synlib_wait_for_design_license [list “DesignWare”]
3 //将
sh mkdir -p ./reports
sh mkdir -p ./outputs
set report_path "./reports"
set output_path "./outputs"
set_svf $output_path/${design_name}.svf

碰到的一个问题是最后吐出来的门级网表中没有IP的门级描述。

image

这样肯定是无法用于后端的。之前综合时使用的是compile_ultra命令,查阅DWBB的user_guide后发现:

image

于是在综合部分修改综合命令为compile:

这样就产生了有门级描述的最终网表:

image

标签:仿真,set,DesignWareBuildingBlock,IP,sig,rnd,width,inst,dw
From: https://www.cnblogs.com/sasasatori/p/17729070.html

相关文章

  • 基于图像形态学处理的目标几何形状检测算法matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      目标几何形状检测是计算机视觉领域中的重要任务之一,旨在从图像中自动识别和定位不同的几何形状,例如矩形、圆形、三角形等。这些形状检测在许多领域中都具有广泛的应用,如工业自动化......
  • 无涯教程-JavaScript - STDEV.P函数
    描述STDEV.P函数根据作为参数给出的总体(忽略逻辑值和文本)来计算标准差。语法STDEV.P(number1,[number2]...)争论Argument描述Required/OptionalNumber1Thefirstnumberargumentcorrespondingtoapopulation.RequiredNumber2...编号参数2到254对应于总体......
  • 基于Vgg16和Vgg19深度学习网络的步态识别系统matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本MATLAB2022A 3.算法理论概述       步态识别作为生物特征识别领域的一个重要分支,在人体运动分析、身份验证、健康监测等方面具有广泛的应用前景。步态能量图(GaitEnergyImage,简称GEI)是一种有效的步态表示方法,通过......
  • Linux shell script if condition control flow methods All In One
    LinuxshellscriptifconditioncontrolflowmethodsAllInOneif...then...fi/if...then...else..fi/if...then...elif...then...fi#!/usr/bin/envbashifbugthenecho"bug✅"elseecho"bug❌"fiifpwdthenecho"pwd......
  • 想学热仿真,如何开始?Icepak和FLOTHERM散热仿真软件哪个好?文末附本人总结超全热仿真资料
    在现代科技的高速发展中,热设计与散热仿真成为了许多工程师日常工作中必不可少的一项任务。在面对愈发复杂的产品和系统结构时,如何确保散热效果的高效与可靠性,成为了每个工程师关注的焦点。本文将介绍一些热仿真学习方法,并深入探讨AnsysIcepak和FLOTHERM两款热仿真软件的特点和应用......
  • 无涯教程-JavaScript - RSQ函数
    描述RSQ函数通过known_y和known_x中的数据点返回皮尔逊乘积矩相关系数的平方。语法RSQ(known_y's,known_x's)争论Argument描述Required/OptionalKnown_y'sAnarrayorrangeofdatapoints.RequiredKnown_x'sAnarrayorrangeofdatapoints.RequiredNotes......
  • eclipse中左侧的菜单栏没了怎么办?
    1.打开eclipse2.在上面一行的菜单栏中找到Window,打开 3.找到showview,展开  4.找到PakageExplorer,点开即可还原左侧菜单栏 ......
  • 修改虚拟机的ip地址步骤
    1.首先登录虚拟机,并进入如下界面,查询出linux的IP地址 2.输入vi/etc/sysconfig/network-scripts/ifcfg-ens33(注意:我用的是SentOS7的镜像)按键i进入编辑模式编辑完成后按Esc退出编辑状态 输入命令::wq退出保存 3.保存后重启网关 4.验证是否可以连接外部网络 文章......
  • 使用JavaScript实现无限滚动的方法
    前言在网页设计中,无限滚动是一种常见的交互方式,用户可持续地加载更多内容而无需刷新页面,提高用户体验。本文将介绍如何运用JavaScript实现无限滚动的效果,使网页能够自动加载更多数据,减轻用户加载新页的负担,为用户提供更好的访问体验。原理理解无限滚动的原理无限滚动的原理是当......
  • JavaScript——递归
    //递归:找到所有节点,并在每个节点上添加属性recursionMethod(data);constrecursionMethod=(array:any)=>{leti;for(iinarray){letarr=array[i];//是否存在children,存在则添加一个value属性,并赋值id//然后继续递归,查找arr.chi......