凔海笔记之FPGA(四):Verilog HDL语法简单述

在百度百科中,是这样介绍Verilog HDL的,它是一种硬件描述语言(HDL:Hardware Description Language),以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。 Verilog HDL和VHDL是世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。记得在刚接触FPGA时,还不知道有一种语言叫做VHDL,只是傻傻的跟着特权同学去入门,还好选对了语言入对了门。

古人云:“工欲善其事,必先利其器”。对于我们来说,若要拿下FPGA,必先克下Verilog。但若苦学语法而不用,也会因利器而误事。所以,咱先知道点就好啦,说多了,也不敢,毕竟菜鸟我不会/(ㄒoㄒ)/~~

1、模块声明:module……endmodule
module:模块。endmodule:模块结束。显然,这之间要写的是一个模块的内容,也就是Description模块功能。module后面要跟着这个模块的名称,它是模块的标签,格式是这样的:
module 模块名(口1,口2,口3,口4, ………);括号里面的内容就是输入或输出信号的端口声明。一般一个.V文件里面放一个模块。Why?

This is coding style!!!

2、端口声明:input、output、inout。
input :输入。output:输出。inout:输入输出。如果把模块看成一个黑匣子,那么端口声明就是与外界连接的引线。所以在写模块内容时候,先要定义输入什么,输出什么。我们所做的就是对输入信号的处理及对输出信号的表述。
3、信号类型:wire、reg。
wire:线。reg: register,寄存器。网上有这么一句话,“reg相当于存储单元,wire相当于物理连线”,如果理解了这句话,我想也就理解了这俩个信号类型。wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。但我还是没理解(⊙﹏⊙)b,就先这样吧,这个需要去悟。声明一下哈,信号类型不止这俩个,其他的碰到了再说吧,(*^__^*) 嘻嘻……。
在书写的时候,
wire  c;  //定义一个一位wire型数据
reg  c;  //定义一个一位名为a的reg型数据
wire [7:0] b; //定义一个八位的wire数据
reg [7:0] b; //定义一个八位的reg数据
其中。[7:0]表示位宽,只要是整数就好,当然分号左边的数要大于右边的。

4、参数定义:parameter
parameter:参数,百度有这样翻译:“参数,传送到功能或程序并影响其操作的值”。说实话,我对这个翻译爱得很深沉,(✿◡‿◡)。值得一提的是,parameter的作用域仅限于该文件,而与之相对的define确因编译器不同会产生不同的效果,所以,在一般情况下,用parameter吧,如果用define还是在该文件的结尾加上一个undef。

5、常量。
学过C语言都知道,常量表示方法有很多种,二进制B、八进制O、十进制D、十六进制H。对于Verilog语言,同样有这几种表示方法,其书写格式可以为<位宽><进制><数字>,4’b1101即为用二进制表示位宽为4的数1101;可以为<进制><数字>这样缺省位宽,由机器系统决定,说实话,我是受不了这样的写法;也可以为<数字>这种表示方法,缺省进制默认十进制。其实无论用那种表示方法,都是为了能够很好地描述所写模块,软件都会给翻译成二进制表示,毕竟机器只有高低电平。

6、连续赋值:
assign。我认为它就是连接内部小模块之间或是模块与外界联系的线的标志。嗯,就这样

7、always模块:
always@(敏感事件列表) 用于描述时序逻辑
敏感事件上升沿 posedge,下降沿 negedge,或电平
敏感事件列表中可以包含多个敏感事件,但不可以同时包括电平敏感事件和边沿敏感事件,也不可以同时包括同一个信号的上升沿和下降沿,这两个事件可以合并为一个电平敏感事件。
在新的verilog2001中“,”和“or”都可以用来分割敏感事件了,可以用“*”代表所有输入信号,这可以防止遗漏。
合法的写法:
always@ *
always@ (posedge clk1,negedge clk2)
always@ (a or b)

8、begin……end
这个吧,就把它当做C语言里面的{}吧

9、赋值符号:=和<=
        这个被称为阻塞赋值和非阻塞赋值,这个可是很有说头的,不过,咱就先知道
