【数字IC设计】VCS仿真DesignWare IP

这篇具有很好参考价值的文章主要介绍了【数字IC设计】VCS仿真DesignWare IP。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

DesignWare介绍

DesignWare是SoC/ASIC设计者最钟爱的设计IP库和验证IP库。它包括一个独立于工艺的、经验证的、可综合的虚拟微架构的元件集合,包括逻辑、算术、存储和专用元件系列,超过140个模块。DesignWare和 Design Compiler的结合可以极大地改进综合的结果,并缩短设计周期。Synopsys在DesignWare中还融合了更复杂的商业IP(无需额外付费)目前已有:8051微控制器、PCI、PCI-X、USB2.0、MemoryBIST、AMBA SoC结构仿真、AMBA总线控制器等IP模块。
  DesignWare中还包括一个巨大的仿真模型库,其中包括170,000多种器件的代时序的功能级仿真模型,包括FPGAs (Xilinx, Altera,…), uP, DSP, uC, peripherals, memories, common logic, Memory等。还有总线(Bus-Interface)模型PCI-X, USB2.0, AMBA, Infiniband, Ethernet, IEEE1394等,以及CPU的总线功能仿真模型包括ARM, MIPS, PowerPC等。

【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare

如上图所示,在安装了DC综合工具后,我们可以在$SYNOPSYS/dw/sim_ver路径下找到Design Ware的仿真库文件。
下面以举两个例子,来说明如何在vcs仿真中使用dw ip库。

ram仿真

打开网站链接,搜索并找到下图所示的ram ip核。
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare
点击下图所示区域,得到例化该IP核的示例代码:
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare

编写测试代码如下:

module test;
parameter DATA_WIDTH = 8;
parameter DEPTH = 8;
parameter ADDR_WIDTH = $clog2(DEPTH);
parameter RST_MODE = 0;
//signal define
reg clk;
reg rst_n;
reg cs_n;
reg wr_n;
reg wr_busy;
reg start;
reg [2:0] rw_addr;
reg [DATA_WIDTH-1:0] data_in;
wire [DATA_WIDTH-1:0] data_out;
wire done;
//clk generate
initial begin
  clk = 1'b0;
  forever begin
    #5 clk = ~clk;
  end
end
//reset and chip enable
initial begin
  rst_n = 1'b0;
  cs_n = 1'b1;  
  #100
  cs_n = 1'b0;
  rst_n = 1'b1;
end
//start generate
initial begin
  start = 1'b0;
  #123
  start = 1'b1;
  #10
  start = 1'b0;
