首页 理论教育可综合设计的Verilog硬件描述语言

可综合设计的Verilog硬件描述语言

【摘要】:4)其他:finish等系统任务;除法;table;stong1、weak0等信号强度的描述。

数字电路设计终极目标是把语言描述的设计变成实实在在的电路,这个过程就是综合,而有的语言是不能被综合的,比如延时“#2”等表述,所以我们在设计的时候需要注意使用可综合的表达,最终才能转换为各个基本的数字元件。

可综合的设计:可综合的建模模型有时序逻辑和组合逻辑,常用的always块、if、case、assign、function等都是可以综合的,能够转换成相应的门器件,经过一定的组合和连接,完成设计的功能,在仿真和硬件上实现的功能一致。

不可综合的设计:在仿真的测试程序中可以使用不可综合的设计,能达到一定的效果,比如“#10”,在仿真中表示延时10个时钟周期,在信号的传输中确实能体现出来,但当综合工具遇到这句话时,它会被忽略,在硬件上并不能体现延时10个时钟周期的效果,与没有延时的效果一样。还有很多这样不能综合的表述,它们在综合的过程中有的被忽略,有的会报错,简单总结一下,以下这些表述都是不能被综合的,使用时需要注意。

1)数据类型定义中event、real、time、trireg等;

2)操作符===、!==;

3)语句:循环次数不确定的循环语句,比如forever、while;initial语句块一般用于仿真中对信号初始化;用过程持续赋值语句assign、deassign对reg型变量赋值;强行赋值语句force、release;并行执行语句fork、join;非门级原语primitives;用户自定义的原语(UDP);wait语句;延时语句#。

4)其他:978-7-111-55094-5-Chapter05-17.jpgfinish等系统任务;除法(分母不是2n);table;stong1、weak0等信号强度的描述。

可综合性设计任重道远,需要在平时的设计中点滴积累,养成良好的设计习惯,例如:

1)所有的寄存器都应该能被复位,用复位信号来初始化变量,并尽量使用全局复位作为系统复位,并且最好采用异步复位,同步释放的方法;

2)不要在同一个always块中同时出现阻塞赋值和非阻塞赋值;

3)尽量采用同步时序逻辑设计电路,并且尽量避免使用锁存器(锁存器是不完全的条件判断语句生成的,在if语句和case语句的所有条件分支中都对变量明确的赋值);

4)敏感信号中对同一个信号不能同时使用posedge和negedge,比如:always@(posedge clk or negedge clk);

5)同一个reg型变量不能在多个always块中被赋值;

6)在always块中描述组合逻辑,敏感信号列表中应包含所有的输入信号,建议使用always@(*)的表达方式

上述所列是通常容易犯错误的地方,一千个读者有一千个哈姆雷特,错误也是千变万化,因人而异,但万变不离其宗,可综合的设计就是要把设计变成电路,在电路中有所体现,在调试过程中,可以根据综合工具的提示对代码进行验证和修改,由此可见,仿真工具只能帮你一时,不能帮你一世啊。它帮助我们验证代码的功能,但实际的情况还是要经过综合工具的考验,拿到板子上真操实练,方得始终。