FPGA学习1- Verilog HDL语法学习

一.模块

 

module xxx(输入、输出)

    输入/输出端口定义......

    信号类型声明......

    逻辑功能定义......

endmodule

 

 

其中逻辑功能定义:



二. 数据类型和运算


1.常量类型

一种为连线型,另一种为寄存器型

①,整数 

②,实数

③,参数型

parameter

  • 常用于定义状态机状态、数据位宽、延时大小
  • 在模块调用时,通过参数传递改变被调用模块中已定义的参数


3.变量类型

①.连线型

线网类型 wire  (tri型很少用)

  • 不能存储值,由驱动元件决定(门、连续赋值语句、assign)
  • 默认为高阻态z
  • 可以指定位宽:  wire[3:0]  cnt;

 

②,寄存器型

  • reg  [31:0]  delay_cnt;     表示位宽为32
  • reg   count;  未写位宽,默认为1
  • reg寄存器型不能在声明的时候赋值,只能在always和initial中赋值

③,momery型


4.运算符

和c语言类似的不做说明,着重说下特有的

  • 左移运算,位宽增加
  • 右移运算,位宽不变

位拼接运算符 {}

{a,b[3:0]};



 

 

三 ,基本语句

1.赋值语句

注意下 阻塞赋值 和 非阻塞赋值 的区别:

  •     阻塞式:“=” 语句结束立即生效
  •     非阻塞式:“<=” 整个过程块结束时生效
  • 描述组合逻辑时: 常用 阻塞式赋值   =
  • 描述时序逻辑时: 用 非阻塞式赋值  <=
  • always中不能  “ =” 和  “<=”  同时用; 不同always中不准对同一个变量赋值

这里可以用软件仿真做实验验证

 

2. 块语句

 

① 串行块语句  begin-end

② 并行块语句 fork-join

 

3. 过程语句

 

always语句

always@(敏感信号表达式)

 

4. 条件语句

① if-else

if判断,0、x、z都是假

② case

casez 不考虑 高阻态z

casex 不考虑 高阻态z 和 不定值x

5. 循环语句

① forever

② repeat

③while

④ for

和C语言类似

 

6.编译向导语句

①宏替换  'define

②文件包含 `include

可以包含模块

③条件编译 'ifdef  'else  'endif

程序可以进行条件编译

④时间尺度 'timescale

例如:

 

7.任务task和函数function说明语句

①任务说明语句

②函数说明

函数定义

 

7. 系统任务与系统函数

① $display和$write

② $monitor 和 $strobe

③ $time 和$realtime

 

 

 

8. 结构描述方式

 

门元件

调用

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值