Verilog语言,语法错误?

在always后加上@(*),否则敏感信号会不间断触发导致崩溃。

扩展资料:

1、always语句的语法:

语法很简单,按照结构划分可以分为:

always @ (event)

[statement]

always @ (event) begin

[multiple statements]

end

第一种是块内只有一条语句,不需要使用begin end;第二种是有多条语法,需要使用begin end包裹起来。

这其实都是废话,推荐全部都用begin end包裹起来,这样形式比较固定,比较方便阅读以及形成固定风格。

按照时序逻辑和组合逻辑区别划分:

(划分组合逻辑以及时序逻辑的依据是敏感列表里面的内容有没有边沿事件)

组合逻辑语法:

always @ (level event) begin

[multiple statements]

end

括号内部的敏感列表仅仅为电平事件,例如:

always@(a,b,c,d) begin

out = a&b&c&d;

end

这样写的缺点在于有的时候,敏感列表过多,一个一个加入太麻烦,容易忘掉,为了解决这个问题,verilog 2001标准说可以使用*替换敏感列表,表示缺省,编译器会根据always块内部的内容自动识别敏感变量。

如:

always@(*) begin

out = a&b&c&d;

end

这样就方便很多。

时序逻辑语法:

时序逻辑的always块将内部敏感列表包括了边沿事件,一般是时钟边沿。

always @ (edge event) begin

[multiple statements]

end

例如我们描述一个同步复位的D触发器,可以这样描述:

always@(posedge i_clk) begin

if(i_rst) begin

q <= 0;

end

else begin

q <= d;

end

end

这表示当检测到时钟上升沿时,判断是否复位有效,如果有效对输出复位,否则采样输入d值。

当然时序逻辑敏感列表中的边沿事件不一定只是时钟,也可以是其他边沿,例如描述一个异步复位的D触发器:

always@(posedge i_clk or negedge i_rst) begin

if(i_rst) begin

q <= 0;

end

else begin

q <= d;

end

end

这表示当检测到时钟上升沿或者复位的上升沿时,都会触发always块内部的语句。

但是明显看出,复位的优先级更高,也就是说,当检测到复位的上升沿时,无论时钟边沿是否检测到都执行复位操作,否则,当检测到时钟上升沿时,采样输入值d。

2、什么是敏感列表?

敏感列表就是触发always块内部语句的条件。

在下面的代码中,每当信号a或b的值发生变化时,always块中的所有语句都会被执行。

// Execute always block whenever value of "a" or "b" change

always @ (a or b) begin

[statements]

end

3、如果没有敏感列表怎么办?

这个话题比较有意思,你可能说怎么可能没有敏感列表?其实,还真的可以没有敏感列表,这是仿真中的用法。我们经常使用没有敏感列表的always来表示不断的触发,用此特性来生成时钟。

例如:

always #10 clk = ~clk;

其实,always块内的敏感列表就是为了控制内部语句什么时候触发的。那么可以理解为一种定时,如果没有了敏感列表,则为零延迟,那么就会不断的触发,如下:

// always block is started at time 0 units

// But when is it supposed to be repeated ?

// There is no time control, and hence it will stay and

// be repeated at 0 time units only. This continues

// in a loop and simulation will hang !

always clk = ~clk;

上面显示的示例是一个always块,它试图反转信号clk的值。该语句每0个时间单位执行一次。因此,由于语句中没有延迟,因此它将永远执行。

这是没有意义的,我们正确的做法应该给一个定时或延迟:

即使敏感度列表为空,也应该有其他形式的时间延迟。always如下所示,通过构造中的延迟语句来提前仿真时间。现在,每10个时间单位完成一次时钟反转。

always #10 clk = ~clk;

当然,这种没有敏感列表的显示延迟,是不能综合的,只能用于仿真。

