其实这两种语言都能达到相同的目的,只是细节上有些不同而已。vhdl语法比较严谨,调用的module要先定义,
用endif表示if语句的结束;verilog直接调用module,语法跟c接近,begin,end相当于c的大括号。
vhdl的优势:支持信号的属性操作,如 signal cnt : std_logic_vector (14-1 DOWNTO 0);
那么cnt'length就等于14, 以后定义的地方改了,这里跟着自动改,不用人工干预。类似的
还有left,right等等属性,非常好用。属性操作直接导致函数功能比verilog强大很多,
原因就在于输入信号的位宽不用定死,后面的处理基于输入的length处理就可以了。而verilog
的函数就比较倒霉了,输入是定死的,即使功能类似,只要输入位宽不同就得重写一个函数。
譬如,把一个11位的信号截4位成7位,和把一个9位的信号截2位成7位,verilog要用两个函数,
vhdl却只用一个就可以了,后面给个例子。
generate的功能,这个在vhdl 93版就有了,但verilog直到2001版才采用,晚好多了。既然知道
是好的东西,可以早点借鉴过来的啊,扭扭捏捏的干啥啊
verilog的优势:我想其中一个就是简洁吧,不用提前定义调用的module,这在netlist比较方便。
但verilog的begin end成对出现,而且满天飞,我对这个挺头大的。
除了上面提到的优势外,其他地方二者都能表达的,看个人喜好了。
例子:
FUNCTION DataSym4Slicer(vDataSymLevel : std_logic_vector) return std_logic_vector is
constant czLevelLen: integer := vDataSymLevel'LENGTH;
。。。。。。
return vResult;
end;
上面中czLevelLen就是输入信号的位宽,只是它是一个变量而已。知道输入的位宽,剩下的就好办了。
附:这是个非常有争议的话题,我只是说出了我的看法,如有不对,照你的意思改就是了,我无意
引起任何争端,就是侃侃罢了。
文章评论(0条评论)
登录后参与讨论