概述
1、数值二进制表示:二进制原码、二进制反码、二进制补码
原码转反码,假如原码是正数,反码等于原码:假如原码是负数,除了符号位不变,其他的全部取反。
反码转补码,假如原码是正数,补码等于反码:假如原码是负数,补码等于反码加一(不用递进)
10进制 | 二进制原码 | 二进制反码 | 二进制补码 |
0 | 0000_0000 | 0000_0000 | 0000_0000 |
1 | 0000_0001 | 0000_0001 | 0000_0001 |
-1 | 1000_0001 | 1111_1110 | 1111_1111 |
127 | 0111_1111 | 0111_1111 | 0111_1111 |
-127 | 1111_1111 | 1000_0000 | 1000_0001 |
-0 | 1000_0000 | 1111_1111 | NA |
128 | NA | NA | NA |
-128 | NA | NA | 1000_0000 |
数字电路系统中,一般使用补码表示数值,在数学上面使用加减法运算实现数字数字电路实现,原因:原码的-1+1并不等于零,但是补码的-1+1是等于零的。
2、可综合与不可综合的verilog语言描述
可综合就是可以把Verilog描述转换为基本的数字电路底层cell的描述。
支持综合的语法:module、input、output、inout、posedge/negedge、always、assign、if-else、case-default-endcase、wire/reg、function等等;
不支持综合的语法:initial、#延迟、time、real、finish、defparam、fork-jion、wait、casex/casez等等。
3、条件操作符:
condition_expression ? true_expression : false_expression
4、时延:
时延一般是不可综合的
时延控制:常规时延、内嵌时延,这个两种时延的效果不一样,如果赋值语句的右端是常量,能达到相同的时延效果,如果是变量则产生不同的效果,内嵌时延赋值方式:遇到延迟语句后,先计算出表达式右端的结果,然后再延迟一定的时间,赋值给目标信号。、
5、边沿触发事件控制:
分为一般事件控制、命名事件控制、敏感列表、电平敏感事件控制。
6、循环语句:
while、for、repeat、forever,循环语句只能在initial和always中使用;
While循环中,一直循环到while (condition),中的condition为假;
For循环中,一直循环到for(initial_assignment; condition ; step_assignment)中的condition为假;
Repeat循环中,执行的是循环的固定次数;
Forever循环中表示的是永久循环,系统函数$finish可以退出forever。
7、过程赋值语句:
Assign是过程赋值语句,deassign取消过程赋值语句。值对象只能是寄存器或寄存器组,而不能是 wire 型变量。
Force强制赋值操作,release,取消强制赋值,表示第二类的过程赋值语句,使用方法和效果,和 assign 与 deassign 类似,但赋值对象可以是 reg 型变量,也可以是 wire 型变量。
8、端口声明:
端口类型有 3 种: 输入(input),输出(output)和双向端口(inout)。input、inout 类型不能声明为 reg 数据类型,因为 reg 类型是用于保存数值的,而输入端口只能反映与其相连的外部信号的变化,不能保存这些信号的值。output 可以声明为 wire 或 reg 数据类型,Verilog 中,端口隐式的声明为 wire 型变量,即当端口具有 wire 属性时,不用再次声明端口类型为 wire 型。但是,当端口有 reg 属性时,则 reg 声明不可省略。
9、模块例化:
在一个模块中引用另一个模块,对其端口进行连接
命名端口连接:可以与引用的module的声明端口顺序不一致,而且某些输出端口的并不需要外部连接,input端口在例化的时候不能删除,但是output端口在例化时候可以删除。
顺序端口连接:这种方法将需要例化的模块端口按照模块声明时端口的顺序与外部信号进行匹配连接,位置要严格保持一致
10、Verilog 带参数例化:
参数覆盖有 2 种方式:1)使用关键字 defparam,2)带参数值模块例化。
Defparam: 可以用关键字 defparam 通过模块层次调用的方法,来改写低层次模块的参数值。
带参数模块例化:将新的参数值写入模块例化语句,以此来改写原有 module 的参数值。
11、常数函数:
paramater 在编译之前就计算出结果为常数的函数,常数函数不允许调用全局变量和系统函数,但是可以调用另外一个常数函数。
12、Automatic函数:
静态的函数,每次调用都是使用同一个存储空间,若某个函数在两个不同的地方并发调用,那么两个函数调用行为同时对同一块地址进行操作,会导致不确定的函数结果。但是用automatic函数的话,系统在调用函数的时候会自动分配新的内存空间,automatic 函数中声明的局部变量不能通过层次命名进行访问,但是 automatic 函数本身可以通过层次名进行调用。
wire [31:0] result = factorial(4);
function automatic integer factorial;
input integer data;
integer i ;
begin
factorial =(data=>2)? data*factorial(data-1):1;
end
endfunction
最后
以上就是冷傲麦片为你收集整理的【Verilog基础】4.基本语法的全部内容,希望文章能够帮你解决【Verilog基础】4.基本语法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复