elasticsearch入門系列">elasticsearch入門系列
849
2025-04-01
目錄
拋磚引玉
個(gè)人總結(jié)
麻煩的設(shè)計(jì)
拋磚引玉
假設(shè)您正在建立一個(gè)電路來處理游戲的PS / 2鍵盤的掃描代碼(scancodes)。給定收到的掃描碼(scancodes)的最后兩個(gè)字節(jié),您需要指示是否已按下鍵盤上的箭頭鍵之一。這涉及到相當(dāng)簡單的映射,可以將其實(shí)現(xiàn)為具有四個(gè)案例的case語句(或if-elseif)。
您的電路具有一個(gè)16位輸入和四個(gè)輸出。建立識(shí)別這四個(gè)掃描碼(scancodes)并有效正確輸出的電路。
為避免創(chuàng)建鎖存器,必須在所有可能的情況下為所有輸出分配一個(gè)值。僅僅具有默認(rèn)情況是不夠的。您必須在所有四種情況和默認(rèn)情況下為所有四個(gè)輸出分配一個(gè)值。這可能涉及許多不必要的輸入。解決此問題的一種簡單方法是在case語句之前為輸出分配“默認(rèn)值”:
always @(*) begin up = 1'b0; down = 1'b0; left = 1'b0; right = 1'b0; case (scancode) ... // Set to 1 as necessary. endcase end
這種代碼風(fēng)格可確保在所有可能的情況下為輸出分配一個(gè)值(0),除非case語句覆蓋該分配。這也意味著默認(rèn):case項(xiàng)變得不必要。
個(gè)人總結(jié)
上面這個(gè)問題說的是在case之前給輸出一些默認(rèn)值,這其實(shí)也是我一直以來的做法,在Verilog高級數(shù)字系統(tǒng)設(shè)計(jì)技術(shù)與實(shí)例分析這本書中,大量的設(shè)計(jì)運(yùn)用了這種風(fēng)格的代碼。
這么做的好處在于:
首先永遠(yuǎn)不會(huì)產(chǎn)生鎖存器,因?yàn)槲业妮敵鲇辛四J(rèn)值,每一種情況下,如果沒有case下面的條件覆蓋,則都會(huì)有默認(rèn)值,于是乎也就不存在有寫情況下輸出沒有給具體值的情況了,自然鎖存器也不會(huì)生成了。
對于上面這個(gè)問題,我們相應(yīng)的代碼設(shè)計(jì)可以像這樣:
// synthesis verilog_input_version verilog_2001
module top_module (
input [15:0] scancode,
output reg left,
output reg down,
output reg right,
output reg up );
always@(*)begin
// left = 0;
// down = 0;
//right = 0;
// up = 0;
case(scancode)
16'he06b: left = 1;
16'he072: down = 1;
16'he074: right = 1;
16'he075: up = 1;
endcase
end
endmodule
代入HDLBits中驗(yàn)證:
麻煩的設(shè)計(jì)
如果不給默認(rèn)值,我們可以這么設(shè)計(jì):
// synthesis verilog_input_version verilog_2001
module top_module (
input [15:0] scancode,
output reg left,
output reg down,
output reg right,
output reg up );
always@(*)begin
case(scancode)
16'he06b: begin
left = 1;
down = 0;
right = 0;
up = 0;
end
16'he072: begin
left = 0;
down = 1;
right = 0;
up = 0;
end
16'he074: begin
left = 0;
down = 0;
right = 1;
up = 0;
end
16'he075: begin
left = 0;
down = 0;
right = 0;
up = 1;
end
default: begin
left = 0;
down = 0;
right = 0;
up = 0;
end
endcase
end
endmodule
雖然也能實(shí)現(xiàn)同樣的功能,但是是不是很麻煩呢?
硬件開發(fā)
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。