原创 【博客大赛】夏宇闻《verilog数字系统设计教程》语法注意事项—总结

2013-8-1 11:05 838 0 分类: FPGA/CPLD

夏宇闻《verilog数字系统设计教程》语法注意事项总结

第三章:数据类型及其常量和变量

1)网络(wire)类型的变量不能存储值,而且必须受到驱动器(如门,连续赋值语句)的驱动,否则默认情况下其值为高阻Z

2)寄存器(reg)是数据存储单元的抽象,默认初始值为不定态Xalways赋值语句中的每个信号都必须为reg类型。Reg的数据可以赋值为正,也可以赋值为负,当一个reg数据是一个表达式中的操作数时,它的值被当做无符号值,如一个4位的reg,初始化时赋值-1,表达式进行计算时值被默认为+15

3)对存储器(reg[m:0] mem[n:0])进行地址索引的表达式必须是常数表达式。

第四章:运算符、赋值语句和结构说明

1)不同长度的数据进行位运算,系统会自动的将数据按右端对齐,位数少的操作数在相应高位用0填满,以使两个操作数据按位进行操作。

2)一个m位的数左移n位,则移位后要用m+n位的数表示才可,一个m位的数右移n位后,仍可用m位表示。

3)非阻塞赋值语句(<=)上面的赋值语句不能被下面立即使用,块操作完后才能完成这次赋值操作,所赋值是上一次得到的,在编写可综合时序逻辑时,这是常用的赋值方法。

4)阻塞赋值语句(=)赋值语句执行完块才结束,在赋值语句执行完立刻生变,时序逻辑中使用时会产生意想不到的结果。

Always @posedge clk           

Begin                            

b<=a;                            

End       

Always @posedge clk

Begin

b=a;

End

综合结果实际上是一样的

20130801110448562001.jpg

                      

但是,

Always @posedge clk           

Begin                            

b<=a;   

c<=b;                      

End       

Always @posedge clk

Begin

b=a;

c=b;

End

综合结果却不同,

20130801110452289002.jpg 20130801110457290003.jpg

写代码时一定要注意!!

5begin end用于标识顺序执行的语句,也就是说begin end内的语句是顺序执行的,被称为顺序执行块;fork_jion语句用来标识并行执行的语句,也就是说fork_jion内的语句是并行执行的,被称为并行执行块。顺序执行块的起始时间是第一条语句开始执行的时间,结束时间是最后一条语句执行完的时间,并行执行块的每条语句开始时间是相同的,结束时间是按时间排序在最后结束的语句的执行时间。

第五章:条件语句、循环语句、块语句和生成语句

1)条件语句必须在过程语句块中使用(initial always),其他地方不能使用。

2initial语句只执行一次,always语句不断重复的执行。

第六章:结构语句、系统任务、函数语句和显示系统任务

1)新版verilog1364-2001版的语法中always语句中的关键词“or”也可以用“,”来代替。也可以用always@(*)表示所有的敏感列表。

2)函数的定义不能包含任何的时间控制语句,即任何使用#@,或wait来标识的语句。函数只能与主模块共用一个仿真时间,而任务可以定义自己的仿真时间。函数不能启动任务,任务能启动其他任务和函数。函数至少要有一个输入变量,而任务可以没有或有多个任何类型的变量。函数返回一个值,而任务不返回任何值。

 

                       第十四章 深入理解阻塞与非阻塞赋值的不同

1)  在描述组合逻辑的always块中用阻塞赋值,则综合成组合逻辑的电路结构;

2)  在描述时序逻辑的always块中非阻塞赋值,则综合成时序逻辑的电路结构;

为什么一定要这样做,为的是保证综合前仿真和综合后仿真一致的缘故。如果不

按照上面的要求做,也有可能综合出正确的逻辑,但前后仿真结果不一致。

3)  阻塞赋值过程中,先计算右值,这时赋值语句不允许任何别的verilog语句的干扰,直到现行的赋值语句完成时刻,即把右值赋给左值时,它才允许别的赋值语句执行,所谓阻塞赋值从概念上讲后面的赋值语句是在前一句结束后才开始赋值的。

4)  非阻塞赋值过程中,在赋值操作开始的时刻计算非阻塞赋值语句的右值,赋值操作结束后才更新左值,相当于在赋值语句结束时刻将右值集体赋给左值,在计算右值期间不影响其他语句的执行(如计算右值)。

5)  Verilog编程要点:1、时序电路建模时,用非阻塞赋值;2、锁存器电路建模时,用非阻塞电路赋值;3always块建立组合逻辑时,用阻塞赋值;4always块又有时序逻辑又有组合逻辑时用非阻塞;5、不要在多个always语句中对同一个变量赋值。

触发器电路:

Always @(posedge clk)

Begin

  Q<=d;

End

锁存器电路:

Always @(en,d)

Begin

  If (en)Q<=d;

end

广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
sunyzz 2017-08-19 10:38
【博客大赛】AVALON总线介绍
1、AVALON总线简介Avalon总线是一种协议较为简单的片内总线,是ALTERA公司定义的片上互联总线,该总线可以将诸如NIOS II的CPU与其他外设连接起来,进而进行数据交换。AVALON总线...
sunyzz 2017-08-17 21:36
【博客大赛】不要轻易做职场滥好人
小A毕业于国内普通高校,但是他聪明,勤奋,能干,动手能力强,可是即便有这些优点也不能让小A轻轻松松找到一份好工作。这不,去年9月份小A好不容易找到一份工作,然后立马就入职了C公司,生怕C公司过两天不要...
sunyzz 2017-08-16 21:15
【博客大赛】IC设计低功耗技术四
五:工艺层面的降低功耗前面几节都是在讨论设计人员如何在前期阶段,中期阶段降低功耗,涉及到软件层面的,硬件层面的,这些技巧基本都是前辈总结出来的,或者根据理论推论出来的。但是到了后期,想降低功耗基本就要...
sunyzz 2017-08-14 22:35
【博客大赛】IC设计之低功耗技术三
四:RTL(寄存器传输)级的低功耗设计4.1 状态机的设计状态机编码中一般有两种方式,普通的二进制编码,特殊的格雷码,格雷码的特点是两个数据之间的跳变时只会有一个bit在toggle,显然比起多bit...
sunyzz 2017-08-12 16:51
【博客大赛】IC设计之低功耗技术二
三、架构层面的降低功耗系统的实现有很多的方式,每种方式对功耗的影响都不相同,本节主要介绍架构对功耗的影响。3.1 高级门口电路 在同步电路系统中,时钟占据了大部分的动态功耗,因而在一些情况下,如果有些...
sunyzz 2017-08-12 10:37
【博客大赛】IC 设计之低功耗技术一
一、前言随着计算机技术和微电子技术的迅速发展,嵌入式系统应用领域越来越广泛。节能是全球化的热潮,如计算机里的许多芯片过去用5V供电,现在用3.3V,1.8V,甚至更低的电压。目前的低功耗设计主要从芯片...
广告
我要评论
0
0
广告
关闭 热点推荐上一条 /3 下一条