一種在波形顯示器中快速渲染大型模擬波形的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明是一種在波形顯示器中快速渲染顯示波形的方法,適用于快速顯示仿真過程中產(chǎn)生的點(diǎn)數(shù)巨大的模擬波形,所屬的技術(shù)領(lǐng)域是集成電路計(jì)算機(jī)輔助設(shè)計(jì)領(lǐng)域,尤其是涉及大規(guī)模集成電路的仿真領(lǐng)域。
【背景技術(shù)】
[0002]隨著集成電路規(guī)模的急劇增加,電路仿真所產(chǎn)生的波形文件也越來越大。波形顯示器(Viewer)是直接查看波形的工具,它可以通過Zoom (放大或縮小)、Measure (測(cè)量X值、Y值和斜率等)等操作來觀察波形細(xì)節(jié),以驗(yàn)證仿真結(jié)果是否符合要求,是電路設(shè)計(jì)領(lǐng)域必不可少的工具之一。對(duì)于一個(gè)點(diǎn)數(shù)超過千萬的波形,用波形顯示器查看時(shí),不僅讀取數(shù)據(jù)的速度非常重要,渲染顯示的速度也同樣不可忽視。在頻繁進(jìn)行Zoom等操作時(shí),每次都需要重新渲染波形以刷新Viewer,速度的快慢將直接影響用戶體驗(yàn)。因此,在保證波形基本形狀不失真的前提下,對(duì)原始波形進(jìn)行過濾轉(zhuǎn)換,得到點(diǎn)數(shù)很少的新波形,可以極大地提高Viewer刷新的速度,這對(duì)于實(shí)際電路設(shè)計(jì)尤其是電路仿真具有重要意義。
[0003]波形的渲染顯示是Viewer能夠順利進(jìn)行Zoom、Measure等其他操作的前提。目前,在集成電路仿真領(lǐng)域,比較常用的Viewer有:Synopsys公司的Custom WaveView, Cadence公司的WaveScan, Silvaco公司的SmartView。對(duì)于大數(shù)據(jù)波形的快速渲染顯示,不少Viewer都在致力于提升其速度,有的已經(jīng)有了較好的解決方案。因此,提出并實(shí)現(xiàn)一種具有自主知識(shí)產(chǎn)權(quán)的快速渲染方法具有非常重要的意義。
[0004]本發(fā)明的基本原理為:在任何既定像素寬度的屏幕上,每單位像素上只要能得到其縱軸方向的最大值和最小值,就可以繪出整個(gè)波形的基本形狀,而且不會(huì)失真。這種方法得到的特征波形點(diǎn)數(shù)很少,可以大大地提高渲染的速度;而且,它還可以通過設(shè)置點(diǎn)數(shù)閾值,以滿足不同用戶對(duì)時(shí)間和空間的不同需求,因而具有良好的可擴(kuò)展性和實(shí)用性。
【發(fā)明內(nèi)容】
[0005]本發(fā)明針對(duì)大規(guī)模集成電路仿真生成的大型模擬波形,提出了一種在波形顯示器上快速渲染這類波形的方法。在實(shí)際工程應(yīng)用中,以該方法得到的新波形保留了原始波形的基本形狀特征,不會(huì)出現(xiàn)失真現(xiàn)象,而且,由于新波形的點(diǎn)數(shù)較少,大大提高了渲染速度,為Viewer進(jìn)行其他后續(xù)操作提供了極大的便利,增強(qiáng)了 Viewer的實(shí)用性。
[0006]本發(fā)明的主要技術(shù)方案包括以下兩個(gè)部分:
一、基于像素點(diǎn)的波形快速顯示原理
眾所周知,計(jì)算機(jī)顯卡是以像素點(diǎn)為單位來顯示圖形圖像的,對(duì)應(yīng)的屏幕也是由N*M的像素陣列組成的。以分辨率為1024*768為例,可以認(rèn)為屏幕是由橫軸上的1024個(gè)像素點(diǎn)與縱軸上的768個(gè)像素點(diǎn)組成的像素陣列。屏幕上任何圖案的顯示,就是通過分別控制這個(gè)像素陣列上的點(diǎn)的顏色、灰度值等實(shí)現(xiàn)的。
[0007]對(duì)于一個(gè)模擬波形而言,由于其具有連續(xù)性,因此,渲染顯示時(shí)只需要簡單地連接前后相鄰的兩個(gè)點(diǎn)即可得到曲線。計(jì)算機(jī)顯卡和顯示器結(jié)構(gòu)共同決定了屏幕的最大分辨率,所以,對(duì)于一個(gè)軟硬件確定的計(jì)算機(jī)系統(tǒng)而言,其顯示屏上橫軸所能夠顯示的像素點(diǎn)個(gè)數(shù)也是確定的。如圖1所示,由于人眼的分辨能力有限,當(dāng)坐標(biāo)縮放到一定程度后,在像素寬度內(nèi)的所有原始點(diǎn)實(shí)際上就幾乎處于同一條直線上了,因此,只要將該區(qū)域內(nèi)所有點(diǎn)的最大值和最小值求出來,作為區(qū)域兩端的Y值,然后將這兩個(gè)點(diǎn)相連,則這段波形的基本形狀就可以大致勾勒出來,其他的點(diǎn)實(shí)際上都可以忽略。也就是說,當(dāng)原始波形的點(diǎn)數(shù)過多時(shí),沒有必要將所有點(diǎn)都渲染出來,只需要顯示其大致形狀即可。至于具體細(xì)節(jié),可以通過連續(xù)放大等操作來進(jìn)一步查看。
[0008]上述原理表明,基于像素顯示的屏幕,其最大分辨率決定了模擬波形在渲染顯示時(shí)的點(diǎn)數(shù)閾值。簡單地說,點(diǎn)數(shù)閾值只要超過最大分辨率中的水平像素個(gè)數(shù)即可。例如,假設(shè)某屏幕的最大分辨率為1024*768,則其橫軸方向上可顯示的像素個(gè)數(shù)最多為1024個(gè),因此,過濾轉(zhuǎn)換后的新波形,點(diǎn)數(shù)只要大于1024個(gè)就可以把原始波形的基本形狀完整無誤地顯示出來。
[0009]二、大型模擬波形的過濾方法
在第一部分中所述的波形快速顯示原理的基礎(chǔ)上,本發(fā)明設(shè)計(jì)了一種將大型模擬波形進(jìn)行過濾的方法,過濾后的新波形能夠完好地表示原始波形的特征,且點(diǎn)數(shù)很少,可以極大地提高渲染的速度。
[0010]如圖2所示,大型模擬波形的過濾步驟如下:
1.設(shè)置點(diǎn)數(shù)閾值。
[0011]點(diǎn)數(shù)閾值,即波形過濾需要滿足的點(diǎn)數(shù)最小值。該值可以由用戶自己設(shè)置,但必須限制其大于屏幕最大分辨率的水平像素個(gè)數(shù)。原因如下:
I)若閾值小于水平像素個(gè)數(shù),則過濾后的點(diǎn)太少,以至于不能覆蓋水平方向上的所有像素。這種情況下,人的肉眼能夠辨別出來細(xì)小的差異,因此第一部分所述原理的前提條件不成立,很可能會(huì)因?yàn)檫^濾而出現(xiàn)失真現(xiàn)象。
[0012]2)波形點(diǎn)數(shù)若小于水平像素個(gè)數(shù),渲染速度已經(jīng)很快,刷新時(shí)間也非常短,根本沒有必要浪費(fèi)時(shí)間去進(jìn)行過濾。
[0013]所以,當(dāng)波形點(diǎn)數(shù)小于閾值時(shí),將不進(jìn)行過濾,直接渲染原始波形。
[0014]對(duì)于一臺(tái)最大分辨率為1024*768的顯示器屏幕而言,只要滿足閾值N > 1024即可。為了方便計(jì)算,我們可以取整,例如取N = 2000。另外,鑒于目前大部分PC機(jī)所配顯示器的水平像素個(gè)數(shù)都不超過4000,因此,我們也可以取N = 4000。
[0015]2.根據(jù)閾值N,將X軸進(jìn)行等距劃分,計(jì)算出特征波形的所有X值。
[0016]閾值確定之后,接下來就是將原始波形的X軸進(jìn)行等距劃分。例如,原始波形的X軸范圍為O?10s,N = 4000,則將這1s均分為4000份,每份的距離delta_x = 10/4000s=2.5ms。過濾后的特征波形將會(huì)有(4000 + I) = 4001個(gè)點(diǎn),必須提前求出這4001個(gè)點(diǎn)的X坐標(biāo)值,以便后續(xù)計(jì)算等距點(diǎn)所在區(qū)域的Y值。以線性橫坐標(biāo)軸為例,第i個(gè)點(diǎn)的X坐標(biāo)值的計(jì)算公式如式(I)所示:
Xi = X0 + i * delta_x (O〈= i〈 N)(I)
需要特別注意的一點(diǎn)是,這里的“等距”劃分是基于屏幕像素而言的,而不是Viewer坐標(biāo)軸的。因此,不同的坐標(biāo)軸,“等距”的意義并不相同。也就是說,對(duì)于非線性的X坐標(biāo)軸,等距劃分的結(jié)果其實(shí)并不是“等距”的。以1glO坐標(biāo)為例,如圖3所示,這是顯示ac信號(hào)的默認(rèn)坐標(biāo)軸。在這種情況下,“等距”劃分得到的坐標(biāo)值應(yīng)該是經(jīng)過pow(10,X)運(yùn)算后得到的值,所以,每個(gè)等距區(qū)間的范圍是不相等的,第一個(gè)等距區(qū)間映射到實(shí)際的X范圍可能是[1,10],第二個(gè)則可能變?yōu)榱?[10,100],其他區(qū)間以此類推。因此,對(duì)于1glO坐標(biāo)軸,則第i個(gè)點(diǎn)的X坐標(biāo)值的計(jì)算公式如式(2)所示:
Xi = pow (10, (X。+ i * delta_x)) (O〈= i〈 N)(2)
3.掃描原始波形,將其劃分為多個(gè)單調(diào)區(qū)間。
[0017]單調(diào)區(qū)間是指函數(shù)在某一區(qū)間內(nèi)的函數(shù)值Y,隨自變量X增大而增大(或減小)恒成立。如果函數(shù)y=f(x)在某個(gè)區(qū)間是增函數(shù)或減函數(shù),那么就說函數(shù)y=f(x)在這一區(qū)間具有(嚴(yán)格的)單調(diào)性,這一區(qū)間叫做y=f (X)的單調(diào)區(qū)間。
[0018]從單調(diào)區(qū)間的定義可以知道,在單調(diào)區(qū)間內(nèi),所有點(diǎn)的最大值和最小值必然是該區(qū)間兩端的Y值。這樣,就不必要去遍歷整個(gè)單調(diào)區(qū)間,可以節(jié)省大量計(jì)算時(shí)間。
[0019]4.根據(jù)單調(diào)區(qū)間與等距區(qū)間的大小關(guān)系,分別采用不同方法,設(shè)置等距點(diǎn)的Y值。
[0020]I)單調(diào)區(qū)間小于或等于等距區(qū)間的情況。
[0021]這種情況下,需要根據(jù)等距區(qū)間的X軸范圍,找到其包含的所有單調(diào)區(qū)間。由于單調(diào)區(qū)間的兩端必定是最值,因此只需比較兩端的Y值即可,不必再次遍歷。比較后得到一個(gè)最大值和最小值,將它們?cè)O(shè)為這兩個(gè)等距點(diǎn)的Y值。
[0022]2)單調(diào)區(qū)間大于等距區(qū)間的情況。
[0023]求出單調(diào)區(qū)間中各等間距區(qū)域的最大值和最小值,這是過濾方法中最重要的一個(gè)步驟。在每個(gè)單調(diào)區(qū)間里,都包含一定數(shù)目的等距點(diǎn),其數(shù)量取決于單調(diào)區(qū)間的范圍大小。但是,不同單調(diào)區(qū)間所包含的原始點(diǎn)數(shù)目并不一定相同,其稠密程度也可能有差別。當(dāng)波形的點(diǎn)數(shù)達(dá)到千萬級(jí)別時(shí),在一個(gè)等距區(qū)間內(nèi)就有可能包含成千上萬個(gè)原始點(diǎn),也可能只包含數(shù)十個(gè)點(diǎn),這取決于原始波形中點(diǎn)的稠密分布情況。
[0024]對(duì)每個(gè)單調(diào)區(qū)間,求出相鄰兩個(gè)等距點(diǎn)之間所在區(qū)域的最大值和最小值,作