跟着我从零开始入门FPGA之(Verilog语法)

来源:本站
导读:目前正在解读《跟着我从零开始入门FPGA之(Verilog语法)》的相关信息,《跟着我从零开始入门FPGA之(Verilog语法)》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《跟着我从零开始入门FPGA之(Verilog语法)》的详细说明。
简介:简述Verilog语法

1、Verilog语法

没错,我们就是拿C语言照猫画虎,下面是一个“老虎”的模型。

我们一个个看他跟“猫”不一样的地方

module nand(

input in1,

input in2,

output out

);

wire tmp;

assign tmp = in1 & in2;

assign out = ~tmp;

endmodule

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

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

2、模块没有beginmodule,只有endmodule

3、模块对外接口有input,output,inout,但为了入门着想,只谈input和output

模块内部还有个中间变量耶,是不是看见了tmp就有很熟悉的感觉了。

没错,他就是中间“变量”,在硬件上他就是一根导线,wire望文生义即可。

看见了“=”就应该猜到这是赋值语句了,没错,但Verilog的语法要求前面必须有个苦B的assign关键字

至于“&”和“~”这2个运算符号,就不讲了吧,C语法搞不清的兄弟,对不住了有人会说,你这“变量”到底是int还是long还是flot抑或double呢?

好了,咱继续照猫画虎,不过老虎毕竟跟猫是不一样的,比如老虎会虎啸,猫只会喵喵。

wire[7:0] tmp;

这一下子把tmp从一根线,扩展成了8根线,觉得是7根线的自己去看C语言课本去。

好了,我们要虎啸了,同时喵喵几下,对比着看

wire[7:0] tmp;wire[3:0] high;

assign high = tmp[7:4]; //虎啸的Verilog

high = tmp<<4; //喵喵的C语言

硬件就是硬件,可以随意飞线,你甚至可以把tmp里面的bit6,bit3,bit1,bit7组成一个Nibble不知道Nibble不要紧,它就是Half Byte的

assign high = {tmp[6],tmp[3],tmp[1],tmp[7]}; //虎啸的Verilog

high= (tmp & 0x40) ? 0x08 : 0; //喵喵的C语言

high |= (tmp & 0x08) ? 0x04 : 0; //喵喵的C语言

high |= (tmp & 0x02) ? 0x02 : 0;; //喵喵的C语言

high |= (tmp & 0x80) ? 0x01 : 0;; //喵喵的C语言

这下知道喵喵跟虎啸的差距了吧,C语言,把如猫添翼?表达式都用上了,还是4行代码才表达出自己的意图。当然,Verilog也有他的?表达式,那用上了,就真的是如虎添翼了

C语言的switch/case语句

switch(tmp)

{

case 1:

high =1;

break;

case 3:

high =5;

break;

case 5:

high =2;

break;

case 9:

high =1;

break;

default:

high =11;

}

Verilog的case语句

case(tmp)

1: high =1;

2: high =5;

3: high =1;

4: high =1;

default: high = 1;

发现了没,首先打字要少敲很多case了吧,case已经升级当主管了,小罗罗们直接跟这冒号就可以了。

细心的文艺青年,应该发现了一个大秘密,那个四处张扬,到处留种的break居然不见了。

Verilog不需要break了,它默认每个语句自动break,这时有人又担心,那我有2个语句咋办?

问得好,又有2个keyword要粉末登场了,begin/end学会Pascal语言的朋友,肯定认得他俩,在C语言中被{和}所替代

Verilog本来也想用{和}的,毕竟写代码是要敲键盘的,能少敲谁也不愿意多敲。可惜{和}被用掉了,用在了哪里?到上面找去,

case(tmp)

1,2,3,4:

begin

high =1;

high1 =3;

high8 =9;

end default:

high = 1;

这个排版,是不是又点更像C语言的风格了

你也许已经看到了,C语言中多个case项公用一段代码的情况,在Verilog里面也有,而且更TMD的简洁if/else语句就不讲了,这方面猫和老虎太像了,照猫画虎就八九不离十了。

好了,下面有个用得非常多的always语句

always(tmp1, tmp2)

begin

out1 = tmp1 ^ tmp2;

out2 = tmp1 + tmp2;

end

又是喵喵和虎啸的区别了,C语言的while也是always的意思,但while不如always忠诚。

C的while语句,是随着CPU的时钟节奏,一步一步的走,然后Loop循环回来,直到永远或者有人叫她出台(霸王的break或者while条件不满足了)

Verilog的always可就忠诚多了,只要tmp1和tmp2中的任何一个变动,out1和out2都跟着动,clk来不来都会工作,这就是主动和被动的差别好了,

看到这里,你应该知道,文艺青年和苦B青年其实也有很多共同之处的,如果你认识文艺青年,那跟苦B青年交朋友也不难了。

提醒:《跟着我从零开始入门FPGA之(Verilog语法)》最后刷新时间 2024-03-14 01:11:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《跟着我从零开始入门FPGA之(Verilog语法)》该内容的真实性请自行鉴别。