无码av一区二区三区无码,在线观看老湿视频福利,日韩经典三级片,成 人色 网 站 欧美大片在线观看

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

關(guān)于在仿真軟件中計數(shù)器提前計數(shù)的問題

2023-01-18 07:12 作者:明德?lián)P易老師  | 我要投稿

?MDY有一條非常重要的看波形技巧,即“時鐘上升沿前看條件”的技巧,意思就是在時鐘上升沿前,看條件信號,看到什么值就是值。如下圖所示:


?這一條技巧,對于剛學(xué)習(xí)FPGA的人來說,非常之實用。

但是,部分工程師在做仿真時,有時候會出現(xiàn)違反這一原則的奇怪現(xiàn)象。例如下面這個案例。

關(guān)于在仿真軟件中,為什么計數(shù)器的判定會在不滿足加一條件的時候進(jìn)行加一操作(如下圖所示)。計數(shù)器cnt_col的加1條件是din_vld,按照原則,第4個時鐘上升沿的時候,din_vld應(yīng)該為0,計數(shù)器不應(yīng)該加1,但事實上是加1了,這是怎么回事?我們舉另一個例子來說明這個問題。

功能要求如下:復(fù)位后,din_vld 不定時等于1,當(dāng)din_vld出現(xiàn)3個或超過3個周期的高電平脈沖時,將第三個周期時對應(yīng)的din值賦給dout,其他時候dout保持不變。


根據(jù)功能要求,寫出代碼后用modelsim進(jìn)行仿真,效果如下圖:


? ? 然后發(fā)現(xiàn)仿真的波形和我們預(yù)期的波形并不一致?。?/p>

計數(shù)器cnt在din_vld == 0 的時候就已經(jīng)開始計數(shù)了。

查看代碼,計數(shù)器cnt的加一條件是:add_cnt = din_vld == 1 && flag == 0 。

也就是說,信號din_vld在時鐘上升沿處由0變1的時候,仿真軟件把信號din_vld的值取為1了。那么會出現(xiàn)這種情況的原因是什么呢?

這里是軟件仿真,是軟件模擬真實的電路情況。但是,軟件模擬是有缺陷的,無論軟件如何模擬,本質(zhì)上它都是串行執(zhí)行的代碼,是一條一條指令執(zhí)行的。

在仿真文件里,有兩個initial語句,一個是產(chǎn)生時鐘的,一個是產(chǎn)生din_vld的,如下圖。

?按照verilog的語法,這兩個initial是并行執(zhí)行的。但事實上軟件執(zhí)行是有先后的。很有可能先執(zhí)行了din_vld變1的代碼,再執(zhí)行了clk由0變1的代碼,這種情況下,在時鐘的上升沿就會采到din_vld為1,因此就會出現(xiàn)案例中的錯誤。這是與FPGA實際的電路是不符合的,也就是說這個其實是仿真缺陷的問題,而不是設(shè)計問題。

雖然不是設(shè)計問題,但仿真仍然要繼續(xù),我們需要避免這種情況。如何避免呢?

解決上述問題的方法:我們可以在測試文件中給信號加上一個1ns 的延時,這樣兩個initial語句就絕對不會同時執(zhí)行。

代碼如下圖:


用modelsim重新編譯一下再仿真,此時的波形就是功能要求的正確結(jié)果。如下圖:



關(guān)于在仿真軟件中計數(shù)器提前計數(shù)的問題的評論 (共 條)

分享到微博請遵守國家法律
通化市| 岐山县| 尼勒克县| 大同县| 商都县| 吉木乃县| 利津县| 新蔡县| 远安县| 邵武市| 定边县| 玛多县| 绥德县| 江油市| 龙门县| 绥滨县| 阿克陶县| 安庆市| 长海县| 若羌县| 合川市| 宁化县| 阿图什市| 铜陵市| 巴塘县| 长沙县| 新巴尔虎左旗| 襄樊市| 攀枝花市| 兴国县| 耿马| 普安县| 拉孜县| 东乡族自治县| 乐至县| 普洱| 许昌市| 汉中市| 淮南市| 望奎县| 普宁市|