HDLBits (56) — 響鈴還是震動?
本題鏈接:
https://hdlbits.01xz.net/wiki/Ringer
假設(shè)你正在設(shè)計一個電路來控制手機的振鈴器和振動馬達。無論何時,只要電話需要從來電中響起(輸入ring),電路必須接通振鈴器(輸出ringer=1)或電機(輸出motor=1),但不是兩者都有。如果手機處于振動模式(輸入vibrate_mode?=1),請打開電機。否則,打開振鈴器。
嘗試只使用 assign 語句,以查看是否可以將問題描述轉(zhuǎn)換為邏輯門集合。
設(shè)計提示: 在設(shè)計電路時,人們經(jīng)常會想到“向后”的問題,從輸出開始,然后向后工作到輸入。這通常與人們對(順序的、命令式的)編程問題的看法相反,在這個問題中,人們首先看到輸入,然后決定一個動作(或輸出)。對于順序程序,人們通常認為“如果(輸入是 _ _) ,那么(輸出應(yīng)該是 _ _)”。另一方面,硬件設(shè)計師經(jīng)常認為“當(輸入是 _ _)時(輸出應(yīng)該是 _ _)”。
上面的問題描述是以一種適合軟件編程的命令形式編寫的(如果是 ring,那么就這樣做) ,因此你必須將其轉(zhuǎn)換為一種更加適合硬件實現(xiàn)的聲明形式(assign ringer = ___)。能夠思考和轉(zhuǎn)換這兩種風(fēng)格,是硬件設(shè)計所需的最重要的技能之一。

預(yù)期解決方案長度:大約2行。

題目
提示:
對于這個特殊的問題,我們應(yīng)該考慮“motor?在___時打開”,而不是“如果(vibrate mode)那么___”。

答案

輸出波形


按位操作符包括:取反(~),與(&),或(|),異或(^),同或(~^)。
按位操作符對 2 個操作數(shù)的每 1bit 數(shù)據(jù)進行按位操作。
如果 2 個操作數(shù)位寬不相等,則用 0 向左擴展補充較短的操作數(shù)。
取反操作符只有一個操作數(shù),它對操作數(shù)的每 1bit 數(shù)據(jù)進行取反操作。
下圖給出了按位操作符的邏輯規(guī)則。

參考內(nèi)容:
2.4 Verilog 表達式?| 菜鳥教程:
https://www.runoob.com/w3cnote/verilog-expression.html