首页 > 代码库 > verilog基础--altera培训

verilog基础--altera培训

参数化

Localparam :与prameter一样,但不能被重写。

Verilog-2001 格式,

module mult_acc

    #(parameter size = 8 )

    (...);

 

数字格式:size、tick、letter和实际数字本身。

可以增加s,表示数字的符号或者2元互补。

Signed(‘s’or ‘S’) 16’shFA = -16’h06

负数:

-8‘d3

算术运算符:

 技术分享

逐位运算符:

 技术分享

Ain&cin = 3’b000

 

 Reduction操作:将矢量缩短为一个比特

技术分享

关系运算符:

 技术分享

 

 

如果任何一个运算符含有‘Z’或者‘X’,结果都是不可知的。

相等运算符:

 技术分享

Equality运算符只支持‘1’和‘0’,如果有Z或X,结果是不可知的。

Case Equality支持所有数值的对比。X和Z被认为完全不同的数值,必须完全匹配。通常用于仿真环境。

逻辑运算符:

 技术分享

支持一元或者二进制。

返回一个比特。

如果’Z’或者’X’出现在操作数中,将导致结果不可知。

移位运算符:

 技术分享

左移:空位填充。

右移:逻辑和算术无符号移位被0填充,算术有有符号移位以符号位填充。

条件运算符、连接运算符和复制运算符。

 技术分享

运算符优先级:

 技术分享

 

 

 

 

 

 

Always 和Initial 进程中有两类分配,Blocking和Nonblocking。

 

敏感度表

Always @( a,b,sel)

always@ *

*是对所有输入的简写。

 

case声明会把X和Z当做逻辑什,将基与条件列表中的X和Z对比。问号字符表示不重要。

casez声明把表达式或者条件中的所有Z值当作不重要。

casex把X和Z值当做不重要,面是不是逻辑值

casez(encoder )                      4b1??? : high_lvl = 3;              4b01?? : high_lvl = 2;              4b001? : high_lev = 1;              4b0001 : high_lel = 0;              default : high_lev = 0;              endcase   
//if encoder = 4‘b1z0x,then high_lvl = 3

 

  

casex(encoder )                      4b1xxx: high_lvl = 3;               4b01xx: high_lvl = 2;               4b001x: high_lvl = 1;               4b0001: high_lvl = 0;               default: high_lvl = 0;               endcase                              if encoder = 4b1z0x,then high_lvl = 3 

 

                                   

 

For Loop

 

always @( inp,cnt)begin                          result[7:4] = 0;                             result[3:0] = inp;                           if( cnt == 1 )begin                              for( i = 4; i <= 7;i = i + 1) begin              result[i] = result[i-4];                 end                                          result[3:0] = 0;                         end                                      end         

 

                                 

                                             

 技术分享

 

 

同步与异步

同步预设和清除

 技术分享

D触发器

 

时钟使能(Clock Enable)

 技术分享

 

 

 

两类子程序

函数

 技术分享技术分享

  由上面的逻辑左移只可以看出左移之后高位截取掉了。但上面的程序中r = r + b << i中,b是8位要进行先

移位再求和的操作,但乘法运算中高位是肯定没有截取的。所以个人认为在运算中,是以位宽最宽的为基础进行

运算的,也就是把8位扩展到了16位来运算。

任务

技术分享技术分享

1) 函数返回分配给函数名称的数值,因此函数中的最后一次运算通常会把一个数值分配给函数名。

2) 函数只能调用其他函数,而任务可以调用函数或者任务

3) 函数是组合逻辑,而任务没有这一限制

4) 函数至少要有一路输入,任务不需要有任何输入,但是可以有

5) 函数必须恰好返回一个变量,任务可以返回0,或者使用输出变量的更多变量

6) 函数不能有in-out或者output变量

 

verilog基础--altera培训