- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
设计与验证:Verilog HDL 学习笔记
连接操作符:
{m,n} :将m和n连接起来,产生更大的向量
{n{m}} :将m重复n次
-----------------------------------------------
P36:基数格式的整数为无符号数,如-4d12=4294967284, 把-12的二进制数看成了无符号数。
-----------------------------------------------
由于连续赋值语句中被赋值的变量在仿真器中不会存储其值,因此该变量是线网类型
(Net) 的,而不是寄存器类塑的。
另外,线网类型的变量可以被多重驱动,也就是说可以在多个连续赋值语句中驱动同一
个线网。
但是寄存器变量就不同了,它不能被不同的行为进程(例如always 语句块)驱动。
-----------------------------------------------
建议使用asslgn 对组合逻辑建模,这是因为assign 语句的连续驱动特点与组合逻辑的行
为非常相似,而且在assign 语句中加延时可以非常精确地模拟组合逻辑的惯性延时。
----------------------------------------------
需要注意的是,连续赋值语句中的延时具有硬件电路中惯性延时的特性,也就是说任何
小于其延时的信号变化脉冲将被滤除掉,不会体现在输出端口「。关于这部分内容将在本书
第8 章中详细介绍。
另外. assign 语句中的延时特性通常是被逻辑综合工具忽略的,因为综合工具要将
Verilog 语言模塑综合成逻辑电路,而逻辑电路的延时又是由基本的单元库和走线延时决定
的。用户无法对逻辑单元指定延时,但是可以在综合和实现工具中添加时序约束,让工具尽
量满足设计的时序要求。
-----------------------------------------------
RTL 仿真器严格按照Verilog 的仿真语义执行RTL 的仿真过程,而综合工具通常只是根
据代码推断设计者的意图,然后生成相应的电路结构,因此,综合的过程有一定的主观推断
性,并不严格遵守Verilog 语义,另外不同综合工具的判决标准也不一样。
如果仿真和综合结果不一致,就说明源代码中很可能存在隐患,不符合Verilog 的语
义,会错过许多bug ,增加设计的不稳定性,这种情况是每个设计都应该尽量避免的。
-----------------------------------------------
三、过程连续赋值
在Verilog 语言中还有一种过程赋值语句,叫作过程连续赋值它们也出现在always
和initial 语句块中。
过程连续赋值的类型主要有以下两种。
1 assign 与deassign: 在过程语句块中强制为寄存器变量赋值并释放;
2 force 与release: 在过程语句块中对寄存器和线网进行强制赋值和释放。
--------------------------------------------------
三、语旬组的标识符
语句组既可以有标识符,也可以没有标识符。
当→个语句组有标识符时,在语句组内部可以定义局部变量,而不会传递到语句组的外
部。然而在仿真语义上,这个变量是静态变量,它的值在整个仿真运行周期中是不变的,而
且也不会与其他语句组中同一个名称的变量发生冲突。
例如:
integer i; //always 语旬以外的i 变量
always @ (_..)
begin: SORT
inteqer i; //语句组内部的主变量
for (i=0;i=7;i=i+1)
end
在always 以外定义的i 变量和在always 里面定义的i 变量属于两个不同的变量,并不
冲突。在仿真的时候它们将占用两块不同的内存,类似于C 语言中的静态局部变量。
----------------------------------------------------
在l~例中实际t使用了if-else 优先级编码的特点, sela 的判断优先级最高,因此在逻辑
中的级数要明显少→些,参考图3-11 。如果sela 为关键路径的话,就可以利用这样的优先
级编码提高设计的性能。
在使用i f.. .else 语句时,尤其是当该语句被用在组合逻辑中时,需要注意不要引入
Latch 电路。
在数字同步逻辑设计中应该尽量避免产生锁存器,肉为锁存器容易引起竞争冒险,同时
静态时序分析工具也很难分析穿过锁存器的路径。
----------------------------------------------------
参数化模块
参数的用户定制方法有以下两种:
1. 通过defparam
文档评论(0)