吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Verilog設計增加延時的仿真技術

電子設計 ? 來源:csdn ? 作者:bleauchat ? 2020-11-25 15:29 ? 次閱讀

作者:bleauchat

在設計仿真激勵文件時,為了滿足和外部芯片接口的時序要求,經常會用到延時賦值語句,由于不同的延時賦值語句在仿真過程中行為不同,會產生不同的激勵輸出,如果不認真區分不同表達式引起的差異,就可能產生錯誤的激勵,無法保證仿真結果的正確,本文就是區分各種延時賦值語句的差異,并給出比較結果。

1:阻塞式左延時賦值語句

舉例說明如下:

module adder_t1 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
always @(a or b or ci)
#12 {co, sum} = a + b + ci; // 在15ns時a發生變化,啟動該塊,但是等到27ns時才執行后面的語句,所以是最新的結果
endmodule

分析:上面例子是希望在輸入信號變化后12ns再更新輸出結果,假設在15ns時a發生變化,在27ns時,結果將被更新,但是如果在15ns到24ns這一段時間,a,b,ci又發生了變化,在27ns時,結果將按照最新的a,b,ci進行計算并被更新;

如果將程序修改成如下格式,仿真的結果不變:

module adder_t7a (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci)
begin
#12 tmp = a + b + ci; // 在15ns a發生變化時,啟動該always塊,但是12ns后即第27ns時才執行 
 //tmp = a + b + ci tmp才被賦值,因此賦值的是最近的a,b,ci變化的值
{co, sum} = tmp;
end
endmodule

如果將程序做如下修改:

module adder_t7b (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci)
begin
tmp = a + b + ci;  // 在15ns a發生變化時,啟動該always塊,執行該語句,獲得當前tem ,然后就開始執行下一句 #12
#12 {co, sum} = tmp; // 所以tmp的值是15ns的值,再過12ns即27ns時賦值給輸出。因此,中間的變換被忽視
end
//15~27之間執行該語句塊,只有執行完該語句塊之后才是開始執行下一個語句塊
endmodule

仿真的結果如下圖所示:從15ns到27ns之間的變化被忽視;

結論:阻塞式賦值語句是一句一句執行的,一句沒有執行完,下一句絕不會執行。正因為如此,在此例中在延時12個ns的時間里,不作任何處理,tmp值保持不變(2’b10),而且對敏感變量的變化不作反應。不要將延時放在阻塞式賦值語句的左側,這是一種不好的代碼設計方式;

2:阻塞式右延時賦值語句

看下面的例子:

module adder_t6 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
always @(a or b or ci)
{co, sum} = #12 a + b + ci; // 先計算a + b + ci的值,過12ns后賦值為輸出;賦值語句是從右往左執行
endmodule

它的仿真結果同adder_t7b,賦值語句是從右往左執行,信號從15ns到27ns之間的變化被忽視;即 同:

tmp=a+b+ci;
 
#12{co,sum}=tmp;

下面兩個例子的仿真結果和adder_t6相同:

module adder_t11a (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci)
begin
tmp = #12 a + b + ci;
{co, sum} = tmp;
end
endmodule
module adder_t11b (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci)
begin
tmp = a + b + ci;
{co, sum} = #12 tmp;
end
endmodule

結論:不要將延時放在阻塞式賦值語句的右側,這是一種不好的代碼設計方式;

3:非阻塞式左延時賦值語句

看例子:

module adder_t2 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
always @(a or b or ci)
#12 {co, sum} <= a + b + ci;
endmodule

它的仿真結果同adder_t1,在27ns時,結果將按照最新的a,b,ci進行計算并被更新;由于首先要執行#12,然后才能執行非阻塞賦值,所以能對信號進行實時跟蹤!

結論:不要將延時放在非阻塞式賦值語句的左側,這是一種不好的代碼設計方式;

4:非阻塞式右延時賦值語句

看例子:

module adder_t3 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
always @(a or b or ci)
{co, sum} <= #12 a + b + ci;
endmodule

非阻塞賦值,不會阻止下一條語句的執行,輸出結果能隨時跟蹤輸入信號的變化;

結論:使用非阻塞式右延時賦值語句可以,輸出結果能夠跟隨輸入的變化,建議使用;

5:非阻塞式右延時多重賦值語句

看例子:

module adder_t9c (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci or tmp)
begin
tmp <= #12 a + b + ci;
{co, sum} <= tmp;
end
endmodule

非阻塞賦值,不會阻止下一條語句的執行,輸出結果能隨時跟蹤輸入信號的變化;這與下面的例子結果是相同的:

