原创 《Verilog RTL级语法常用概念整理》

2009-10-12 15:42 4323 3 3 分类: FPGA/CPLD

RTL级语法就是可综合的那部分语法内容,它主要用于描述数据如何在寄存器之间传输、控制和处理。所谓RTL级建模也就是用这部分语法内容区描述实际电路的行为。


RTL级编码过程是心中先有电路,再将它翻译成Verilog代码。电路行为的先后顺序通过时钟节拍的顺序来实现。


RTL级语法:能综合成门级电路


一、语法基本概念


1、  模块基本结构:基本单元是“模块(module)”,一个Verilog里可以有很多module。


2、  端口定义:在顶层模块中,端口对应的物理模型是芯片的管脚,在内部子模块中,端口对应的物理模型则为内部连线。


3、  三态输出端口:信号设三态,相当于与总线断开。


4、  对双向口(inout)建模:FPGA内部没有双向端口,内部信号均为单一流向,输入输出采用单独信号表示,不能复用在一起,只有芯片接口的信号才能定义为双向口。


二、  数据类型


1、 数据宽度:wire[15:0] a; //描述了一个位宽为16的信号。


2、 接线(Net):凡电路连接支点均称为接线,声明用wire  型,并以Z为default值。总线(Bus)则是接线的组合,声明也用wire型(wire型数据不能赋值)。在实际应用中, 凡是使用连续赋值语句(assign)赋值的信号都定义为wire型,在模块例化时,要将具有连线意义的信号定义为wire型。


3、 寄存器型(reg型):在时序逻辑中它对应的是寄存器,在组合逻辑中表示一个节点,在实际应用中,凡是在initial/always块中的被赋值信号都必须定义为reg型。


reg[31:0]  mem[1023:0];//定义了一个位宽为32,深度为1024的存储单元。


4、 参数型(parameter):用来定义在程序内部仿真时保持不变的常数,以增进程序的可读性。


三、 语句


1、assign语句:无论等式右端怎样变化,等式左端的值马上产生相应变化。连续赋值是对组合逻辑的描述。等式左端的数据必须是wire型,右端的数据可以是wire/reg。


2、initial语句:包含欲初始化的信号或变量,仿真器会自时间零时启动initial块,并且只执行一次。Initial语句由begin….end做聚合,若有信号被赋值,则规定该信号必须是reg型,不能是wire型。


3、always语句(用于电路过程行为的建模):欲重复执行多次的语句,其内部的信号声明必须为reg型。如果敏感信号列表出现边沿触发信号,则always块被综合为时序逻辑,否则被综合为组合逻辑。always语句由begin….end做聚合。


4、if语句:一般if…else语句中的条件是互斥的,综合结果就是并行不带优先级的。如果条件不互斥,对应综合电路就是带优先级的(描述中,越往下优先级越低)。


5、case语:不带优先级的电路最好用case语句。如果条件分支不完整,将生成锁存器,如果条件分支中包括了所有的情况,可以不用default语句。


6、for语句:for循环更多地表示了一种电路复制。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条