為什麼這篇Verilog always鄉民發文收入到精華區:因為在Verilog always這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者henry666666 (雨四光)看板Electronics標題Re: [請益] verilog...
※ 引述《tkhan (腦殘綠吱吱)》之銘言:
: 標題: Re: [請益] verilog如何在一個always判斷觸發源?
: 時間: Fri Apr 18 00:27:29 2008
:
: ※ 引述《icetofux (豆腐)》之銘言:
: : input in0,in1;
: : reg a;
: : always@(in0)
: : begin
: : a=0;
: : end
: : always@(in1)
: : begin
: : a=1;
: : end
: : 在軟體模擬上,compile會通過,也能進行波形模擬,但是以donwload用的軟體去進行
: : compile,則會告訴不能讓兩個always敘述去變動同一個變數值。
: : 如果我想改成:
: : always@(in0 or in1)
: : begin
: : ...
: : end
: : 我要怎麼去判斷到底是in0有動作還是in1有動作而進入always敘述呢?
:
: always @(in0 or in1)
: begin
: if(in0)
: a=0;
: else if(in1)
: a=1;
: else
: a=0;
: end
: 上課要認真..
: 這是基礎中的基礎..
上課不認真的來問問題了:
//程式如下
module test(in0,in1,a);
input in0,in1;
output a;
reg a;
always @(in0 or in1)
begin
if(~in0)
a=0;
else if(~in1)
a=1;
else
a=0;
end
endmodule
我希望能做到,當in0改變的時候,執行a=0
當in1改變的時候,執行a=1
但是這樣寫……
當我按下in0的時候
進入always裡面,然後進入if判斷,a=0。
到此都沒有問題。
但我in0還沒放開(~in0還是==1)時,
我又按下in1
這時候雖然是因為in1改變進入always裡面
不過它仍會執行a=0。
所以請問是:
a.要避免這種行為?
b.有其它寫法?
///////////題外話///////////
為什麼會用到這個呢,
原因就是我們的fpga板子的七段顯示器
它一次只能控制一個數字,所以要一次顯示4個數字的時候(EX:1142)
要先跳到第一個七段顯示器
然後顯示1
接著跳到第二個
然後顯示1
……
刷快一點就像1142了
現在的問題是我想要更改數字,
七段顯示器在兩種情況下會改值
一是它很快的刷刷刷
二是因為我按下更改數字的按鈕
他在刷的時候,觸發的是clock
改數字的時候,觸發的是按鈕
這不同的兩個情況,要對同一個值(七段顯示器)作不一樣的變更動作
如果always可以分開寫就好了……
--
儘管生命的起源只是一種化學反應
儘管人類的存在只是記憶數據的影子
儘管靈魂並不存在,精神只是神經細胞的火花
儘管世上沒有神,人一定要靠一己之力在這殘酷的世界中掙扎求存
我還是......
我還是...... 要以意識之名命令你───「活下去」
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.216.126
※ 編輯: henry666666 來自: 140.114.216.126 (04/05 18:41)
還是不會寫Q__Q
case({in1,in0})
有以下幾種排列
00
01
10
11
那這個00呢,
究竟是 10 (in0按住不放) 的時候按下「in1」變成的,
還是 01 (in1按住不放) 的時候按下「in0」變成的?
前者的話是in1 trigger的,後者相反呢……
※ 編輯: henry666666 來自: 140.114.216.126 (04/05 19:05)
這樣寫會過嗎?
串一下這篇文章開頭,似乎不行呢
還是我理解錯誤?
……
或者指的是下面這種方法
顯示器為D[7:0]
然後暫存是r1[7:0] r2[7:0] r3[7:0] r4[7:0]
scan的block裡
更改D對應到r1 r2 r3 r4
再來一個block
更改r1 r2 r3 r4裡的值
然後因為改的東西不一樣,就會過
是這嗎?
※ 編輯: henry666666 來自: 140.114.216.126 (04/05 21:03)
scan應該可以用迴圈寫的說……嗯
※ 編輯: henry666666 來自: 140.114.216.126 (04/05 21:05)
其實是改數字的時候,觸發的是按鈕
可是if判斷成clock
--
那如果回到上面的code
(叫multiple drivers for a net?)
是不可能辦到的嗎?
※ 編輯: henry666666 來自: 140.114.216.126 (04/06 12:56)