HDLBits (29) — Always模塊(組合)
本題鏈接:
https://hdlbits.01xz.net/wiki/Alwaysblock1
由于數(shù)字電路由與導(dǎo)線相連的邏輯門(mén)組成,任何電路都可以表示為模塊和賦值語(yǔ)句的組合。然而,有時(shí)這不是描述電路最方便的方式。過(guò)程(始終以塊為例)為描述電路提供了另一種語(yǔ)法。
對(duì)于合成硬件,兩種類(lèi)型的always塊是相關(guān)的:
組合:?always @(*)
時(shí)鐘:?always @(posedge clk)
組合always塊相當(dāng)于assign語(yǔ)句,因此總是有一種方法可以同時(shí)表示組合電路。選擇使用哪種語(yǔ)法主要是哪種語(yǔ)法更方便。過(guò)程塊內(nèi)部代碼的語(yǔ)法與外部代碼的語(yǔ)法不同。程序塊具有更豐富的語(yǔ)句集(例如if-then、case),不能包含連續(xù)賦值*,但也引入了許多新的非直觀的出錯(cuò)方式。(*程序性連續(xù)作業(yè)確實(shí)存在,但與連續(xù)作業(yè)有所不同,且不可合成。)
例如,assign和組合always塊描述相同的電路。兩者都創(chuàng)建了相同的組合邏輯塊。無(wú)論何時(shí)任何輸入(右側(cè))發(fā)生變化,兩者都將重新計(jì)算輸出。
assign out1 = a & b | c ^ d;
always @(*) out2 = a & b | c ^ d;

對(duì)于組合始終塊,始終使用(*)的靈敏度列表。明確列出信號(hào)是錯(cuò)誤的(如果您錯(cuò)過(guò)了一個(gè)),并且忽略了硬件合成。如果顯式指定靈敏度列表并遺漏信號(hào),則合成的硬件仍將表現(xiàn)為指定了(*) ,但模擬將不會(huì)也不匹配硬件的行為。(在 SystemVerilog 中,使用 always _ comb.)

題目
使用assign語(yǔ)句和組合always塊構(gòu)建AND門(mén)。(由于assign語(yǔ)句和組合塊的功能總是相同的,因此無(wú)法強(qiáng)制要求您同時(shí)使用這兩種方法。但您是來(lái)練習(xí)的,對(duì)嗎?…)

答案

輸出波形
