1 VCS+Verdi聯合仿真

部分轉自(https://blog.csdn.net/qq_40829605/article/details/85384233

VCS+Verdi 聯合仿真

1. 開發(fā)文件夾結構

  1. 二分頻模塊
    half.v
  2. tb
    testbench.v
  3. 計數器
    counter.v
  4. 生成filelist
find -name "*.v" > file.list

–file.list

3. 仿真方式

vcs+verdi

vcs -full64 -f file.list -fsdb -debug_all -l test.log
./simv
verdi -f file.list -ssf test.fsdb

其他常用VCS命令:

-cm line|cond|fsm|tgl|obc|path  設定coverage的方式
+define+macro=value+      預編譯宏定義
-f filename             RTL文件列表
+incdir+directory+         添加include 文件夾
-I                 進入交互界面
-l                 logfile文件名
-P pli.tab              定義PLI的列表(Tab)文件
+v2k                使用推薦的標準
-y  [path] +libext+.v          定義verilog的庫
-notice               顯示詳盡的診斷信息
-o                  指定輸出的可執(zhí)行文件的名字,缺省是simv
+ nospecify            不對SPECIFY 模塊進行時序檢查和路徑延時計算
+ notimingcheck           不進行時序檢查烹笔;但是還是把path延時加入仿真中
-R                                                                     跑完仿真直接運行 ./simv

2. 文件內容

  1. 二分頻模塊
    half.v
module clk_half(
    clk_in
    ,rst
    ,clk_out
    );
input clk_in;
input rst;
output reg clk_out;

always @(posedge clk_in or posedge rst) begin
    if (rst) begin
        // reset
        clk_out <= 0;
    end
    else begin
        clk_out <= !clk_out;
    end
end
endmodule

  1. tb
    testbench.v
module counter_testbench () ; 
wire [3:0] out; 
reg clk; 
reg reset; 

counter u0 (
    .out (out[3:0]), 
    .reset (reset), 
    .clk (clk)
    );

initial begin 
    clk = 1'b0;
    forever #10 clk = ~clk;
    end

initial begin 
    reset = 1'b0; 
    #4 reset = 1'b1;
    #4 reset = 1'b0;
end

//initial begin
//    $dumpfile("counter.vad");
//    $dumpvars(0,u0);
//end
//`ifdef  DUMP_FSDB
    initial begin
        $fsdbDumpfile("test.fsdb");
        $fsdbDumpvars;
    end
//`endif

initial #1000 $finish;
endmodule

  1. 計數器
    counter.v
module counter ( out, clk, reset ) ; 
input clk, reset; 
output [3:0] out; 
reg [3:0] out; 

always @(posedge clk or posedge reset) begin
    if (reset) begin
        // reset
        out <= 4'b0;
    end
    else begin
        out <= out + 1'b1;
    end
end

wire clk_out;
clk_half u0(
    .clk_in(clk),
    .rst(reset),
    .clk_out(clk_out)
    );

endmodule

  1. Makefile 文件用于編寫vcs船侧、verdi蜘欲、clean等命令
    –Makefile
    下面內容僅供測試。
    我的Makefile內容游昼,可根據需要自由更改。
vcs:
    vcs \
    -full64 \ #vcs以64位運行
    -f filelist.f \ #如不使用-f參數宗挥,可以替換成每個文件的路徑靶壮。filelist.f也就是將所有的需要仿真文件集合维费。但仿真文件一定要放在第一個位置
    -debug_all \    #不加此參數果元, 在生成fsdb波形文件時可能會出錯。
    +define+DUMP_FSDB \ #定義宏犀盟,也可在仿真文件中添加而晒,用于生成fsdb波形文件
    -P /home/chenqw/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/novas.tab \   #用于生成fsdb波形文件,修改成自己的路徑
    /home/chenqw/synopsys/verdi_2016.06-1/share/PLI/VCS/LINUXAMD64/pli.a \  #用于生成fsdb波形文件阅畴,修改成自己的路徑
    | tee vcs.log   #輸出仿真信息倡怎,并保存到vcs.log文件
    ./simv      #最終生成fsdb 文件。

verdi:
    verdi \
    +v2k \
    -sverilog \
    -f filist.f \
    -ssf test.fsdb  &   #仿真文件產生的波形文件

clean:
    rm -rf `ls | grep -v "Makefile"|grep -v "filelist.f" | grep -v "\.v"`   #清除仿真過程文件


clean_all:
    rm -rf `ls | grep -v "Makefile"|grep -v "filelist.f"`       #清除仿真過程文件和設計文件.v

其他的功能

1 ucli debug

用于debug 使用贱枣,感覺并不常用

2 $monitor

用于打印仿真相關信息监署,非常實用。

initial
if (!$test$plusargs("monitoroff"))
    $monitor ($time, "  clk: %h, reset : %h, out : %d", clk,reset,out);

3 $test$plusargs

1 `ifdef 也能實現類似的功能, 但是一旦設置了纽哥,會在整個仿真過程中一直生效钠乏,想取消只能重新編譯,比較耗費時間春塌。

`ifdef  DUMP_FSDB
    initial begin
        $fsdbDumpfile("test.fsdb");
        $fsdbDumpvars;
    end
`endif

2 $test$plusargs則可可以隨時改變:

initial
if (!$test$plusargs("monitoroff"))
    $monitor ($time, "  clk: %h, reset : %h, out : %d", clk,reset,out);
./simv +monitoroff  ###關掉monitor
./simv                         ###monitor生效

3 $value$plusargs(這個我還沒有用過晓避,用來傳遞參數數值)
參考[https://blog.csdn.net/limanjihe/article/details/52325930]
$value$plusargs可以講運行命令(run-options)中的參數值傳遞給指定的信號或者字符,其語法格式如下:

Integer=$value$plusargs(“string”,signalname);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末只壳,一起剝皮案震驚了整個濱河市俏拱,隨后出現的幾起案子,更是在濱河造成了極大的恐慌吼句,老刑警劉巖锅必,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異惕艳,居然都是意外死亡搞隐,警方通過查閱死者的電腦和手機分蓖,發(fā)現死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尔许,“玉大人,你說我怎么就攤上這事终娃∥独龋” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵棠耕,是天一觀的道長余佛。 經常有香客問我,道長窍荧,這世上最難降的妖魔是什么辉巡? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮蕊退,結果婚禮上郊楣,老公的妹妹穿的比我還像新娘。我一直安慰自己瓤荔,他們只是感情好净蚤,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著输硝,像睡著了一般今瀑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上点把,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天橘荠,我揣著相機與錄音,去河邊找鬼郎逃。 笑死哥童,一個胖子當著我的面吹牛,可吹牛的內容都是我干的褒翰。 我是一名探鬼主播如蚜,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼影暴!你這毒婦竟也來了错邦?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤型宙,失蹤者是張志新(化名)和其女友劉穎撬呢,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體妆兑,經...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡魂拦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年毛仪,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片芯勘。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡箱靴,死狀恐怖,靈堂內的尸體忽然破棺而出荷愕,到底是詐尸還是另有隱情衡怀,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布安疗,位于F島的核電站抛杨,受9級特大地震影響,放射性物質發(fā)生泄漏荐类。R本人自食惡果不足惜怖现,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望玉罐。 院中可真熱鬧屈嗤,春花似錦、人聲如沸吊输。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽璧亚。三九已至讨韭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間癣蟋,已是汗流浹背透硝。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留疯搅,地道東北人濒生。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像幔欧,于是被迫代替她去往敵國和親罪治。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容