FPGA基本语法及重点

来源:互联网 发布:松下多功能机软件 编辑:程序博客网 时间:2024/06/06 09:33

1、模块定义

模块定义跟C语言的函数很相似。

模块必须使用“module”关键字,他也没有返回值。

模块没有beginmodule,只有endmodule

2、阻塞赋值与非阻塞赋值

a=b就是阻塞赋值,需要一步一步来,先有a再有b,它会阻塞别的语句。

a<=b就是非阻塞赋值,它可以和其他语句并行。并行!这可以硬件的特点。

3、如何给一个端口赋值?

Verilog中有两种数字生命:指明位数的数字和不指明位数的数字

指明位数的数字表示形式:<size>’<base format><number>

Size用来指明数字位宽度,只能用十进制整数表示

Base format包括十进制(’d或’D),二进制(’b或’B),八进制(‘o或’O),十六进制(‘h或’H)

例如

4’b1111   //4位2进制数

cnt = 1'b0;  //就是给端口cnt赋0值

4、always 与 always@ 有什么区别?

有区别,而且很大,always 和c语言中的while语句或者说和if...then...有点类似,但不完全相同,always会一直执行,但是always@是有触发条件的时候执行。

通常会这样使用:

always@(条件)

begin

//具体逻辑

end

5、always后面的条件:

always@(posedge x)表示当x信号出现上升沿

always@(negedge x)表示当x信号出现下降沿

这两种一般用于时序逻辑,而在组合逻辑中要使用电平触发。不懂时序逻辑和组合逻辑的朋友,建议你先不要学FPGA了,去看看数字电路,我们搞硬件的不像那些软件的人,

上个培训班就IT的了。

6、系统任务

Verilog为某些常用操作提供了标准的系统任务(也叫系统函数)这些操作包括屏幕显示、线网值动态监视、暂停和结束仿真等。所有的系统任务都具有$<keyword>的形式。

显示信息         $display(p1,p2,p3,…,pn);

         $display会自动在字符串的结尾处插入一个换行符,因此如果参数列表为空,则display的效果是现实光标移动到下一行

 

监视信息         $monitor(p1,p2,p3,…,pm);

系统函数$monitor对其参数列表中的变量值或者信号值进行不间断的监视,当其中任何一个发生变化的时候,显示所有参数的数值。$monitor只需调用一次即可在整个仿真过程中生效。

7、信号类型:wire和reg有什么区别?

Verilog中有两种信号类型,wire可以当做是组合逻辑的输出,而reg是寄存器类型,可以把它想象成D触发器的输出。

它们的区别在于:reg型信号可以使用always语句,实现条件赋值。

8、Verilog中的变量类型:

一共有三种:integer整形  real实型  time

相比较C语言而言,变量类型少了很多。其中integer是至少32位,并且是以补码的形式保存。real型不指明位数。

有一点很重要,这些变量,在FPGA中是不对应任何硬件实体的。我猜测,他们可能只存在于代码层次,会随着编译器的优化,最终有可能会存在于寄存器中。