verilog语言类似于C语言,但是又有所不同。我想先通过书本上例子的编程来比较出两者的不同点,应该能有利于对verilog的掌握。
C中的函数调用和v中的模块调用:C的调用包括调用库函数和自定义函数,前者直接调用函数名称,括号中加入实参即可;后者则在调用之后的主程序内添加函数的定义(其中有形参、实参两种参数,形参是函数内部使用的参数,实参是调用函数时输入输出函数的具体值),v的调用与之极其类似,只不过“库函数”成为了“原件”,“函数库”成了“原语库”;自定义部分中,“自定义函数”成了“自定义子模块”,这里和C略有不同,我觉得这里更像是C中的结构体和函数的结合,当我需要调用一个自定义的部件时,先在上层模块中调用“子模块名+实例元件名(.子模块端口1(上层模块连接信号1),.子模块端口2(上层模块连接信号2),…………,.子模块端口n(上层模块连接信号n))”,套用C中结构体和函数中的名词,上面的结构可以写成“结构体名称+结构体类型(.形参1(实参1),.形参2(实参2),………….形参n(实参n))”
特殊的“always”模块:1、if、case条件语句只能用在“always”模块中,在always之外的部分使用条件判断语句,可用类似下面的化简语句:assign out=enable?a:b;2、在“always”模块中的数据类型必须是reg型的。
注:在整个程序最后一个出现的endmodule,不能出现在最后一行,否则endmodule无法被识别。
2011.3.2