当前位置: 首页 > news >正文

【数字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等。

在这里插入图片描述

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

ram仿真

打开网站链接,搜索并找到下图所示的ram ip核。
在这里插入图片描述
点击下图所示区域,得到例化该IP核的示例代码:
在这里插入图片描述
在这里插入图片描述

编写测试代码如下:

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 beginclk = 1'b0;forever begin#5 clk = ~clk;end
end
//reset and chip enable
initial beginrst_n = 1'b0;cs_n = 1'b1;  #100cs_n = 1'b0;rst_n = 1'b1;
end
//start generate
initial beginstart = 1'b0;#123start = 1'b1;#10start = 1'b0;
end
always@(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_busy <= 1'b0;endelse if(start) beginwr_busy <= 1'b1;endelse if(wr_busy && rw_addr == DEPTH-1) beginwr_busy <= 1'b0;end
end
//wr_n, write enable
always@(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_n <= 1'b1;endelse if(start) beginwr_n <= 1'b0;endelse if(wr_busy) beginif(rw_addr == DEPTH-1) beginwr_n <= 1'b1;endelse beginwr_n <= 1'b0;endend
end
//rw_addr
always@(posedge clk or negedge rst_n) beginif(~rst_n) beginrw_addr <= 0;endelse if(start) beginrw_addr <= 0;endelse if(wr_busy) beginrw_addr <= rw_addr + 1'b1;endelse if(rw_addr!=DEPTH-1) beginrw_addr <= rw_addr + 1'b1;end
end
//data_in
always@(posedge clk or negedge rst_n) beginif(~rst_n) begindata_in <= 0;endelse if(wr_busy) begindata_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 cleanlistfile:find -name "*.v" > filelist.fcom: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+.vsim:./simv -l sim.logverdi: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文件。
仿真结果如下图所示:
在这里插入图片描述

仿真bin2gray

按照仿真ram相同的步骤操作,得到例化该模块的示例代码:
在这里插入图片描述
需要注意的是,在例化该模块时,需要加入+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 beginbin = 8'd0;forever begin#10 bin = $urandom % 256;end
end
initial begin$fsdbDumpfile("top.fsdb");$fsdbDumpvars(0);
end
initial begin#1000$finish;
endDW_bin2gray_inst U
(.inst_b(bin  ),.g_inst(gray )
);
endmodule

makefile文件:

all: listfile com sim verdi cleanlistfile:find -name "*.v" > filelist.fcom: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.logverdi: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文件
仿真结果如下:
在这里插入图片描述

http://www.lryc.cn/news/102154.html

相关文章:

  • 【*1900 图论+枚举思想】CF1328 E
  • AutoSAR系列讲解(实践篇)10.5-通信管理模块
  • 2023.7.30(epoll实现并发服务器)
  • 小研究 - 基于解析树的 Java Web 灰盒模糊测试(一)
  • SpringBoot接手JSP项目--【JSB项目实战】
  • Python模块psycopg2连接postgresql
  • Kotlin基础(八):泛型
  • Java学习笔记——(10)环境变量path配置及其作用
  • 【图像去噪】基于进化算法——自组织迁移算法(SOMA)的图像去噪研究(Matlab代码实现)
  • TMS WEB Core Crack,TMS软件Delphi组件RADical Web
  • PHP使用Redis实战实录4:单例模式和面向过程操作redis的语法
  • 解决:移动端H5的<video>初始化拿不到总时长
  • 百度云上传身份证获取身份信息封装
  • vscode 上cmake 版本过低
  • OS-08-事件驱动:C10M是如何实现的?
  • mysql 主从同步排查和处理 Slave_IO、Slave_SQL
  • 基于解析法和遗传算法相结合的配电网多台分布式电源降损配置(Matlab实现)
  • 07mysql查询语句之子查询
  • 笙默考试管理系统-MyExamTest(22)
  • Windows 不同方式打开的cmd/dos窗口属性配置不同
  • 性能优化-webpack配置gzip
  • RabbitMQ 教程 | 第3章 客户端开发向导
  • 基于深度学习的CCPD车牌检测系统(PyTorch+Pyside6+YOLOv5模型)
  • input元素中的form属性有什么用?
  • 【数据结构篇C++实现】- 特殊的线性表 - 串
  • DevOps系列文章 之 Springboot单元测试
  • 04 linux之C 语言高级编程
  • 深入学习 Redis - Stream、Geospatial、HyperLogLog、Bitmap、Bitfields 类型扩展
  • Windows11+Opencv+Clion编译源码
  • 【机器学习】Cost Function