iT邦幫忙

2022 iThome 鐵人賽

DAY 9
0
Software Development

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

[Day 09] Verilog E-1 難度丁 P1王點的消血1 - always@(事件1 or ....) 1. 簡單的說明

  • 分享至 

  • xImage
  •  

我覺得到 always 就可以開始寫一些有趣的事情了

一樣我們先從簡單的開始說起

always的用法
https://ithelp.ithome.com.tw/upload/images/20220922/20135862FGSRTIDhrS.png

舉個例子


always@( 事件1 )
begin
行為描述 1
End


只要事件1 發生 那就會進去 行為描述 1

always 常見的:

always@(A): A 的信號有改變就觸發
always@(A or B): A 或 B 的信號有改變就觸發
always@(Clk): Clk 時脈信號有改變就觸發

always@(Posedge Clk): Clk 時脈信號 上緣 觸發
always@(negedge Clk): Clk 時脈信號 上緣 觸發
( Posedge 就很簡單單 Pos edge 正 邊緣 )
( negedge 就很簡單單 neg edge 負 邊緣 )


來個簡單的程式看看,這是我隨便寫的 寫錯記得跟我講


module Test_always1(A,B,Out1,Out2);

input A , B ;
output Out1;
output Out2;
reg Out2;
 
xor(Out1 , A , B) ;

always@( A )
begin
if(Out1 == 1)
    begin
        Out2 = 1 ;
    end
else
   begin
       Out2 = 0 ;
   end

end

endmodule

簡單思考一下這程式是甚麼,我覺得 verlog 最重要的是學會畫圖,所以我們來畫一下

輸入了一個 A、B

A跟B 接到一個 xor 輸出 Out1
https://ithelp.ithome.com.tw/upload/images/20220922/20135862ZD0lrhcqu5.png

有一個暫存器,如果 A 有打開
https://ithelp.ithome.com.tw/upload/images/20220922/201358622pMxRaRVMk.png

如果 A 有打開,那就會輸出 Out2
https://ithelp.ithome.com.tw/upload/images/20220922/20135862Sh7t2RpRFP.png

大概長這樣吧

簡單來講

Out1 就是 A B 的 Xor

如果 A 有改變
Out2 = Out1

如果 A 沒有改變
Out1 維持一樣

再來就是 tb


module tb1();

reg A_in , B_in;
wire out_o1 ;
wire out_o2;

Test_always1 test(
.A(A_in),
.B(B_in),
.Out1(out_o1),
.Out2(out_o2)
);

initial 

begin

A_in = 0 ;
B_in = 0 ;
# 100;

A_in = 0 ;
B_in = 1 ;
# 100;

A_in = 1 ;
B_in = 0 ;
# 100;

A_in = 1 ;
B_in = 1 ;
# 100;

A_in = 0 ;
B_in = 0 ;
# 100;

A_in = 1 ;
B_in = 0 ;
# 100;

A_in = 0 ;
B_in = 1 ;
# 100;

A_in = 1 ;
B_in = 1 ;
# 100;

end



endmodule

https://ithelp.ithome.com.tw/upload/images/20220922/20135862cBPTxNwRDC.png

我們來分析一下吧

https://ithelp.ithome.com.tw/upload/images/20220922/20135862wyvYPwqOew.png

https://ithelp.ithome.com.tw/upload/images/20220922/20135862JvGUKcnynU.png

https://ithelp.ithome.com.tw/upload/images/20220922/20135862tyOWLEP0G1.png

https://ithelp.ithome.com.tw/upload/images/20220922/20135862UdoRRyK7yD.png


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

尚未有邦友留言

立即登入留言