4379|14

57

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

凔海笔记之FPGA(四):Verilog HDL语法简单述 [复制链接]

本帖最后由 凔海 于 2016-3-16 08:26 编辑

       在百度百科中,是这样介绍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/CPLD论坛

最新回复

本帖最后由 okwh 于 2016-3-26 11:44 编辑 我的意思是说: 什么时候 能给个输入输出,说明输入和输出的逻辑关系和时序关系,就能出结果就好了。 现在的设计方法对底层基础要求高啊,我不是不懂时序,我是不懂那上面时序的表达方式。 就像 C语言里面,直接使用数学库计算三角函数,而不是设计怎么算三角函数。 什么时候FPGA设计能提升到组件方式(抄参考代码,也算是半组件了吧),听说 比如有些SOC设计能提供SPI的IP直接使用,总之不要一根线一根线的指定了。 大部分人设计的不是天下独一无二的东西。 其实,把单片机有的功能示例出来基础就差不多了。 俺不懂,说的可能是错的了。俺的水平只是当初看了那些头晕表达,我觉得自己都要变成二进制了,所以 就放弃了。  也许将来有空了,再去看看,但我猜测intel的CPU不是这样设计的。   详情 回复 发表于 2016-3-26 11:37
点赞 关注(2)
 

回复
举报

361

帖子

5

TA的资源

一粒金砂(高级)

沙发
 
顶顶顶!!!,期待下一次的关于并行(同时工作)的讲解
此帖出自FPGA/CPLD论坛
 
 

回复

23

帖子

1

TA的资源

一粒金砂(中级)

板凳
 

我感觉三中的最后一句有些误差

向量通过【high#:low#]或【low#:high#】进行说明,而且是左边的数是向量的最高有效位,所以,应该可以有reg【0:40】 virtual_addr ;这样的语句,只是说明这个向量的最高有效位是第0位。

我也是初学的啊,才看书,所以有些印象,楼主以后写文章叫我啊
此帖出自FPGA/CPLD论坛

点评

谢谢,我还真没注意到我写的是那种类型,大意了  详情 回复 发表于 2016-3-19 08:46
 
 
 

回复

6423

帖子

16

TA的资源

版主

4
 
给楼主赞一个
此帖出自FPGA/CPLD论坛

点评

谢谢  详情 回复 发表于 2016-3-17 16:23
个人签名training
 
 
 

回复

542

帖子

71

TA的资源

纯净的硅(中级)

5
 
没赶上沙发
此帖出自FPGA/CPLD论坛
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
 
 

回复

975

帖子

2

TA的资源

纯净的硅(初级)

6
 
“网上有这么一句话,“reg相当于存储单元,wire相当于物理连“”未必可信
此帖出自FPGA/CPLD论坛

点评

那能不能稍微讲解一下嘞?不是很懂  详情 回复 发表于 2016-3-17 16:24
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

7
 

谢谢
此帖出自FPGA/CPLD论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

8
 
飞鸿浩劫 发表于 2016-3-17 14:19
“网上有这么一句话,“reg相当于存储单元,wire相当于物理连“”未必可信

那能不能稍微讲解一下嘞?不是很懂
此帖出自FPGA/CPLD论坛

点评

相当于而已  详情 回复 发表于 2016-3-17 16:41
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

9
 
還真的不錯,又學到東西了
此帖出自FPGA/CPLD论坛
 
 
 

回复

975

帖子

2

TA的资源

纯净的硅(初级)

10
 
凔海 发表于 2016-3-17 16:24
那能不能稍微讲解一下嘞?不是很懂

相当于而已
此帖出自FPGA/CPLD论坛
 
 
 

回复

116

帖子

2

TA的资源

一粒金砂(中级)

11
 
不知道这玩意什么时候能可视化的编程, 我实在是学不会了,最头痛的就是时序关系。

为什么不能画个输入输出时序图,它就自动生成,再修改调整呢?

任何模块不就是个输入、输出、时间,三者的关系吗?
此帖出自FPGA/CPLD论坛

点评

可视化编程,是不是想labview那样的?水平有限,我也不怎么怎么解释,我觉得懂时序还是蛮重要的,这挺基础的。再者说,Verilog可不是编程,我们做的每一步都是在描述或者说组装一个电路,其中细节更需要功夫了。  详情 回复 发表于 2016-3-19 08:51
个人签名熙熙攘攘的世界,我们不懈前行......
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

12
 
依然爱你· 发表于 2016-3-16 20:10
我感觉三中的最后一句有些误差

向量通过【high#:low#]或【low#:high#】进行说明,而且是 ...

谢谢,我还真没注意到我写的是那种类型,大意了
此帖出自FPGA/CPLD论坛
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(中级)

13
 
okwh 发表于 2016-3-18 18:53
不知道这玩意什么时候能可视化的编程, 我实在是学不会了,最头痛的就是时序关系。

为什么不能画个输入 ...

可视化编程,是不是想labview那样的?水平有限,我也不怎么怎么解释,我觉得懂时序还是蛮重要的,这挺基础的。再者说,Verilog可不是编程,我们做的每一步都是在描述或者说组装一个电路,其中细节更需要功夫了。
此帖出自FPGA/CPLD论坛

点评

我的意思是说: 什么时候 能要求个输入输出,说明输入和输出的逻辑关系和时序关系,就能出结果就好了。 现在的设计方法对底层基础要求高啊,我不是不懂时序,我是不懂那上面时序的表达方式。 就像 C语言里面,直接  详情 回复 发表于 2016-3-26 11:37
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

14
 
谢谢分享
此帖出自FPGA/CPLD论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

116

帖子

2

TA的资源

一粒金砂(中级)

15
 
本帖最后由 okwh 于 2016-3-26 11:44 编辑
凔海 发表于 2016-3-19 08:51
可视化编程,是不是想labview那样的?水平有限,我也不怎么怎么解释,我觉得懂时序还是蛮重要的,这挺基 ...

我的意思是说: 什么时候 能给个输入输出,说明输入和输出的逻辑关系和时序关系,就能出结果就好了。
现在的设计方法对底层基础要求高啊,我不是不懂时序,我是不懂那上面时序的表达方式。
就像 C语言里面,直接使用数学库计算三角函数,而不是设计怎么算三角函数。
什么时候FPGA设计能提升到组件方式(抄参考代码,也算是半组件了吧),听说 比如有些SOC设计能提供SPI的IP直接使用,总之不要一根线一根线的指定了。 大部分人设计的不是天下独一无二的东西。
其实,把单片机有的功能示例出来基础就差不多了。
俺不懂,说的可能是错的了。俺的水平只是当初看了那些头晕表达,我觉得自己都要变成二进制了,所以 就放弃了。  也许将来有空了,再去看看,但我猜测intel的CPU不是这样设计的。
此帖出自FPGA/CPLD论坛
个人签名熙熙攘攘的世界,我们不懈前行......
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表