問題:
請(qǐng)教:testbench的時(shí)鐘周期跟modelsim仿真的時(shí)鐘周期不一致問題。我的tesbench是這樣寫的,`timescale 10 ns/ 1 nsmodule digital_led_test();reg Rsetn;reg clk; wire [7:0] CODE;wire [1:0] L_EN;digital_led i1 ( .CODE(CODE), .L_EN(L_EN), .Rsetn(Rsetn), .clk(clk));initial beginclk=0;Rsetn=0; endinitialbegin$display("\tclk,\tRsetn,\tCODE[7:0],");$monitor("\t%b,\t%b,\t%d",clk,Rsetn,CODE[7:0]);endalways begin#5 clk=!clk; #10 Rsetn=1; end endmodule我的原意是是輸出每5個(gè)周期(5*10ns=50ns)翻轉(zhuǎn)一次,那么一個(gè)時(shí)鐘周期應(yīng)該是100ns。但是modelsim仿真出的clk的波形周期卻和我原意不一樣。下面是用modelsim仿真的波形。
modelsim仿真理論上不太可能出錯(cuò),那么就是我前面的計(jì)算方法有問題,可能是我理解的問題。請(qǐng)各位大神指教我前面的計(jì)算方法哪里出錯(cuò)了,新手,要是問的太低級(jí)還請(qǐng)見諒,不吝賜教!先謝過!
解答:
always
begin#5 clk=!clk; #10 Rsetn=1; endbegin-end是串行塊,串行塊中的語句順序執(zhí)行,執(zhí)行了5+10=15個(gè)周期以后clk的值才會(huì)更新,所以才會(huì)有300ns的clk周期出現(xiàn)。用fork-jion并行塊就沒問題了。fork-jion并行塊是并行執(zhí)行,
例:
begin
regb=rega;
regc=rega;
end
//執(zhí)行結(jié)束rega=regb=regc;
//begin-end串行塊中的每條語句前面的延時(shí)都相當(dāng)于前一條語句執(zhí)行結(jié)束的時(shí)間。當(dāng)?shù)诙䲢l語句執(zhí)行行,regb的值已經(jīng)更新。
fork
regb=rega;
regc=regb
jion
//執(zhí)行結(jié)束regb=rega,regc=regb原值。
//fork-jion并行塊,每條語句前面的延時(shí)都是相對(duì)于該并行塊的起始執(zhí)行時(shí)間,第二條語句執(zhí)行時(shí)regb的值仍然是fork-jion執(zhí)行起始的值。