自学FPGA:Verilog基本语法规则(一)


目录

前言    

1.词法规定

  1.1间隔符

  1.2标识符和关键词

2.四种逻辑值

3.八种强度值

4.常量及其表示

  4.1整数型表示

  4.2实数型常量

  4.3字符串常量

  4.4参数语句

  5.数据类型

  5.1线网类型

  5.2寄存器类型

  参考文献


前言    

      笔者写这篇文章的目的主要是为了和大家分享一下学习心得,因为作为一名学生党,没有接受专门的培训,也没有老师给我讲解(课程安排在大四,笔者这时才大二),所以在参考了很多书籍和网上的视频教程后写出一些心得,希望能够对入门的同学或者相关人员有一点帮助吧。篇幅可能不多,大部分都是从不同的书籍里面整理的,偏向于概括性的文章。可能内容也有许多漏洞或错误,欢迎大家指出。

      在学Verilog之前建议最好有数电基础,不然很多东西从头学可能会有点费力。文中会有一些C语言的类比,可能有些不妥,但是我个人按照这个比较好理解,希望大家参考一下就行。在大概的把语法了解后,个人建议可以直接编程验证,在这里我推荐小梅哥、黑金和特权的视频教程(并无广告的意思),他们讲的比较细,涵盖面也比较广泛。Verilog还算是比较好学,但是FPGA设计还是不容易,加油吧。


1.词法规定

  1.1间隔符

  (类似于C语言)

  1.2标识符和关键词

      标识符:英文字母、数字、$符和下划线组成(首字符必须为英文字母下划线)。

      转义标识符:如:\***。


2.四种逻辑值

0逻辑0、逻辑假
1逻辑1、逻辑真
x或X不确定值(未知逻辑状态)
z或Z高阻态

3.八种强度值

                                                                        最强————>最弱
强度等级名称supplystrong

pull

largeweakmediumsmallhighz
类型驱动驱动驱动存储驱动存储存储高阻抗

4.常量及其表示

  4.1整数型表示

    格式:    

<+/- size>'<signed><base format><number>

  例如:

3'b101          //3位二进制数101
5'o37           //5位八进制数37
8'b1001_1100    //八位二进制数,等同于8'b10011100

  注意:在这里的‘_’无实际意义,可以随便在整数或实数中使用,方便读数。

 

  4.2实数型常量

(实数通过四舍五入转换为整数)

  例如:

  42.45转换为整数42; 92.5,92.699转化为93;-15.62转换为-16.  

 

  4.3字符串常量

(每个字符串包括空格都被看做8位的ACSII值序列)

  例如:

  存储字符串"FPGA"就需要定义一个8*4位的变量。

reg [8*4:1] messsage;
initial begin
    message = "FPGA";
end

  对于初学者来说,reg、initial这些请无视掉,只用了解这个格式就行。

 

  4.4参数语句

  格式:

parameter<signed><msb:lsb>
    param1 = xxxx,
    param2 = xxxx,
    ......;

  parameter声明的符号常量常量通常出现在module(模块)内部,参数常用于指令yan'延迟、变量的wei'位宽和状态值de等(类似于C语言的局部参数)

  补:define是宏定义,通常放在module外部,改常量是一个全局变量。

  localparam(局部参数)是模块内部参数(无传递,类似于C语言的函数内部参数)。


  5.数据类型

  5.1线网类型

  wire、tri(wire为一般连线;tri为驱动的线网);

  wor、trior(一个线网被多个信号驱动qing情况);

  wand、triand(一个线网被多个信号驱动qing情况);

  trireg(电荷保持特性);

  tri1(上拉电阻);

  tri0(下拉电阻);

  supply1(电源建模、高点平);

  supply0(对地建模、低电平)。

 

  线网变量声明:

<signed><[msb:lsb]>变量1,2,3,...,n;

  例如:

wire A,B;                //两个1位wire类型的变量
wire [7:0] Databus;      //Databus位8位向量的wire变量
supply0 logic_0,vss;     //‘地’
supply1 logic_1,vdd;     //‘电源线’

  建议别对同一变量多次赋值。

 

  5.2寄存器类型

(只能在initial或always块内部被赋值)

  reg、integer、time未赋值前为x;

  real、realtime默认值是0.

  reg:寄存器变量,默认值是x

  格式

reg <signed><[msb:lsb]> 变量1,2,3,...,n;

  例如:

reg clock,a;      //1位的reg型变量clock,a;
reg [3:0] cnt;    //4位的reg型变量cnt,等效于:cnt[3],cnt[2],cnt[1],cnt[0];

  integer:整数型寄存器变量

  (变量保持的是整数值)

  格式:

integer 1,2,3,...,n<[msb:lsb]>;

  例如:

integer A,B,C;         //3个整数型变量;
integer HINT[3:0];     //一个由四个整数变量组成的数组;

  tiem型变量主要用于存储和处理仿真时间

time 1,2,3,...,n [msb:lsb]

  reale和realtime变量通产用于对实数型产量常量进行存储和运算,实数不能定义范围,默认值是0

real 1,2,3,...,n;          //实型变量声明
realtime 1,2,3,...,n;      //实型时间变量声明

  参考文献

  1.《FPGA自学笔记——设计与验证》

  2.《可编程逻辑电路设计基础教程》

  3.《Verilog HDL与FPGA数字系统设计》

  4.《Verilog HDL入门》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值