FPGA —— verilog基础语法

目录

verilog HDL

verilog 与 c 语言的区别

verilog四值运算系统

常用关键字及用法

assign与always

wire与reg

case,endcase

begin ,end

posedge,negedge

数值表示


正文

verilog HDL

verilog HDL是一种硬件描述语言,以文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。

verilog 与 c 语言的区别

Verilog是一种硬件描述语言,作用是进行电路设计,可以描述电路的功能、连接和时序。他关心的不仅是从功能逻辑这个问题如何解决,更关心这些功能如何实现,关心最终的电气连接。可综合的Verilog代码经过综合后,最终会转化为实际电路。

C语言是一种软件描述语言,作用是通过算法逻辑实现某个功能。他不关心电路如何实现,只关心要解决这个问题,我应该使用什么功能,如何使用这些功能。C语言经过编译后,最终转化为二进制码实现。

注:c语言一定是串行执行程序

       verilog可实现并行执行

verilog四值运算系统

0--low   (低电平)

1--high (高电平)

x--unknown (未知)

z-high impedance (高阻态)

常用关键字及用法

moduleendmoduleinputoutputinout
wireregparameteralwaysassign
if elsebeginendcase
endcaseposedgenegedgeordefault

module 与 endmodule

module 与 endmodule 成对使用。模块是verilog 设计中基本功能模块。整个模块是由module开头,endmodule结尾,module后紧跟模块名

实例如下

module selector(x,y);

...
	
endmodule 

注:模块名必须和项目名保持一直,否则会引起错误

input,output,inout

用于端口定义

input --- 输入端口

output ---输出端口

inout---可输入可输出端口

实例如下

module selector(x,y,z);

input x;

output y;

inout z;

...
	
endmodule 

assign与always

assign(连续赋值)相当于连线,一般是将一个变量的值不间断地赋值给另一个变量,就像把这两个变量连在一起,所以习惯性的当做连线用,比如把一个模块的输出给另一个模块当输入。

实例如下


module selector(a,b,key,led);
	
    input a;
	input b;
	input key;
	output led;
	
	assign led=(key==0)?a:b;
	
endmodule

