FPGA(一)Verilog语法入门(一)

本文介绍了Verilog语言的基础概念,涵盖了可编程逻辑器件(如CPLD和FPGA)的区别,以及它们与单片机的差异。重点讲解了HDL的作用,Verilog与C语言的不同之处,并详细阐述了逻辑值、符号、数据类型、运算符等内容。
摘要由CSDN通过智能技术生成

学习板:ZYNQ7020

一、可编程逻辑器件

1、概念

对于常见的89C51、STM32、Arduino等等单片机来讲,内部电路连接是固定的,即内部的逻辑功能是固定不变的,要想改变它们的逻辑功能,就必须重新设计电路,改变内部各单元电路的连接。

而对于可编程逻辑器件(Programmable Logic Device)(PLD),用户可以自行修改内部连接,这种PLD内部电路结构可以通过写入编程数据来设置,当然写入后也可以擦除重写。用户可以根据自己的需求来设置内部电路的逻辑功能。

2、常见的可编程逻辑器件

常见的可编程逻辑器件有:

(1)CPLD

复杂可编程逻辑器件(Complex Programmable Logic Device)

(2)FPGA

现场可编辑门阵列(Field Programmable Gate Array)

俩者的差异本质差异在于电路结构不同

CPLD:基于乘积项的与或逻辑阵列

FPGA:基于“查找表”的CLB阵列

3、FPGA与单片机的区别

FPGA是一种可通过编程来改变其逻辑功能的数字集成电路;而对单片机编程并不能改变其电路结构。

通过FPGA编程后,生成电路,通过逻辑功能达到我们的目的;而对单片机编程后,会转换指令,单片机处理软件指令:取指、译码、执行…取指、译码、执行…一步步执行下去

4、HDL

HDL(Hardware Description Language),硬件描述语言。用于描述数字电路结构和功能的语言。

HDL 可以在不同的层次对数字电路的结构、功能和行为进行描述。它所描述的电路可以通过综合工具(如Vivado软件)将其转换为门级电路网表,然后将门级电路网表与基本元件一一对应起来,再通过布局布线工具转换为电路布线结构。

5、Verilog与C的区别

Verilog语言是硬件描述语言,编译下载到FPGA后,会生成电路,而不同模块的电路执行可以独立执行,所以可以说verilog语言是并行执行的。

C语言是软件编程语言,编译下载到单片机后,生成的是指令。单片机必须通过:取指、译码、执行…取指、译码、执行…来完成功能,所以可以理解为是串行执行。

即可以说Verilog语言是并行执行,也可以说FPGA是并行执行;既可以C语言是串行执行,也可以说单片机是串行执行。这既是Verilog与C的区别,也是FPGA与单片机的区别。

二、逻辑值

逻辑 0:表示低电平,也就是对应我们电路的 GND;
逻辑 1:表示高电平,也就是对应我们电路的 VCC;
逻辑 X:表示未知,有可能是高电平,也有可能是低电平;
逻辑 Z:表示高阻态,外部没有激励信号时是一个悬空状态。

在这里插入图片描述

三、符号

Verilog程序由各种符号流构成,这些符号包括:空白符(White Space)、运算符(Operator)、数字(Number)、字符串(String)、注释(Comment)、标识符(Identifier)、关键字(Key Word)等

1、空白符(White Space)

Verilog语言中的空白符包括:空格、Tab、换行符

verilog语言可以不分行,例如:

initial begin ina=3'b001;inb=3'b011;inc=3'b111;end

等效为:

initial 
    begin 
        ina=3'b001;
        inb=3'b011;
        inc=3'b111;
	end

空白符只是为了使代码错落有致,阅读起来更加方便,在代码被综合时空白符会被忽略。

2、注释(Comment)

注释与c语言一样:
(1)单行注释
以“//”开始,到本行结束

(2)多行注释
以“/*”开始,到 “ */”结束

3、标识符(Identifier)

标识符用于用户在编程时给Verilog对象、模块、端口和实例起名字

标识符由 字母数字、“$”、和"_"(下划线)组成。并且第一个字符必须是字母或者下划线。标识符最长可包含1023个字符 。

还有一种标识符为转义标识符,它与C语言的转义标识符一样,以反斜杠“\”开头,空白符结尾。

4、关键字(Key Word)

Verilog的关键字有很多,1995年发布标准后,在2001年又进行了修订,目前最常见关键字有

关键字 含义
module 模块开始定义
input 输入端口定义
output 输出端口定义
inout 双向端口定义
parameter 信号的参数定义
wire 线性变量定义
reg 寄存器型数据定义
always 产生reg信号语句的关键字
assign 产生wire信号语句的关键字
begin 语句的起始标志
posedge/negedge 时序电路的标志
case Case语句起始标记
default Case语句的默认分支标志
endcase Case语句结束标记
if/else if/else语句标记
for for语句标记
end 语句的结束标志
endmodule 模块结束定义

5、运算符(Operator)

与C语言类似(本博八中详细总结)

四、常量

Verilog的常量主要有三种:整数、实数、字符串

1、整数(Integer)

整数的书写格式:

(+或-)(位宽)’(进制符)(值)

进制符与C语言一致:
①二进制:b或B
②八进制:o或O
③十进制:d或D
④十六进制:h或H

例如:

8'b11000111     //位宽为8的二进制数11000111
8'Hd5           //位宽为8的十六进制数d5     变为二进制:11010101
5'O23           //位宽为5的八进制数23   变为二进制:10011
5'd6            //位宽为5的十进制数6,变为二进制:00110

位宽'之间、进制数数值之间允许出现空格,格式:

(+或-)(位宽)<空格>’(进制符)<空格>(值)

例如上面的例子,中间插了空格

8 'b 11000111     //位宽为8的二进制数11000111
8 'H d5           //位宽为8的十六进制数d5     变为二进制:11010101
5 'O 23           //位宽为5的八进制数23   变为二进制:10011
5 'd 6            //位宽为5的十进制数6,变为二进制:00110

其它地方出现空格是非法的!

书写整型变量时,注意以下几条规则:

(1)较长的数值可以用下划线分开,不要求每隔4位加一个下划线,可以任意加在某几个位置,它本身没有意义,只是为了代码的可读性(注意第一位不能是下划线)。例:

16'B 1001_1011_1111_0000
13'b 1_0011_0100_1110
13'b 1_001_101_001_110

(2)如果没有定义位宽,则默认为32位,例:

'b 111   //为二进制 0000 0000 0000 0000 0000 0000 0000 0111
'd 123  //10进制数,变为二进制  0000 0000 0000 0000 0000 0000 0111 1011

(3)如果定义的位宽比数值的长度长,需要在前面补零。例:

5'b 111  //为二进制 00111
10'd 123  //为二进制 00 0111 1011

(4)如果定义的位宽比数值长度短,则左边的部分被截掉。例:

5'b 101_1111     //为二进制 11111
3'd123          //为二进制 011

(5)未知态x、高阻态z在二进制中代表1位x或z;在八进制中代表三位x或z;在16进制中代表四位x或z。例:

5'b111zz  //为二进制111zz
8'O23z  
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

独独白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值