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循环更多地表示了一种电路复制。
文章评论(0条评论)
登录后参与讨论