always(过程赋值
 

三种赋值方式

1、always语句有两种触发方式。第一种是电平触发,例如always @(a or b or c),a、b、c均为变量,当其中一个发生变化时,下方的语句将被执行。

2、第二种是沿触发,例如always @(posedge clk or negedge rstn),即当时钟处在上升沿或下降沿时,语句被执行。

3、而对于always@(*),意思是以上两种触发方式都包含在内,任意一种发生变化都会触发该语句。

wire与reg

用于声明数据类型

wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出端口类型都默认为wire型,wire相当于物理连线,默认初始值是z。

reg型表示的寄存器类型,用于always模块内被赋值的信号,必须定义为reg型,代表触发器,常用于时序逻辑电路,reg相当于存储单元,默认初始值是x。

wire与reg的区别

wire指的是直接运行,没有等待周期,跟导线一样

对于reg
如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;
如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;
如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

case,endcase

一个Verilog case语句以case关键字开始,以endcase关键字结束。在括弧内的表达式将被精确地评估一次,并按其编写顺序与备选方案列表进行比较,与给定表达式匹配的备选方案的语句将被执行。一块多条语句必须分组,并在 begin 和 end 范围内。

实例如下

case(表达式)
          分支表达式1:   语句1;
          分支表达式2:   语句2;
          分支表达式3:   语句3;
          分支表达式4:   语句4;
          分支表达式5:   语句5;
          default:            语句6;
endcase

begin ,end

begin···end语句的作用只是相当于函数的花括号

posedge,negedge

posedge---上升沿触发

negedge---下降沿触发

数值表示

格式  <size>'<base format><number>

       size example : 3'b010   ----- 3位的二进制数

       unsize example : 123 ------ 默认为32为的10进制

       未指定<base format>   则默认为32位的10进制

       未指定<size> 则默认位32位宽 

常用数值表达方式

        -10进制    ('d or 'D)16'd255 -----16位10进制数

        -16进制    ('h or 'H)8'h9a    -----   8位16进制数

        -2进制        ('b or 'B)  'b1010   ----    32位2进制数

        -8进制        ('o or 'O)  'o21      ----    32位8进制数

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: FPGA是一种可编程逻辑器件,可以通过编程实现各种功能。而Verilog是一种硬件描述语言,用于描述FPGA中的电路。Verilog基础语法包括模块定义、端口定义、信号定义、赋值语句、条件语句、循环语句等。模块定义是Verilog中最基本的语法,用于定义一个电路模块。端口定义用于定义模块的输入输出端口。信号定义用于定义模块内部的信号。赋值语句用于给信号赋值。条件语句用于根据条件执行不同的代码。循环语句用于重复执行一段代码。掌握Verilog基础语法是学习FPGA编程的基础。 ### 回答2: FPGA是一种可编程逻辑器件,它可以通过硬件描述语言来编写自定义的逻辑电路来实现各种功能。其中,Verilog是一种常用的硬件描述语言,有助于实现FPGA的功能。 Verilog语言主要由模块、端口、信号、语句和运算符五个基本部分组成。模块是Verilog中的最基本的语法单元,类似于传统程序语言中的函数,模块之间可以通过实例化进行连接。端口则是与外部世界进行通信的接口,可以分为输入端口(input)和输出端口(output)两种类型。信号是Verilog中表示数字信号的基本单元,可以是位向量、整数或实数。语句则是Verilog中描述操作和行为的语言,常用的语句包括赋值语句、分支语句和循环语句。运算符则是Verilog中用于进行操作的符号,包括算数运算符、逻辑运算符和位运算符。 在Verilog语言中,还有一些常用的结构体和命令可以帮助我们更方便地实现FPGA的功能。其中,常用的结构体包括always语句、case语句和module归档,常用的命令包括initial语句、wire语句和reg语句。always语句可以在指定的触发条件下执行某一段代码,case语句可以根据不同的条件执行不同的代码段,module归档则可以将多个模块合并为一个模块。initial语句可用于在仿真开始前初始化某些信号,wire语句则用于声明并连接信号,reg语句则用于声明并存储信号。 总体而言,了解FPGAVerilog基础语法可以帮助我们更好地理解FPGA技术的应用和实现。然而,理论知识只有结合实际操作和实验才能更好地掌握。所以,我们还需要结合实际项目来进行练习和实践,从而更好地掌握FPGAVerilog基础语法。 ### 回答3: FPGA(可编程门阵列)是一种可编程逻辑器件,可以用来创建定制的数字电路。Verilog是一种硬件描述语言,用于描述数字电路的结构和行为。 Verilog基础语法有以下几个部分: 1.模块定义:Verilog代码以模块的形式进行组织,每个模块都有一个名称和端口列表。模块定义以module关键字开始,以endmodule关键字结束。 2.端口声明:模块的端口是输入和输出连接到其他模块或FPGA芯片的引脚。端口可以是输入(input)、输出(output)或双向(inout)。端口声明在模块定义中。 3.信号声明:信号是描述数字电路中状态的变量。可以是单个位(wire)或多位(reg),在模块中声明。 4.赋值语句:用来为信号赋值,包括非阻塞赋值(<=)、阻塞赋值(=)和连续赋值(assign)。 5.条件分支语句:if, else if和else语句是用来控制程序流程,实现条件判断。 6.循环语句:Verilog支持for、while、do while和forever等类型的循环语句,可以在程序中实现迭代操作。 7.模块实例化:用来将其他模块作为子模块嵌入到当前模块中,从而实现复杂的数字电路。 除上述基本语法外,Verilog还有其他常用语法,如always块、initial块和function定义等。需要深入了解和使用Verilog,可以参考相关资料和教程。掌握了Verilog语法,可以使用FPGA搭建各种个性化的数字电路,用于嵌入式系统、数字信号处理、计算机网络等各种应用领域。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小白变形计

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

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

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

打赏作者

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

抵扣说明:

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

余额充值