建设企业网站找谁,网站描述是什么,安家堡网站建设,电子政务网站开发DesignWare介绍
DesignWare是SoC/ASIC设计者最钟爱的设计IP库和验证IP库。它包括一个独立于工艺的、经验证的、可综合的虚拟微架构的元件集合#xff0c;包括逻辑、算术、存储和专用元件系列#xff0c;超过140个模块。DesignWare和 Design Compiler的结合可以极大地改进综合…DesignWare介绍
DesignWare是SoC/ASIC设计者最钟爱的设计IP库和验证IP库。它包括一个独立于工艺的、经验证的、可综合的虚拟微架构的元件集合包括逻辑、算术、存储和专用元件系列超过140个模块。DesignWare和 Design Compiler的结合可以极大地改进综合的结果并缩短设计周期。Synopsys在DesignWare中还融合了更复杂的商业IP无需额外付费目前已有8051微控制器、PCI、PCIX、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 1b0;forever begin#5 clk ~clk;end
end
//reset and chip enable
initial beginrst_n 1b0;cs_n 1b1; #100cs_n 1b0;rst_n 1b1;
end
//start generate
initial beginstart 1b0;#123start 1b1;#10start 1b0;
end
always(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_busy 1b0;endelse if(start) beginwr_busy 1b1;endelse if(wr_busy rw_addr DEPTH-1) beginwr_busy 1b0;end
end
//wr_n, write enable
always(posedge clk or negedge rst_n) beginif(~rst_n) beginwr_n 1b1;endelse if(start) beginwr_n 1b0;endelse if(wr_busy) beginif(rw_addr DEPTH-1) beginwr_n 1b1;endelse beginwr_n 1b0;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 1b1;endelse if(rw_addr!DEPTH-1) beginrw_addr rw_addr 1b1;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 8d3;end
end
assign done (wr_n 1b1 rw_addr DEPTH-1) ? 1b1 : 1b0;
//
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 -timescale1ns/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 8d0;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 )
);
endmodulemakefile文件
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 -timescale1ns/10ps \-f filelist.f -l com.log -kdb -lca -y ${SYNOPSYS}/dw/sim_ver libext.v incdir${SYNOPSYS}/dw/sim_versim:./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选项。这里incdirdir1dir2…用于vcs从指定的目录当中查找源文件中所包含的include文件。 仿真结果如下