参考资料:https://blog.csdn.net/Reborn_Lee/article/details/107052261



  • verilog 缂栬瘧鍑虹幇璇硶閿欒
    绛旓細module VrSMex(CLOCK , X , UNLK , HINT);input CLOCK , X;output UNLK , HINT;reg UNLK , HINT;reg [2:0] Sreg, Snext;parameter [2:0] A=3'b000,B=3'b001,C=3'b010,D=3'b011,E=3'b100,F=3'b101,G=3'b110,H=3'b111;always @ (posedge CLOCK)Sreg <=Snext;alway...
  • Verilog_Debug(1)
    绛旓細瀵圭殑搴旇涓篿f ( a == b)13 ) illegal expression primary.鍙兘鏄被浼间簬灏哸lways鍐欐垚always杩欐牱鐨璇硶閿欒銆14锛堿 Verilog  keyword was found where an identifier wasexpected.绋嬪簭涓嚭鐜颁簡鐩稿簲鐨刅erilog鐨勫叧閿瓧锛屾湁涓涓叧閿瓧鍒楄〃锛屾槸涓浜涗笉鍙互琚畾涔変负鍙橀噺鐨勫悕瀛楃殑鍒楄〃锛岃繖涓渶瑕佹敞鎰忋
  • 缂栧啓verilog 浠跨湡鏂囦欢鑰佹彁绀璇硶閿欒
    绛旓細Qjunzhitest.v鏂囦欢涓嶈鐢╥nclude鏂瑰紡锛岀洿鎺ュ皢鏂囦欢鍐欏叆testbench鍐咃紝浠跨湡濡傛灉鍐嶆鎶ラ敊鐨勮瘽锛岃捣鐮佷篃鑳芥寚鍑閿欒鎵鍦ㄤ綅缃拰鍘熷洜銆
  • verilog缂栬瘧鍑洪敊, unexpected '=', expecting "IDENTIFIER" or "T...
    绛旓細鎴戝洖澶嶇殑鎬庝箞娌℃湁鍟婏紝浣犵殑always閭e彞璇濆悗闈㈢殑鍒嗗彿鍘绘帀灏卞彲浠ヤ簡銆俛lways @( a or b or cin);杩欓噷涓嶅彲浠ユ湁鍒嗗彿鐨勩傚湪quarteus II閲岀患鍚堜笅灏辫兘鎵惧埌杩欑浣庣骇閿欒浜嗐
  • Error (10170):Verilog HDL syntax error at taxi.v(1) near text...
    绛旓細璇硶閿欒锛绗竴琛屽氨鍑洪敊浜嗭紙涔熷彲鑳芥槸绗簩琛岋級锛屽彲鑳芥槸妯″潡鍚嶆病瀹氫箟鍟ョ殑銆傛妸鍓嶄袱琛岀殑浠g爜璐村嚭鏉ョ湅鐪嬨
  • fpga閲屽嚭鐜:verilog hdl syntax error at xxx.v near?
    绛旓細鏄綘鐨勭▼搴忎腑瀛樺湪璇硶閿欒锛鍏蜂綋鐨勯敊璇綅缃牴鎹姤閿欎俊鎭畾浣嶅氨鍙互浜嗐
  • FPGA閿欒:Error (10170): Verilog HDL syntax error at dds_rom_inst...
    绛旓細鎴戝垰鍒氫篃閬囧埌浜嗚繖涓棶棰橈紝闂鍏跺疄涓嶆槸鍑哄湪浠g爜涓婏紝鑰屾槸鍑哄湪浣犳坊鍔犵殑鏂囦欢涓婏紝浣犺繘鍏ssignment/setting/file涓皢dds_rom_inst鏂囦欢鍒犻櫎鍗冲彲锛屽洜涓鸿鏂囦欢鏄唴閮ㄨ皟鐢ㄧ殑锛屼笉闇瑕佷綘鏀惧湪宸ョ▼鏂囦欢閲岋紝鎵浠ヤ細鍑洪敊銆
  • 鐢≦uartusII 9.1缂栧啓VerilogHDL鍑虹幇璇硶閿欒
    绛旓細1.鐩殑锛歊TL code or simulation testbench?2.濡傛灉鏄疪TL code ,涓庤memory鐩歌繛鐨勫簲璇ヤ娇鐢ㄥ瘎瀛樺櫒锛岀劧鍚庡湪涓嶅悓鐨勬椂闂存缁欒瀵勫瓨鍣ㄨ祴鍊 3.濡傛灉鏄痵imulation testbench,浣犵殑璧嬪兼病鏈夋椂搴忕殑姒傚康 搴旇鎶婅祴鍊煎啓鍒 initial鍧楅噷闈 濡傦細 initial begin...end 4 memory鏄湁鑷繁鐨勬荤嚎鐨勶紝涓鑸湁CEN WEN DATA_IN ...
  • Verilog HDL閿欒姹傚姪 Error (10171): Verilog HDL syntax error at p...
    绛旓細Endmodule杩欓噷閿浜嗗晩 verilog鏄弗鏍煎尯鍒嗗ぇ灏忓啓鐨 鎵浠ョ紪璇戝櫒涓嶈璇咵ndmodule 鍙渶瑕佹敼鎴恊ndmodule灏監K浜嗗晩锝
  • QuartusII Verilog HDL璇硶閿欒?
    绛旓細b0000000010000000;data[15]<='b0000000100000000;ex_s<=1'b0;ex_l<=32'b0;end else begin ex_s<=ex_s+1;ex_l<=data[ex_s];end end endmodule 鎴戜慨鏀逛簡涓嬶紝浣犲彲浠ヨ瘯璇曠湅锛屽簲璇ユ槸娌℃湁璇硶閿欒浜嗭紝妤间笂璇寸殑鎸哄鐨 杩樻湁灏辨槸涓嶅彲浠ラ噰鐢ㄩ樆濉炶祴鍊硷紝搴旇閲囩敤闈為樆濉炶祴鍊肩殑~~鎴戝凡鏀硅繃鏉ヤ簡 ...
  • 扩展阅读:免费的翻译器 ... verilog generate ... 中俄翻译器 ... verilog发音 ... 中文越南语互译 ... verilog always ... verilog case ... verilog 教程 ... verilog语法基本知识 ...

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