story · 2020年04月28日

SystemVerilog教程之Verilog Basics Part-I

Introduction

每个Verilog初学者的梦想是在一天内理解它,至少到达足够使用的程度。接下来的Verilog Basics的几篇文章将会让这个梦想成为现实。

尽管Verilog是并行地执行不同的代码块,但它和大多数顺序执行的编程语言仍有许多相似之处。我们需要的只是一些数字电路的基础

在Verilog出现之前,电路设计者使用原理图进行电路设计。无论复杂程度如何,每个设计都是通过原理图设计的。这使得设计难以验证并且容易出错,导致**设计...验证,设计...验证,设计...验证,设计...验证。繁琐的迭代。

当Verilog出现时,我们对数字电路设计有了不同的思维方式。使用Verilog进行数字电路的功能设计周期类似于传统的程序开发周期。

  • Specifications (specs)
  • High level design
  • Low level (micro) design
  • RTL coding
  • Verification
  • Synthesis.

首先我们需要一个specifications,列出我们对设计的限制(restrictions )和要求(requirements

本教程,我们将设计一个仲裁器(arbiter),以下是仲裁器的一些规范。

两个agent
异步复位,高有效
固定优先级,agent0优先于agent1

在我们有了规范之后,我们就可以绘制框图,即设计数据流的黑匣子。

Block diagram of arbiter
4.1.bmp

如果没有Verilog,下一步我们需要开始绘制状态机。我们制作一个具有状态转换的真值表,然后绘制卡诺图并化简优化电路。

4.2.bmp

每个圆圈表示状态可能处于的状态。每个状态都有相对应的输出。状态之间的箭头是不同事件导致的状态转换。

例如,最左边的橙色箭头表示如果机器处于GNT0状态(输出对应于GNT0的信号)并接收到!req\_0的输入,则状态机移动到状态IDLE并输出与之对应的信号。

这种设计方法适用于小型设计,但对于大型设计,这种流程变得复杂且容易出错。这就是Verilog的用武之地

Modules

在仲裁块的框图中,我们可以看到它有一个名字(“arbiter”)和输入/输出端口(req\_0,req\_1,gnt\_0和gnt\_1)。

在Verilog中,我们使用module 来描述这个具有相同输入和输出的黑匣子。
此代码如下所示。

module arbiter (
// Two slashes make a comment line.
clock , // clock
reset , // Active high, syn reset
req_0 , // Request 0
req_1 , // Request 1
gnt_0 , // Grant 0
gnt_1 // Grant 1
);
//-------------Input Ports-----------------------------
// Note : all commands are semicolon-delimited
input clock ;
input reset ;
input req_0 ;
input req_1 ;
//-------------Output Ports----------------------------
output gnt_0 ;
output gnt_1 ;



Data Type
在硬件中存在两种数据类型

  1. 可以存储值的数据类型(例如:flip-flop)。
  2. 无法存储值的数据类型,但可以连接两个点(例如:wire)。



第一种类型在Verilog中称为reg(“register”的缩写)。第二种数据类型称为导线(“wire”)。

例如:

wire and_gate_output; 
reg d_flip_flop_output; 
reg [7:0] address_bus;



Operators

Verilog中的运算符与其他编程语言几乎相同。

perator TypeOperator SymbolOperation Performed
Arithmetic*Multiply
/Division
+Add
-Subtract
%Modulus
+Unary plus
-Unary minus
Logical!Logical negation
&&Logical and
\\ Logical or
Relational>Greater than
<Less than
\>=Greater than or equal
<=Less than or equal
Equality==Equality
!=inequality
Reduction\~Bitwise negation
\~&nand
\ or
\~\ nor
^xor
^\~xnor
\~^xnor
Shift\>\>Right shift
<<Left shift
Concatenation{ }Concatenation
Conditional?conditional



例如:

a = b + c; 
a = 1 << 5; 
a =!b; 
a = ~b;



本文转载自公众号:芯片数字实验室
原文链接:https://mp.weixin.qq.com/s/zaWsH06DLQWqqCoYSRoQLw
未经作者同意,请勿转载!

推荐阅读:
想了解更多内容,欢迎关注芯片数字实验室专栏




推荐阅读
关注数
12320
内容数
222
前瞻性的眼光,和持之以恒的学习~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息