iT邦幫忙

2022 iThome 鐵人賽

DAY 11
0
Software Development

超簡單的 Verilog 入門講解系列 第 11

[Day 11] Verilog E-1 難度丁 P1王點的消血2.5 - always@(事件1 or ....) 3. RESET (非阻隔指定)

  • 分享至 

  • xImage
  •  

非阻隔指定
就是指 具有同時性的關係

輸出信號 <= 輸入信號邏輯組合

回到剛剛的範例



module Test2_always1(reset,A,B,Out1,Out2);

input A , B ,reset ;
output Out1 , Out2;
reg Out1 , Out2;
reg In1 , In2 ;
 
always@( A )
begin
    if (reset)
    begin
        In1 = 0;
        In2 = 0;
        Out1 = 0;
        Out2 = 0;
    end
    else
    begin
        In1 = ~ B;
        Out1 = In1;
        
        In2 <= ~ B;
        Out2 <= In2;
     end
   
end

endmodule

我們可以看到一個 always@( A ) 裡面有一個 reset


    if (reset)
    begin
        In1 = 0;
        In2 = 0;
        Out1 = 0;
        Out2 = 0;
    end

reset =1 進入 reset
Out1 、 Out2 都會是 0

https://ithelp.ithome.com.tw/upload/images/20220924/201358626iqSxT6P70.png


為什麼要reset呢? 因為在 reg 打開之前要有一個初始值
如果沒有那一開始的 In2 會沒有數值,那 Out2 對應到的 In2 是沒有數值。

所以 tb 中 一開始有 reset =1 進入 reset 並在這裡初始化數值


initial 

begin

reset = 1 ;
A_in = 0 ;
B_in = 0 ;


建議如果在使用 always 每次有寫到 reg 就要記得到 rest 初始化



module Test2_always1(reset,A,B,Out1,Out2);

input A , B ,reset ;
output Out1 , Out2;

/////////////////////////////
//寫到 reg 時 馬上去寫 reset
reg Out1 , Out2;
reg In1 , In2 ;

 
always@( A )
begin
    if (reset)
    begin
    /////////////////////////////
    //馬上去 reset 初始化
        In1 = 0;
        In2 = 0;
        Out1 = 0;
        Out2 = 0;
    
    end
    else
    begin


    end
   
end

endmodule


上一篇
[Day 10] Verilog E-1 難度丁 P1王點的消血2 - always@(事件1 or ....) 2. 阻隔指定(=)與非阻隔指定(<=)
下一篇
[Day 12] Verilog E-1 難度丁 P1王點斬殺1 - 時序組合
系列文
超簡單的 Verilog 入門講解30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言