电子设计大赛——verilog与fpga

上传人:ji****n 文档编号:55264910 上传时间:2018-09-26 格式:PPT 页数:62 大小:651.50KB
返回 下载 相关 举报
电子设计大赛——verilog与fpga_第1页
第1页 / 共62页
电子设计大赛——verilog与fpga_第2页
第2页 / 共62页
电子设计大赛——verilog与fpga_第3页
第3页 / 共62页
电子设计大赛——verilog与fpga_第4页
第4页 / 共62页
电子设计大赛——verilog与fpga_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《电子设计大赛——verilog与fpga》由会员分享,可在线阅读,更多相关《电子设计大赛——verilog与fpga(62页珍藏版)》请在金锄头文库上搜索。

1、电子设计大赛 Verilog 与 FPGA,什么是Verilog HDL?,Verilog 是一种用于数字逻辑设计的硬件描述语言。 在设计中常用于硬件电路的行为级描述就是告诉电路,你应该做什么,做什么,再做什么!,Verilog与C语言,Verilog的某些语法是与C相似的。但只是形似,神是不同的! Verilog只是Verilog而已,你可以参考C,但不能当做C!你必须了解Verilog的本质。,记住!,你编写的Verilog代码,是会生成实际硬件电路的。而电路,一般都不是串行执行的,很多时候都是并行工作的。所以在Verilog中,你一定要对电路的时序图与数据量图有深刻的认识!,不是所有的V

2、erilog代码都能够转换成实际电路的,学习语法时要分辨清楚。那些可以转换成实际电路的,我们称为“可综合”!另外,即使你使用的可综合的代码去编写,如果你描述的电路实际上无法实现,也是无法综合的,,也许在C语言中,代码越简洁越好。但是在Verilog中绝不是这样!衡量Verilog代码的唯一标准,就是在代码正确与清晰的前提下,可以生成结构尽可能简单、功能却非常强大的电路!,也许有用的Tips,多使用编译器附带RTL Viewr看看RTL级原理图,看清楚你写的代码到底生成了什么样的电路。多使用SignalTap II Logical Analyzer,看看你写的模块的时序图,看看你写的模块输出的数

3、据的值,尽量忘记C吧,C可以帮助你记住Verilog里面的关键字,但是请不要用C的思想来编写Verilog。要使用Verilog的思想来编写Verilog,多写多练吧,无论学习什么练习都是王道。当你初步掌握了Verilog之后,推荐你看看Verilog 那些事儿进行进一步的学习。什么是Verilog的思想?也许你可要在那里找到答案。,语法-符号,标识符:赋给对象的唯一名称,可以是字母、数字、下划线和符号“$”的组合,且首字符只能是字母或者下划线。区分大小写,如“if”为关键字,而“IF”不是关键字。 注释:注释有两种:1,以“/*”开头,以“*/”结束。2,以“/”开头到本行结束。 这些和C语

4、言差不多。,语法-数字量,逻辑数值:(1)0:逻辑0; (2)1:逻辑1; (3)x:未知,不定 ; (4)z:高阻态。,整数常量:基本表达格式为: 长度进制 数值 如: 6b9 6位二进制数 5o5 5位八进制数 9d6 9位十进制数 8h1f 8位十六进制数 而没有“长度进制”声明时,默认为32位十进制数。如:40,-50。,参数:参数是特殊的常量,其语法结构是: parameter para1=const1,para2=const2 paraN=constN; 如:parameter BIT=1,BYTE=8;,语法-变量定义,数据类型:数据类型用来表示数字电路硬件中的数据存储和传送元素

5、,可以理解成变量。Verilog 中总共有两大类数据类型:线网类型和寄存器类型。 数据类型的总种类很多,这里只介绍两种最常用且可综合的类型:wire与reg。有兴趣的同学可以自行学习其他类型。 wire是线网类型,可以理解成电路中的一根导线,在实际综合中一般也是生成连接线。 reg是寄存器类型,就是电路中的寄存器、触发器或选择器。,语法-变量声明,命名规则:wire与reg变量的通用命名规则: wire/reg msb:lsb Varia1,Varia2; 例如:reg3:0 Sat; /Sat为4位寄存器 wire7:0 Line; /Line为8位线网 如果没有位宽声明,则默认为1位位宽。

6、 注意:reg和wire声明的都是无符号变量,若要声明有符号变量,可以在reg和wire后加上关键字signed。 如:reg signed 7:0 Sat;,语法-变量赋值,在Verilog中,变量是不能随意赋值的,必须使用赋值运算符才可以进行赋值。其中assign称为连续赋值,对应于线网类型变量wire;initial或always称为过程赋值,对应于寄存器类型变量reg。下面作具体讲解,语法-assign与wire,首先列个例子: wire a; assign a=1b1; 可以看出,语法格式就是这么简单,如下: assign 线网型变量名=赋值表达式; 需要理解的是,assign称为连

