HDLBits 系列(4)如何設(shè)計(jì)一定不會(huì)產(chǎn)生Latch的組合邏輯?

      網(wǎng)友投稿 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)。

      HDLBits 系列(4)如何設(shè)計(jì)一定不會(huì)產(chǎn)生Latch的組合邏輯?

      您的電路具有一個(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)容。

      上一篇:應(yīng)用幻燈片版式(應(yīng)用幻燈片版式包含)
      下一篇:尋找平衡以提高會(huì)計(jì)效率
      相關(guān)文章
      亚洲国产成人AV网站| 亚洲区日韩精品中文字幕| 精品久久久久亚洲| 国产精品亚洲专区一区| 亚洲av纯肉无码精品动漫| 久久精品国产亚洲av品善| 色窝窝亚洲av网| 国产成人亚洲精品电影| 无码国产亚洲日韩国精品视频一区二区三区 | 国产日韩成人亚洲丁香婷婷| 国产AV日韩A∨亚洲AV电影| 国产亚洲精品91| 亚洲精品国产成人影院| 亚洲伊人久久成综合人影院| 国产成人综合亚洲亚洲国产第一页| 中文字幕第一页亚洲| 国产亚洲精品国产| 亚洲Av熟妇高潮30p| 亚洲日本一区二区| 亚洲精品人成电影网| 亚洲一级片在线观看| 亚洲一久久久久久久久| 亚洲国产成人手机在线观看| 国产精品亚洲综合| 国产亚洲精品精品国产亚洲综合| 国产亚洲欧洲Aⅴ综合一区| 亚洲日韩一页精品发布| 亚洲AV无码成人专区片在线观看| 午夜亚洲www湿好大| 亚洲午夜电影在线观看高清| 久久夜色精品国产噜噜亚洲a| 亚洲国产精品嫩草影院| 亚洲av午夜成人片精品电影| 国产亚洲精品不卡在线| 亚洲精品国产精品乱码不卡√| 久久亚洲免费视频| 亚洲人成网站日本片| 亚洲码欧美码一区二区三区| 亚洲国产V高清在线观看| 亚洲中文字幕久久精品无码APP| 亚洲AV成人片色在线观看高潮|