欢迎来到天天文库
浏览记录
ID:20491689
大小:29.50 KB
页数:9页
时间:2018-10-12
《可综合verilog语法子集总汇》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、常用的RTL语法结构如下:☆模块声明:module……endmodule☆端口声明:input,output,inout(inout的用法比较特殊,需要注意)☆信号类型:wire,reg,tri等,integer常用语for语句中(reg,wire时最常用的,一般tri和integer不用)☆参数定义:parameter☆运算操作符:各种逻辑操作符、移位操作符、算术操作符大多时可综合的(注:===与!==是不可综合的)☆比较判断:if……else,case(casex,casez)……defaultendcase☆连续赋值:assign,问号表达式(?:)☆alwa
2、ys模块:(敏感表可以为电平、沿信号posedge/negedge;通常和@连用)☆begin……end(通俗的说,它就是C语言里的“{}”)☆任务定义:task……endtask☆循环语句:for(用的也比较少,但是在一些特定的设计中使用它会起到事半功倍的效果)☆赋值符号:=和<=(阻塞和非阻塞赋值,在具体设计中时很有讲究的)可综合的语法时verilog可用语法里很小的一个子集,用最精简的语句描述最复杂的硬件,这也正是硬件描述语言的本质。对于做RTL级设计来说,掌握好上面这些基本语法是很重要。相信大家在看了这么多了verilog语法书籍以后一定有点烦了,那么现在我
3、告诉大家一个好消息,对于一个RTL级的设计来说,掌握了上面的语法就已经足够了,无论多么牛逼的工程师,在他的代码里无非也就是上面一些语法而已。当然了,对于一个能够进行很好的仿真验证的代码,一般还需要在RTL级的设计代码中添加一些延时之类的语句,比如大家一定知道#10的作用,就是延时10个单位时间,这个语句虽然在仿真的时候是实实在在的延时,但是这个语句在综合后是会被忽略的,也就是说在我们综合并且布局布线最后烧进FPGA里,这个#10的延时是不会在硬件上实现的。所以说,上面给出的这些语法才是可以最后在硬件上实现的,其它的语法大多会在综合后被忽略。这么一来大家就要问了,为什
4、么语法书里又要给出这么多的语法呢?呵呵,它们大都是为仿真验证是写testbench准备的,先点到为止,下集继续!对于模型(module)的建立,要保证可综合性应该注意:(1)不使用initial。(被忽略)(2)不使用#10。(被忽略)(3)不使用循环次数不确定的循环语句,如forever、while等。(4)不使用用户自定义原语(UDP元件)。(5)尽量使用同步方式设计电路。(6)除非是关键路径的设计,一般不采用调用门级元件来描述设计的方法,建议采用行为语句来完成设计。(7)用always过程块描述组合逻辑,应在敏感信号列表中列出所有的输入信号。(8)所有的内部寄
5、存器都应该能够被复位,在使用FPGA实现设计时,应尽量使用器件的全局复位端作为系统总的复位。(9)对时序逻辑描述和建模,应尽量使用非阻塞赋值方式。对组合逻辑描述和建模,既可以用阻塞赋值,也可以用非阻塞赋值。但在同一个过程块中,最好不要同时用阻塞赋值和非阻塞赋值。(10)不能在一个以上的always过程块中对同一个变量赋值。而对同一个赋值对象不能既使用阻塞式赋值,又使用非阻塞式赋值。(11)如果不打算把变量推导成锁存器,那么必须在if语句或case语句的所有条件分支中都对变量明确地赋值。(12)避免混合使用上升沿和下降沿触发的触发器。(13)同一个变量的赋值不能受多个
6、时钟控制,也不能受两种不同的时钟条件(或者不同的时钟沿)控制。(14)避免在case语句的分支项中使用x值或z值。但是在仿真验证程序中,一般VerilogHDL语法都是容许的。Verilog语法需要注意的一些要点1.Testbench中时钟和数据比特流的简单设计方法alwaysclock=~clock;always@(posedgeclock)begindata_in_a={$radom}%2;//产生-1到1之间随机的比特流data_in_b=16’b1101_1011_1110_0011;//产生固定的比特流$display(“a=%d”,a);//与C语言
7、类似end2.Verilog语法中的并行与顺序模块(1)连续赋值语句、always模块之间、实例模块之间都是并行语句(2)always模块内部是分情况而定,对于if…else…而言,总是有优先级的顺序的,对于case而言,无优先级,是完全顺序执行的,此外,还要对阻塞语句和非阻塞语句具体分析。3.Verilog中四种最常见的变量(1)wire,即线网形变量,它不能存储值,必须受到驱动器或者连续赋值语句的驱动,如果没有驱动,那么它将会是高阻态(2)reg是数据存储单元的抽象,通过赋值语句可以改变寄存器存储的值,其作用与改变触发器存储的值相当。寄存器变量的初时值为不确
此文档下载收益归作者所有