7、续赋值的意思是,等号右端赋值表达式的值会持续对被赋值变量产生连续驱动,而且只要等号右端赋值表达式的值改变,左端被赋值变量的值就会立即改变。对应到电路中去,就是导线。,语法-assign与wire,下面列举一些实际中常用的用法: (1) wire a,b; assign a = b; (2) wire 7:0 a,b; assign a=b; (3) wire 7:0 a,b; assign a3=b1; (4) wire 7:0 a,b; assign a3:0=b3:0; (5) wire a,b; wire 1:0 c; assign c=a,b;,语法-initial/always与re

8、g,首先列举两个例子说明initial与always的区别,reg a,c; initial beginc=1b0; end,reg a,c; always(a) beginc=c+a; end,initial只会执行一次,即只执行一次把C赋零的行为;而always会不断执行,即每一次a的值改变时,c都会被重新赋值。,这两个例子也非常清楚的说明了nitial/always 与reg如何配合使用。要注意的是,其中begin end是必须加入的,而也必须和always一起使用。具体在后面进行讲解。,语法-initial/always与reg,于连续赋值assign不同的是,过程赋值中的赋值操作符分

9、为两种,分别是:“=”,称为阻塞赋值,指的在当前的赋值完成前阻塞其他类型的赋值任务;“(右移),其使用格式为:s1N,N为常数。 某些情况下移位运算符的效果也可以通过拼接运算符实现,这个看个人喜好与具体电路要求。,语法-一元约简运算符,一元约简运算符是一种特殊的位运算符,它对单个操作数进行运算,最后返回一位数,具体运算过程为:首先将操作数的第一位和第二位进行位运算,然后将结果与第三位进行位运算,依次类推到最后一位,输出运算结果。示例如下: out1= 一元约简运算符主要用于特殊操作中,如与约简可检测数据中是否包含位1,或约简课检测数据是否包含0。,语法-begin end,前面已经提到过beg

10、inend了。beginend在Verilog中是非常基础但是十分重要的东西。那么什么是beginend?这里可以借助C来理解:“beginend就是C语言中的花括号,只不过在Verilog中有了别的用处了,所以用beginend来表示。”,语法-触发,“”,前面讲到了在过程赋值always中,必须加上。为什么?过程赋值是什么?就是如果发生了什么行为,才给你赋值。那发生的行为就要用“(行为)”来描述,我们称之为触发,完整格式为 always(触发事件)begin end,语法-触发事件,触发事件有两种,这是由硬件电路决定的,在数电中已经学过:电平触发,边沿触发。,电平触发的格式为 always

11、 (a)begin end 只要a的电平一改变,内部的过程赋值就进行一次。 电平触发不能直接选择触发的电平是高还是低,如果非要选择,可以在内部加入if语句进行判断: always (a)begin if(a=1b0)begin end end,与电平触发不同,边沿触发可以直接选择触发的边沿:posedge表示上升沿触发,negedge表示下降沿触发。如:always (posedge clk)begin end 需要注意的是,边沿触发不可以选用某个信号的两个沿,即不能(posedge clk or negedge clk),注意事项! 同一个always模块中只能使用一种触发方式,不可以边沿触

12、发与电平触发混合使用。 不同的触发事件中间用“or”隔开,也可以用“,”隔开。,语法-条件语句if,Verilog中的if语句与C语言中十分相似,可以直接进行参考。需要注意的是,ifelse中,即使用不到else分支,语句中else分支也最好加上,否则电路有可能生成不稳定的电路,造成结果的错误。,if(a=1b1)c=1b0; 应写成,if(a=1b1)c=1b0; elsec=c;,语法-条件语句case,case与C语言中的switch比较类似,但是具体又有区别。其语法格式如下:,case(条件表达式)分支1:语句块1;分支2:语句块2;default:语句块n; endcase,reg 2:0 cnt; case(cnt)3b000:q=q+1;3b001:q=q+2;default:q=q; endcase,语法-条件语句case,当几个分支对应的操作相同时,可以将这些分支放在一起,如: reg 2:0 cnt; case(cnt)3b000,3b001,3b010:q=q+1;3b011,3b100:q=q+2;default:q=q; endcase,另外,同else一样,default一般不要缺省。,语法-条件语句if与case的区别,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 初中教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号