a=a+1;
b=b+1;
c=c+1;
这都是顺序执行的,和C语言一样。但
a<=a+1;
b<=b+1;
c<=c+1;
是并行的,是同时工作的,很神奇呀,为啥??以后再谈~
不过我们在always@(*)块语句内的赋值符号使用的是“=”,而always@(posedge XXX)的块语句内的赋值符号使用的是 “<=”

10、运算符及表达式

注:摘自夏宇文老师的书

欢迎观看:

凔海笔记之FPGA(一):我和我的FPGA

凔海笔记之FPGA(二):聊聊FPGA的内部结构_上

凔海笔记之FPGA(三):聊聊FPGA的内部结构_下

近期精彩内容推荐:

整流杂谈(一)

整流杂谈(二)

整流杂谈(三)

(0)

相关推荐

  • 求职攻略| FPGA两种RAM的区别与用法

    本期继续解析中兴FPGA岗不定项选择和单选部分的笔试题.点击这里回看前两期解析:第一期:第二期 下面是不定项选择: 13.下列关于FPGA中分布式RAM的描述正确的是(  ) A 相对于BRAM,分布 ...

  • 基于FPGA的PPM调制解调系统设计

    时间:2010-07-12 11:06:54 关键字:FPGA   ppm   系统设计   调制解调    [导读]光通信技术的蓬勃发展对调制解调技术提出了更高的要求,脉冲位置调制(PPM)有较高的 ...

  • 凔海笔记之FPGA(九):Verilog描述IIC单字节读写协议

    一.简介AT24C04 AT24C04是小容量(4KB)IIC总线EPROM存储元件.这句话说得很有内容呀.首先,AT24c04是存储元件,还是EPROM即可擦写可编程只读存储器,而且断电可保存.其次 ...

  • 凔海笔记之FPGA(八):Verilog描述RS232 UART

    在我看来,有些代码会用,但未必理解,有些代码理解,但未必会写,有些代码会写,但未必能用自己的话说出来.当能够以自己的想法深入浅出的讲解所学知识,那也就可以说自己掌握了,所以,我还是来发帖吧. 记得刚用 ...

  • 凔海笔记之FPGA(十一):SDRAM

    对于SDRAM,就以以下四个方面来写下自己的笔记吧 1.初探存储器 2.对SDRAM的认识 3.Verilog综合的SDRAM单字节读写时序 4.多字节读写和页读写 嗯,就这样 下图这个,学过数电的都 ...

  • 凔海笔记之FPGA(十):玩一玩DS1302

    现在这日子过得,一周四节课,没有考试没有作业更没有实验课,真不知道说什么好,还是来说说DS1302吧.(- ̄▽ ̄)-            它生有八脚,电源分主备,晶振有要求,时序有讲究,可记年月日, ...

  • 凔海笔记之FPGA(七):触发器和锁存器

    大多数数字系统中,除了需要具有逻辑运算和算数功能的组合逻辑电路外,还需要具有存储功能的电路,组合逻辑与时序逻辑可构成时序逻辑电路,简称时序电路.现在讨论实现存储功能的两种逻辑单元电路,即锁存器和触发器 ...

  • 凔海笔记之FPGA(五):(基本|| 组合)逻辑

    与门电路:有0则为0 与门(英语:AND gate)又称"与电路".逻辑"积".逻辑"与"电路.是执行"与"运算的基本逻 ...

  • 凔海笔记之FPGA(一):我和我的FPGA

    "老师,单片机那个试验箱都弄完了,接下来我想学学arm" "噢,那挺好的,要不你先学学FPGA吧,学好了FPGA再接触arm会学得更好些" "FPGA ...

  • 凔海笔记之单片机(五):给按键编个码

    按键通常是一种长常开型按钮开关,例如下图,如果不按动得话它就是断开状态的. 它作为单片机的附属小鬼,主要就是为了让单片机检测出它的状态,然后单片机根据这个状态来干一些事.例如,当按键按下灯亮,当按键按 ...

  • FPGA的Veilog HDL语法、框架总结

    摘要:Verilog HDL硬件描述语言是在用途最广泛的C语言的基础上发展起来的一种硬件描述语言,具有灵活性高.易学易用等特点.Verilog HDL可以在较短的时间内学习和掌握,FPGA的Veilo ...