module adder_t9d (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
reg co;
reg [3:0] sum;
reg [4:0] tmp;
always @(a or b or ci or tmp)
begin
tmp <= a + b + ci;
{co, sum} <= #12 tmp;
end
endmodule

6:連續賦值語句

看例子:

module adder_t4 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
assign #12 {co, sum} = a + b + ci;
endmodule
module adder_t5 (co, sum, a, b, ci);
output co;
output [3:0] sum;
input [3:0] a, b;
input ci;
assign {co, sum} = #12 a + b + ci;
endmodule

輸出結果能隨時跟蹤輸入信號的變化;

結論:非阻塞語句和連續賦值語句無論怎么添加延時語句,其輸出都會隨著輸入的變化而跟蹤變化!這里要特別注意阻塞語句的延時添加,一般不在阻塞賦值語句中添加延時!

編輯:hfy


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Verilog
    +關注

    關注

    28

    文章

    1351

    瀏覽量

    110392
收藏 人收藏

    評論

    相關推薦

    基于MATLAB/Simulink的系統仿真技術與應用

    基于MATLAB_Simulink的系統仿真技術與應用. 本書首先介紹了MATLAB語言的程序設計的基本內容,在此基礎上系統介紹了系統仿真所必要的數值計算方法及MATLAB實現
    發表于 06-19 13:15

    實時控制與仿真技術應用

    基于LabVIEW的實時控制與仿真技術應用研究
    發表于 04-21 19:08

    Cadence PSpice仿真技術的優勢有哪些

    Designer提供PCB設計人員的仿真技術是把電路仿真環境與PCB布局布線設計環境完全集成在一起,構成一個完整的統一集成環境。設計師通過集成模擬和事件驅動數字仿真,可以在不犧牲精度的情況下提高
    發表于 07-07 09:47

    ADAS研發與測試的模擬仿真技術

    ADAS高級輔助駕駛的ADAS研發與測試的模擬仿真技術,大家可以看看,文檔介紹的特別豐富
    發表于 09-02 18:06

    仿真技術在汽車電子設計中的應用有哪些?

    什么是SABER軟件仿真技術?汽車電子仿真技術的應用是什么?
    發表于 05-18 06:42

    基于MATLAB Simulink的系統仿真技術與應用 教材

    基于MATLAB Simulink的系統仿真技術與應用 教材   目錄第一章 系統仿真技術與應用
    發表于 04-29 14:51 ?0次下載
    基于MATLAB Simulink的系統<b class='flag-5'>仿真技術</b>與應用 教材

    Cadence PCB設計仿真技術

    Cadence PCB設計仿真技術 Cadence PCB設計仿真技術提供了一個全功能的模擬仿真器,并支持數字元件幫助解決幾乎所有的設計挑戰,從高頻系統到低功耗I
    發表于 04-29 08:41 ?4533次閱讀
    Cadence PCB設計<b class='flag-5'>仿真技術</b>

    CST仿真技術交流

    CST仿真技術交流。
    發表于 03-11 09:46 ?17次下載

    電路設計與仿真技術

    電路設計與仿真技術電子類資料材料,有興趣的同學可以下載學習
    發表于 04-29 18:24 ?33次下載

    模擬仿真技術是什么

    則是在人類認識自然界客觀規律的歷程中一直被有效地使用著。由于計算機技術的發展,仿真技術逐步自成體系,成為繼數學推理、科學實驗之后人類認識自然界客觀規律的第三類基本方法,而且正在發展成為人類認識、改造
    發表于 05-19 17:13 ?1.6w次閱讀

    EE-68: JTAG 仿真技術參考

    EE-68: JTAG 仿真技術參考
    發表于 03-21 02:06 ?2次下載
    EE-68: JTAG <b class='flag-5'>仿真技術</b>參考

    電源仿真技術

    電源仿真技術資料分享。
    發表于 04-19 17:11 ?10次下載

    DDR設計和仿真技術詳解

    DDR2設計和仿真技術詳解。
    發表于 10-24 15:10 ?2次下載

    pcb仿真技術有什么用

    pcb仿真技術有什么用
    的頭像 發表于 11-28 15:22 ?1192次閱讀

    JTAG/MPSD仿真技術參考

    電子發燒友網站提供《JTAG/MPSD仿真技術參考.pdf》資料免費下載
    發表于 12-23 15:45 ?0次下載
    JTAG/MPSD<b class='flag-5'>仿真技術</b>參考
    百家乐网站出售| 澳门百家乐官网网40125| 百家乐官网桌子定制| 百家乐tt娱乐平台| 晓游棋牌官方下载| 永利高百家乐官网怎样开户| 百家乐隐者博客| 真人百家乐最高赌注| 德州扑克学校| 百家乐官网赌场破解方法| 百家乐闲和庄| 盛世国际开户| 真人百家乐官网做假| 百家乐娱乐备用网址| 百家乐网址| 赌片百家乐官网的玩法技巧和规则 | 百家乐官网赌博论谈| 网上百家乐赌博犯法吗| 金都娱乐城真人娱乐| 百家乐官网精神| 百家乐三路法| 运城市| 免费百家乐官网奥| 真人百家乐| 百家乐官网国际娱乐城| 百家乐视频游戏会员| E世博网址| 宝马会百家乐官网的玩法技巧和规则 | 百家乐园云鼎赌场娱乐网规则| 安溪县| 澳门赌百家乐心法| 皇冠投注网站| 来博百家乐游戏| 九州娱乐场| 八卦24山| 百家乐官网透明出千牌靴| 全讯网888| 百家乐官网职业赌徒的解密| 威尼斯人娱乐场有什么玩| 百家乐官网官| 大发888可靠吗|