end
always@(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    wr_busy <= 1'b0;
  end
  else if(start) begin
    wr_busy <= 1'b1;
  end
  else if(wr_busy && rw_addr == DEPTH-1) begin
    wr_busy <= 1'b0;
  end
end
//wr_n, write enable
always@(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    wr_n <= 1'b1;
  end
  else if(start) begin
    wr_n <= 1'b0;
  end
  else if(wr_busy) begin
    if(rw_addr == DEPTH-1) begin
      wr_n <= 1'b1;
    end
    else begin
      wr_n <= 1'b0;
    end
  end
end
//rw_addr
always@(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    rw_addr <= 0;
  end
  else if(start) begin
    rw_addr <= 0;
  end
  else if(wr_busy) begin
    rw_addr <= rw_addr + 1'b1;
  end
  else if(rw_addr!=DEPTH-1) begin
    rw_addr <= rw_addr + 1'b1;
  end
end
//data_in
always@(posedge clk or negedge rst_n) begin
  if(~rst_n) begin
    data_in <= 0;
  end
  else if(wr_busy) begin
    data_in <= data_in + 8'd3;
  end
end
assign done = (wr_n == 1'b1 && rw_addr == DEPTH-1) ? 1'b1 : 1'b0;
// 
initial begin
  $fsdbDumpfile("ram.fsdb");
  $fsdbDumpvars(0);
end
initial begin
  #1000
  $finish;
end
//ram inst
DW_ram_rw_s_dff_inst U
(.inst_clk(clk),
 .inst_rst_n(rst_n),
 .inst_cs_n(cs_n),
 .inst_wr_n(wr_n),
 .inst_rw_addr(rw_addr),
 .inst_data_in(data_in),
 .data_out_inst(data_out)
);                      
endmodule

编写makefile脚本如下:

all: listfile com sim verdi clean

listfile:
	find -name "*.v" > filelist.f

com:
	vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_access -timescale=1ns/10ps \
	-f filelist.f -l com.log -kdb -lca -y ${SYNOPSYS}/dw/sim_ver +libext+.v

sim:
	./simv -l sim.log


verdi:
	verdi -f filelist.f -ssf *.fsdb -nologo &

clean:
	rm -rf csrc *.log *.key *simv* *.vpd *DVE*
	rm -rf verdiLog *.fsdb *.bak *.conf *.rc *.f

其中,make com加入了选项:

-y ${SYNOPSYS}/dw/sim_ver +libext+.v

这里,-y lib_dir用于指定搜索模块定义的verilog库目录; 在源代码中找不到相应模块或UDP定义的模块时,在定义的目录中查找对应的文件; +libext与-y配合,用来指定查找的文件的后缀,例如+libext+.v表示查找.v文件。
仿真结果如下图所示:
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare

仿真bin2gray

按照仿真ram相同的步骤操作,得到例化该模块的示例代码:
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare
需要注意的是,在例化该模块时,需要加入+incdir+$SYNOPSYS/dw/sim_ver+编译选项,这是因为在使用该IP的时候还需要用到相关的inc文件。
代码:

module test;
parameter DATA_WIDTH = 8;
reg  [DATA_WIDTH-1:0] bin;
wire [DATA_WIDTH-1:0] gray;

initial begin
    bin = 8'd0;
    forever begin
      #10 bin = $urandom % 256;
    end
end
initial begin
  $fsdbDumpfile("top.fsdb");
  $fsdbDumpvars(0);
end
initial begin
  #1000
  $finish;
end

DW_bin2gray_inst U
(
 .inst_b(bin  ),
 .g_inst(gray )
);
endmodule

makefile文件:

all: listfile com sim verdi clean

listfile:
	find -name "*.v" > filelist.f

com:
	vcs -full64 -cpp g++-4.8 -cc gcc-4.8 -LDFLAGS -Wl,--no-as-needed -sverilog -debug_access -timescale=1ns/10ps \
	-f filelist.f -l com.log -kdb -lca -y ${SYNOPSYS}/dw/sim_ver +libext+.v +incdir+${SYNOPSYS}/dw/sim_ver+

sim:
	./simv -l sim.log


verdi:
	verdi -f filelist.f -ssf *.fsdb -nologo &

clean:
	rm -rf csrc *.log *.key *simv* *.vpd *DVE*
	rm -rf verdiLog *.fsdb *.bak *.conf *.rc *.f

可以看到,在仿真该IP的时候,不仅加入了-y ${SYNOPSYS}/dw/sim_ver +libext+.v编译选项,还加入了+incdir+${SYNOPSYS}/dw/sim_ver+选项。这里,+incdir+dir1+dir2+…用于vcs从指定的目录当中查找源文件中所包含的include文件
仿真结果如下:
【数字IC设计】VCS仿真DesignWare IP,数字IC设计,数字IC设计,VCS,DesignWare文章来源地址https://www.toymoban.com/news/detail-619951.html

到了这里,关于【数字IC设计】VCS仿真DesignWare IP的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • IC设计仿真云架构

    对于IC仿真来说,最重要的是要安全、可维护、高性能的的HPC环境环境。 那么云上如何搭建起一套完整的IC仿真云环境呢? 这种架构应该长什么样子? 将所有桌面虚拟机在数据中心进行托管并统一管理;同时用户能够获得完整PC的使用体验。 用户可以通过瘦客户端,或者类似

    2024年02月13日
    浏览(32)
  • 数字IC设计之——低功耗设计

    目录 概述 背景 为什么需要低功耗设计 CMOS IC功耗分析 基本概念 功耗的分类 功耗相关构成 不同层次低功耗设计方法 芯片中的功耗分布以及对应的低功耗方案 低功耗方案 系统算法级的低功耗技术 编码阶段的低功耗技术 门控时钟 Clock Gating 物理实施的低功耗技术 操作数分离

    2023年04月18日
    浏览(79)
  • 面经-2023-中兴-数字IC设计

    专栏推荐: 2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏首页: 2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 专栏内容: 笔试复盘篇 2023秋招过程中整理的笔试题,来源包括我自己求职笔试以及整理其他同学的笔试。包含华为、中兴、联发科、

    2024年02月12日
    浏览(38)
  • 数字IC后端设计如何从零基础快速入门?(内附数字IC后端学习视频)

    数字IC后端工程师主要职责是把数字IC前端工程师写的逻辑功能RTL转变成物理实际连线GDS版图。这个过程的本质是基于一定的时序约束和物理约束将设计的逻辑功能等价转变成物理连接。因为这个GDS最后是要提交给foundary进行芯片加工制作的,光刻机无法识别逻辑功能,它只认

    2024年01月20日
    浏览(43)
  • 模拟IC与数字IC设计该怎么选?哪个岗位薪资高?

    很多同学想要入行IC,但不知道数字和模拟方向怎么选? 如果没有亲身体会过模拟设计,并有发自内心的自信或者兴趣,一般不看好纯小白去学模拟电路设计。 模拟设计想做好,没有数学功底,没有电路分析的功底,很难会有出彩的机会。就连零极点分析都搞不清、基尔霍夫

    2024年02月03日
    浏览(60)
  • 数字IC前端设计流程及详细解释

    数字前端以设计架构为起点,以生成可以布局布线的网表为终点。 使用设计的电路实现想法,主要包括:基本的RTL编程和仿真。前端设计还可以包括 IC系统设计、前仿真波形验证、综合、STA、FM验证。其中 IC系统设计最难掌握,它需要多年的IC设计经验和熟悉那个应用领域,

    2024年02月06日
    浏览(51)
  • 【数字IC设计】Design Compiler入门

    本博客参考自文章链接 本文以全加器为例,演示DC综合的流程。设计文件如下: 创建library文件夹,将工艺库文件放入此文件夹,如下图所示 启动dc,输入 输入 设置目标库 输入 设置链接库 结果如下图所示 输入命令: 输入后显示如下: 然后输入check_design检查设计,如下图所

    2023年04月13日
    浏览(49)
  • 数字IC设计之时序分析基础概念汇总

     1 时钟Clock 理想的时钟模型是一个占空比为50%且周期固定的方波。时钟是FPGA中同步电路逻辑运行的一个基准。理想的时钟信号如下图: 2 时钟抖动Clock Jitter 理想的时钟信号是完美的方波,但是实际的方波是存在一些时钟抖动的。那么什么是时钟抖动呢?时钟抖动,Clock Jitter,

    2024年02月07日
    浏览(46)
  • 数字 IC 设计职位经典笔/面试题(二)

    共100道经典笔试、面试题目 (文末可全领) 三种资源:BLOCK RAM,触发器(FF),查找表(LUT);注意事项: 1:在生成 RAM 等存储单元时,应该首选 BLOCK RAM 资源; 其原因有二: 第一:使用 BLOCK RAM 等资源,可以节约更多的 FF 和 4-LUT 等底层可编程单元。使用BLOCK RAM 可以说是

    2024年02月17日
    浏览(40)
  • 数字IC设计之静态时序分析(STA)

    静态时序分析原理 什么是STA 分析(计算)design是否满足timing约束的要求 DFF(sequential cell—有clk的器件)setup/hold需求 复位/设置信号 信号脉冲宽度 门控时钟信号 计算design是否满足DRC的要求 max_capacitance—节点电容 max_transition—信号爬升时间 max_fanout—负载能力有多少 如上图所

    2024年02月05日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包