打印
[Verilog HDL]

Verilog HDL | 简介与基本语法

[复制链接]
2528|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1 Verilog简介(Verilog语法学习者可跳过该节)Verilog是一门类C语言
Verilog是一门类C语言,语法与C接近,但Verilog是硬件设计语言,与C实质不同。
  • Verilog代码对应硬件实体。比如在Verilog里写的a+b,最后会得到由硬件实现的加法器
  • Verilog代码到硬件的过程叫综合。综合就是将Verilog代码转化为硬件实现
  • Verilog并行执行
HDL: Hardware Description Language





Verilog HDL使硬件设计师们得以专注于逻辑,而不需要考虑硬件层面的实现。同样的代码只要经过不同的库综合,就可以在不同的硬件上运行。因此Verilog的代码具有极高的可复用性。

使用Verilog的绝大多数开发都处于寄存器传输级。



软核、固核与硬核
  • 软核(Softcore):功能经过验证的、可综合的、实现后电路结构总门数在5000门以上的Verilog HDL模型。
  • 固核:在某一种现场可编程门阵列(FPGA)器件上实现的,经验证是正确的总门数在5000以上的电路结构编码文件。
  • 硬核:在某一种专用的半导体集成工艺(ASIC)的器件上实现的,经验证是正确的总门数在5000以上的电路结构掩膜
显然,在具体实现手段和工艺技术尚未确定的逻辑设计阶段,软核具有最大的灵活性。因此,发展软核的设计和推广软核的重用技术是非常有必要的。






使用特权

评论回复

相关帖子

沙发
gaochy1126|  楼主 | 2022-7-31 21:19 | 只看该作者
自顶向下(Top-Down)设计 (对上图的讲解:P2 | 2:55)
2 Verilog基本语法Verilog语法概述行为级描述/寄存器传输级(RTL)描述/系统级描述:把module当成黑盒,描述module输入与输出的关系。门级实现由综合工具推断,常常能做到最优。结构级描述/门级描述:把module作为白盒,而描述组成module的门电路(部件)

使用特权

评论回复
板凳
gaochy1126|  楼主 | 2022-7-31 21:19 | 只看该作者
基本语法
  • Verilog区分大小写
  • Verilog的关键字都是小写
  • module, endmodule定义一个基本模块,两个关键字间的语句是对该模块的描述。定义模块方便复用。
  • parameter关键字定义一个参数,增强模块的通用性
  • output, input关键字指定输入输出
  • always @(posedge/negedge clk)语句,每当clk出现上升/下降沿时,就执行接下来的语句块(begin, end标志一个语句块)。这种语句构成时序逻辑,当前输出与上一个时刻的值有关
  • reg类的变量用<=赋值,赋值符号左侧是寄存器,右侧是更新的值
  • &q语句输出q每一位相与的结果,即&q=q[1]&q[2]&...&q[N]
  • assign关键字描述组合逻辑,输出只与当前输入有关
  • input/output如果没有显示声明类型,默认为wire类型。如果需要reg类型以存储值,需要显示声明
  • wire类型只是一根导线,只能用来组合逻辑。assign语句等号右侧一旦发生变化,等号左侧立刻得到结果;而always语句块中的值改变只能发生在每一时刻(由@符号后的语句描述时刻)
  • initial begin, end语句块指明初始化语句,这部分指令在系统上电后直接执行
  • 'timescale 1ns/1ps指定测试的单位是1ns,精度是1ps
  • #100指令指明延时,单位由之前的代码指定
  • $stop指令使仿真停止
  • 时序逻辑:<=赋值;组合逻辑:-赋值








代码实例






使用特权

评论回复
地板
gaochy1126|  楼主 | 2022-7-31 21:20 | 只看该作者
数据类型及常量、变量
语法:<位宽>'<进制><数值>
  • 位宽:对应二进制的宽度
  • 进制



进制表示

有两种类型:
  • nets type
  • register type
  • nets type





上表的后面三种类型不可以综合,主要用在算法级的开发
注:==和===的区别在于怎么处理z和x的位。一般来说用==就足够了





优先级







使用特权

评论回复
5
gaochy1126|  楼主 | 2022-7-31 21:20 | 只看该作者
【重要】语句
Part 0 概述
赋值语句
连续赋值语句:assign语句
过程赋值语句:always开头,@引导一个敏感列表
条件语句
if-else
case
(条件语句必须在顺序执行块中使用。所谓顺序执行块是指由 initial 和always语句引导的执行语句集合。除了这两种语句引导的begin_end块中可以编写条件语句外,模块中的其他地方都不能编写。)

循环语句
forever
repeat
while
for
结构说明语句
initial
always
task
function
编译预处理语句
`define语句
`include语句
`timescale语句

使用特权

评论回复
6
gaochy1126|  楼主 | 2022-7-31 21:20 | 只看该作者
Part 1 赋值、条件语句详解
always过程块

always @(<敏感信号表达式>)
begin
...
end
always语句块不能嵌套
在敏感信号表达式前加posedge或negedge关键字可以指定上升沿或下降沿触发。否则每当表达式的值发生改变,就会执行语句块
initial过程块

initial过程块模拟上电之后的行为,不可综合,通常用于功能模拟的初始化,写在测试文件(testbench)中
同一模块中的initial过程块,在上电时并行执行
initial过程块不能嵌套
连续赋值语句assign

assign语句常用于对wire类型变量进行赋值
等式左边的wire变量随等式右边的值一起变化
过程赋值语句

常用于对reg型变量进行赋值
阻塞赋值(=)与非阻塞赋值(<=)




使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:这个社会混好的两种人:一是有权有势,二是没脸没皮的。

1050

主题

11299

帖子

26

粉丝