SpinalHDL与Verilog的比较

内容纲要

近似语法比较

语法 SpinalHDL Verilog
阻塞赋值 a := U"h3" a <= 4'h3;
非阻塞赋值 a \= U"b11" `a = 4'b11;
连线 a <> b .a(b)
线 val a = UInt(4 bits) wire[3:0] a;
寄存器 val a = Reg(UInt(4 bits)) reg[3:0] a;
复位 always@(posedge clk or negedge rstn) if(!rstn) a <= 4'h0; val a = Reg(Uint(4 bits)) init(0)
条件语句 when(c===1) {a:=1}.elsewhen(c=\=3) {a:=2}.otherwise{a:=3} if(c==1) a<=1; else if (c!=3) a<=2; else a<=3;
分支语句 switch(c) is(0){a\=1} is(1){a\=2} default{a\=3} case(c) 0: a=1; 1: a=2; default: a=3; endcase
选择语句 val a \= c ? U"b1" \| U"b0" assign a = c ? 1'b1 : 1'b0

重大区别

寄存器定义

在Verilog中,如果需要定义一个寄存器,只需要键入reg a;就可以了,至于这个寄存器的其他相关代码都需要写在另外的代码块中,包括:驱动时钟、复位条件、更新条件、更新值。

而在SpinalHDL中,寄存器定义一共有4种方式,分别是:

  • 无复位寄存器:Reg(type : Data)
  • 带复位寄存器:
    • RegInit(resetValue : Data)
    • Reg(type: Data) init( resetValue: Data)
  • 更新寄存器:RegNext(nextValue : Data)
  • 带条件更新寄存器:RegNextWhen(nextValue : Data, cond : Bool)
工程师,个人公众号:IF推理同好会,个人微信小游戏:IF迷你侦探
文章已创建 32

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部