如何用Verilog Basics设计一个仲裁器

发布时间:2021-12-17 16:38:14 作者:iii
来源:亿速云 阅读:173

这篇文章主要介绍“如何用Verilog Basics设计一个仲裁器”,在日常操作中,相信很多人在如何用Verilog Basics设计一个仲裁器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用Verilog Basics设计一个仲裁器”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Introduction

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

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

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

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

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

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

两个agent 

异步复位,高有效

固定优先级,agent0优先于agent1

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

Block diagram of arbiter

如何用Verilog Basics设计一个仲裁器

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

如何用Verilog Basics设计一个仲裁器

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

例如,最左边的橙色箭头表示如果机器处于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 , // clockreset , // Active high, syn resetreq_0 , // Request 0req_1 , // Request 1gnt_0 , // Grant 0gnt_1 // Grant 1);//-------------Input Ports-----------------------------// Note : all commands are semicolon-delimitedinput 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中的运算符与其他编程语言几乎相同。 

Operator Type

Operator Symbol

Operation 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;

到此,关于“如何用Verilog Basics设计一个仲裁器”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. 如何用java设计一个线程池
  2. 如何用go语言设计一个栈?

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

basics

上一篇:two-state数据类型有哪些

下一篇:如何进行springboot配置templates直接访问的实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》