使用后門方式測(cè)量時(shí)鐘頻率的需求來(lái)源更多是SOC驗(yàn)證的場(chǎng)景,由于SOC的規(guī)模較大,一次編譯時(shí)間成本較高,在N個(gè)小時(shí)級(jí)別。如果采用前門方式,比如編寫測(cè)量頻率的module或者interface,一旦有新的測(cè)量需求則就需要TB重新連接時(shí)鐘信號(hào),重新編譯環(huán)境。
此前的一篇文章,提出了一個(gè)問(wèn)題:如何后門準(zhǔn)確地捕獲到信號(hào)地跳變沿?
如何捕獲后門路徑信號(hào)的跳變?
如果無(wú)法精確捕獲到信號(hào)地跳變沿,那么也就無(wú)法"精確地"測(cè)量出時(shí)鐘地頻率。容易想到的辦法,是可以使用如下的方法進(jìn)行測(cè)量:
bitdut_value=1 //step1:找到信號(hào)低電平 while(dut_value)begin hdl_read("xxx",dut_value) #N end //step2:找到高電平,作為測(cè)量的第一個(gè)上升沿時(shí)刻 bitdut_value=0 //找到信號(hào)低電平 while(!dut_value)begin hdl_read("xxx",dut_value) #N end //step3:找到低電平,作為下降沿 ... //step4:找到高電平,作為測(cè)量的第二個(gè)上升沿。記錄此時(shí)的仿真時(shí)間,減去step2的仿真時(shí)間,得到時(shí)鐘周期 ...
上述的代碼需要考慮如下問(wèn)題:
時(shí)鐘頻率,時(shí)鐘頻率的大小決定了兩次后門讀取的間隔,即上述代碼中的#N,這也是后門方式測(cè)不準(zhǔn)的來(lái)源。
timescale,dut信號(hào)的timescale和后門測(cè)量所在的scope的timescale可能并不一致。
那怎么解決測(cè)不準(zhǔn)的問(wèn)題?
第一次意識(shí)到這個(gè)問(wèn)題,作者也曾一度陷入苦思冥想,始終找不到完美的解決辦法。曾經(jīng)也想過(guò)用#1step來(lái)進(jìn)行step級(jí)別的delay,但也由于仿真器的差異、環(huán)境結(jié)構(gòu)的差異,表現(xiàn)不夠穩(wěn)定。雖然已過(guò)去了近一年的時(shí)間,工作也換了新的公司,還好對(duì)此的思考沒(méi)有停止。
最近終于開(kāi)發(fā)出了clock_probe_pkg,一個(gè)可以使用后門方式,精確測(cè)量時(shí)鐘頻率的package。
請(qǐng)看下面的demo:
`timescale1ps/1ps moduletb; importclock_probe_pkg::*; regclk1,clk2,clk3; initialbegin clk1=0; clk2=0; clk3=0; fork foreverbegin#11;clk1=~clk1;end foreverbegin#17;clk2=~clk2;end foreverbegin#19;clk3=~clk3;end join_none end initialbegin realfreq1,freq2,freq3; #100; get_clock_freq("tb.clk1",freq1); get_clock_freq("tb.clk2",freq2); get_clock_freq("tb.clk3",freq3); $display("freq1=%f,freq2=%f,freq3=%f",freq1,freq2,freq3); $finish(); end endmodule
仿真結(jié)果如下:
clock_probe_pkg:getclockhier:tb,2 clock_probe_pkg:getclockscopetimeunit:-12 clock_probe_pkg:@110.000000tb.clk1=0,0 clock_probe_pkg:@121.000000tb.clk1=1,1 clock_probe_pkg:@132.000000tb.clk1=0,2 probeclockfreqdone,freq=45454.545455@0 clock_probe_pkg:getclockhier:tb,2 clock_probe_pkg:getclockscopetimeunit:-12 clock_probe_pkg:@153.000000tb.clk2=1,0 clock_probe_pkg:@170.000000tb.clk2=0,1 clock_probe_pkg:@187.000000tb.clk2=1,2 probeclockfreqdone,freq=29411.764706@0 clock_probe_pkg:getclockhier:tb,2 clock_probe_pkg:getclockscopetimeunit:-12 clock_probe_pkg:@209.000000tb.clk3=1,0 clock_probe_pkg:@228.000000tb.clk3=0,1 clock_probe_pkg:@247.000000tb.clk3=1,2 probeclockfreqdone,freq=26315.789474@0 freq1=45454.545455,freq2=29411.764706,freq3=26315.789474 $finishcalledfromfile"testbench.sv",line26. $finishatsimulationtime266
clock_probe_pkg可以自動(dòng)識(shí)別時(shí)鐘信號(hào)所在scope的timescale,而且僅有一個(gè)接口,方便使用。get_clock_freq:
taskget_clock_freq(stringpath,outputrealx_freq); ... endtask
第一個(gè)參數(shù)為字符串類型的時(shí)鐘信號(hào)的后門路徑,第二個(gè)參數(shù)即為返回的時(shí)鐘頻率,單位為MHz。
clock_probe_pkg也是目前作者能找到的"完美"解決方案。雖然這個(gè)需求非常小眾,可能也不一定能完全滿足需求,可能后續(xù)還會(huì)更好的解決方案,但這個(gè)嘗試的過(guò)程,作者覺(jué)得仍然是有意義的嘗試,因?yàn)椋?/p>
真理存在于尋求過(guò)程之中。
審核編輯:湯梓紅
-
soc
+關(guān)注
關(guān)注
38文章
4239瀏覽量
219801 -
信號(hào)
+關(guān)注
關(guān)注
11文章
2819瀏覽量
77349 -
時(shí)鐘頻率
+關(guān)注
關(guān)注
0文章
50瀏覽量
20481 -
代碼
+關(guān)注
關(guān)注
30文章
4857瀏覽量
69475 -
高電平
+關(guān)注
關(guān)注
6文章
155瀏覽量
21590
原文標(biāo)題:耗時(shí)一年,終于測(cè)準(zhǔn)了時(shí)鐘頻率
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
跳變信號(hào)怎么測(cè)量頻率切換時(shí)間
tc377調(diào)試pwm輸入捕獲,輸入頻率小于10hz時(shí)輸入占空比就會(huì)跳變的原因?
霍爾信號(hào)跳變沿,并且能把捕獲間隔的時(shí)長(zhǎng)用通用定時(shí)器計(jì)數(shù)得到,但是捕獲計(jì)數(shù)怎么差這么多?
ADL5304接通電源時(shí),輸出信號(hào)有跳變,請(qǐng)問(wèn)是什么原因?
AD2S1210位置信號(hào)跳變
什么是輸入捕獲?STM32輸入捕獲
采用AD603對(duì)傳感器接收到的信號(hào)放大時(shí),遇到信號(hào)跳變怎么解決?
SOC時(shí)序分析中的跳變點(diǎn)

基于時(shí)頻投影的跳頻信號(hào)分選研究

基于雙譜頻率估計(jì)的快跳頻捕獲方法
多FPGA解決航天測(cè)控信號(hào)的捕獲問(wèn)題的方案

評(píng)論