verilog fpga数字系统设计学习笔记

verilog fpga数字系统设计学习笔记

ID:13551201

大小:36.50 KB

页数:3页

时间:2018-07-23

verilog fpga数字系统设计学习笔记_第1页
verilog fpga数字系统设计学习笔记_第2页
verilog fpga数字系统设计学习笔记_第3页
资源描述:

《verilog fpga数字系统设计学习笔记》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、VerilogFPGA数字系统设计学习笔记以下是本人学习VERILOG以来的一些笔记总结,希望能帮助到一些入门的同学。希望各位批评指正。本笔记将持续更新。一、有关verilog数字电路设计1Verilog设计基本思路是:设计产生行为和功能准确的电路结构,这些电路结构看起来相当复杂,难以理解,而行为的描述比较直观。我们可以用比较直观的行为描述来开始设计过程,通过Verilog语言的仿真测试验证其正确后利用一种工具把行为模块自动转化为焖鸡模块,再次经过Verilog语言的仿真测试试验验证其正确后,便完成了前端设计,接下来是后端制造的准备工作。2任务是不可综合的,只能用于仿

2、真,编写测试脚本;函数可以综合,一般用于计算,函数必须要有一个输入,只能返回一个值,并且至少要一个输入变量。函数属于组合逻辑,所有内部定义的变量都是临时的,这些变量综合后为wire。3过程性赋值语句中的任何延时都将忽略,不可综合;4Inout的使用:inoutio_data;regout_data;regio_data;regio_link;assignio_data=io_link?out_data:1’bz;作为输入时,将io_data置为高阻,即io_link=0;作为输出时,io_link=1即可。5基数(’b,’h,’o,’d)制定要明确化,要不然会产生警告

3、,如写1,最好写成1’b1;6条件运算符(?:)的使用不超过一次;7尽量避免产生latch,latch出现最明显的地方:1if语句使用缺少else语句(前提是不是时钟边沿触发);2case语句中情况不完整的情况,并且在有多个输出时,如果不对所有条件下得所有输出进行描述(case对应完整,而每个case中有多个赋值),don'tcare的赋值应该给1’b1或1’b0,而不应该给1’bx,因为会导致RTL与焖鸡仿真结果不一致。如要锁存器来描述,应用只有锁存器描述的always语句来生成锁存器,甚至描述模块化;8禁用非阻塞赋值进行初始化赋值;9禁止在时序电路中对同一信号重复

4、赋值;10if的并列描述是禁止的;11一个always语句不应使用多个时钟边沿,会导致生成的电路与预期的不一样,如:Alwaysbegin@(posedgeclk)QA<=A;@(posedgeclk)QB<=B;end12if语句风格:减少相同内容选项;减少if语句的嵌套次数(最多5次);减少elseif的使用;case语句风格:一定要用defalut,defalut语句中赋值尽量用x,否则会导致仿真前后不一致,而且在defalut中描述固定值会增加电路面积,速度也会变慢。13always语句中应该避免组合反馈电路,并且在always纯组合逻辑中参与赋值的信号都必须

5、有明确的值,即在赋值表达式右端参与赋值都必须在always@(敏感列表)中列出;14for语句循环不超过10次,for语句中禁止循环变量和常数以外的运算,且for语句中有不定变量时会报错;15wire型变量:wire型变量常用来表示以assign关键字指定的逻辑信号,veriloghdl中输出,输入信号默认为wire型。Wire可以用作任何方程式的输入,也可用作assign语句或实例元件的输出,wire表示单个门驱动或连续赋值语句驱动,而tri表示多驱动的网络型数据;16在always内被赋值的每一个信号都必须定义成reg型,初始值为x;17进行取模运算时,结果值的符

6、号位采用模运算式里第一个操作数的符号位,如:-10%3=-111%-3=2;18深入理解阻塞与非阻塞:①阻塞:一般可综合语句的赋值操作在RHS不能设定有延迟(即使零延迟也不允许);②非阻塞:不允许用于连续赋值,只能对寄存器变量进行赋值,因此只能用于“initial和always”快中,有关设计数字逻辑电路时阻塞与非阻塞的几点原则:①时序电路建模时,采用非阻塞赋值操作;②锁存器电路建模时采用非阻塞赋值;③用always描述组合电路时,应采用阻塞赋值语句;④在同一个always快中描述时序和组合逻辑电路混合电路时,采用非阻塞赋值;⑤不要在同一个always语句中同时使用非

7、阻塞和阻塞赋值;⑥严禁在多个always中对同一个变量赋值;⑦用$strobe系统任务来显示时,应该采用非阻塞赋值的变量值;⑧在赋值时不要使用#0延迟;⑨最后一个非阻塞赋值决定了变量的值。19当输出端口与定义的reg同名时,在always模块中赋值操作,但综合并未使用FF。因为wire型指定的数据和网线通过组合逻辑实现,而reg型指定的数据不一定就是用寄存器实现。但这种方法带给很大便利,reg取和输出端口同样的名称,可以在always中赋值,又实现连续赋值;20Testbench描述的注意点:①使用parameter;②fork_join内不要描述太

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。