大家在構(gòu)建測(cè)試激勵(lì)時(shí),經(jīng)常會(huì)遇到需要使某個(gè)信號(hào)強(qiáng)制變成某個(gè)值,此時(shí)我們經(jīng)常會(huì)用到Verilog和SystemVerilog中的force實(shí)現(xiàn)這樣的功能。但是有時(shí)候在對(duì)多位寬的信號(hào)進(jìn)行force時(shí)有時(shí)會(huì)出現(xiàn)編譯錯(cuò)誤,這是為什么呢?本文將對(duì)此類情況進(jìn)行示例說(shuō)明。
【示例】
【仿真結(jié)果】
示例中,通過(guò)三種方式對(duì)sig中的部分位選進(jìn)行了force。通過(guò)force將sig中的第0位force為了1,從顯示信息可以看到sig[0]已經(jīng)被修改;通過(guò)force將sig中的第0位和第1位force為了00,從顯示信息可以看到sig[1:0]已經(jīng)被修改;通過(guò)force將sig整體force為了0111,從顯示信息可以看到sig[1:0]已經(jīng)被修改;
可以看到,我們可以通過(guò)force對(duì)于變量、變量中的某一位或者某一個(gè)片段進(jìn)行改變,那么可能有些人覺得這么一位一位的進(jìn)行force太麻煩了,是否可以使用for循環(huán)對(duì)sig中所有位遍歷進(jìn)行force呢?請(qǐng)看下例。
【示例】
【仿真結(jié)果】
編譯錯(cuò)誤!這是為什么呢?對(duì)比該示例和上一示例,可以發(fā)現(xiàn)當(dāng)信號(hào)的索引為常值時(shí),可以進(jìn)行force,但是當(dāng)索引為變量時(shí),此時(shí)編譯不通過(guò)。
也就是說(shuō)在對(duì)信號(hào)進(jìn)行force的時(shí)候,如果要對(duì)其中的某一位或者一個(gè)片段進(jìn)行force時(shí),其中的索引只能是常數(shù)不能是變量,否則將會(huì)導(dǎo)致便以失敗。
那么如果想實(shí)現(xiàn)通過(guò)變量實(shí)現(xiàn)對(duì)于多位寬信號(hào)中每一位進(jìn)行force還有什么辦法嗎?下面我們通過(guò)示例介紹幾種。
【示例】使用generate結(jié)構(gòu)
【仿真結(jié)果】
示例中,使用generate結(jié)構(gòu)實(shí)現(xiàn)了對(duì)于sig中每一位的遍歷。這其實(shí)借助了generate是在仿真前的析構(gòu)(elaboration)階段完成的特性,即在仿真開始之前,相當(dāng)于已經(jīng)將sig被force的每一位的initial結(jié)構(gòu)都已經(jīng)生成好了,這樣在仿真開始執(zhí)行時(shí)(生成好的initial塊開始被執(zhí)行時(shí)),其中“force sig[i]”中的i都已經(jīng)是確定的值了,因此就可以避免force信號(hào)中某一位時(shí),索引為變量的情況。
除了這種在析構(gòu)(elaboration)階段就生成好語(yǔ)句結(jié)構(gòu)的方式外,還可以想如下方式操作。
【示例】
【仿真結(jié)果】
示例中,實(shí)際上是將要force的信號(hào)每一位都單獨(dú)寫了出來(lái),即保證了被force信號(hào)的索引都是常量,缺點(diǎn)是,如果這個(gè)信號(hào)比較寬,那么寫起來(lái)比較枯燥,沒有上一種使用generate結(jié)構(gòu)方便。但是實(shí)際上兩者之所有都沒有問題,其實(shí)都是保證了被force信號(hào)的索引是個(gè)常值。
所以,如果在實(shí)際使用時(shí),需要對(duì)多位寬信號(hào)的每一位或者某一個(gè)片段進(jìn)行force,那么需要保證被force的那一位或者那一個(gè)片段的索引值在仿真運(yùn)行開始時(shí)是常值。
審核編輯:劉清
-
仿真器
+關(guān)注
關(guān)注
14文章
1019瀏覽量
83939 -
Verilog語(yǔ)言
+關(guān)注
關(guān)注
0文章
113瀏覽量
8309
原文標(biāo)題:如何遍歷force多位寬信號(hào)的每一比特
文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
多位寬數(shù)據(jù)通過(guò)握手方式跨時(shí)鐘域
![<b class='flag-5'>多位</b><b class='flag-5'>寬</b>數(shù)據(jù)通過(guò)握手方式跨時(shí)鐘域](https://file1.elecfans.com/web2/M00/82/7F/wKgaomRVrGmATsWaAAA8awK4jkI851.png)
求教縱線有寬有窄的怎么知道每一條線對(duì)應(yīng)的數(shù)值呢?
同步從一個(gè)時(shí)鐘域到另一個(gè)時(shí)鐘域的多位信號(hào)怎么實(shí)現(xiàn)?
I-Force410無(wú)鐵芯直線電機(jī)
LS1046 SDRAM多位錯(cuò)誤注入怎么處理?
Design of Crimp force Monitor
存儲(chǔ)百倍提升! IBM納米技術(shù)1比特12原子
二叉樹的前序遍歷、中序遍歷、后續(xù)遍歷的非遞歸實(shí)現(xiàn)
螺旋遍歷二維數(shù)組漫畫講解
總結(jié)一下OpenCV遍歷圖像的幾種方法
HashMap遍歷操作為什么不能一邊遍歷一遍刪除呢?
跨時(shí)鐘域電路設(shè)計(jì):多位寬數(shù)據(jù)通過(guò)FIFO跨時(shí)鐘域
![跨時(shí)鐘域電路設(shè)計(jì):<b class='flag-5'>多位</b><b class='flag-5'>寬</b>數(shù)據(jù)通過(guò)FIFO跨時(shí)鐘域](https://file1.elecfans.com/web2/M00/82/AB/wKgZomRchQSAERvuAAA33elZgCk655.png)
評(píng)論