在verilog中为什么能用case语句尽量不用if语句? verilog语言中case里面还能嵌套if语句吗?

\u7528verilog \u4e2d\u7684case\u8bed\u53e5\u5b8c\u621024\u5206\u9891\u5668\uff0c\u5c31\u7528case \u4e0d\u7528 if else

\u4f60\u7684\u7a0b\u5e8f\u95ee\u9898\u592a\u591a\u4e86\u3002\u3002case\u91cc\u72b6\u6001\u6ca1\u6709\u5faa\u73af\u8d77\u6765\u600e\u4e48\u5206\u9891\uff1f
\u8fd8\u6709\uff0c\u540c\u6b65\u590d\u4f4d\u548c\u5f02\u6b65\u590d\u4f4d\u4e00\u4e2a\u5c31\u884c\u4e86\uff0c\u53bb\u6389negedge
rst\u6216\u8005if\uff08\uff01rst\uff09
\u6211\u968f\u4fbf\u5199\u4e86\u4e0b\uff0c\u4f60\u770b\u770b\u5427\uff0c\u6bcf12\u4e2a\u65f6\u949f\u5468\u671f\u53cd\u8f6c\u4e00\u6b21clk2\u5c31\u884c\u4e86
`timescale
1ns/1ps
module
div
(
input
wire
clk,
input
wire
rst_n,
output
reg
clk2
);
reg
[3:0]
state;
always
@
(posedge
clk
)
if(!rst_n)
begin
state
<=
4'd0;
clk2
<=
1'b0;
end
else
case(state)
4'd0,4'd1,4'd2,4'd3,
4'd4,4'd5,4'd6,4'd7,
4'd8,4'd9,4'd10:
state
<=
state
+
1'b1;
4'd11:
begin
state
<=
0;
clk2
<=
~clk2;
end
endcase
endmodule

\u53ef\u4ee5\uff0c\u7edd\u5bf9\u53ef\u4ee5\u3002

首先从软件角度考虑
if加若干个else if可以组成一个与case类似的功能
但需要注意的是if-else if是有优先级的,也就是第一个if不成立的话,才判断第二个else if
那么问题就来了,如果这个if组合里有10个else if条件,那么逻辑就需要做一个在一个时钟周期内能判断10个条件的硬件电路来,这样是不明智也是不合理的,比较容易造成时序不满足

虽然说if有这样的缺点,但它的优点是每个else if都可以判断不同的条件,比较灵活

一般来说,如果判断的条件只是一个向量的不同值,那么case是最合适的

如果判断的条件是许多不同的向量或者变量,那么if还是比较合适的
当然也可以选择case和if的组合,这样灵活性和时序都比较好

case语句在编译成硬件电路后,各个分支之间是平行的,优先级是相同的;
if语句则具有优先级。

  • verilog璇█涓C璇█鐨鍖哄埆?
    绛旓細Verilog鏈夊姪浜庤璁″拰鎻忚堪鏁板瓧绯荤粺锛岃孋鏈夊姪浜庢瀯寤烘搷浣滅郴缁燂紝鏁版嵁搴擄紝缂栬瘧鍣紝瑙i噴鍣紝缃 缁滈┍鍔ㄧ▼搴忕瓑銆俈erilog鏄竴绉嶇‖浠舵弿杩拌瑷锛圚DL锛夛紝鏈夊姪浜庢弿杩扮綉缁滀氦鎹㈡満锛屽井澶勭悊鍣紝瑙﹀彂鍣ㄧ瓑鏁板瓧绯 缁熴傚洜姝わ紝鍙互浣跨敤璇ヨ瑷鎻忚堪鏁板瓧绯荤粺鐨勭‖浠躲侰鏄竴绉嶆敮鎸佺粨鏋勫寲缂栫▼鐨勯珮绾ч氱敤缂栫▼璇█銆侰璇█鐨勫紑鍙戜汉鍛樻槸Den...
  • 瀛︿範verilog HDL蹇呴』瀛︿範C璇█鍚?
    绛旓細C璇 瑷寰堢伒娲伙紝鏌ラ敊鍔熻兘寮锛岃繕鍙互閫氳繃PLI锛堢紪绋嬭瑷鎺ュ彛锛夌紪鍐欒嚜宸辩殑绯荤粺浠诲姟鐩存帴涓庣‖浠朵豢鐪熷櫒锛堝Verilog-XL锛夌粨鍚堜娇鐢ㄣ侰璇█鏄洰鍓嶄笘鐣屼笂搴 鐢ㄦ渶涓哄箍娉涚殑涓绉嶇紪绋嬭瑷锛屽洜鑰孋绋嬪簭鐨勮璁$幆澧冩瘮Verilog HDL鏇村畬鏁淬傛澶栵紝C璇█鍙簲鐢ㄤ簬璁稿棰嗗煙锛屾湁鍙潬鐨勭紪璇戠幆澧冿紝璇硶瀹屽锛岀己闄疯緝灏戙
  • 璇烽棶FPGA鍙互鎷C璇█鍐欏悧?浠婂ぉ鏈嬪弸鎷鐨榛戦噾鐨勬澘瀛,鐢ㄧ殑濂藉儚鏄疌璇█
    绛旓細鍙鍦‵PGA涓Щ妞嶄簡nois鏍革紝鐩稿綋浜庢槸CPU鐨勪竴绉嶄笢瑗匡紝灏卞彲浠ヤ娇鐢ㄥ叾浠栫殑杞欢璇█銆C璇█鏄竴绉嶈蒋浠惰瑷锛岄渶瑕丆PU涓鏉′竴鏉$殑鎵ц銆俈HDL鍏ㄥ悕Very-High-Speed Integrated Circuit HardwareDescription Language锛岃繖鏄竴绉嶇‖浠舵弿杩拌瑷锛屾牴鎹瓻DA杞欢缁煎悎鍚庝細鐢熸垚瀹炲疄鍦ㄥ湪鐨勭數璺紝鍙互骞惰鎵ц銆傚紛绔殑璇濆簲璇ユ槸鍚勬湁...
  • 鍗冲C璇█鍙堝verilog璇█浼氫笉浼氬涔?
    绛旓細涓嶄細 verilog鍜宑鏈変竴浜涜娉曠浉鍍 浣嗘槸鎬濊矾涓嶅悓 verilog鏄弿杩拌瑷 鏇寸畝鍗曠偣 c鐪嬬潃绠鍗 鐪熷绮炬尯鏈夐毦搴 verilog瀛﹀ソ瀹规槗 浣嗘槸涓昏涓嶆槸璇█ 鏄暟瀛楅昏緫鐨勮璁 鐒跺悗verilog鍙笉杩囨槸鎻忚堪涓涓嬩綘鐨勯昏緫 c鐨璇濊繕鏄畻娉曟瘮杈冧富瑕
  • Verilog涓鈥&&鈥濆拰鈥&鈥濈殑鍖哄埆鏄浠涔?
    绛旓細涓銆佹剰鎬濅笉鍚 1銆&&锛氫唬琛ㄩ昏緫涓庛2銆&锛氫唬琛ㄤ笌闂ㄨ繍绠(鎸変綅涓)銆備簩銆佽绠楁柟寮忎笉鍚 1銆&&锛5'b10000 && 5'b10001 缁撴灉涓1銆2銆&锛5'b10000 & b'b10001 缁撴灉涓5'b10000銆
  • 鎴戞槸Verilog鐨鍒濆鑰,鎴戞兂闂竴涓,鏄笉鏄墍鏈夌殑C璇█浠g爜閮鍙互缈昏瘧鎴恦e...
    绛旓細verilog涓嶆槸杞欢璇█锛屾垨鑰呰鏍规湰涓嶆槸绋嬪簭锛屾槸涓绉嶇‖浠舵弿杩拌瑷锛屾瘡涓彞verilog浠g爜閮芥槸涓缁勭‖浠讹紝杞欢涓緢澶氱畝鍗曠殑涓鍙ヤ唬鐮侊紝鍦ㄧ敤纭欢鍘诲疄鐜版椂锛屽疄闄呬笂鏄緢澶嶆潅鐨锛屼緥濡傞櫎娉曪紝涓鍙浠g爜灏卞浜嗭紝浣嗗畠鏄竴澶у爢纭欢鎵嶈兘瀹炵幇銆傛墍浠ワ紝浣犱笉瑕佹湡鏈涚潃verilog涓C浠g爜鍙互浜掕瘧锛屽畠浠殑鐩稿叧鎬э紝姣旇捣鑻辫涓庢眽璇箣闂寸殑...
  • FPGA鐨缂栫▼璇█璺烠璇█鏈浠涔涓嶅悓?
    绛旓細verilog涓娌℃湁涓柇鐨勬蹇碉紝鑰岄愯鎵ц鎸囦护鐨凜璇█鍗寸涓嶅紑涓柇銆傚涔爒erilog蹇呴』瑕佹帉鎻℃渶鍩烘湰鐨勬蹇碉紝鍍忎笂闈㈢殑闃诲璧嬪肩瓑绛夛紝鏂版墜閮借缁忓巻杩欎竴鍏崇殑锛屽懙鍛点傝繕鏈夛紝verilog鏄缁堢涓嶅紑纭欢锛宑璇█涓鍙互涓嶉檺鍒跺惊鐜鏁帮紝鑰寁erilog灏变笉琛岋紝鍥犱负姣忓惊鐜竴娆″氨浼氬鍔燜PGA鍐呴儴璧勬簮鐨勫崰鐢ㄣ傛渶鍚庡湪璇翠竴鐐瑰効锛寁erilog涓...
  • 瀛verilog闇瑕丆璇█鐨勫熀纭鍚?鏈夌粡楠岀殑璇翠竴涓!
    绛旓細鎵浠ュVERILOG鍜屾湁娌℃湁C鍩虹娌″叧绯伙紝杩欐槸绗竴涓浜屼釜鏄父鐢鐨刅ERILOG璇硶灏遍偅涔堝嚑涓紝鐢ㄥ績鍑犲ぉ灏卞浼氬惂锛屼絾鏄疐PGA閲嶇偣涓嶅湪浜庤瑷鐨勫涔犺屽湪浜庡苟琛屾濇兂鐨勭悊瑙e拰鏃跺簭鍒嗘瀽锛屽湪杩欎簺浼氫簡涔嬪悗灏辨槸绠楁硶浜嗐傘傛渶鍚庛傘傛垜寤鸿瀛PGA涔嬪墠鎶婃暟鐢靛绮鹃氾紝鎵庢墡瀹炲疄澶氱湅鍑犻亶涔︼紝鐒跺悗瀛ERILOG銆傘傜劧鍚庡啓閫昏緫銆傘傜劧鍚庡仛...
  • verilog hdl鐨妯″潡鍜宑璇█鐨勫嚱鏁版湁浣曞尯鍒笌鑱旂郴
    绛旓細Verilog鏄‖浠舵弿杩拌瑷,妯″潡鎴栬協unction鏈鍚庨兘浼氱患鍚堟垚瀹為檯鐨勭數璺傝孋璇█鐨勫嚱鏁帮紝鍒欐槸璋冪敤鏃舵墠浼氳浆鍏ュ嚱鏁版墽琛屻傝仈绯诲氨鏄袱鑰呯洰鐨勯兘鏄彁鍙栧叕鍏辨ā寮忥紝绠鍖栫紪绋
  • verilog 涓,琛ㄨ揪寮弡~a,b,c}||{a,~b,c}姝g‘鍚
    绛旓細姝g‘銆 涓ゆ潯骞宠绾,涓庡悓涓鏉$洿绾垮瀭鐩,鍙綔涓烘帹璁虹洿鎺ヤ娇鐢ㄣ 鍏跺疄鐢讳竴涓浘灏卞鏄撶悊瑙d簡銆 鍙﹀涔鍙互鐢鍚戦噺鐨鏂规硶鏉ヨ瘉鏄庛俛鍨傜洿b,鍗砤*b=0 b涓巆骞宠,鍗砶b=c,a*c=a*kb=k(a*b)=0 鎵浠涓巆鍨傜洿
  • 扩展阅读:2 x ... verilog任务的使用 ... verilog 延时 ... verilog教程 ... verilog按键防抖 ... verilog 0 ... verilog调用另一个模块 ... verilog hdl ... verilog状态机流水灯 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网