VCS-Verilog仿真相关
目录
VCS及VERDI工具环境设置
setenv VERDI_HOME /pub/tools/synopsys/verdi*
setenv NORVAS_HOME ${VERDI_HOME}
setenv VCS_HOME /pub/tools/synopsys/vcs*
setenv PATH ${VERDI_HOME}/bin:$PATH
setenv PATH ${NORVAS_HOME}/bin:$PATH
setenv PATH ${VCS_HOME}/bin:$PATH
VCS编译命令
https://blog.csdn.net/weixin_45270982/article/details/104000164
VCS仿真选项
| 命令 | 含义 |
| ---- | ---- | ---- |
| +nospecify | 屏蔽specify块中的路径延时和时序检查 |
| +notimingcheck | 屏蔽specify块中的时序检查 |
在前仿真时打开这两个选项,曾经遇到过一个BUG是在仿真综合后的网表时,由于没有打开+nospecify,有个寄存器没有打拍成功。
FSDB波形控制相关系统函数
https://blog.csdn.net/zyn1347806/article/details/105554103
(1)$fsdbDumpfile("fsdb_file_name"); 指定fsdb文件名
(2)$fsdbDumpvars(1,nn_system)表示只Dump nn_system这一层的波形,$fsdbDumpvars(0,nn_system)表示只Dump nn_system这一层以及下面所有层的波形;
(3)$fsdbDumpoff()表示关闭波形dump;$fsdbDumpon()表示打开波形dump
初始化memory
logic [15:0] vlrf [0:55];
initial begin
$readmemb(“vlrf.txt”,vlrf);
end
将信号写入文本
以下代码将第1层的特征图按照32个数据为一行写入文件conv1_ch_0_16.txt
integer i;
integer conv1_file;
initial begin
conv1_file=$fopen("./1_feature_sram/conv1_ch_0_16.txt","w");
end
always @(posedge CLK) begin
if(u_nn_system.u_nn_top.u_conv1_ctrl.u_feature_sram_ctrl.conv1_finish) begin
@(posedge CLK);
for(i=0;i<2048;i=i+1) begin
$fwrite(conv1_file,"%0d",$signed(feature_mem[i][3:0]));
if((i+1)%32)==0 $fwrite(conv1_file,"\n");
end
end
end
在initial中调用task
task initial_task;
clk = 1’b0;
reset = 1’b0;
endtask
task reset_task;
@(posedge clk);#0;
reset = 1’b1;
@(posedge clk);#0;
@(posedge clk);#0;
reset = 1’b0;
@(posedge clk);#0;
endtask
initial begin
initial_task();
reset_task();
end
使用force + generate for语句对generate for语句块生成的实例(RAM)进行初始化
logic [2:0] tag_ram_addr;
generate
for(genvar way_idx=0;way_idx<4;way_idx=way_idx+1) begin
tag_ram_addr=0;
for(integer i=0;i<5;i=i+1) begin
force A_u.GEN_TAG_RAM[way_idx].tag_ram_u.addr_i=tag_ram_addr;
end
@(posedge clk_i) #0;
tag_ram_addr = tag_ram_addr + 1;
end
release A_u.GEN_TAG_RAM[way_idx].tag_ram_u.addr_i;
endgenerate