欢迎来到天天文库
浏览记录
ID:27523996
大小:25.00 KB
页数:4页
时间:2018-12-04
《Verilog的两个误区.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、Verilog的两个误区 Verilog的两个误区:使用Reg类型还是Net类型:Reg类型只在过程块中被赋值;而Net类型则在过程块外面被赋值或者驱动. 阻塞赋值和非阻塞赋值:Verilog中竞争发生的条件:两个或多个语句在执行顺序不同时导致不同的结果,则存在竞争.Nonblocking不是一个类型;Blocking赋值是一个单步过程,计算RHS,并更形LHS是不可中断的.七条准则:1.时序逻辑和锁存器,使用非阻塞赋值2.always块中的组合逻辑,使用阻塞赋值3.同一always块,时序组合混合逻辑使用非阻塞赋值4.通常情况下,在同一always块中
2、不要混合使用阻塞与非阻塞赋值5.不要在多个always块中对同一变量进行赋值6.使用$strobe显示非阻塞赋值得信号7.不要用#0的过程赋值Verilog中的分层事件队列:活动事件:阻塞赋值;计算非阻塞赋值的RHS;连续赋值;$display命令;计算输入并改变原语的输出.这些事件可能按照任意次序调度.非活动事件:#0的阻塞赋值非阻塞事件:更新非阻塞赋值的LHS监视事件:$monitor命令;$strobe命令经验:在always块中使用非阻塞赋值来产生时序逻辑和锁存器在always块中使用阻塞赋值来产生组合逻辑在always块中使用非阻塞赋值来产生同一块
3、中的时序和组合逻辑在纯组合逻辑中使用非阻塞赋值可能会导致功能错误 阻塞赋值和非阻塞赋值混合使用的方式:将组合逻辑赋值通过时序表达式表示或者将组合逻辑赋值与时序逻辑分开,在独立的语句块中描述不推荐在同一always块中混合使用阻塞和非阻塞赋值 几个关于非阻塞赋值的错误理解:错误1:无法使用$display命令显示非阻塞赋值变量正解:非阻塞赋值变量的更新在所有$display命令之后错误2:#0让一个赋值在每个时间步的最后执行正解:#0只会让赋值语句进入非活动事件队列错误3:在同一always块中对同一变量进行多次非阻塞赋值是不允许的正解:在IEEE1364
4、verilog标准中定义了上述赋值,最后一个非阻塞赋值起作用 模拟开始时候的困难:不同的模拟器,不同的模拟选项导致开始模拟时现象不同建议:在0时刻通过非阻塞赋值设置reset信号;第一个半周期设置clock为0 编写Verilog代码的一些经验:Verilog文件名和模块名相同不要在可综合代码中使用casex语句当在可综合代码中使用casez语句时要小心当写case语句时,对存在不关心的cases时使用casez,使用?代替Z来表示不关心的cases Verilog编写状态机相关:状态机分类:Moore(输出只与当前状态相关)和Mealy(输出与当前状
5、态和输入相关)二进制编码和One-Hot编码状态机的基本块:下一状态度组合逻辑;时钟同步的当前状态逻辑;输出组合逻辑两个always块写状态机,使用三个always块,如果输出需要寄存使用高效的One-Hot状态编码,组合输出经验:每个状态机作为一个独立的Verilog模块对状态进行预定义,状态赋值使用状态名作参数,不要使用`define,多使用parameter两个always语句块的状态机,一个always用来描述状态向量寄存器的时序逻辑.一个用来描述下一状态度组合逻辑.组合输出可以通过连续赋值语句或者在下一状态度组合always块中描述.
此文档下载收益归作者所有